分叉 (軟件開發)

衍生自既有程式的新程式與軟體開發路線 来自维基百科,自由的百科全书

分叉(英語:fork,又譯作衍生分支)是一個軟件工程名詞,表示開發者從一個軟件包中獲取了源代碼的拷貝,並開始獨立開發,建立了另一個獨立的軟件。[比如?] 這個術語不只意味着版本控制上的新開發分支,往往還表示開發人員社區的分裂,是一種意識形式的分裂。[1] 分叉的原因一般是用戶偏好不同或原始軟件的開發已經停滯或停止。

Thumb
Linux發行版 演化的時間線圖,圖上每個分支的起始端都稱為一次「分叉」

根據自由及開放源代碼軟件的定義,這些軟件可以在未經事先許可的情況下,從原始開發團隊分叉,並且不會違反著作權法律。但是,專有軟件(例如 UNIX)的分叉在許可之下也會發生。

詞源

早在14世紀,「fork」一詞就被用來表示「分成分支,分道揚鑣」。[2] 在軟件領域,該詞讓人聯想到 fork 系統調用,運行中的進程創建一個與自身(幾乎)相同的副本,這兩個進程(通常)會分別執行不同的任務。[3]

在軟件開發中,早在 1980 年,艾瑞克·奧爾曼 就在版本控制系統里使用「fork」來表示創建一個新的修訂「分支」:[4]

創建分支會 "fork off" (分叉)出程序的一個版本。

1983 年,Usenet 開始使用該術語來表示創建子討論組來細分討論主題。[5]

在 Lucid Emacs(現為 XEmacs)(1991年)和 BSD(1993-1994年)衍生出來時,「Fork」 一詞還沒有用來表示社區的分裂。當時(1993年) Russ Nelson 使用 「shattering」 一詞來表示這種分叉,並將其歸因於 John Gilmore[6] 到了1995年,「fork」 開始有了現在的意思,用來描述 XEmacs 的分裂,[7] 1996年該用法成為 GNU 項目中一種公認的用法。[8]

自由和開源軟件的分叉

根據自由軟件定義開源定義,自由軟件和開源軟件可以合法地分叉,無需經過當前開發、管理或分發軟件的人員的批准。:[9]

將你修改過後的版本散布給他人的自由(自由之三)。如此你就有機會讓你的改善惠及社群整體。能存取源始碼是這項自由的先決條件。
— 自由軟件定義[10]
3. 衍生作品:許可證必須允許修改和衍生作品,需要像原來的許可證那樣發布。
— 開源定義[11]

在自由軟件中,分叉通常是因為目標不同或個性衝突,進而導致的分裂。在分叉中,雙方的代碼庫幾乎相同,但通常只有團隊更大或控制網站的的一方保留完整的原始名稱和對應的用戶社區。因此,分叉會帶來聲譽損失。[9] 雙方團隊間的關係可能很融洽,也可能非常緊張。另外,友好分叉軟分叉是指不打算競爭,且希望最終併入原分支的分叉。

Eric S. Raymond 在他的文章《Homesteading the Noosphere》[12] 中指出:「分叉最重要的特徵是它會產生競爭項目,這些項目以後無法交換代碼,從而分裂了潛在的開發者社區」。他在 Jargon File 中指出

埃里克·雷蒙 在他的文章 Homesteading the Noosphere,[12] 中指出:「分叉最重要的特徵是,它會產生競爭項目,這些項目以後無法交換代碼,從而分裂了潛在的開發者社區」。他在 新黑客詞典中指出:[13]

分叉被認為是一件壞事——不僅因為它意味着未來會浪費大量精力,還因為分叉往往伴隨各後繼團隊在合法性、繼承權和設計方向上的大量衝突和爭吵。分叉往往會面臨巨大的社會壓力。因此,大型軟件的分叉(例如 Gnu-Emacs/XEmacs 分裂、386BSD 項目分裂為三個子項目以及短暫的 GCC/EGCS 分裂)非常罕見,在黑客歷史中這些事件都值得單獨講述。

