分叉（，又譯作衍生、分支）是一個軟體工程名詞，表示開發者從一個軟體包中獲取了原始碼的複製，並開始獨立開發，建立了另一個獨立的軟體。 這個術語不只意味著版本控制上的新開發分支，往往還表示開發人員社群的分裂，是一種意識形式的分裂。意識分裂往往用 Schism 這個詞，例如 the LemacsFSFmacs schism Jamie Zawinski 2000 Behind the KOffice split Joe Brockmeier Linux Weekly News 20101214 Copyright assignment once bitten twice shy Richard Hillesley HOnline 20100806 Forking is a feature Anil Dash 20100910 The Great Software Schism Glyn Moody Linux Journal 20060928 To Fork Or Not To Fork Lessons From Ubuntu and Debian Benjamin Mako Hill 2005 分叉的原因一般是使用者偏好不同或原始軟體的開發已經停滯或停止。 根據自由及開放原始碼軟體的定義，這些軟體可以在未經事先許可的情況下，從原始開發團隊分叉，並且不會違反著作權法律。但是，專有軟體（例如 UNIX）的分叉在許可之下也會發生。 詞源 早在 14 世紀，fork 一詞就被用來表示 分成分支，分道揚鑣。Entry fork in Online Etymology Dictionary 在軟體領域，該詞讓人聯想到 fork 系統呼叫，執行中的程序建立一個與自身（幾乎）相同的副本，這兩個程序（通常）會分別執行不同的任務。The term fork is derived from the POSIX standard for operating systems the system call used so that a process generates a copy of itself is called fork 在軟體開發中，早在 1980 年，艾瑞克奧爾曼 就在版本控制系統裡使用 fork 來表示建立一個新的修訂 分支：Allman Eric An Introduction to the Source Code Control System Project Ingres University of California at Berkeley 1980 1983 年，Usenet 開始使用該術語來表示建立子討論組來細分討論主題。Can somebody fork off a netphilosophy John Gilmore netmisc 18 January 1983 在 Lucid Emacs（現為 XEmacs）（1991 年）和 BSD（19931994 年）衍生出來時，Fork 一詞還沒有用來表示社群的分裂。當時（1993 年） Russ Nelson 使用 shattering 一詞來表示這種分叉，並將其歸因於 John Gilmore。Shattering good or bad Russell Nelson gnumiscdiscuss 1 October 1993 到了 1995 年，fork 開始有了現在的意思，用來描述 XEmacs 的分裂，Re Hey Franz 32K Windows SUCK Bill Dubuque cucsmaclinfo 21 September 1995 1996 年該用法成為 GNU 專案中一種公認的用法。Lignux Marcus G Daniels gnumiscdiscuss 7 June 1996 自由和開源軟體的分叉 根據自由軟體定義和開源定義，自由軟體和開源軟體可以合法地分叉，無需經過當前開發、管理或分發軟體的人員的批准。 在自由軟體中，分叉通常是因為目標不同或個性衝突，進而導致的分裂。在分叉中，雙方的程式碼庫幾乎相同，但通常只有團隊更大或控制網站的的一方保留完整的原始名稱和對應的使用者社群。因此，分叉會帶來聲譽損失。 雙方團隊間的關係可能很融洽，也可能非常緊張。另外，友好分叉或軟分叉是指不打算競爭，且希望最終併入原分支的分叉。 Eric S Raymond 在他的文章《Homesteading the Noosphere》12 中指出：分叉最重要的特徵是它會產生競爭專案，這些專案以後無法交換程式碼，從而分裂了潛在的開發者社群。他在 Jargon File 中指出 埃裡克雷蒙 在他的文章 Homesteading the Noosphere 中指出：分叉最重要的特徵是，它會產生競爭專案，這些專案以後無法交換程式碼，從而分裂了潛在的開發者社群。他在 新駭客詞典中指出：Forked Jargon File first added to v422 20 August 2000 David A Wheeler 指出了 Why Open Source Software Free Software OSSFS FLOSS or FOSS Look at the Numbers Forking David A Wheeler 四種可能的分叉結果，並給出了例子： 分叉消亡。這是目前最常見的情況，宣佈分叉很容易，但繼續獨立開發和支援則要付出巨大努力。 分叉被重新合併。（例如 EGCS 克隆 作為 GCC 的新版本被 扶正。） 原始版本消亡。（例如 XOrg Server 完全繼承，而 XFree86 消亡。 兩者共存，通常各有所長。（例如 OpenBSD 和 NetBSD。） GitHub、Bitbucket 和 Launchpad 等網站提供免費的 DVCS 託管，明確支援獨立分支，這樣大大降低了分叉原始碼儲存庫的技術、社會和財務障礙，GitHub 使用 fork 作為這種為專案做貢獻的方法的術語。 分散式版本控制 DVCS 工具普及了 fork 一詞的另一種用法，該用法不帶感情色彩，與 branch 幾乎沒有區別。eg 參見 在類似 Mercurial 或 Git 的 DVCS 系統中為專案做貢獻的常規方式是，首先建立儲存庫的個人分支，與主儲存庫獨立，然後設法將更改合併入主儲存庫。GitHub、Bitbucket 和 Launchpad 等免費 DVCS 託管網站都明確支援個人分支，從技術、社會和經濟方面降低了分叉原始碼的難度，GitHub 使用 fork 作為術語來描述這種為專案做貢獻的方式。 Fork 的版本編號通常從頭開始（如 001、01 或 10），即使原始軟體已經發展到例如 30、40 或 50 的版本了。但是如果分叉軟體被設計為原始專案的直接替代品時，也會有例外，例如 MariaDB 作為 MySQL 的替代 Forked a project where do my version numbers start 和 LibreOffice 作為 OpenOfficeorg 的替代。 BSD 許可證 允許分叉變成專有軟體，而 Copyleft （公共版權）的支持者認為，商業激勵使得專有化幾乎不可避免。（因為公共版權許可證本身可以透過雙重許可被規避掉，即額外以貢獻者許可協議的形式授予專有權。）例子包括 macOS （基於專有的 NeXTSTEP 和開源的 FreeBSD）， Cedega 和 CrossOver （Wine 的專有分叉，儘管 CrossOver 緊跟 Wine 的進度並做出了相當大的貢獻），EnterpriseDB （PostgreSQL 的分叉，增加了 Oracle 相容性功能 EnterpriseDB ），受支援的 PostgreSQL（帶有專有 ESM 儲存系統）Fujitsu Supported PostgreSQL 和 Netezza 的 Netezza 專有且高度可擴充套件的 PostgreSQL 衍生產品。部分廠商會將更改回饋給社群專案，也有廠商將他們的更改留作自己的競爭優勢。 專有軟體的分叉 在 專有軟體 中，版權方通常是公司實體，而不是單個軟體開發人員。因此，當所有者需要開發不同版本時（視窗版和命令列版，或者不同作業系統的版本，例如一個 文字處理器 分別用於 IBM PC 相容機和 Mac 計算機），專有的程式碼往往在這種情況下被分叉。這種內部分叉通常致力於在不同平臺上保持相同的外觀、感覺、資料格式和行為，讓熟悉一個平臺的使用者也可以跨平臺高效工作，或跨平臺共享文件。這一決策通常出於財政考慮，佔據更大的市場份額來彌補分叉產生的額外開發成本。 還有一次特別的專有軟體分叉不是這種型別，那就是專有 UNIX 分叉出了許多變種 幾乎都是在許可下從 ATT Unix 衍生而來的，都被稱為 Unix，但相互之間越來越不相容。Fear of forking An essay about forking in free software projects by Rick Moen 參見 。 參見 集體決策 模組化程式設計 團隊效率 程式碼重複 參考文獻 外部連結 Right to Fork at MeatballWiki A PhD examining forking Nyman 2015 Understanding Code Forking in Open Source Software An examination of code forking its effect on open source software and how it is viewed and practiced by developers Category 軟體復刻 Category 軟體專案管理 Category 軟體開發