“开发Linux是业余爱好”?内核开发者:这是Linus唯一的错话,曾被忽视、嘲笑的OS打破“未来全是Windows”的幻想!

作者 | Jonathan Corbet

整理 | 苏宓

出品 | CSDN(ID:CSDNnews)

1991 年,Linus Torvalds 发布 Linux 内核时曾说,这只是我的“业余爱好,不会像 GNU 那样大、专业”。

结果呢?

三十多年过去了,现实证明他“错”了:Linux 如今不仅庞大而且高度专业化。而要说 Linux 是如何一步一步走到今天的地位的?

不久前,在欧洲开源峰会(OSS EU)上,Linux 项目的资深内核开发者 Jonathan Corbet 就用他独特的视角,回顾了 Linux 这段不可思议的成长历程。Corbet 的演讲尤其难得,因为真正从 Linux 早期一路参与到现在、又愿意站出来讲清楚的人并不多——Linus 自己就不爱做公开演讲。

Corbet 回忆说,早期的 Linux 可没有今天这么光鲜亮丽,他最初只是旁观者,直到 1995 年才动手安装尝试。那会儿,Unix 还被认为是未来操作系统的主角,尤其是各家专有 Unix 系统。可惜,各厂商各搞各的版本,漏洞多、体验差,把整个市场弄得乱七八糟。与此同时,微软正快速崛起,上世纪 90 年代初的普遍共识是:“将来全是 Windows”,不仅桌面,连服务器、移动设备也都逃不掉。

正是在这样的背景下,Linux 以开放的姿态出现,打破了传统软件开发模式,也逐渐走出一条自己的传奇道路。

接下来,我们将通过 Jonathan Corbet 的分享,看 Linux 发展的这 34 年。

以下为演讲全文:

三十四年前,林纳斯·托瓦兹 (Linus Torvalds) 发布了一则简短的公告,说他正在开发一个免费的操作系统。他说,这个系统不会像 GNU 那样“庞大和专业”。然而,自那以后,故事的发展却出乎意料。

这张图展示了这些年来内核代码的规模变化。

我想我们可以得出一个结论:林纳斯·托瓦兹说错了,而且这恐怕是有史以来唯一一次。Linux 确实变得既庞大又专业。

但我想请大家注意这条持续上扬的曲线。它的增长势头从未间断。尽管在这 34 年里,世界上发生了许多你认为可能会产生影响的大事。比如,2000 年我们经历了互联网泡沫破灭;之后又遭遇了 SCO 公司的诉讼风波;2008 年,全球金融危机以各种方式搅动了世界;近些年,我们还共同度过了新冠疫情最艰难的时期。但如果你观察这些事件,会发现它们对 Linux 内核的开发进程几乎没有造成任何影响。图表上看不到丝毫波澜。

所以,我真正想探讨的问题是:我们是如何建立起一个如此强大且能持续发展的社区的?我们在此过程中学到了哪些经验教训?为了阐述这一点,我将引用圣雄甘地那句名言:“首先,他们无视你;然后,他们嘲笑你;接着,他们攻击你;最后,你赢了。”

第一阶段(1991-1998 年):被无视的岁月

我们是从“被无视”开始的。回到最初的那些日子,在林纳斯发布公告后不久问世的第一个 Linux 内核版本,大约只有一万行代码。它缺少一些现在看来至关重要的功能,比如图形界面、网络连接能力、多进程支持,而且它只能在基础的 x86 处理器上运行。

换句话说,当时的内核只是一个“玩具”。你可以拿来摆弄,试着去改进它,但绝对不会用它来做什么正经事。因此,它很容易被人忽视。

那时我们看到的,正是美国作家克莱顿·克里斯坦森(Clayton Christensen)提出的“颠覆性创新”理论的一个真实例子。克里斯坦森的意思是:当一项新技术刚出现时,它通常比现有技术差得多,所以没人会认真对待它。但有一天,你会突然发现,这项技术已经悄悄成长为比原有技术更强大、更有竞争力的存在。

当时,Linux 之所以长期被忽视,还有几个外部因素在起作用。

