编者按:本文作者Glyn Moody是一位技术书籍作家。他曾著有《反叛的代码:Linux和开源的革命》(Rebel Code: Linux and the Open Source Revolution),这是一本纪录开源软件运动的著名黑客访谈集。十年后Glyn再次采访Linus,此时的他已经不是当时那位说出“talk is cheap, show me the code”的不羁黑客。今天,Linux的新角色是什么呢?

enter image description here
作者/ Glyn Moody
翻译/ 盼盼姐

我在Linux发展的早期就有幸采访过Linus,那是1996年的时候,当时他还住在赫尔辛基(在旧版“连线”杂志的人物中可以读到这篇文章)。当时正是他人生的关键时期,既是他个人的(他第一个孩子刚刚出生),也是事业上的。他当时正要加入Transmeta这家芯片设计公司,这事虽然没成,但是他却移居到美国,直至今日。

如今他来欧洲的机会已经很少了,而我借着他将在巴塞罗那的LinuxCon欧洲2012发表演讲的机会再次采访了他,我们回顾了Linux内核发展的一些关键点以及上次交谈以后社区的进展。

Glyn Moody: 回顾过去15年,你觉得在内核发展方面有什么关键性的进展?

Linus Torvalds: 对于我来说,头等大事就是我们所有关于扩展性的工作。我们已经过了3、4台CPU就过得去的时期,现在也许4000台才是个坎儿,但是大多数时候内核并不是瓶颈。如果你的工作负载相对稳定,我们的扩展性已经做得相当好。这是在付出很多努力之后的成果。

有几百台CPU的时候,SGI在扩展性方面就能派上用场。他们最开始的补丁无法合并,我们无法在普通PC上利用他们的工作成果,因为它的基础构造就是为了服务于上千台CPU的。当你只有一两台的时候,就太昂贵了。

我最担忧的其实是为大型机准备的高性能内核,这些的源代码和普通内核是分开的。人们为了保证代码基的简洁性已经花费了很多精力,这样在编译的时候就可以说:我需要能为4000台CPU服务的内核,由此生成代码,如果你拒绝的话,那我需要可以为2台CPU服务的内核,同时同样的源码来编译。

回顾起来这是相当重要的一点,因为这让源代码变得更好了。所有SGI的努力以及统一源代码的成果都被清洗了一遍,因为它在一百台CPU上行不通,所以这是无法避免的。而且,这也让内核的可维护性变得更好了。现在对于台式机来说,8到16台CPU都是很正常的,以前扩展到8台就是个门槛,现在则完全不在话下。

但是也有其他重要的事情。我们在另外一端也花费了数年的时间,手机使用者已经清楚地意识到他们的hack丑陋不堪,特别是那些在ARM微处理器上为了节省电量所做的努力。我们花费数年时间在总体的电源管理上,以及移动电话适用人群关注的一些设备,我们努力将这些融入到内核中来。我们用了5年时间才使得电源管理系统派上用场,因为这涉及到一套完整的体系。

通常来讲如果添加一个设备,并不会影响到其余的内核,但是电源管理是个例外,它会影响到所有的上千台设备的驱动。它影响到核心功能,如关闭CPU,调度机,以及包括虚拟机在内的所有东西。

还不只是影响,它甚至还有毁掉所有东西的可能,这些都让人很痛苦。花费了那么多时间,我们其实只向前挪动了两步,还倒退了一步,因为虽然这步是一个显著的提高但是却毁坏了我们的机器。所以退回的一步完全用来修补被破坏了的设备。

从现实角度考虑,大部分的发布都只是关于驱程序的工作。这其实挺无聊的,驱动程序的本质就没什么意思,它只是为了支持其他芯片集,毕竟,这些东西都是内核的柴米油盐。大部分的内核其实就是驱动程序,所有我们看起来又酷又炫的工作,在为了支持新硬件而做的努力面前都黯然失色了。

架构、社区,以及Linus的角色

Glyn Moody: 为了支持新硬件有什么架构方面的重大变革吗?

Linus Torvalds: USB的堆栈被重新改写了几次,就是因为一些新用例的产生,我们觉得原来的USB子系统没有把这些考虑进来。USB3.0也需要新的主控制器来支持,而这些东西带来的差异足以让我们更改核心堆栈,以使得其在不同版本上都能使用。这些改变不只限于USB,也包括PCI,PCI变成了PCIe,这时候热插拔又出现了。

这就是传统Linux和传统Unix的一点不同。如果你有一个Unix工作站,启动它之后,它就不会变,因为你不会增加设备。现在人们对于增加USB设备都习以为常了,但是过去可不是这样的。为了实现热插拔设备,我们几乎更改了所有的基础构造,为了与时俱进。

