分叉(英语: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战争。
参见
参考文献
外部链接
Wikiwand - on
Seamless Wikipedia browsing. On steroids.