一是,Linux 的诞生正好赶上了 Unix 操作系统逐渐衰落的时期。那时,人们似乎普遍认为,像专有 Unix 这样的系统将是未来的主流操作系统。然而,Unix 曾经非常流行,但每个 Unix 厂商都各自为战,开发出自己的版本,并用自己独特的方式把它弄得 bug 丛生、糟糕透顶,最终把整个市场撕得粉碎。

二是,微软正在迅速崛起。在 20 世纪 90 年代初,几乎所有人都认为,未来计算机世界将由微软的 Windows 操作系统统治——不仅仅是个人电脑,还包括服务器、移动设备等。普遍观点认为,只有大型公司才有能力开发操作系统内核,而像 Linux 的创始人林纳斯·托瓦兹(Linus Torvalds)那样被描绘为“在地下室写代码的程序员”,根本不可能改变这个局面。

所有这些因素,都让 Linux 在很长一段时间里没有进入主流视野。在许多圈子里,它一直被忽视,直到大约 1998 年才迎来转机。

那一年,网景公司(Netscape)宣布放弃浏览器市场的商业竞争,并将其浏览器的源代码向全球公开。这在当时几乎是闻所未闻的举动。“开源”(open source)这个词还没广为人知,但这一事件让整个行业开始意识到:原来软件的源代码可以公开,任何人都可以查看、修改甚至贡献代码。

这件事引发了一系列连锁反应,许多管理者开始去问他们的技术人员:“我听说了那个叫 Linux 的东西,你知道吗?”而技术人员的回答是,他们早已在公司的各项业务中运行着 Linux。因为在基层,大家早就理解了它的价值,并到处部署它——因为它免费、易于部署,并且切实可行。就这样,Linux 突然之间成为了众人瞩目的焦点。

这也让 Linux 所使用的开发流程浮出水面。虽然自由软件运动的代表人物之一埃里克·雷蒙德(Eric Raymond)本身有争议,但他指出了一个核心问题:Linux 的开发方式与以往任何项目都不同。无论是与当时的专有软件相比,还是与自由软件项目(如 GNU 项目、X 联盟、BSD)相比,那些项目都以一种非常中心化的方式运作。只有一小群人能够真正地接触软件、做出决策,然后时不时地发布一个版本供其他人使用。而 Linux 则向所有人开放。

林纳斯会接受任何人的补丁,没有任何门槛。任何人都可以提交自己的代码。当然,并非所有的代码都会被采用,也并非所有代码都有用,但那是一个截然不同的环境——一个更加活跃、更具参与感的环境,而且能带来更即时的满足感。因为如果你足够幸运,你提交的代码很快就会出现在下一个开发版本中。

这种模式让 Linux 社区以前所未有的方式发展壮大,这是其他社区所不及的。在那个时期,BSD 系统客观上是比 Linux 好得多的操作系统,它们更成熟、更有用。但 Linux 很快就超越了它们,这很大程度上要归功于它独特的开发流程,这个流程建立了一个与众不同的开发社区,吸引了更多人的加入。

由此可以总结出一个重要经验:你的开发流程决定了项目的成长潜力。你如何组织项目、如何接受他人的贡献,将直接影响项目的成功与否。

开发流程之外,许可证的选择也至关重要。Linux 采用了 GNU 通用公共许可证(GPL),这种“Copyleft”许可证鼓励所有人共同维护一个统一的版本,避免代码碎片化(即产生大量不兼容的分支版本)。此外,每个贡献者都保留自己代码的版权,这让个人或公司无法随意干预整个项目,贡献者也因此更安心地提供代码。这一点和流程一样,对 Linux 的成功至关重要。

另一个特点是,Linux 内核开发者只专注于内核本身,而不涉及用户界面、应用程序等其他部分。当时大多数操作系统的管理方式是,开发者需要负责从内核到面向用户的工具等整个系统。而 Linux 内核的开发者只管内核,把其他所有部分都留给了别人。这样,其他开发者和公司就可以在用户空间或发行版(distributions)领域进行创新,和内核开发并行推进。这个“模块化”的设计,使得并行开发和创新成为可能,也是 Linux 长期保持活力的重要原因。

