Linux内核25年开发中的9个经验

openqt

Linux内核25年开发中的9个经验

Greg Kroah-Hartman

image

2016年Linux社区庆祝内核研发经历了1/4个世纪,由此有人问我们是什么秘诀使这个项目如此长久并如此成功。一般我就笑笑打趣说我也不知道怎么就走到这一步了,但在项目发展中确实有过很多争论和挑战。认真讲,我们能走这么远主要是归功于社区的自我反思和应对变化的能力上。

16年前绝大部分的内核开发者彼此从未见过面,仅仅通过电子邮件互相联系。后来Ted T'so提议举办个内核峰会,从那之后到现在每年开发者都会聚在一起讨论技术难题,回顾过去一年里我们做对和做错了的事情。每个人都可以开诚布公的谈合作经验和开发过程,然后我们会改进流程。我们也提供新的工具如Git并不断改进协作模式。

久而久之这样的演进就具有一种弹性:既允许项目从一个强势领域进入下一个,又避免了分裂成众多相互竞争的项目。也许要多年之后我们才能充分认识到让Linux内核开发如此成功的关键之处,但下面列出了一些当前我们认为重要的经验。

1. 短期发布很重要

Linux项目早期每个主版本要隔几年才发布。这对用户和志愿者来说很不方便,因为要拿到新特性需要等很久。更重要的是,这么长的周期意味着会有大量的代码集成在里面,每次发布都会有很大压力,有些并不完善的代码不得不随之发布。

短期发布解决了上面这些问题,新的代码可以很快就在稳定的发布版中取得,集成的新代码甚至可以以很小的代价来做一些基础性的改动。开发者们如果错过了一个发布周期,那么可以等两个月后的下一个发布,这样就不会迫使他们急于合并不完善的代码。

2. 弹性流程需要一个分布的层级式开发模型

很长时间以前,所有改动都直接提交给Torvalds,但很快发现一个人处理象操作系统内核这样分散的项目太困难。社区很早就有了由熟悉某方面的志愿者负责维护内核不同部分的想法,譬如网络、无线、或是PCI或USB等不同的驱动子系统乃至各种文件系统如ext2, vfat等。把代码审查和集成这些事项铺给众多志愿者使得内核项目能在每个版本上万的改动中兼顾代码审查和质量。

3. 工具的重要性

内核开发的规模起初扩展很难,直到BitKeeper的出现几乎一夜之间改变了社区;切换到Git带来了另一次飞跃。没有合适的工具,象内核开发这样的项目很快就会被自己的规模压垮。

4. 共识模式

一般性的原则,如果有重要的开发人员反对某个变更,它就不会被合并入代码库。当提交者发现几个月前提交的代码仍然挂在邮件列表上的时候可能会有沉重一击的感觉。但这种方式保证了内核广泛的适用性。社区不会为了特殊的用户而做出影响其它团队的变更。这样我们才能够用单一的代码库涵盖从袖珍计算机到超级计算机的具有广泛适用性的代码。

5. 内核的向后兼容性

二十年前内核开发者社区保证如果某个版本内核在某个特定设置下可以运行,其后所有版本内核都将能在此设置下运行。社区会很快解决某个变更导致的回归问题。这条规则向用户保证升级不会影响他们当前系统,而用户也会愿意尝试新内核所带来的新的能力。

6. 公司的参与很关键,但不能让公司主导内核开发

截止到2014年12月3.18版本,共计有5062个开发者代表近500家公司给Linux内核做过贡献。这些开发者是有工资的,他们提交的变更也是为其所在的公司服务。虽然任何公司都可以因其需要而改进内核,但没有公司能够引导内核的开发方向或限制内核的功能。

7. 项目没有内部隔离

内核开发者需要专注在内核的某个部分上,但任何开发者可以就内核的任一部分做恰当的改动。这样内核的问题会在正确的地方被修正而不是头疼医头脚疼医脚。开发者能够将内核视为一个整体,所以即使最顽固的维护者也不能在某个子系统内无限的拖延开发进程。

8. 聚沙成塔

原始的0.01版内核只有一万行代码。现在每两天它就能增长这么多代码。一些极其细微的特性有可能将来会成为很重要的子系统

9. 以上,25年的内核历史表明可持续、合作性的努力可以带来个别组织所无法完成的公共性资源

从2005年到现在,来自1300家公司的14000多个开发者对内核做出过贡献。Linux内核因此成为在其它领域有竞争关系的公司间的广义上的公共资源。

关于内核开发更详细的信息,可以查看2016年Linux内核开发报告


PS:

Linux内核开发者峰会照的全家福
2016峰会全家福

阅读 1.6k

Python与Go
Python与OpenStack相关的方方面面,Go语言,Kubernetes,etcd等等诸子百家
19 声望
1 粉丝
0 条评论
你知道吗?

19 声望
1 粉丝
宣传栏