Glyn Moody: 内核社区现在的发展怎么样了?

Linus Torvalds: 过去,我们的社区是比较扁平的。我也不知道什么时候开始了这样的改变,过去只有我和大约50个左右的开发者,现在这里划分了好多等级。补丁要到我这层估计要经过4层左右的人。我们大概3个月会发布一次,每次发布都会牵涉到1000人左右。而这些人中的一半大概只提交了一行不太重要的代码,有些人就是这么工作的,而且以后也再没啥贡献,这其实也挺好的。你想想如果涉及1000人的话,而有一些只是打酱油的,不可能要求我把每个人提交的补丁都过一遍。我没这么多时间和这么多人打交道。

有些人比较擅长驱动器,有些人又特别擅长于特定的驱动器领域,他们就要和开发独立驱动器或者提交补丁的人打交道。我所看到的补丁大概就要经过这些层,虽然有时候是4个,但是经常是2个人。

Glyn Moody: 那你的角色现在是什么样的?

Linus Torvalds:最大的改变莫过于我不再读代码了。当一个补丁已经至少经过了两个人的时候,我就可以看着这个补丁说:你们所有工作都白费了,我在这个层面进行微管理——说实在的,我不想这么做,我也没有能力这么做。

所以大多数时候,它们(补丁)经过子系统的主要维护人员,这些人都是我信赖的人,我和他们共同工作长达5年,10年,甚至15年,所以我连代码都不用看。他们会给我一个很高等级的概述,告诉我这就是做出的变更。他们可能用5行内容告诉我什么改变了,然后给我一个diffstat告诉我在文档中改变了15行左右,在文档中改变25行意味着diffstat可能要有上百行,因为有几百个文档都发生了改变。所以我不用亲自面对代码,就可以说这些变更可以执行,顺便说一句,我很信任你。然后这些就会执行起来。

Glyn Moody: 那你现在的角色是?

Linus Torvalds: 从广义上说,我是在管理人。并不是后勤方面——我并不给任何人发工资,也不担心他们会进入到不应该的硬件中。大部分时候我在人们产生争议或摩擦的时候介入,或者当bug出现的时候。

bug无时无刻不在产生,而人们不知道该找谁,所以他们就会把bug报告发送给Linux内核邮件列表,几乎没有人能面面俱到地阅读这些。如果在邮件列表中没有人能搞明白的话,他们就会开始轰炸我,并且说:这机器怎么不工作了呢?虽然我已经不读代码了,但是我知道该找谁,所以最终我会作为这个bug报告的牵线人出现。这就是我现在干的,整天整天地读邮件。这也挺好的,我也乐于做这些事,但是这和我曾经所做的已经大相径庭了。

其他工具?平板和云

Glyn Moody: 这是否意味着你会写出其他像Git一样的工具,用于管理人,而非代码?

Linus Torvalds: 我目前没有这样的打算。也许会有新的工具产生,但是实际讲,我现在所做的都是和人打交道。我们有用于人员管理的工具。这些工具的作用就是:我们知道是这部分代码出了问题,谁最后接触了这些代码,谁是这个子系统的维护人员,因为整个系统牵涉的人太多,不用自动化系统来处理这件事是行不通的。但是多数时候工作内容都是与人接触,不同人有不同的工作方法,过度依赖自动化装置对于人来说也是不合适的。

我们现在干得不错。10年前那种痛苦纠结的时刻已经没有了。那都是由于以前的扁平结构造成的,而现在我们改进了工具,改变了工作流。并不是只有我,整个内核没有一个人不在这种工作流程下工作。

我会收到海量的邮件,但是我并没有被这些邮件淹没。我喜欢在旅行的时候通过手机读邮件。甚至在休息的时候我也会读邮件,因为其中90%我只需要把它们存档就可以了。除此之外不用做任何事,抄送给我的邮件很多,告知我现在发生了什么事。所以在旅行时,我就可以做90%的工作,甚至都不用电脑。晚上回到宾馆,我会把剩下的10%解决掉。

Glyn Moody: 16年前,你说过你做的很多事都是由外在世界所推进的,现在大家对平板和移动这么关注,这些对内核的发展有什么影响?

Linus Torvalds: 在平板领域,很大一块问题来源于电源管理,因为平板比手机要大。它们的电池更大,人们期待平板的电池待机更长也想要更大的屏幕,而这两点是矛盾的。在内核方面,从硬件角度和使用角度来说,平板和手机是非常相近的,而这方面我们是有些经验的,因为毕竟有Android。