最后,我想提一下“贝奥武夫集群”(Beowulf clusters)。这是一个革命性概念:你拿一堆廉价的普通个人电脑,装上 Linux,再用你能找到的最快的网络把它们连接起来,你就得到了一台超级计算机。当时很多人嘲笑这个想法,认为超级计算机必须是昂贵的大型机。但随着时间发展,这种架构最终得到了广泛应用——只是名称换成了“数据中心”。这也展示了 Linux 和开源软件的潜力:用创新的思路和普通硬件,也能实现过去只有大公司才能做到的事情

第二阶段(1998-2003 年):被嘲笑的时刻

当他们无法再忽视我们的时候,他们选择了嘲笑。事实也确实如此。

我们看到微软发布一些颇具讽刺意味的广告,暗示 Linux 不可靠、不稳定;还有一些自诩“受人尊敬”的行业分析师说:“当然,你可以向老板推荐 Linux,但前提是你清楚自己承担的风险,而且最好不介意被解雇。”

然而,在嘲笑声之外,也出现了转折。Linux 发展的另一个关键节点到来了:英特尔宣布将投资红帽公司。这向整个行业发出了明确信号——Linux 不是昙花一现,它有未来,而且会得到重要公司的支持。不久之后,IBM 也宣布向 Linux 投资十亿美元。商业世界的大门开始为 Linux 打开。

这也带来了新的问题:如何在内核社区与企业之间建立合理的合作规则?我们开始看到开发者能够通过 Linux 找到真正的工作机会,这在此前几乎是无法想象的。有些开发者进入公司后便消失在社区里,但也有很多人设法继续参与。公司开始采用 Linux,例如我有幸接触到被认为是首款嵌入式 Linux 产品的 Axis 网络摄像头。那时,关于 Linux 驱动程序的电话讨论异常热烈,许多人嗤之以鼻,认为这是不可能的事情。但如今,几乎每个人的口袋里都有运行 Linux 驱动的手机。

但真正让 Linux 进入高速发展的还是商业采纳。当时一个被视为笑话的事件是 VA Linux Systems 公司的首次公开募股(IPO),上市首日股价涨幅创下新高。之所以被看作笑话,是因为很多人仍然认为 Linux 没有收入模式,无法围绕它赚钱。但这件事预示着互联网时代的变化:资金如雨点般涌入自称为“Linux 公司”的企业。新闻稿层出不穷:“我们是 Linux 公司,快来投资吧!”公司如雨后春笋般涌现,开发者找到工作,那是一段狂欢般的时光。

不过,泡沫终究会破裂。资金消失,许多公司倒闭,我们必须重新思考:如何围绕 Linux 建立可持续的生态系统,一个不依赖“天降资金”的生态系统。虽然那段时间需要深刻反思,但回看开篇的图表会发现:尽管资金消失,许多公司倒闭,开发节奏并未减慢,甚至加快了。

这印证了一个核心观点:Linux 的生命力在很大程度上独立于任何公司。

它不被任何公司拥有,也不受任何公司控制。大多数 Linux 内核开发者始终把内核放在第一位,企业利益放在第二位。他们即便换工作,也继续贡献同样的代码。这种独立性让 Linux 在行业环境剧烈变化的多年里依然强大。我相信,只要保持这种状态,未来依旧会如此。这是 Linux 一个非常重要的特质,也是许多自由软件项目所不具备的。

在这个时期,还有一件关键事件发生:2001 年的第一届内核峰会。对许多人来说,那是第一次面对面见到长期合作的同事。我们已经在一起工作了十年,却从未见过对方模样。峰会上,我们讨论了各种技术问题,交流了许多宝贵经验。但我认为,最重要的收获是:我们开始真正相互了解,学会如何更好地合作。这也充分证明了线下会议的重要性。Linux 社区成员遍布全球,平时不常见面,但偶尔聚在一起面对面交流,甚至喝杯啤酒,协作效率会显著提高。

第三阶段:战斗与抗争

他们不再嘲笑我们之后,下一个阶段自然就来了。是的,他们确实与我们战斗。我们听到当时的微软 CEO 说:“Linux 是癌症,会附着在它接触到的一切事物上。”我们也听到 Sun 公司的 CEO 说:“Linux 在服务器领域毫无用武之地。”——这句话后来被证明完全错误。

