李纳斯(Linus)是出了名的不喜欢在公共场合演说,所以他出现在大会上比较少见,也无迹可寻。在LinuxCon大会日本站,李纳斯回答了格雷格·克洛·哈特曼(译者注:Greg Kroah-Hartman,他是Linux内核稳定分支的维护人)的提问。这次访谈的范围很广,涉及到了很多内核开发和用户社区的有趣问题。
3.0
开场第一个话题早在预料之中。下一个内核版本为什么要切换到3.0?李纳斯说,这个是因为目前的版本号太长太复杂了。当前的内核版本是2.6.x,格雷格如果发布一个稳定版本,就变成2.6.x.y。如果发行商再添加他们自己的版本号,那就变成5个数字,这就比较难看了。即便如此,这个版本号规则也用了八年。当前版本号中的“2.6”已经没有任何意义了。
李纳斯说,以前,主版本号的变化代表了一些重要里程碑的实现。1.0内核第一次支持网络,1.2加入了对非x86体系结构的支持,2.0加入了“勉强能用”的对SMP的支持,等等。我们习惯于认为,主版本号的提升就必须伴有重大功能的实现。但是,在2.6.x时代,我们不再因为功能实现而发布版本。当前的开发模式工作得很好,但是它使2.6.x的版本号命名规则变得模糊不清。现在马上要到Linux内核发布的二十周年了,这是一个好机会去说,“够了”。所以李纳斯就这么做了。
3.0也不会一直延续下去,甚至不会延续到30周年的时候。李纳斯说,他预计会演进到3.20左右。
李纳斯指出,有些人认为,3.0意味着该加入一些重大的新功能了(或移除老的代码),但事实不是如此。这只是一个数字的变化,没有其他意思。他说,“一直保持内核的稳定”这种开发模式工作得很好,所以不会改变。格雷格对这种变化很高兴,他送了李纳斯一瓶威士忌以示感谢。他们先是争论了要不要当场打开这瓶酒(格雷格还带了纸杯,以防万一),后来决定最好先完成这次讨论再说。
格雷格问:最近的内核改动中,你最喜欢哪些?李纳斯说,他倾向于喜欢枯燥乏味的功能,那些东西一般人都不会注意到。性能的改进,他举了“缓存伸缩性(cache scalability)”的例子,这个不会改变用户接口,只是使一些旧代码运行得更快。
功能臃肿?
是不是如李纳斯在2009年所说,内核的功能有点臃肿?李纳斯回答说,内核确实太大了,在他20年前用来开发内核的机器上,很有可能无法运行。但现在,就算手机也远比老计算机强大,所以没人会真的在乎这个。内核一直在变大,但是这种增长是必要的,它满足了当前的硬件和用户的需求。
关于那些只是为了好玩而加入的功能——这些新东西的研发,严格来说,都不是由硬件的需求来驱动的。现在我们还能加入这类功能吗?李纳斯说,当然还有这样的开发人员,他们在做一些目前没人用的功能,他们看得更远,提早了大约五年。有时候,他们会成功,有时候会后悔加入这些代码。李纳斯说他越来越坚持这样的观点,只有当一个功能真正有人用的时候,他才会考虑合入这个功能。
格雷格问了“控制组(control groups)”,提到很多内核开发人员反对这个功能。李纳斯回答说,“控制组”一开始没多少人用,但现在有很多人在用。“控制组”一开始是为了某些特定的服务器而加入的,当时几乎没有其他人感兴趣。开发人员不喜欢这个功能,因为它使Linux整体框架变得更复杂。但这个功能逐渐在其初始用户之外找到了知音,最终成为一个成功的功能。
对称多处理(SMP)也是这样,一开始没有多少人用。它是一块很大的功能。现在我们看到了对称多处理运用在各种板子上,甚至手机上。李纳斯说,这表明了Linux的一个核心优势:我们在各种平台上使用同一个版本的内核。他说,没有其他人能做到。他们倾向于区分小系统内核和大系统内核——比如iOS和Mac OS。Linux不会这么做,比如,从来没有专为嵌入式系统准备的瘦身版内核。因为在嵌入式系统这个领域,完整的内核也适用。Linux在嵌入式领域非常成功。
嵌入式系统、统治世界、以及下个二十年
继续嵌入式系统的话题。格雷格问了关于最近对于ARM内核的争吵。李纳斯说,这个领域的开发人员有一点点狭隘,他们只解决他们自己关心的问题,不干其他的。这会导致一些混乱,但他很高兴看到事情有所进展。在他和其他人的推动下,ARM开发社区开始响应。李纳斯认为,3.0内核会是史上第一个ARM代码不增反减的版本。嵌入式开发人员过去只会考虑他们在用的小系统,而不会顾及整个Linux的生态系统,但情况正在改变,这个社区也在成长。
很多年前,格雷格说过,李纳斯曾经谈过Linux“统治世界”的目标,并且应用程序的数量将是达成这个目标的关键。真有其事吗?李纳斯回答说,过去还有这么点想法,现在淡然了。现在我们已经有大量的应用程序了。他也不再开这个玩笑,只是为了好玩罢了。
目前,我们在各个领域都做得很好,除了传统的桌面应用。这个有点讽刺意味,因为李纳斯最初开发Linux就是作为桌面应用的——他希望它能在他的桌面系统上跑起来。现在该有的我们都有了,包括很多应用程序,但是桌面系统市场是很难进入的,因为用户习惯很难在一朝一夕改变,我们只能说在将来的某一天能实现这个目标。
在内核中,我们还能做什么来推进这个目标的实现?李纳斯回答说,他也想过这个问题,但是他真的不知道。内核已经做了很多的工作来支持桌面应用场景。毕竟内核开发人员平时也拿Linux做桌面系统,所以他们很清楚目前的情况。但是要定位目标市场,开发一个完整的产品,这还是要依靠发行商。
格雷格提到,二十年如一日地为同一个项目工作,实在是有点漫长,李纳斯有没有想过是否要继续下去?李纳斯回答说,他真的很喜欢专注于一件事情,他不喜欢同时承担多个任务。他真的很高兴他能把这件事做好,他从来没预料到这件事情要干这么久。当被问道是否会再干二十年的时候,李纳斯说到那时候他岁数已经很大了。总有一天会有充满活力的年轻人出现,并证明他也能做好这件事情,那时候就意味着李纳斯要隐退了。
我们如何保持内核的与时俱进?李纳斯说,与时俱进不是问题。UNIX存在都已经40年了,还是和过去一样能胜任当前的任务。Linux再过20年也是如此。但我们会持续地演进。他很不愿意看到Linux进入一种维护的状态,不再开发重要的新功能。
光辉岁月、挑战、以及许可证
一位与会者请李纳斯描述一下他过去20年中最值得回忆的时刻。李纳斯回答说,真没有。Linux内核是在长时间内,依靠无数开发人员一点一滴的构思而形成的。Linux内核的历史上没有惊天动地的时刻。李纳斯接着说了一个他无法忍受的,关于技术产业的观点:人们总是谈论“创新”和“高瞻远瞩”,总是认为有这么一个宏伟的构想,能毕其功于一役。但现实世界不是这样的。实际上没什么高瞻远瞩的构想,有的只是很多好主意,这些好主意在当前看起来都不能改变世界,但是在经过辛勤的耕耘后,它们会变成伟大的事物。
他承认确实有一些很有意思的时刻。回顾将近二十年,Linux从一个个人项目变成了一个大项目,大到很多为之工作的成员他都不认识,这个时候,他意识到Linux不再是他个人的玩具。这里面有很多激动人心的事。甲骨文(Oracle)宣布支持Linux,算是其中之一。但归结起来,最重要的还是坚持和千万人的努力。
还有一个人问,网页应用最近越来越成功,这是否意味着Linux已经走到头了?Linux回答说,这种向浏览器靠拢的趋势,反而对Linux有利。曾经有很多特定的应用,只能在Windows下用,比如银行类应用。现在这些都消失了。当应用程序能在浏览器中跑时,底层的操作系统就不重要了,关键看技术、许可证、价格——而这些都是Linux的优势。
下一个问题是:你对Ubuntu满意吗?李纳斯建议格雷格来回答这个问题效果更好(译者注:格雷格曾经炮轰过Ubuntu)。他接着说,Ubuntu采用了一种不同的开发方式,并且取得了很有意思的成果。他们这种方式以用户为中心,而不是技术,有这样一个发行商挺好。用这样一种方式,Ubuntu已经很成功了,向其他发行商展现了一片被他们所忽视的市场。格雷格补充道,他的主要关切是希望看到内核社区在壮大,一切都在向好的方向发展。
李纳斯处理过的最棘手的技术问题是什么?李纳斯回答说,他面临的最大问题不是技术方面的。技术问题早晚都能解决。有时候我们会作出错误的决定,但是时间一长,这些问题肯定能被纠正过来。如果说我们有严重的问题,那就是硬件开发商提供的文档和帮助不够多。某些硬件开发商不仅拒绝帮助我们来支持他们的硬件,还会故意捣乱。李纳斯说,这使他很难受,不过情况在慢慢变好。
真正棘手的事情,是协调全世界那么多开发人员和公司。在决定哪些代码应该合入这个问题上,有时候会有重大的分歧。把李纳斯搞得睡眠不足的,是人和政治,不是技术问题。人与人之间的交互,有时候会使他很难堪。我们也能解决这些问题,但是解决方案会使人在一段时间内产生厌恶感。
李纳斯说,linux-kernel邮件列表以直言不讳闻名。有时候对于想参与的人来说,经常会被浇冷水。这里需要澄清一下,大家都应该诚实地告诉别人,自己是怎么想的。如果你在网上含糊其辞,别人很难搞懂。这会导致开发人员花费多年的时间来做别人根本不喜欢的功能。李纳斯说,长期来看,一开始就说不,并且让别人知道,这样会更好。当然,如果最后证明我们错了,我们也会承认。
最后的问题是关于通用公共许可证(GPL):他对这个许可证还满意吗?李纳斯说,他仍然很满意通用公共许可证第二版(GPLv2)。他曾经自己创建了一种许可证,以禁止商业用途。但事实马上证明了这会使发行商和其他人更难生存。他说,所以他一直很满意切换到通用公共许可证,这是一个公平而成功的许可证。他觉得没有必要去扩展这个许可证(或升级到第三版(GPLv3))。他说,这个许可证工作得很好,为什么要改变?