我最后一次有机会采访Linus Torvalds是在2004年,那时Linux内核的2.6版本刚刚发布。我当时在做一篇题为"Linux v2.6扩展了企业。” The opening sentence was “If commercial Unix vendors weren’t already worried about Linux, they should be now.” How prophetic those words turned out to be.
12年多过去了,Linux已经在计算机世界生活了好几次,现在它已经出现在科技世界的每一个角落。一开始只是一个人的项目,现在涉及到数千名开发人员。在Linux诞生25周年之际,我再次联系Torvalds,看他是否有时间回答一些关于Linux起源和发展的问题,Linux当前开发社区的脉搏,以及他如何看待操作系统和硬件在未来的变化。他欣然同意了。
下面的采访提供了Torvalds对x86的未来的看法,对内核开发的改变,Linux容器,以及计算和竞争的操作系统升级模型的变化如何可能影响Linux。
Linux的起源是在低资源环境中,编码实践必须是精益的。在今天的大多数用例中,情况并非如此。你认为这对内核或操作系统的开发实践有什么影响?
我认为你的前提是不正确的:Linux的起源肯定不是所有的低资源。386是当时你能买到的最强大的工作站,4MB或8MB的内存在今天听起来有点可笑的限制,你会说“一定很瘦”,但在当时它根本没有这种感觉。
所以,我觉得我有记忆和资源,以备后面,甚至25年前,而不是在所有的硬件限制。和硬件不断变得更好,从而为Linux的增长 - 而且,也许更重要的是,随着工作负荷,你可以使用Linux的增长 - 我们仍然没有感受到硬件资源非常受限。
从发展的角度来看,我认为事情并没有太大的变化。如果说有什么区别的话,那就是,当人们试图将Linux放到一些非常小的嵌入式环境(IoT)中时,我们今天的开发人员实际上比25年前的内核开发人员感到更受约束。这听起来很奇怪,因为这些物联网设备往往比我刚开始使用的386更强大,但我们已经成长了(很多),人们的期望也在增长。
硬件约束并不是影响开发实践的大问题,因为硬件是随着我们的开发而成长起来的。但我们确实有过其他影响我们做事方式的事情。
+相关:回顾一下Linux的历程+
Linux是一项“严肃的业务”,这一事实显然改变了您的工作方式——您有更多的规则,需要对发布更加深思熟虑和谨慎。纯的人也彻底改变了你的开发方面:当有几十开发商和我们都可以电子邮件彼此补丁,对各种东西的工作原理不同于当有成千上万的人参与进来,我们显然需要源代码控制管理和整个分布式模型,Git。
在过去的25年里,我们的开发模式发生了很大的变化,但我不认为这是因为硬件的限制。
你觉得现在年轻的内核黑客与20年前的黑客有什么根本的区别吗?
要做到内省和正确的处理是非常困难的。我不认为内核开发者是完全不同的;我认为项目本身的规模和成熟度是更大的区别。
二十年前,内核要小得多,开发人员也少得多。在某种程度上,这可能是更容易进入开发的原因:有较少的复杂性,使您的头脑,更容易脱颖而出,并作出一个大的新特性(相对)大的差异。
今天,要找到一些还没有完成的大特性要困难得多——毕竟内核是一个相当成熟的项目。有大量的开发者已经存在了很长一段时间,所以很难脱颖而出。与此同时,我们有更多的基础设施供新人参与,有更多的驱动程序和硬件支持可以所以在其他方面,事情就变得容易多了。毕竟,今天你可以花很少的钱买到树莓派,并参与到20年前根本不可能的事情中去。
另一件发生变化的事情是,20年前,你接触Linux纯粹是为了技术上的挑战。如今,它很容易被视为一种职业:它是一个有很多公司参与的大项目,从这个意义上说,市场已经从根本上改变了一切。但我仍然认为你最终必须是一个非常有技术头脑的人才能进入内核编程,我不认为种类的人已经改变了,但它有可能意味着那些20年前就走了,“我不能修补玩具项目,然而有趣的可能是,“现在看到Linux作为一个地方不仅在技术上有一个有趣的挑战,也是一种工作和职业。
你是否认为高级解释性语言和相关编码方法的蓬勃发展将吸引有才能的开发人员远离核心的内部操作系统开发?
不,一点也不。我认为它主要是扩大了市场,但是那些对底层细节和与硬件的实际交互感兴趣的人仍然会被像内核这样的项目所吸引。
高级语言主要反应了一定的事实,问题空间(硬件)扩张,虽然像C语言仍然是相关的系统编程(但C这些年发展太),显然有很多地方C绝对不是正确的答案,永远不会。这不是非此即彼的情况(也不是零和游戏);这只是对不同项目所面临的各种问题和资源限制的一种反思。
你认为x86的未来会是怎样的?
我不太喜欢水晶球,但显然有“小型机器成长”的大模式,以及所有的历史比较,个人电脑如何成长,并取代了几乎所有它之上的东西。每个人都在关注嵌入式和手机,看着它们的成长,而个人电脑市场却没有增长那么多。
这是显而易见的故事情节,它让很多人对整个x86-vs感到兴奋。ARM: ARM将会成长并取代x86。
与此同时,也有一些相当大的差异了。其中一个很大的原因电脑长大的,接手的是,它是如此容易对他们的发展,不仅你有整整一代的开发与家用电脑长大的(特别是个人电脑),甚至当你开发那些大机器,电脑最终流离失所的一个,你经常使用电脑这样做。后端机器可能是严重的大铁,但前端往往是一个PC级工作站。
当PC成长起来时,它们很容易取代更大的机器,因为所有这些开发人员都习惯了PC环境,而且实际上更喜欢使用相同的开发环境作为最终部署环境。
这种模式在整个x86-vs中都不成立。手臂比较。事实上,情况正好相反:即使你是在为较小的ARM生态系统开发,你仍然几乎肯定会使用PC(无论是Linux、MacOS还是Windows)来进行开发,而你只是部署在手臂。
在这个非常真实的意义上,与x86 PC如何接管计算世界的历史相比,ARM实际上更像被取代的大型硬件,而不像取代它的PC。
这一切意味着什么?我不知道。我不会看到ARM成长,直到它足够自给自足,而这似乎不会发生。我已经等了十年了,谁知道它什么时候会真正到来呢?
我们可能会遇到这样的情况:针对不同的利基市场,你最终会得到不同的体系结构:用于消费电子产品和嵌入式的ARM,用于PC/工作站/服务器市场的x86。随着IBM永远支持自己的体系结构(嘿,S/390仍然存在,而且功能似乎也不会消失),现实可能没有Thunderdome体系结构(“两个体系结构进入,一个体系结构离开”)那么令人兴奋。
计算机市场已经不像过去那么疯狂了。是的,智能手机的确撼动了市场,但这个市场现在也正在成熟。
你怎么看待目前正在进行的用像Rust这样的语言开发OS内核的项目(吹捧它具有C所没有的内置安全性)?
这根本不是什么新现象。我们有使用Modula-2或Ada的系统人员,我不得不说Rust看起来比两者都好那些两个灾难。
我不相信OS内核会生锈(尽管系统编程比内核多得多),但与此同时,毫无疑问C有很多限制。
对于那些想从头开始构建自己的内核的人,我只能祝他们好运。这是一个巨大的项目,而且我认为您所选择的编程语言实际上并不能解决任何真正困难的内核问题。最大的问题往往是硬件支持(所有这些驱动程序、关于不同平台的所有奇怪细节、内存管理和资源核算中的所有微妙之处),如果有人认为语言的选择大大简化了这些事情,那他可能会非常失望。
对您来说,驱动内核开发的最大优先级是什么:支持新的硬件或CPU特性、改进性能、增强安全性、启用新的开发人员行为(比如容器技术),或者其他什么?
我个人呢?实际上,我最担心的是“开发流程”问题,而不是直接的代码问题。是的,我仍然会涉及一些领域(主要是VFS层,偶尔也会涉及VM),在这些领域我关心特定的性能问题,等等,但实际上,这更多的是我的业余爱好,而不是我现在的主要工作。
我承认发现新的CPU架构特性还是很有趣的——毕竟,这就是我开始Linux的原因,而且我仍然关注它,并且喜欢看到有趣的新事情发生。例如,当看到事务性内存特性时,我感到非常兴奋,即使炒作似乎已经平息了很多。
但实际上,我实际上工作关键在于开发过程本身和维护内核,而不再是代码的特定领域。我阅读电子邮件,我请求,我把事情转移到正确的开发人员,我试着确保发布,人们可以信任我和内核一直在那里。是的,回复记者的邮件也是我的工作。
我(关于)内核开发的主要模型是确保我们得到所有正确的细节,我们有正确的人在正确的事情上工作,没有任何不必要的事情阻碍开发。如果过程运行良好,相关人员也关心质量,那么在某种意义上,最终结果会自行解决。
是的,这显然和我25年前所做的非常非常不同。那时我自己写所有的代码,写代码就是我所做的。现在,当讨论某个问题时,我写的大部分代码实际上都是电子邮件中的伪代码片段。
您认为还需要做些什么来改进Linux容器?
我等待他们更广泛应用——现在他们大多是一个服务器端,很多大公司用来管理他们的工作负载,但所有这些噪音是使用在用户分布,和我真的觉得这样的使用是你最后真的发现很多新的问题和抛光结果。
服务器人员习惯于用一些特定于他们特定负载的怪癖来解决他们特定的问题。相反,一旦你在桌面/工作站环境中使用容器,应用程序发行等都依赖于它,并且每个人都受到影响,你就必须正确处理它。这就是为什么我仍然坚信桌面作为一个非常重要的平台:它是一种通用的东西,您无法解决特定负载的一些问题。
实际上,我希望容器能从云里走出来,可以这么说,并无处不在。我不完全相信这真的会发生,但显然有很多人在努力。
在过去的几年中,我们已经看到微软、谷歌和苹果以前所未有的速度推出了新的桌面和移动操作系统。您对桌面和移动操作系统越来越快的发布周期有什么看法?
显然在内核中我们做我们自己的大版本模型变化大约10年前,我们从多年发布(2.4 - 2.6)更多的滚动发布(新版本每两个月左右,它更多的是“持续改进”,而不是“大新功能”)。