但我们的战斗并不仅限于舆论战。另一条战线发生在硬件领域。WRT54G 是一款小型家用互联网路由器,最初由 Linksys 推出,后来被思科(Cisco)收购。它们在设备中使用了 Linux,并做了一些有趣的改进,使网络功能更加强大。然而,它们违反了 GPL 许可证的要求,即使在被要求后也没有及时发布源代码。许多人为此付出了巨大努力,最终才促使这些源代码被公布并整合到 Linux 中。其结果之一是,如今几乎找不到不含 Linux 的互联网路由器,这帮助我们在整个领域取得了主导地位,也推动了网络协议栈的改进。

我想再次强调一点:许可证真的非常重要。

如果 Linux 使用的是一种宽松的许可证,我们就没有杠杆迫使思科交出源代码。类似的故事发生过很多次,许可证的选择能带来巨大的差异。

当然,如果谈论那个时代的战斗,就不能不提一场标志性的官司——SCO 诉讼。SCO 公司的达尔·麦克布莱德,穿着牛仔靴,站在全世界面前声称 Linux 包含了数百万行从他和公司“偷来”的代码,因此 IBM 欠他 50 亿美元。IBM 当然不同意这一指控。

这场官司一度给整个行业蒙上阴影,非常吓人。我们当时真的不知道结果会如何。但最终,结果非常好,甚至让我们比之前更强大。

为什么?我常说,我们很幸运,被一群“傻瓜”攻击了。如果他们真的拥有他们自以为拥有的东西,有理有据,并且选择了更合适的目标,他们本可以制造麻烦。但他们全都做错了。他们输了,但在此过程中,我们学到了几堂重要的课。

最重要的一点或许是:自由软件不是被盗的代码。

在那段时间,Linux 的代码库被置于显微镜下,其审查程度无论之前还是之后,都几乎无人能及。面对数十亿美元利益的诱惑,人们极力寻找所谓被盗的代码,但结果是——一行也没找到。这清楚表明,参与自由软件开发的人不是为了窃取代码,而是为了解决问题,创造出最好的成果。这比我们自己重复一万遍声明更有力。自那以后,再也没有人对 Linux 提出类似的版权指控,因为事实已经令人信服地证明,这种指控根本站不住脚。

另一个教训也很重要:如果你有一个重要项目,你需要律师。

如果你创造了有价值的东西,迟早会有人试图夺走它,迟早会遇到监管问题。律师不可或缺。我们当时没有律师,但现在有了,情况也好很多。无论愿不愿意,这是无法避免的。

另一条战线是 BitKeeper。当时,BitKeeper 已经成为我们开发流程的关键工具。没有人想离开它,因为它让流程远比以前高效。但它不是自由软件,这导致了创造者与社区之间的摩擦。2005 年 4 月,它的许可证被突然撤销。几乎一夜之间,我们失去了让整个流程运转高效的工具,一切停滞不前。

这种状态持续了大约一周。随后,林纳斯利用一个周末开发了 Git。当时 Git 很粗糙,但随着时间推移,它不断完善。没多久,我们的工作效率甚至超过了以前。我们不仅自身变得更强,整个软件开发世界也随之发生变革。

这带来的教训是:开发工具至关重要。

内核社区在发展过程中对工具的投入一直不足。毕竟,我们在头十年里没有源代码管理系统。我们一次又一次看到,对工具的投资回报巨大。我希望在未来,我们能在这方面投入更多。

另一个教训是:专有软件是不稳定的基础。

如果依赖别人的平台,就会受制于他们的意愿,他们迟早可能利用这一点对付你。这是我们曾经犯过的错误,从此再也没有重蹈覆辙。我希望在即将到来的 AI 时代,我们不会再犯类似的错误。

第四阶段:赢得胜利(但尚未功成)

然后就到了所谓的“你赢了”的阶段。但实际上,我们并没有真正结束,也永远不会真正结束。仍有一些问题需要解决。

首先是开发流程。它仍未达到我们需要的理想状态。长期以来,Linux 采用的模式是:奇数版本号作为开发版,所有新功能都在此加入,你可以随意“破坏”东西;偶数版本号则作为稳定版发布,供生产环境使用。这种模式导致了我之前展示的那个稳定版发布间隔越来越长的表格——我们实际上没能按时发布稳定版。

