塔能鲍姆-托瓦兹辩论

塔能鲍姆-托瓦兹辩论(英语:Tanenbaum–Torvalds debate),于1992年在Usenet讨论组群(新闻组comp.os.minix[1]上发起的一场辩论,主角为Minix创作者安德鲁·斯图尔特·塔能鲍姆Linux核心原始作者林纳斯·托瓦兹,讨论的主题在于操作系统内核架构的选择。塔能鲍姆认为,以微内核架构设计的操作系统,在理论上,比宏内核架构更加优越,主张Linux应该以微内核架构来进行重新设计。但是林纳斯·托瓦兹以开发实务上的观点展开反击,陈述Linux选择宏内核架构进行开发的理由,并比较Minix与Linux的性能差异。稍后,在Linux社群中的一些著名黑客也加入讨论,如彼得·麦唐纳大卫·米勒曹子德

这场辩论有时被视为仅是一场网络论战或口水战,然而这场辩论影响了Linux核心Minix的设计走向,展示了软件工程师之间对于操作系统架构的不同思考角度,因此得到许多重视[2]。在辩论结束后,Linux社群并没有因为这场辩论而改变作法,以微核心架构来重新设计Linux核心,但是在稍后改善了可移植性,扩展到x86之外的平台,同时引进了许多微核心架构的设计想法来改进其代码,例如采用了可加载核心模块塔能鲍姆教授也仍然坚持以微核心架构来设计Minix,在1997年与2004年分别发表了两个新版本,完全不收费的发布Minix,并改善了Minix经常被批评的性能问题。

历史背景 编辑

1969年,UnixAT&T贝尔实验室被研发出来,快速散布到美国各大学,并派生出许多变种,被称为类UNIX,其中以加州柏克莱大学研发的BSD包最为著名。1979年,Version 7 Unix发布,在此时,AT&T开始意识到Unix的商业价值,开始研发商用版本。1982年,AT&T发布第一个商用版UNIX,UNIX System III。AT&T声称自己拥有Unix的著作权,Unix的源代码被当成商业秘密,不再对外发布。AT&T不再授权大学可以免费使用UNIX,对使用Unix的公司及个人发起诉讼,引起一系列法律争议。UNIX受到法律争议影响,不再能自由散布与使用。

为了教学上的方便,塔能鲍姆模仿Version 7 Unix风格,自行创作了一个无著作权争议的操作系统,Minix,让学生可以在大学中继续学习发展操作系统,并阅读到完整源代码。这是一个小型的类Unix操作系统,源代码附属在塔能鲍姆写作的教科书中,在1987年首度发布。源代码大小为三个磁盘片,源代码完整公开,在购买到磁片后,读者可以自行编译与安装,也可以自由阅读与修改。

林纳斯·托瓦兹在芬兰就读大学时,其祖父赠送他一台Intel 80386个人电脑。他不满其附赠的DOS系统性能太差,在阅读了塔能鲍姆教授的教科书后,他决定根据教科书上的内容,自行创作自己的操作系统。1991年,林纳斯·托瓦兹在Usenet新闻组comp.os.minix登载帖子[3],向社群发布了他自行创作的操作系统内核完整源代码,也就是日后的Linux。

肯·汤普逊及贝尔实验室的工程师们,在研发Unix时,采用宏内核架构。在这个架构下,操作系统内核是一个单一的二进制可执行文件,运行在核心空间中。肯·汤普逊选择这个架构的原因,是鉴于其前身Multics的开发失败经验,使他决定选择这种较为单纯与直觉的架构,让系统得到较好的性能。但随着Unix的扩展以及中央处理器的快速发展,Unix在移植到新的平台时,遭遇到很大困难。学界中开始出现新的想法,在贝尔实验室的后续项目Plan 9与卡内基梅隆大学的Mach等研究的促发之下,出现了微内核架构。

微内核将核心功能模块化,划分成几个独立的行程,各自运行,这些行程被称为服务(service)。所有的服务行程,都运行在不同的地址空间。只有需要绝对特权的行程,才能在具特权的执行模式下运行,其余的行程则在用户空间运行。这种架构提高了代码的可移植性与系统的安全性,在学术界,一直得到很高的声誉。Minix采用微核心架构,反应了当时学术界的风潮。除了Minix之外,GNU计划发展的操作系统核心GNU Hurd,也朝向微核心架构来研发。但微内核架构,设计过于精巧,使得代码研发的速度非常缓慢,系统性能长期无法提升。当时数个采用微内核架构的研究计划,都受此拖累,没有突破性的成果。

相较而言,Linux直接继承了Unix的传统,选择宏内核架构。在1992年发生的这场辩论,展示了两种架构的支持者,他们各别的想法。这场辩论也展示了软件工程师,在为软件项目选择架构,所可能出现的各种思考角度。

辩论过程 编辑

 
宏内核的内核空间完全运行在核心态
 
微内核架构依靠与运行在用户空间的若干服务程序通信
 
安德鲁·斯图尔特·塔能鲍姆博士(在comp.os.minix上叫 'ast' )
 
林纳斯·托瓦兹

虽然初步的辩论显得相对温和,当事人双方仅仅平淡了讨论了有关内核设计的话题。但随着每一轮的发帖和参与者的增加,辩论开始逐步变得详细和复杂,甚至跨足于内核设计之外的其它领域,如"哪种微处理器架构将在未来战胜其它架构",但其中也包括了一些意气之争的言词辩论[4]。除了塔能鲍姆和托瓦兹,Linux开发社群中一些著名黑客也加入辩论,包括彼得·麦唐纳,第一个Linux发行版的创建者;大卫·米勒,Linux内核的核心开发者之一;和曹子德,北美洲第一个Linux内核开发者[5]

“Linux 是过时的” 编辑

第一条有关这场辩论的记录,在1992年1月29日,塔能鲍姆在 comp.os.Minix 上发表了他的批评。在题为《Linux 是过时的》(Linux is obsolete)的帖子中,塔能鲍姆指出宏内核在整体设计上是有害的。虽然他最初并没有加入高深的技术细节,来解释他认为微内核更好的原因,但他也表明,这关乎可移植性Linux内核耦合度太高,完全为Intel 80386处理器设计,但处理器架构的进化很快。不应该在某个特定架构上开发操作系统,所有的操作系统都应该具备可以被移植到其他处理器平台的能力。他提到,在1991年仍然以宏内核来设计操作系统,是“回到1970年代的巨大退步”(a giant step back into the 1970s),现代的操作系统,应该像GNU Hurd一样采用微核心架构。

托瓦兹在一天之后反击,他首先攻击Minix在设计上有缺陷(缺少多线程是一个主要例子)。托瓦兹说,他用自己私人的时间来开发,完全没有获利,免费将代码贡献出去(当时塔能鲍姆的Minix源代码,仍然要购买才能获取),因此,对于Minix设计不良,塔能鲍姆不能用“这只是兴趣”来为来辩护。托瓦兹说,从哲学及美学的观点出发,微核心的确是一个比较好的架构,[6]但是采用微核心架构的GNU Hurd根本没有如期被成功开发出来,所以他才要开发Linux。托瓦兹强调,操作系统核心主要的功能都倚靠硬件特性,所以内核本身不需要过度具备可移植性,让高阶的软件应用程序接口(API)具备可移植性才是更重要的。以Linux来跟Minix比较,移植应用程序到Linux上是更容易的。Linux内核采用宏内核架构,是因为它能够简化核心设计,这是一个权衡下的结果(An acceptable trade-off)。托瓦兹进一步说,可移植性是那些写不出新程序的人才需要的(Portability is for people who cannot write new programs)。Linux一开始针对Intel 80386架构来开发,一部分的理由是为了托瓦兹自己买的电脑就是80386,这正好可以让他对80386架构了解更多。Linux一开始就是准备自己使用的,如果想要移植到别的平台,代码都是开放的,想要的人可以自己做。

对于托瓦兹对于可移植性的回应,塔能鲍姆辩称到Minix系统的局限性与他的教授身份有关 —— 系统的硬件需求必须足够低,才能得以让大多数学生普遍低配的机器上使用 —— 一台基于Intel 8088的计算机,有时连硬盘都没有[7];而Linux在这时,却针对的是Intel 80386平台,显然是更加强大(和昂贵)的处理器。塔能鲍姆同时明确表示,“在大概一年之前,就有两个版本(的Minix),其中一个是PC版(360k软盘),另一个是286/386(1.2M软盘)。PC版本销量是286/386版本的两倍”。他补充,虽然 Linux是免费的,但这并不能成为他学生的选择,学生也负担不起运行它所需昂贵硬件,而Minix在一台“没有硬盘的4.77 MHz PC”上就能使用。他同时表示专门为廉价的硬件设计操作系统,日后将导致可移植性方面的许多问题。不顾Minix无法完全支持386硬件的事实,塔能鲍姆辩称,既然x86架构未来将被其它架构所取代,他并不需要去关心和解决这个问题,“当然,5年之后情况自然会有所不同,但至少每个人都将在他们200 MIPS的64M SPARC station-5上运行自由的GNU系统。”他说,因为处理器的进化速度太快,而Linux内核实在太依赖386架构,最终将会因为硬件架构的过时而失败。

Usenet上另一位用户凯文·布朗(Kevin Brown),认为Linux选择在386处理器平台上开发,这是一个清醒的抉择,而不是缺乏对操作系统设计知识所致的,塔能鲍姆不应该对于Linux绑定在386架构上而颇有微词。他表示“Linux明确的设计目标就是从386硬件特性中受益。你明确的论点到底是什么?不同的目标自然会产生和你不同的设计。”[8]

辩论结束 编辑

托瓦兹在稍后放低姿态,希望能够停止这场口水战。他在论坛上承认他对于塔能鲍姆一开始文章中的内容反应过度,而且已经向塔能鲍姆教授寄出私人电子邮件以表示歉意.[9]。虽然他仍继续回应了几篇文章,但都是针对技术方面的讨论。

在这场辩论结束之后,塔能鲍姆和托瓦兹皆表示他们之间没有因此而产生个人恩怨,塔能鲍姆表示,不应该因为他们两个人之间对于技术观点不同,就认为他们两人之间存在恶意对抗的情绪。[2]

后续发展 编辑

1990年代看法 编辑

这个论题和最初的完整辩论被发表在欧莱礼媒体在1999年出版的《开源软件:开源革命之声》(Open Sources: Voices from the Open Source Revolution)书中的附录,书中认为这是“那时世上人们思考操作系统设计的方式”的例子之一。[2]

根据辩论参与者凯文·布朗(Kevin Brown)的说法,386处理器之所以成为了当时大行其道的芯片,这是因那时486芯片主要使用在高端计算机中,286几乎过时,而且万维网还没有广泛使用。塔能鲍姆反对Linux的论据之一,是Linux过于依赖x86指令集,他本人事后将此视作错误。[1]现在Linux则已经具备可移植性良好的代码库,并且被移植到多种处理器架构上。

另一个在讨论中反复出现的话题,是Linux和Minix的替代品,比如GNU或者4.4BSD。塔能鲍姆的第一则帖子中,称赞GNU,不同于Linux,是一个“现代”操作系统。[1]在他的第二则帖子中,他提到“5 年之后每个人都将在他们 200 MIPS 的 64M SPARC station-5上运行自由的GNU 系统”。[7]许多辩论者都不同意GNU是一个合适的替代品。凯文·布朗认为它就是个虚幻的雾件,相较而言,Linux更可能从x86平台中受益,成为一个常见而且通用的系统。早期Linux开发者曹子德说,微内核范式确实有不少优点,但Linux看得见摸得着;反观GNU,无数人在Hurd花了比托瓦兹在Linux上多的多的时间,然而却仍没有完成。[10]托瓦兹对GNU的努力表示尊重,但也认为它的开发速度太慢,他说:“如果GNU内核早在去年春天完成了,我压根不会开始我的项目 —— 但事实是它至今尚未完成。”[11]

4.4BSD-Lite由于AT&TUnix系统实验室伯克利软件公司的纠纷,导致Unix系统实验室诉伯克利软件公司案英语USL v. BSDi这桩官司缠身, 陷入UNIX知识产权归属的争夺之中,而导致大大阻碍了BSD的开发进程,直到两年之后,它们的法律争议依然悬而未决。由于Linux并没有法律争议,基于它的系统都获得了不少的支持。1994年一月,USL和BSDi签订了和解条约,4.4BSD最终于同年六月发布(而最终版本在1995年发布,许多基于它的自由派生版由此延续至今,包括FreeBSDOpenBSDNetBSD)。

“出版物”事件 编辑

2004年3月23日,肯尼斯·布朗(Kenneth Brown),亚历西斯·托克维尔中心(Alexis de Tocqueville Institution)的主席,采访了塔能鲍姆,这是为布朗即将出版的一本名为《异见出版物:关于开源代码的“根源”问题》的书而做准备。此书声称Linux起初从Minix非法拷贝程序。塔能鲍姆发表了一份态度强烈的反驳声明,以捍卫托瓦兹对Linux的贡献与成就,反驳抄袭的说法[12]。在这份声明中,塔能鲍姆指出:

我希望通过澄清一些误解和错误来结束这件事。首先,我真的没有对托瓦兹发火。这是实话。他也并没有对我发火。我并不认为托瓦兹遮掩了我的才智,我不是那种怨天尤人的失败者。Minix仅仅是我的一个兴趣爱好。我是一位教授。我讲课、搞研究、写书、参加讨论会,我做着任何一位教授都会做的事情。我热爱我的职业,学生和大学。[……] 我编写 Minix,为的是希望我的学生拥有一次亲自动手研究操作系统的经历。在AT&T禁止利用John Lions的书本讲课后,我才决定亲自动手编写一个类Unix系统让学生们摆弄。我并没有企图替代GNU/Hurd或者Berkeley Unix。天知道,我说这话的次数已经足够多了。我只是希望向我学生,以及其它学生们展示,如何通过现代的技术重新编写出一个类UNIX系统。不少其他人都希望拥有一个拥有琳琅满目特性的自由UNIX产品,并且希望让Minix变得如此。我曾一段时间陷入这种想法之中,但当Linux出世,我实际上对于能够做回教授的工作而感到欣慰。[……] 托瓦兹看起来做了一份十分出色的工作,我希望他能在未来获取更加显著的成就。

编写Minix固然有趣,但我并没有真正将其视作我所作的最重要的事情,反而更加使人有些分散精力。我所作最重要的事情是培养了一群非常出色的学生,特别是博士生。列表详见我的个人主页。他们完成了不少漂亮的事。我像一只会下蛋的母鸡一样自豪。广泛的说,托瓦兹也可以算作我的一个学生。我为他而骄傲。教授都对他们学生能成就更大辉煌感到欣喜。[13]

再次论战 编辑

2006年,塔能鲍姆在 《计算机》(Computer)杂志发表题为《我们能让操作系统可靠和安全吗?》(Can We Make Operating Systems Reliable and Secure?)的文章后,这个话题被再次提起[14]。尽管塔能鲍姆本人提到,他并不是想借这篇文章重启内核设计的论战[15],但是这篇文章本身和Slashdot技术网站上附加的 1992 年论战的归档[16]共同使战火重燃。

通过一个在线论坛,托瓦兹重新反驳了塔能鲍姆的论点[17],几个技术新闻网站随即开始对其进行报道。[18]这使研究者乔纳森·夏皮罗(Jonathan Shapiro)回应称,大多数经过实际检验的安全可靠的计算机系统,都使用更近似于微内核的模式设计。[19]

参考资料 编辑

  1. ^ 1.0 1.1 1.2 A. S. Tanenbaum. LINUX is obsolete. Newsgroupcomp.os.minix. January 29, 1992 [2015-06-02]. 12595@star.cs.vu.nl. (原始内容存档于2013-05-26). 
  2. ^ 2.0 2.1 2.2 DiBona, Chris; Sam Ockman, Mark Stone, Brian Behlendorf, Scott Bradner, Jim Hamerly, Kirk McKusick, Tim O'Reilly, Tom Paquin, Bruce Perens, Eric Raymond, Richard Stallman, Michael Tiemann, Linus Torvalds, Paul Vixie, Larry Wall, Bob Young. The Tanenbaum-Torvalds Debate. Open Sources: Voices from the Open Source Revolution. O'Reilly Media. January 1999 [2015-05-29]. ISBN 1-56592-582-3. (原始内容存档于2014-09-21). When Linus himself heard that we were including this, he wanted to make sure that the world understood that he holds no animus towards Tanenbaum and in fact would not have sanctioned its inclusion if we had not been able to convince him that it would show the way the world was thinking about OS design at the time. 
  3. ^ What would you like to see most in minix?. Linus Benedict Torvalds. 1991-08-26 [2010-12-21]. (原始内容存档于2019-10-18). 
  4. ^ 如塔能鲍姆宣称“很庆幸你不是我的学生,否则这种设计肯定不能得高分”,而托瓦兹则抨击塔能鲍姆“你是个学者和教授,这就是你开脱那些Minix脑残设计的最好借口之一”。
  5. ^ 值得注意的是,一名叫做Ken Thompson的用户也出现在讨论中。然而,此人并非UNIX的创始者肯·汤普逊
  6. ^ L. Torvalds. Re: LINUX is obsolete. Newsgroupcomp.os.minix. January 29, 1992 [2015-06-02]. Usenet: 1992Jan29.231426.20469@klaava.Helsinki.FI. (原始内容存档于2013-06-11). 
  7. ^ 7.0 7.1 A. S. Tanenbaum. LINUX is obsolete. Newsgroupcomp.os.minix. January 30, 1992 [2015-06-02]. Usenet: 12615@star.cs.vu.nl. (原始内容存档于2013-05-30). 
  8. ^ Kevin Brown. RE: LINUX is obsolete. Newsgroupcomp.os.minix. January 31, 1992 [2007-04-07]. Usenet: 1992Jan31.074347.1198@menudo.uh.edu. (原始内容存档于2013-05-11). 
  9. ^ L. Torvalds. Apologies (was Re: LINUX is obsolete). Newsgroupcomp.os.minix. January 30, 1992 [2007-01-10]. Usenet: 1992Jan30.153816.1901@klaava.Helsinki.FI. (原始内容存档于2013-06-14). 
  10. ^ Theodore Y. Ts'o. Re: LINUX is obsolete. Newsgroupcomp.os.minix. January 31, 1992 [2007-05-11]. Usenet: TYTSO.92Jan31164013@SOS.mit.edu. (原始内容存档于2013-05-11). 
  11. ^ L. Torvalds. Re: LINUX is obsolete. Newsgroupcomp.os.minix. January 29, 1992 [2015-06-02]. Usenet: 1992Jan29.231426.20469@klaava.Helsinki.FI. (原始内容存档于2013-05-09). 
  12. ^ Tanenbaum, Andrew S. Some Notes on the "Who wrote Linux" Kerfuffle, Release 1.5. [2008-05-21]. (原始内容存档于2010-09-11). 
  13. ^ Tanenbaum, Andrew S. Ken Brown's Motivation. [2007-12-24]. (原始内容存档于2004-05-24). 
  14. ^ Tanenbaum, A. S. Can We Make Operating Systems Reliable and Secure? (PDF). IEEE Computer Society. May 2006, 39 (5): 44–51 [2015-06-02]. doi:10.1109/MC.2006.156. (原始内容存档 (PDF)于2017-08-09). 
  15. ^ Tanenbaum, A. S. Tanenbaum-Torvalds Debate: Part II. Vrije Universiteit Amsterdam. May 2006 [2007-01-14]. (原始内容存档于2015-08-05). 
  16. ^ "bariswheel", "Hemos" & Slashdot contributors. Microkernel: The Comeback?. Slashdot. May 2006 [2007-01-14]. (原始内容存档于2012-03-23). 
  17. ^ Torvalds, L. Hybrid kernel, not NT. Real World Technologies. May 2006 [2015-06-02]. (原始内容存档于2007-01-02). 
  18. ^ diegocgteleline.es, ScuttleMonkey & Slashdot contributors. Torvalds on the Microkernel Debate. Slashdot. May 10, 2006 [2015-06-02]. (原始内容存档于2012-03-23). 
  19. ^ Jonathan Shapiro. Debunking Linus's Latest. coyotos.org. May 11, 2006 [2015-06-02]. (原始内容存档于2016-09-22). 

外部链接 编辑