平板的用户界面有一些让我们纠结的问题——但是那些和内核离得比较远。在手机上,浏览器通常不是一个完整的浏览器——过去都是专用的移动浏览器;但是在平板上,大家都期待有一个完整的浏览器。所以关于平板的大部分问题都是在用户空间方面的。在手机内核方面我们确实有很多问题,但是大部分问题也是平板共有的。

Glyn Moody: 关于云计算呢?这些对内核有什么影响呢?

Linus Torvalds: 最大的影响在于,在云计算条件下,甚至服务器端,人们都更加意识到能量功耗的问题。过去,所有关于能量功耗的问题都是在嵌入式人员以及手机这里发生的,而在最近3-4年,服务器端的工作人员也意识到能量的问题。因为太多的机器被聚在一起;而经常来讲,使用还有峰值。如果研究亚马逊的话,你就会发现他们峰值使用量是通常状态下的好几个数量级。比如说在亚马逊的销售方面,11月末和12月的时候,圣诞节的一个月以前,他们的工作量和整年的工作量差不多。问题是他们要为这样的峰值扩展硬件基建,而平时只能用到这些能力的十分之一。所以不用每时每刻都使用能量是很重要的,因为电力对于这些巨大的服务器来说是很大的消耗。

亚马逊、Google,以及邮件

Glyn Moody: 亚马逊加入到内核的工作中来了吗?

Linus Torvalds: 亚马逊不是一个很好的例子,其实Google更合适,因为他们雇了一堆内核工程师。多数时间,Google自己就能解决问题。我觉得亚马逊面临的问题更多的来自于标准配件。事实上他们已经改变了构建硬件的方法——他们现在自己有自己的硬件参考设计。他们以前都是从惠普和戴尔那里购买硬件的,但是到头来如果你发现你需要购置一万台机器的时候,还是自己设计起来更简单,你就可以和设备生产厂商说:我就要台这样的。但是他们只是最近才开始这样做。

我不知道是亚马逊有些落伍了,还是Google太以科技为核心了。亚马逊在用户空间方面做了不少工作,他们的内核是很标准的。而Google的工作核心更偏重于内核,他们做了自己的文件系统。他们以前也是自己做硬盘的驱动,因为他们对此有一些特殊的要求。

Glyn Moody: Google在内核方面的工作对你们有用吗?

Linus Torvalds:有几年时间,甚至是5到10年时间,Google都是一个黑洞。他们自己雇用内核工程师,而且会突然消失得杳无音信。他们在Google内部工作,然后从此再也没有人听说关于这些人的事,因为他们做的都是专属于Google的东西,而Google又没有什么相关的反馈。

这些现在都已经极大地改变了,可能是因为Google在我们发布的2.4版上呆的时间太长了。他们在上面干了好几年,因为为自己专属硬件定做的内部修改实在是太多了,所以升级内核对于他们来说是个大问题。一部分也因为整个的Android工程,他们也想在上游区域更加活跃一些。

现在他们更活跃了,人也不会突然消失了。事实说明内核也更好了,因为很多问题都是细枝末节上的而不再是巨大的缺口了。他们现在已经平易近人多了,只是在标准内核上做一些小改动,而不是为了适应自己的基础设备做一些大手术。

Glyn Moody: 最后,你说你用很多时间来回邮件,作为一个曾经的出类拔萃的黑客,你为此担心吗?

Linus Torvalds: 我觉得还好。我现在不再像以前那样写很多代码了。从另一方面看,其实有一些类型的编程我也不希望再做了。当我20岁的时候我喜欢玩设备驱动。如果这辈子我都不用再写设备驱动了,我会觉得很幸福。就像头疼少一点总不是坏事。

但是我很喜欢Git,这个可有意思多了。我开始整个设计,然后在用户空间编程,而我有15年没干这事了,但是感觉很棒,超简单。我什么也不用担心,有无尽的堆栈,分配内存也刚刚好。但是在内核空间,我就要担心锁定问题、安全问题,以及硬件问题。玩Git,是一种放松。但是最近我也有点厌倦了。

另外还有一个我还在做的项目是关于潜水电脑的。在kernel.org站点,曾经发生过一次非法闯入。对于维护人员来说,那可真是苦事一桩啊,最后FBI也给扯进来了,想看看到底发生了什么。结果两个月来,内核一点进展都没有,虽然人们仍然可以开发内核,但是大家聚在一起的主站点宕机了,而很多核心内核人员要花很多时间检查是否有人闯入过自己的机器。当时大家都有点被害幻想症了。

所以有几个月的时间我的工作都不存在了,因为我需要整合不同人的工作,而我们的整合服务器宕机了。所以我又开始玩我的潜水记录软件,无聊嘛,这个还蛮有意思的。所以到头来我还是编程的,最后,我总会回到内核上。