问题在于一个恶性循环:代码交付给用户的时间被延迟。你有大量已开发完成的代码,但因为稳定版还没发布,用户无法使用。结果是巨大的“补丁压力”(patch pressure),开发者都想把代码合并到当前开发版中。虽然版本名义上处于“特性冻结”状态,实际上并没有冻结——因为准备好的新功能仍然被塞了进去。这破坏了冻结机制,进一步推迟稳定版发布,循环往复。整个流程因此变得低效,代码不断堆积,成果无法及时交到用户手中。

然而,到了 2005 年 6 月中旬,情况发生了重大变化。在 2004 年底渥太华一个阴暗地下室举行的内核峰会上,我们讨论是否该创建 2.7 开发版。最终的答案令在场的每个人都吃惊:不,我们不再这么做,而且以后也不会再这么做了。我们要彻底改变开发模式。

我们最终确立的新模式是,不再有奇数/偶数版本之分。我们发布的每一个版本都是一个带有新功能的主版本、稳定版本。而且我们要快速地发布它们,让整个流程运转得更快,把新东西尽快送到用户手中。

我们花了好几年时间才摸索出如何把它做好。现在我们已经进入了一个运转良好的世界:每个开发周期都从一个为期两周的“合并窗口”开始,我们在这期间引入所有的新功能,通常会有超过一万个变更被合并到内核中。那是一段相当忙碌的时间。然后,我们会花七到八周的时间来稳定它。这个流程现在运转得非常好,每个版本的发布周期都是九到十周,你可以据此校对你的时钟。在过去的 15 年左右,只出现过两次例外。一次是 4.15 版本,因为我们不得不为刚刚披露的“熔断”(Meltdown)和“幽灵”(Spectre)硬件漏洞整合大量的缓解代码,这打乱了我们的开发周期。另一次是 3.1 版本,因为我们的主开发仓库网站被黑客入侵了。只有这种级别的“地震”事件,才能推迟一个内核版本的发布。否则,我们的流程已经平稳到一切都能顺利进行。

由此得出的教训是:尽早集成变更。不要等到长期稳定版截止日期才合并代码,把变更尽快交付给用户。否则,所有东西都会堆积,流程无法持续。

此外,开发周期的另一部分是稳定版发布后的“稳定版更新”。我们不会发布完就忘记它,而是在发现问题时持续修复。修复数量庞大,可能数以万计。找到并修复这些 bug 需要时间。真正稳定的版本需要时间沉淀,但这项工作必须与功能开发并行进行,不能像早期那样试图把两者串行化,否则流程会陷入混乱。

在 2004 年那次会议上,内核开发二号人物安德鲁·莫顿(Andrew Morton)的演讲也非常重要。他呼吁业界停止在内核层面差异化产品,不要发布带有自己特殊功能的内核,而是把所有功能贡献到主线内核(mainline kernel),将所有开发力量集中在那里,在更高层面进行产品差异化。业界基本采纳了这一建议,除了少数例外。这就是我们现在所说的“上游优先”(upstream first)原则。我们把所有代码都放到主线内核里,使每个人都能共同改进、使用和维护它,为所有人创造更好的内核。

另一个长期挑战是硬件供应商对 Linux 的支持不够热情,尤其是显卡驱动等复杂硬件,通常由专有软件驱动。2007 年,AMD 改变方向,宣布开源驱动,这是一个分水岭。这证明了我们多年来默默奉行的一个模式是正确的,那就是与公司进行耐心的接触,努力让他们转变观念。我们社区中有些人(包括我自己在内)曾主张对那些不遵守 GPL、不与我们社区合作的公司采取更具诉讼性的方法。但事实似乎是,解决这个问题的办法是持续向这些公司施压,与他们对话,与他们内部的人交流,交朋友,然后慢慢地让他们转变。如果你花足够多年的时间去做这件事,你最终得到的不仅是一家发布了一些代码的公司,更是一家从此以后都参与到社区中,真正成为社区一部分并帮助我们的公司。我认为这是 Linux 多年来能够成功的一个非常重要的原因。

