5

Linux 内核的故事

经过 29 年的努力,Linux 内核前不久接受了它的第一百万次提交。有史以来最伟大的开源项目已经从它的“爱好”开始走了很长的路。

作者:Steven J. Vaughan-Nichols
编译:徐九 丨发布自:思否编辑部
原文标题:《Commit 1 million:The history of the Linux kernel》


1991 年 8 月 25 日,芬兰研究生 Linus Torvalds 告诉 Minix 新闻组,他正在开发他的新的免费操作系统,这将“只是一个爱好。”但在 29 年后,Linux 几乎统治了计算机世界。

在 2020 年的 Linux 内核历史报告中,Linux 基金会讲述了从 Linux 内核发布的第一天到 2020 年 8 月 Linux 内核 5.8 发布的故事。

虽然基金会以前发布过几份 Linux 内核历史报告,但这份报告是独一无二的。这是因为,多亏了 Daniel German 博士和他的 cregit 工具,现在可以跟踪所有三个内核的不同开发阶段: 前版本控制,1991 年 9 月到 2002 年 2 月 4 日; BitKeeper,2002 年 2 月 4 日到2005年4月15日; git,2005年4月16日到今天。

Git 与 BitKeeper

如果您是 Linux 的新玩家,您可能不知道版本控制在 2000 年代是一个热点问题。十多年来,Linux 完全没有版本控制系统(VCS)。你可以把你的补丁发布到邮件列表上,如果 Torvalds 接受了,他会把它应用到他自己的源代码树上,然后再发布整个源代码树的新版本。

当时有 VCSs 可用,比如 CVS 和 Subversion,但是 Torvalds 不喜欢其中任何一个协作版本系统。然而,由于社区的压力,Torvalds 最终选择了 BitKeeper。

委婉地说,这不是一个受欢迎的选择。BitKeeper 是一个封闭源代码的商业系统。Torvalds 认为自由软件非常好,但他需要的是尽可能好的 VCS 和 BitKeeper。

多年来,关于这件事情一直在进行着激烈的讨论。最终,Samba 开发负责人 Andrew Tridgell 逆向工程 BitKeeper 网络协议,创建了一个兼容 BitKeeper 的开源 VCS。BitKeeper 的创建者 Larry McVoy 曾经说过,如果有人这样做了,他不会让 Linux 开发者使用他的程序,他也真的这样做了。

这使得 Linux 没有 VCS。作为回应,Torvalds 自己做了一个: Git。但他后来说他其实并不想这么做,“我真的从来都不想做源代码控制管理,我觉得这是计算机世界里最没意思的事情。”

无论无聊与否,十天的工作之后,Torvalds 终于完成了他的工作。如今,git 很容易成为开源领域最受欢迎的 VCS,以及 GitHub 和 GitLab 等编程站点的基础。


说回代码,最开始的 linux-0.01.tar。操作系统 z kernel,后来被称为 Linux,只有 88 个文件和 10,239 行代码,运行在一个单一的硬件架构 i386 上。

之后情况逐渐发生了一些变化。现在的 v5.8 内核中包含 69,325 个文件和 28,442,673 行代码,它运行在超过 30 个主要的硬件架构上。Torvalds 自己说: “5.8 看起来是我们有史以来最大的发行量之一。”

但从第一天开始的一些代码仍然存在于今天的 Linux 中。将输出写入 stdout 的 vsprintf 例程仍然在代码中。Torvalds 说,这部分“是和 Lars Wirzenius 合写的。”这也让 Torvalds 在大学时的朋友 Wirzenius,成为了第一个与 Linux 合作的开发者。

从 1996年1月的 v1.3.68 版本开始,维护者的文件中会列出主要开发和维护内核的开发者。第一版的文档中只有三个维护人员: Alan Cox、 Jon Naylor 和 Linus Torvalds。到了 2020 年的 5.8 版本,已经有了 1501 个维护人员。

当然,要真正深入了解 Linux 内核的历史,您需要查看早期的 Linux 开发邮件列表。Linux 总是在邮件列表上讨论和设计的。“不幸的是,”报告指出,“在 1997 年之前,只有部分讨论记录是公开的,因为 Linux 开发跨越了多个邮件列表和 USENET 组。”

在 Linux 内核的历史中有一件事是很清楚的: 变化来得越来越快。从 2005 年到 2008 年,平均每小时有 2 次提交;到 2019 年,每小时则有了 9.4 次提交。最新的 v5.8 内核,平均每小时提交 10.7 次。

尽管步伐如此之快,Linux 的发布周期已经变得相当可预测。每个发布周期开始于一个两周的“合并窗口”这就是为下一个版本的 git 仓库添加新功能的时候。一旦这个版本被标记为 rc1,集成测试、调试和稳定周期就开始了。多个 rc 候选者被标记,直到 Linus 和他的主要维护人员认为它足够好,足够稳定就可以发布了。之后,循环再次开始与下一个合并窗口。

有个传言一直持续到今天,说 Linux 和其他开源软件是业余爱好者在他们妈妈的地下室里写的。虽然这对于少数程序员来说可能是真的,但是大部分的 Linux 内核开发人员都是在 IT 公司工作。至少从 2008 年开始就是这样了。在那一年,74.2% 的 Linux 内核是由领薪水的程序员编写的。

的确,也存在相当数量的志愿 Linux 开发者。在过去的 12 年里,74.2% 领薪水的程序员当中的 11.95% 开发者都是在“为爱发电”,剩下的 52% 开发者则是由公司和顾问牵头来编写的。

参与人员的比例,从上到下前十名分别是: 英特尔,红帽,IBM,SUSE,Linaro,谷歌,三星,AMD,Renesas,德州仪器和甲骨文。

在某种程度上,由于公司,尤其是 Linux 发行商,如 Canonical,Red Hat,和 SUSE,对 Linux 的健康发展至关重要。

这些内核最初都是稳定的内核,开发人员承诺会长期维护它们。然后,当在稳定的内核中发现 bug 时,它们会被上游修复并回移植到长期发布的内核中。目前,这些是长期内核版本:

Linux 内核的故事

一些 Linux 用户希望看到更长的支持窗口。土木基础设施平台(CIP)正在支持 4.4 和 4.19 版本,作为超长期稳定(SLTS)内核发布。CIP 工作于基础设施的开放源代码,如发电和运输、石油和天然气分配、水和废水管理。这些项目将得到 10 年或更长时间的支持。

在过去的几年中,内核开发人员在自动调试工具上也付出了更多的努力。零日自动测试机器人和华为的 hulk 机器人每天都在 Linux 内核树上运行诸如 spares,smatch 和 coccicheck 之类的静态分析工具。模糊测试器(例如 Trinity 和 syzkaller)也变得越来越流行。最终结果将是 Linux 的代码比以往更干净。

Linux基金会指出,“内核社区的重点是保持一个共同的目标,即拥有一个没有退化的高质量操作系统,愿意根据需要创建新的流程和工具来帮助他们提高效率。”在当今最大的科技公司的支持下,Torvalds 及其成千上万的同事已经成功实现了这一目标。

对于“只是一个爱好的操作系统”来说还不错。

segmentfault 思否


阿遂
10k 声望906 粉丝

老编辑,深夜撰稿者。