linux 内核开发
由于Linux内核社区在2016年庆祝了25年的开发历史,因此许多人向我们询问了该项目的长寿和成功秘诀。 我通常会开玩笑,说我们真的不知道如何到达这里。 在此过程中,该项目面临许多分歧和挑战。 但是,严重的是,我们之所以做到这一点,与社区的内省和变革能力有很大关系。
大约16年前,大多数内核开发人员从未亲自见过面-我们只通过电子邮件进行了交互-因此Ted T'so提出了“ 内核峰会”的想法。 现在,每年内核开发人员都希望亲自聚集一堂,解决技术问题,并且至关重要的是,回顾一下过去一年中我们做对了什么和做错了什么。 开发人员可以公开和诚实地讨论彼此之间的交互方式以及开发过程的工作方式。 然后,我们进行更改以改善流程。 我们开发了新工具,例如Git ,并不断改变我们的合作方式。
随着时间的推移,这种演变创造了一种弹性,使项目可以从一种优势转到另一种优势,同时避免了分散竞争项目资源的分叉。 我们可能需要很多年才能完全理解Linux内核成功的关键,但是即使到现在,也有一些教训很突出。
1.短的发布周期很重要。
在Linux项目的早期,每隔几年才发布一次新的主要内核版本。 这意味着在向用户提供新功能方面存在相当大的延迟,这使用户和发行商都感到沮丧。 但是,更重要的是,如此长的周期意味着必须立即集成大量代码,并且即使尚未准备好将代码带入下一个版本的压力也很大。
短周期解决了所有这些问题。 新代码可在稳定版本中快速提供。 在几乎恒定的基础上集成新代码,可以以最小的中断带来甚至根本的更改。 而且开发人员知道,如果错过了一个发布周期,那么每两个月就会有另一个发布周期,因此几乎没有动机去尝试过早地合并代码。
2.流程可伸缩性需要一个分布式的,分层的开发模型。
很久以前,所有更改都直接交给了Linus Torvalds,但很快就证明了这一点很笨拙,因为没有一个人能跟上一个像操作系统内核这样多样化的项目。 很早就出现了内核不同区域的维护者的想法,其中一部分内核的职责分配给了熟悉该区域的个人。 例如网络,无线,不同的驱动程序子系统(如PCI或USB)或不同的单独文件系统(如ext2或vfat)。 在数百名维护人员中分散代码审查和集成的责任,为该项目提供了资源来应对每个版本的成千上万的变更,而又不牺牲审查或质量。
3.工具很重要。
内核开发一直在努力扩展,直到BitKeeper源代码管理系统的出现几乎在一夜之间就改变了社区的惯例。 改用Git带来了又一次飞跃。 没有合适的工具,像内核这样的项目将无法正常运作,而无法承受其自身的崩溃。
4.内核的高度共识导向的模型很重要。
通常,如果受人尊敬的开发人员反对,则建议的更改将不会合并。 对于发现在邮件列表中封锁了几个月的代码的开发人员而言,这可能会令人沮丧。 但是,这也确保了内核仍然适合各种用户和问题。 没有特定的用户社区能够以其他组为代价进行更改。 结果,我们有了一个单一的代码库,该代码库可以从小型系统扩展到超级计算机,并且适合多种用途。
5.内核强大的“不回归”规则也很重要。
十多年前,内核开发人员社区承诺,如果给定的内核在特定的环境中工作,那么所有后续内核也将在该环境中工作。 如果社区发现更改导致了回归,那么他们将非常Swift地解决该问题。 该规则使用户确信升级不会破坏他们的系统。 结果,他们愿意跟随内核开发新功能。
6.公司在这一过程中的参与至关重要,但是没有哪个公司能主导内核开发。
自2014年12月3.18版发布以来,代表近500家公司的5,062个人开发人员为Linux内核做出了贡献。大多数开发人员都为自己的工作付费—并且他们所做的更改为所服务的公司服务。 但是,尽管任何公司都可以根据其特定需求改进内核,但是没有公司可以朝着损害他人或限制内核功能的方向进行开发。
7.项目内不应有内部界限。
内核开发人员必须专注于内核的特定部分,但是只要可以证明更改合理,任何开发人员都可以对内核的任何部分进行更改。 结果,问题被固定在了问题的源头,而不是被解决,开发人员对内核整体有了更广阔的视野,即使是最顽强的维护者也无法无限期地拖延任何给定子系统的所需进度。
8.内核表明,重大的发展可以从很小的起点开始。
最初的0.01内核只有10,000行代码。 现在,它每两天增长一次。 开发人员现在添加的一些基本的微小功能将在将来开发为重要的子系统。
9.最重要的是,25年的内核历史表明,持续不断的合作可以带来共同的资源,而任何团队都无法自行开发这些资源。
自2005年以来,来自1300多家不同公司的大约14,000名个人开发人员为内核做出了贡献。 因此,Linux内核已成为其他领域的激烈竞争对手的公司大规模开发的通用资源。
这些总结以及有关Linux内核开发的更多详细信息,可以在与LWN的Jon Corbet共同撰写的2016 Linux Kernel Development Report中找到。
Libby Clark对本文有所贡献。
翻译自: https://opensource.com/article/16/12/yearbook-9-lessons-25-years-linux-kernel-development
linux 内核开发