另一个重要时刻是 2011 年,kernel.org 网站被黑客入侵。当我们的主代码仓库服务器被攻破时,很多人都担心可能发生了什么。幸运的是,入侵者只是一些脚本小子,他们根本不知道自己拿到了什么,否则情况可能会更糟。我们修复了问题,渡过了难关,但它让我们明白了一个直到那时我们才真正理解的重要道理:你的开发基础设施需要专业管理。它不能是几个开发者在业余时间做的事情,否则你就会遇到这样的问题。感谢 Linux 基金会,我们现在有了专业管理的基础设施,它运行得非常好,我们再也没有遇到过这类问题。

最后,来看一个案例研究:2004 年底,实时抢占(real-time preemption)项目第一个补丁出现。这个项目旨在为 Linux 内核带来真正的确定性实时响应。这是从未在通用操作系统内核上实现过的事情,很多人都断言这永远不可能做到。好吧,这确实花了一点时间,确切地说是 20 年。但在去年九月的维也纳,这个项目的最后一个拉取请求(pull request)以纸质版的形式亲手交给了林纳斯·托瓦兹,他欣然接受了。这个项目被宣布完成。

我想强调的是,我们有能力执行这种长期的项目,这在自由软件或专有软件世界中都相当罕见。我认为没有多少公司能做如此长期的事情。我们能做到,是因为我们的项目独立于任何特定的公司,真正独立于任何人在任何特定公司的具体工作。我们可以将注意力集中在这样的事情上长达二十年,并利用这样的项目为所有人带来长期的改善。这正是 Linux 内核 34 年后依然存在的原因之一,也是我期望并希望它在未来 30 年依然存在的原因。

未来的挑战

Linux 如今已经无处不在,我们的开发流程也运转得相当顺畅。每年都有四五千名开发者参与贡献,提交的补丁数以万计。

听起来是不是一切都已经完美了?当然不是。

我想分享一些我认为仍需改进的方面。

首先是多元性。内核社区那种“狂野西部”的名声,在今天已经被过分夸大了,并不完全准确。或许 20 年前确实如此,但现在已经不同了。如今,我们是一个完全相互尊重的社区。

不过,事实仍然很直接:这是去年的维护者峰会照片。可以公平地说,虽然这些人都是非常好的人,但我们并不是一个特别多元化的群体——甚至在穿着上都差不多。我认为,我们错失了人类大部分成员的贡献。有很多人能够为我们带来新鲜的视角和力量,这是我们需要想办法解决的问题。这并不容易,但必须去做。

其次是维护者的支持问题。很多公司喜欢雇佣维护者,但他们并不真正愿意为维护工作本身付费,而是希望维护者去做其他事情。因此,仍有大量维护工作是在业余时间完成的。结果是,维护者面临过大压力,容易倦怠,这对社区和软件本身都不利。我们必须找到更好的方式来支持他们。

再谈开发工具。我依然认为,我们在这方面的投入不足,需要做得更好。尤其是随着新一轮基于人工智能的工具出现,我们必须考虑如何将它们整合进内核社区。围绕这些工具的使用,以及它们将如何改变开发流程,存在很多严肃问题,但这是必须面对的挑战。

最后,是关于编程语言的选择。在 1991 年,选择 C 语言来开发一个新的内核是明智之举。但到了 2025 年,这已经不是最佳方案。C 语言带来了各种安全问题和 bug,而使用更安全的语言则可以有效规避这些风险。我相信,如果不改变这一点,将越来越难吸引新一代开发者加入。

因此,看到 Rust for Linux 项目的进展,我感到非常高兴。虽然在内核中它仍名义上是实验性项目,但现在几乎没有人会认为这个实验会失败。我相信,Rust 将成为未来 Linux 开发的重要组成部分,也是我们在未来几年取得成功的关键。

整理自:
https://www.youtube.com/watch?v=LS2LGMRzE1I

展开阅读全文

更新时间:2025-10-09

标签:科技   错话   开发者   内核   幻想   未来   代码   公司   项目   流程   版本   社区   时间   维护者

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020- All Rights Reserved. Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302035593号

Top