David A. Wheeler 指出了[9] 四種可能的分叉結果,並給出了例子:

  1. 分叉消亡。這是目前最常見的情況,宣布分叉很容易,但繼續獨立開發和支持則要付出巨大努力。
  2. 分叉被重新合併。(例如 EGCS克隆 作為 GCC 的新版本被「扶正」。)
  3. 原始版本消亡。(例如 X.Org Server 完全繼承,而 XFree86 消亡。)
  4. 兩者共存,通常各有所長。(例如 OpenBSDNetBSD。)

GitHub、Bitbucket 和 Launchpad 等網站提供免費的 DVCS 託管,明確支持獨立分支,這樣大大降低了分叉源代碼存儲庫的技術、社會和財務障礙,GitHub 使用「fork」作為這種為項目做貢獻的方法的術語。

分布式版本控制 (DVCS) 工具普及了「fork」一詞的另一種用法,該用法不帶感情色彩,與「branch」幾乎沒有區別。[14] 在類似 MercurialGit 的 DVCS 系統中為項目做貢獻的常規方式是,首先創建存儲庫的個人分支,與主存儲庫獨立,然後設法將更改合併入主存儲庫。GitHubBitbucketLaunchpad 等免費 DVCS 託管網站都明確支持個人分支,從技術、社會和經濟方面降低了分叉源代碼的難度,GitHub 使用「fork」作為術語來描述這種為項目做貢獻的方式。

Fork 的版本編號通常從頭開始(如 0.0.1、0.1 或 1.0),即使原始軟件已經發展到例如 3.0、4.0 或 5.0 的版本了。但是如果分叉軟件被設計為原始項目的直接替代品時,也會有例外,例如 MariaDB 作為 MySQL 的替代[15]LibreOffice 作為 OpenOffice.org 的替代。

BSD許可證 允許分叉變成專有軟件,而 Copyleft (公共版權)的支持者認為,商業激勵使得專有化幾乎不可避免。(因為公共版權許可證本身可以通過雙重許可被規避掉,即額外以貢獻者許可協議的形式授予專有權。)例子包括 macOS (基於專有的 NeXTSTEP 和開源的 FreeBSD), CedegaCrossOverWine 的專有分叉,儘管 CrossOver 緊跟 Wine 的進度並做出了相當大的貢獻),EnterpriseDB (PostgreSQL 的分叉,增加了 Oracle 兼容性功能[16]),受支持的 PostgreSQL(帶有專有 ESM 存儲系統)[17] 和 Netezza 的[18] 專有且高度可擴展的 PostgreSQL 衍生產品。部分廠商會將更改回饋給社區項目,也有廠商將他們的更改留作自己的競爭優勢。

專有軟件的分叉

專有軟件 中,版權方通常是公司實體,而不是單個軟件開發人員。因此,當所有者需要開發不同版本時(窗口版和命令行版,或者不同操作系統的版本,例如一個 文字處理器 分別用於 IBM PC 兼容機和 Mac 計算機),專有的代碼往往在這種情況下被分叉。這種內部分叉通常致力於在不同平台上保持相同的外觀、感覺、數據格式和行為,讓熟悉一個平台的用戶也可以跨平台高效工作,或跨平台共享文檔。這一決策通常出於財政考慮,占據更大的市場份額來彌補分叉產生的額外開發成本。

還有一次特別的專有軟件分叉不是這種類型,那就是專有 UNIX 分叉出了許多變種——幾乎都是在許可下從 AT&T Unix 衍生而來的,都被稱為 「Unix」,但相互之間越來越不兼容。[19] 參見 Unix戰爭英語Unix wars

參見

參考文獻

外部連結

Wikiwand - on

Seamless Wikipedia browsing. On steroids.