作为芬兰Helsinki大学计算机科学系的学生,Linus Torvalds在1991年编写了Linux操作系统的原始内核。很快,Linux就发展成为了一个全特征的操作系统,并开始运行在智能手机、服务器和各种设备中。在本次通过e-mail进行的访谈中,Torvalds回顾了过去25年的历程,并展望了未来25年可能的发展。
Stephen Cass(以下简称S.C.):相比于25年前,现在你已经是一个经验非常丰富的程序员了。哪件事情是你现在知道,且最想让年轻时的自己尽早学习到的呢?
Linus Torvalds(以下简称L.T.):实际上,我一直在说一个事实:我当时并不知道我所做的工作会引起以后Linux的很多成功。如果我当时就一直知道了我现在所知道的事情,我可能没有勇气去编写我自己的操作系统了:我需要一定的“天真”才会认为自己能完成这项工作。我真的认为,这份“天真”是启动该项目并取得成功所必须的东西。不理解这个项目最终的形态以及在对其前景没有很多预期的时候着手去做其实是帮了很大的忙的。
我不知道该项目最终的结果形态意味着,我会比知道其最终形态抱有更加开放的心态,能够接受被人的建议或影响。我认为,这种开放的心态使得其他人加入该项目更加容易,也更加有趣。人们不用一定要采用别人的版本,他们可以自己的需要进行修改。我认为这激励了很多人的参与。
S.C.:有没有一个在Linux发展早起所做的技术决策是你现在觉得最好当时选择另外一个方向的呢?
L.T.:有关错误的技术决策的事,好处的你总是可以回退。当然,错误的决策会让人觉得泄气,而且很多时间和努力都白费了。但同时,它最终也不是完全浪费了:肯定有一个原因导致你做了错误的决定,而意识到该错误就教会了你一些东西。我并不是说,错误的决策是一件好事——但我并不会在做决策时特别担心。我宁可选择一个在以后证明为错误的决策,也不愿意在可能的选择中徘徊很久。
在2001年左右,我们在Linux虚拟内存子系统方面就遇到了一个非常有名的坏情况。当时,大家对于采用那种方法起了很大的争执,而且我们在某些内存配置方面存在很大的问题。系统的主要组件在大家认为的“稳定”时期的时候被清除。人们非常不开心。
但是,现在回头去看,虚拟内存子系统最终工作很好。当时,它给人们带来了非常大的痛苦。如果能够不再中期的时候再进行逆转,那就最好了。但是,它并不是灾难性的。
S.C.:随着Linux的快速发展,从一个开发到多人参与的情况的转变是什么呢?
L.T.:对于我而言,的确存在两个明显的转变。一个发生在大概1992年,我当时开始采用别的开发人员的补丁,而不再自己重写。另外一个则比较晚,当时我自己亲自应用所有的补丁已经非常痛苦,我不得不学会信任其他的维护者。
第一步要相对容易很多——由于Linux内核编程的大约头六个月都是我一个人完成的,当人们开始把补丁发给我的时候,我并不习惯采用这些补丁。所以,我会亲自查看该补丁,确认编程人员的目的,然后我会重写编写代码——有时,代码类似;有时,我会采用完全不同的方法进行实现。
这种情况很快就难以持续了。在我们开始足够信任别人以致我不再重写根据其想法编写自己的代码后不久,我就开始直接应用他们的补丁。但是,我仍然会经常对补丁进行修改。这么多年过去,我已经非常擅长阅读并修改补丁,以至于我能够一直修改直至睡着。而且这种模式在很多年内都工作的非常好。
但是,正是因为“采用别人的补丁”这种模式多年来工作正常,我一直都非常适应这种模式。对我而言,改变这种模式非常痛苦。在2000年左右,我们在内核发展方面有了很大的进展(此时,Linux开始被商业玩家所注意)。人们开始抱怨我的工作流成为了系统发展的障碍,并提出“Linus不与时俱进”。但是,我们并没有好的工具来进行源代码的管理。
这最终导致了我们将BitKeeper引入近来,作为源代码的维护工具。尽管人们是在若干年以后因为brouhaha的版权问题而记住BitKeeper的,它的确是完成我们的工作的最合适的工具。而且,它教会了我源码控制是如何工作的以及我们如何能够根据一个更加分布式的开发模型进行合作。
当然,关于分布式源码管理的东西都是在2005年从Git学习到的。Git已经明显成为了了源码控制方面最成功的项目之一,而且它让更多人学习到了分布式控制的优势。我们在2000年左右内核方面所经历的痛苦最终成为了一个很大的教训,但是这中间的过程不可置疑是痛苦的。
S.C.:还存在像分布式源码控制这样的其他项目,使得你想自己去从头开始完成的吗?
L.T.:没有。而且我也真的希望不会有。我的所有大项目都来源于“天哪,没有人替我完成这种工作!”的时候。当别人能够替我完成工作时,我肯定会比较开心我可以不必花费时间来自己完成。相比于自己解决问题,我肯定会选择躺在沙滩的大型遮阳伞下喝喝冰镇饮料。
好吧,其实我在撒谎。过一段时间,我肯定会开始厌烦这种生活。我非常开心能够Linux项目的陪伴——它非常有趣,而且充满了刺激。但同时,开始新的项目肯定是需要艰辛努力的。
S.C.:你为什么认为Linux绝对不会成为主流桌面电脑的主要操作系统?
L.T.:好吧,我还努力在推进这项工作。我认为,即使Chromebooks只是一个非常有限的桌面环境而非传统的全Linux工作站模型,它的表现越来越好。
关于Linux为什么不能成为桌面电脑的主流操作系统,原因有很多方面。其中一个最大的原因就是用户的惰性。在计算的世界中,桌面电脑是一个非常独特的存在:它既非常个性化(如果你需要使用计算机进行工作,你基本上每天都会和它进行交互),又非常复杂化(很多其他的计算环境不会在这些方面不会如此复杂)。
以智能手机为例。这是计算技术的直接应用场景,而且深入人们的日常生活(多亏Android系统,Linux在智能手机上工作的非常好)。桌面电脑由于很多历史原因要复杂很多。它是一个非常难以进入的市场。与手机更加不同的是,人们有很多自己已经习惯的应用程序和工作流,这就导致很多人非常不愿意切换到别的操作系统。选择将预装的操作系统替换为其他操作系统的人数非常低。
同时,即使整个通用桌面电脑的市场都在一定程度上存在凋零,在很多任务的更加专业化也更加简单的平台仍然是一个非常重要的市场。例如,智能手机、平板电脑和Chromebooks就是例子,它们都是非完全的通用环境。
S.C.:Linux的哪些应用场景最让你觉得吃惊?
L.T.:最近吗?只从我认为Linux已经基本成为新的硬件或服务建模的默认环境后,就没有那么多了。如果你有一些古怪的、特殊的设备,或者你正在设计一些新的互联网框架,这些东西没有采用Linux作为操作系统会真的让我觉得吃惊。
但是,当我将Linux视为工作站或服务器的操作系统时,这些设备的应用领域的确曾让我非常吃惊。在一些早期的Linux会议中,人们会演示运行Linux的气泵或冰箱。当时,我感觉非常意外。当第一个TiVo面世的时候,它运行Linux的事实就像“你可以将现场直播回退”一样有趣。
S.C.:Linux现在面对的最大挑战是什么?
L.T.:内核现在实际上工作的非常好。人们开始担心事情可能变得太复杂以至于超出人类理解和修复漏洞的能力。这是一个非常好理解的担忧。但同时,我们有很多聪明的编程人员参与其中。系统已经发展的如此巨大和复杂以及很多人都依赖Linux的事实使得我们提前开始准备很多事情。让系统变得功能丰富并做出很大的、能接受的改变是非常觉有挑战性的。因此,我不会将其称为令人感觉快乐的工作。但是,我认为,内核的发展目前十分正常。很多其他拥有这些资源的的开源项目可能已经都失败了。
这就意味着,我们在内核方面的一个持续性的挑战就是硬件种类很多。我们支持很多不同的硬件——基本上肯定比其他任何操作系统都要多。但是,基本上每天都会有新的硬件面世。尤其是在嵌入式领域,硬件平台的开发周期通常要短很多(在中国,你可以在1-2月内创建一个新的手机平台)。在这种情况下,硬件和系统的整合就要艰难很多。好消息是很多硬件厂商也都在努力。过去,这些都不可能。
S.C.:你现在感兴趣的技术趋势是什么?有什么让你气馁的吗?
L.T.:我一直对新的硬件,尤其是CPU,非常感兴趣。这就是我为什么一开始研究自己的操作系统,并看到新的平台后非常开心。当然,新的平台很多时候都是现有硬件的简单修改版本(而且,我也相信这就是技术发展应该走的路线)。但是,这就是我努力去追踪的东西。
从更高的层次来看,但并非局限于我所参与的领域,观察AI最终如何发生的是非常有趣的。以前,AI的技术都停留在20年前。但它也一直超前20年。而且,我对于人们过去做的基于规则的模型不感兴趣。
现在,神经网络终于开启了人工智能的新篇章。我发现,神经网络非常有趣。这不是一个我正在参与或将来会参与的领域,但它的确让人觉得非常有趣。与疯狂的LISP和Prolog语言方法不同,我们所知的神经网络都是从自然界而来。而且,我觉得,AI或许会像很多人所想的那样,最终会出现。一点也不觉得意外!
S.C.:你认为Linux在其50年庆的时候仍然会处于活跃开发阶段吗?你认为Linux系统在25年后应该怎样呢?
L.T.:我不是一个非常有远见的人。我是一个非常枯燥的宅男工程师,而且我一直努力将精力放在具体事务上。我会让其他人在预测5年、10或2年后Linux的未来——我认为,只要我们尽力做好每天的工作,未来也一定会非常美好。
如果25年后的社会经过了大的变革或变得与现在非常不同,肯定会非常有趣。但是,有很多基本的问题,无论是在Linux之前、真正的操作系统刚刚出现的19世纪60年代,还是在25年后的未来,肯定和现在一样。我怀疑,我们在过去50年已经看到了很多发生在计算中的出乎意料的变化将来不会再发生。和软件工程师一样,硬件工程师已经学会了什么可以工作、什么不可以工作。
当然,神经网络等将改变整个世界,但你不会来对其进行“编程”。人工智能可以学习。他们是模糊的。我可以非常肯定的保证,他们不会替换传统的计算模型。人们希望比机器聪明,但又希望机器能够按照要求完成应该完成的工作。因此,我们老的计算模式不会消失,它将会得到增强。