共计 2154 个字符,预计需要花费 6 分钟才能阅读完成。
原文:9 lessons from 25 years of Linux kernel development
作者:Greg Kroah-Hartman
翻译:雁惊寒
Linux 内核社区在 2016 年庆祝了成立二十五周年纪念,许多人来问我们这个项目经久不衰和成功的秘诀。我一般会先笑笑,然后开玩笑地说,我真的不知道已经经历了 25 年。这个项目一直都面临着分歧和挑战。但是,严肃地说,我们能够做到这一点与社区在反思和改变上的能力有着很大的关系。
大约 16 年前,大多数内核开发人员互相之间从来没有见过面,我们只是通过电子邮件进行联系,所以 Ted T’so 提出了内核峰会的想法。现在,内核开发人员每年都会聚在一起解决技术问题,更重要的是,回顾一下在过去的一年里我们做了哪些对的事情,又犯了哪些错误。开发人员可以开诚布公地讨论相互之间如何进行交流以及开发流程如何运作。然后,我们会改进流程,我们会开发像 Git 这样的新的工具,不断地改变我们的合作方式。
虽然我们现在尚未完全认识清楚 Linux 内核成功的所有关键原因,但目前还是有一些经验值得拿出来分享的。
1. 更短的发布周期很重要
在 Linux 项目的早期阶段,内核的每个主版本需要好几年发布一次,这意味着用户需要等待很长时间才能享受到新功能,这对于用户和经销商来说是相当令人沮丧的。而且,更重要的是,这么长的周期意味着需要一下子集成大量的代码。把这么多代码合入一个版本里,压力也是很大的。
更短的周期可以解决所有这些问题。新代码能够在更短时间内合入到稳定版中。将新代码集成到几乎稳定不变的基线版本上,使得能够在对系统产生极小影响的情况下引入根本性的变化。开发人员知道,如果他们错过了这个发布周期,两个月内还会有另外一个,所以他们很少会过早地合入代码。
2. 流程的扩展需要一个分布式的分层开发模型
很久以前,所有的变更需求都会直接转到 Linus Torvalds 手中,但这很快就被证明是不合适的,因为没有哪个人可以全面掌握像操作系统内核这么复杂的项目。很早的时候,内核不同领域的维护者们就提出了一个想法,就是把内核的其中一部分分配给熟悉该领域的人。例如,网络、无线、像 PCI 或 USB 这样的驱动程序子系统、或者像 ext2 或 vfat 这样的文件系统。然后再扩展到由数百名维护人员负责代码审查和整合,从而使得能够在不牺牲产品质量的情况下,在每个发布的版本中都包含成千上万的变更。
3. 工具的重要性
内核开发一直在试图扩大开发人员的范围,直到 BitKeeper 这款源代码管理系统出现,几乎在一夜之间社区的做法发生了改变,而 Git 的出现带来了又一次的飞跃。如果没有合适的工具,像内核这样的项目将无法正常运转,从而会被自身的重量压垮。
4. 强大的舆论导向模式很重要
一般来说,如果一个开发大咖拒绝了某个提交上来的变更,那么这个变更将不会被合并进去。如果开发人员发现自己在几个月前提交的代码在邮件列表中被拒绝了,那是非常令人沮丧的。但这也保证了内核开发可以适应大量的用户和问题。没有哪个用户社区能够以牺牲其他群组为代价而进行变更。我们有一个可以支持从微型系统到超级计算机的代码库,它可以应用在很多场景上。
5. 强大的“无回归”规则也很重要
大约在十多年前,内核开发社区承诺,如果给定的内核在特定的环境中能正常运行,那么所有后续的内核版本也能在这个环境中正常运行。如果社区发现某个变更导致了其他问题的出现,他们会很快地解决这个问题。该规则承诺用户:系统升级不会破坏他们原来的系统。因而,维护者很愿意在开发新功能的时候延续这个内核。
6. 公司参与到开发流程中来是至关重要的,但没有哪家公司能够主导内核开发
自 2014 年 12 月版本号为 3.18 的内核发布以来,有将近 500 家公司的大约 5062 名个人开发者为 Linux 内核做出了贡献。大多数开发人员因为他们的工作而得到了报酬,而他们所做的变更是为他们所在的公司服务的。但是,尽管任何一家公司都可以根据具体需求改进内核,但是没有哪家公司可以主导开发去做伤害别人或者限制内核功能的事情。
7. 项目中不应有内部界限
内核开发人员必须专注于内核的特定部分,但只要修改是合理的,那么任何开发人员都可以对内核的任何部分进行修改。从而,问题在产生的时候就会被解决掉,而不是规避掉。开发人员对整个内核有很多各种各样的看法,即便是最顽固的维护者也不能无限期地搁置任何指定子系统中所必需的改进。
8. 重要的功能是从一点一滴开始的
原来的 0.01 版内核只有 10000 行代码; 而现在每两天增加 10000 多行。开发人员现在添加的一些基本的、微小的功能未来可能会发展成为重要的子系统。
9. 综上所述,25 年的内核发展历史表明,持续地合作可以带来共同的资源,这不是单单某个小组能够开发出来的
自 2005 年以来,来自 1300 多家公司的约 14000 名个人开发人员对内核做出了贡献。因此,Linux 内核在很多互相之间有激烈竞争关系的公司的努力下,发展成为一个规模庞大的公共资源。