分叉 (软件开发)
分叉(英语:fork,又译作派生、分支)是一个软件工程名词,表示开发者从一个软件包中获取了源代码的拷贝,并开始独立开发,建立了另一个独立的软件。[比如?] 这个术语不只意味着版本控制上的新开发分支,往往还表示开发人员社区的分裂,是一种意识形式的分裂。[1] 分叉的原因一般是用户偏好不同或原始软件的开发已经停滞或停止。
根据自由及开放源代码软件的定义,这些软件可以在未经事先许可的情况下,从原始开发团队分叉,并且不会违反著作权法律。但是,专有软件(例如 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]
在自由软件中,分叉通常是因为目标不同或个性冲突,进而导致的分裂。在分叉中,双方的代码库几乎相同,但通常只有团队更大或控制网站的的一方保留完整的原始名称和对应的用户社区。因此,分叉会带来声誉损失。[9] 双方团队间的关系可能很融洽,也可能非常紧张。另外,友好分叉或软分叉是指不打算竞争,且希望最终并入原分支的分叉。
Eric S. Raymond 在他的文章《Homesteading the Noosphere》[12] 中指出:“分叉最重要的特征是它会产生竞争项目,这些项目以后无法交换代码,从而分裂了潜在的开发者社区”。他在 Jargon File 中指出
埃里克·雷蒙 在他的文章 Homesteading the Noosphere,[12] 中指出:“分叉最重要的特征是,它会产生竞争项目,这些项目以后无法交换代码,从而分裂了潜在的开发者社区”。他在 新黑客词典中指出:[13]
David A. Wheeler 指出了[9] 四种可能的分叉结果,并给出了例子:
- 分叉消亡。这是目前最常见的情况,宣布分叉很容易,但继续独立开发和支持则要付出巨大努力。
- 分叉被重新合并。(例如 EGCS克隆 作为 GCC 的新版本被“扶正”。)
- 原始版本消亡。(例如 X.Org Server 完全继承,而 XFree86 消亡。)
- 两者共存,通常各有所长。(例如 OpenBSD 和 NetBSD。)
GitHub、Bitbucket 和 Launchpad 等网站提供免费的 DVCS 托管,明确支持独立分支,这样大大降低了分叉源代码存储库的技术、社会和财务障碍,GitHub 使用“fork”作为这种为项目做贡献的方法的术语。
分布式版本控制 (DVCS) 工具普及了“fork”一词的另一种用法,该用法不带感情色彩,与“branch”几乎没有区别。[14] 在类似 Mercurial 或 Git 的 DVCS 系统中为项目做贡献的常规方式是,首先创建存储库的个人分支,与主存储库独立,然后设法将更改合并入主存储库。GitHub、Bitbucket 和 Launchpad 等免费 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), Cedega 和 CrossOver (Wine 的专有分叉,尽管 CrossOver 紧跟 Wine 的进度并做出了相当大的贡献),EnterpriseDB (PostgreSQL 的分叉,增加了 Oracle 兼容性功能[16]),受支持的 PostgreSQL(带有专有 ESM 存储系统)[17] 和 Netezza 的[18] 专有且高度可扩展的 PostgreSQL 派生产品。部分厂商会将更改回馈给社区项目,也有厂商将他们的更改留作自己的竞争优势。
专有软件的分叉
[编辑]在 专有软件 中,著作权方通常是公司实体,而不是单个软件开发人员。因此,当所有者需要开发不同版本时(窗口版和命令行版,或者不同操作系统的版本,例如一个 文字处理器 分别用于 IBM PC 兼容机和 Mac 计算机),专有的代码往往在这种情况下被分叉。这种内部分叉通常致力于在不同平台上保持相同的外观、感觉、数据格式和行为,让熟悉一个平台的用户也可以跨平台高效工作,或跨平台共享文档。这一决策通常出于财政考虑,占据更大的市场份额来弥补分叉产生的额外开发成本。
还有一次特别的专有软件分叉不是这种类型,那就是专有 UNIX 分叉出了许多变种——几乎都是在许可下从 AT&T Unix 派生而来的,都被称为 “Unix”,但相互之间越来越不兼容。[19] 参见 Unix战争。
参见
[编辑]参考文献
[编辑]- ^ 意识分裂往往用"Schism"这个词,例如:
- "the Lemacs/FSFmacs schism" 互联网档案馆的存档,存档日期30 November 2009. (Jamie Zawinski, 2000)
- "Behind the KOffice split" 互联网档案馆的存档,存档日期6 July 2013. (Joe Brockmeier, Linux Weekly News, 2010-12-14)
- "Copyright assignment – once bitten, twice shy" 互联网档案馆的存档,存档日期30 March 2012. (Richard Hillesley, H-Online, 2010-08-06)
- "Forking is a feature" 互联网档案馆的存档,存档日期29 February 2012. (Anil Dash, 2010-09-10)
- "The Great Software Schism" 互联网档案馆的存档,存档日期6 January 2012. (Glyn Moody, Linux Journal, 2006-09-28)
- "To Fork Or Not To Fork: Lessons From Ubuntu and Debian" 互联网档案馆的存档,存档日期26 February 2012. (Benjamin Mako Hill, 2005).
- ^ Entry 'fork' in Online Etymology Dictionary 互联网档案馆的存档,存档日期25 May 2012.
- ^ "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()." Robles, Gregorio; González-Barahona, Jesús M. A Comprehensive Study of Software Forks: Dates, Reasons and Outcomes (PDF). OSS 2012 The Eighth International Conference on Open Source Systems. 2012 [20 October 2012]. doi:10.1007/978-3-642-33442-9_1 . (原始内容存档 (PDF)于2 December 2013).
- ^ Allman, Eric. "An Introduction to the Source Code Control System." 互联网档案馆的存档,存档日期6 November 2014. Project Ingres, University of California at Berkeley, 1980.
- ^ Can somebody fork off a "net.philosophy"? (John Gilmore, net.misc, 18 January 1983)
- ^ Shattering — good or bad? (Russell Nelson, gnu.misc.discuss, 1 October 1993)
- ^ Re: Hey Franz: 32K Windows SUCK!!!!! (Bill Dubuque, cu.cs.macl.info, 21 September 1995)
- ^ Lignux? (Marcus G. Daniels, gnu.misc.discuss, 7 June 1996)
- ^ 9.0 9.1 9.2 Why Open Source Software / Free Software (OSS/FS, FLOSS, or FOSS)? Look at the Numbers!: Forking 互联网档案馆的存档,存档日期5 April 2006. (David A. Wheeler)
- ^ Stallman, Richard. The Free Software Definition. Free Software Foundation. [2013-10-15]. (原始内容存档于14 October 2013).
- ^ The Open Source Definition. The Open Source Initiative. 7 July 2006 [15 October 2013]. (原始内容存档于15 October 2013).
- ^ Raymond, Eric S. Promiscuous Theory, Puritan Practice. catb.org. 15 August 2002. (原始内容存档于6 October 2006).
- ^ Forked 互联网档案馆的存档,存档日期8 November 2011. (Jargon File), first added to v4.2.2 互联网档案馆的存档,存档日期14 January 2012., 20 August 2000)
- ^ e.g. Willis, Nathan. An "open governance" fork of Node.js. LWN.net. 15 January 2015 [15 January 2015]. (原始内容存档于21 April 2015).
Forks are a natural part of the open development model—so much so that GitHub famously plasters a "fork your own copy" button on almost every page.
参见 Nyman, Linus. Understanding Code Forking in Open Source Software (学位论文). Hanken School of Economics: 57. 2015. hdl:10138/153135.Where practitioners have previously had rather narrow definitions of a fork, [...] the term now appears to be used much more broadly. Actions that would traditionally have been called a branch, a new distribution, code fragmentation, a pseudo-fork, etc. may all now be called forks by some developers. This appears to be in no insignificant part due to the broad definition and use of the term fork by GitHub.
- ^ Forked a project, where do my version numbers start? 互联网档案馆的存档,存档日期26 August 2011.
- ^ EnterpriseDB 互联网档案馆的存档,存档日期13 November 2006.
- ^ Fujitsu Supported PostgreSQL 互联网档案馆的存档,存档日期20 August 2006.
- ^ Netezza 互联网档案馆的存档,存档日期13 November 2006.
- ^ Fear of forking 互联网档案馆的存档,存档日期17 December 2012. – An essay about forking in free software projects, by Rick Moen
外部链接
[编辑]- Right to Fork at MeatballWiki
- A PhD examining forking: (Nyman, 2015) 互联网档案馆的存档,存档日期16 July 2023. "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"
这是一篇与计算机相关的小作品。您可以通过编辑或修订扩充其内容。 |