6.3 KiB
What's the difference between a fork and a distribution? 分支与发行版有什么不同?
如果你们对开源软件有过一段时间地了解,一定曾在许多相关的途径中听说过分支(fork)和发行版(distribution)两个词。许多人对这两个词的区别不太清楚,因此我将试着通过这篇文章为大家解答这一疑惑。
首先地,关于定义
在解释分支与发行版两者的细微区别与相似之处之前,让我们先给一些相关的重要概念下定义。
开源软件 是指具有以下特点的软件:
* 在特定的 [协议][2] 限制下,软件供所有人免费传播与使用
* 在特定的协议限制下,软件源代码供所有人使用与修改
开源软件有以下几种 消费 方式:
* 以二进制或者源代码的方式下载,通常是不收费的。(例如, [Eclipse开发者环境][3] )
### * 作为一个商业公司的产品,有时向用户提供一些服务并以此收费。(例如,[红帽产品][4])
* 嵌入在专有的软件解决方案中。(例如一些智能手机和浏览器用于显示字体的[Freetype软件][5])
将 自由且开源(FOSS) 中的”自由“理解成“零成本”是不准确的。自由且开源仅仅意味着这个软件在遵守软件协议的前提下是可以免费传播、修改、学习和使用的。软件传播者也可能为该软件定价。例如,免费使用的Linux发行版有Fedora、Centos等。另外,收费的发行版有红帽企业版Linux、SUSE等。
社区(community) 指的是为一个开源项目协同工作和贡献的团体或个人。任何人或者团体都可以在遵守协议的前提下通过例如编写或者审查代码、撰写使用文档、测试软件、管理会议、更新网站等方式为开源项目作出贡献。例如,在Openhub.net网站,我们可以看见政府、非营利性机构、商业公司和教育团队等组织都在为一些开源项目作出贡献。
项目(project) 是集合作开发、文档和测试的结果。绝大多数项目都搭建了主要仓库用来存储代码、文档、测试文件和目前正在开发的文件。
发行版(distribution) 是指开源项目的一份的副本,通常以二进制或源代码为样式。例如,Centos、Fedora、红帽企业版Linux、SUSE、Ubuntu等都是Linux这一项目的发行版。Tectonic、谷歌的Kubernetes引擎、亚马逊的容器服务和红帽的OpenShift都是Kubernetes项目的发行版。
开源项目的商业发行版经常被称作 产品(products) ,类似地红帽OpenStack平台是红帽OpenStack产品系列旗下的一个基于OpenStack上游项目搭建并且百分百开源的发行版。
主干(trunk) 是该开源项目发展的主要社区工作流。
分支(fork) 是开源项目主干的一个版本,他是分离自主干的独立工作流。
因此, 一个发行版并不等同于一个分支 。发行版是上游项目的包裹,具有可用性,经常作为产品进行销售。然而,发行版的核心代码和文档需要遵守上游项目的版本规则。从上游版本中获取开源代码的分支用户必须依靠他们自身来维护分支项目,这意味着他们失去了上游社区协同工作带来的好处。
为了对软件分支进行进一步的解释,让我来用动物迁徙作比喻。鲸鱼和海狮从北极迁徙到加利福尼亚和墨西哥;帝王蝶从阿拉斯加迁徙到墨西哥;并且北半球的燕子和许多其他鸟类飞翔南方去过冬。成功迁徙的关键因素在于,团队中的所有动物团结一致,紧跟领导者,找到食物和庇护所,并且不会迷路。
独立前行带来的风险
一只鸟、帝王蝶或者鲸鱼一旦掉队就失去了许多优势,例如团队带来的保护以及知道哪儿有食物、庇护所和目的地。
相似地,从上游版本获取分支并且独立维护的用户和组织也存在以下风险:
1. **由于代码不同,分支用户不能够基于上游版本更新代码。** 这就是大家熟知的技术争论,分支的代码修改的越多,将这一分支作为上游项目需要花费的时间和金钱成本就越高。
2. **分支用户基本上都在运行几乎没有安全保障的代码。** 由于代码不同的原因,当开源代码的漏洞被找到,并且被上游社区修复时,分支版本的代码可能将无法从这次修复中受益,。
3. **分支用户几乎无法从新特性中获益。** 拥有众多组织和个人支持的上游版本,将会创建许多符合所有上游项目用户习惯的新特性。如果一个组织分离于上游,由于代码不同他们几乎不能与主干版本进行更新。
4.**他们可能无法和其他软件包整合在一起。** 开源项目很少被发展成为单一的实体;相反地,他们经常被与其他项目打包在一起构成一套解决方案。分支代码可能不能够与其他项目整合,因为分支代码的开发者并不与上游的其他参与者们合作。
5.**他们可能不能够在硬件平台上验证分支代码可行性。** 软件包裹通常被搭载在硬件平台上进行验证,如果有问题发生,硬件与软件工作人员可以合作找出并解决问题发生的根源。
总之,开源发行版只是一个由上游组织协同开发、并且提供商业服务与支持的包裹。分支是开源项目的独立发展工作流,并且不能从上游社区协同工作开发的结果中收益。
via: https://opensource.com/article/18/7/forks-vs-distributions
作者:Jonathan Gershater 选题:lujun9972 译者:Wlzzzz-del 校对:校对者ID