Linux创始人曾经小看 Mac OS X
| 2011-06-22 11:11
1997年,Steve Jobs回归,开发下一代操作系统的工作被提上日程。此刻的时代背景是像Linux这样的开源软件大行其道。随着网络的发展,使得像Red Hat、VA Linux之类的企业成为爆发户,把泡沫越吹越大.steve Jobs承认Linux的好处,甚至在若干年后介绍Mac OS X底层的Darwin时还不忘在幻灯片上写道:Darwin是类似Linux的系统。而当时精明的Steve Job在考虑下面几个问题。
第一,NeXTSTEP的内核和外围工具中,BSD代码维护起来需要大量人力,而且各分支的BSD发展显然不如Linux快。很多功能都没有,需要Apple自己做。
第二,像Apple这样的小公司,需要借力打力.apple的主要竞争对手是Microsoft,而开源软件的矛头也是Microsoft,如果联合起来干革命,不但能让自己得到一个好名声(Apple事后一直自称是最大的开源软件公司),也可以获得可观利益,从而对Microsoft造成压力。
第三,也是最重要的,联合各开源组织能够推动Mac OS的发展。毕竟开源软件中像GCC之类都是很成熟的项目,Apple用起来省时省力,投点钱就有大效益,多好。
所以,把Linux内核作为Mac OS X的重要组成部分的想法被这位伟大的智者想了出来.apple之前也有开发Linux的经验,比如在Steve Jobs回归之前,Apple就和OSF合作开始把Mach内核移植到PowerPC上(Apple是最大的PowerPC玩家,而OSF是最大的 Mach玩家),并把Linux作为服务跑在Mach上。这个系统就是MkLinux,我们在后续的连载中还会提到这个系统,因为它不但对Linux的移植性作出了重要的贡献,也对后来的Mac OS X的XNU内核技术起到了相当重要的作用。
如果可以采用Linux作为系统重要组成部分,并且这个构想能够取得在开源软件界呼风唤雨的Linus Torvalds的认同,就能靠他在社区鼓动一大群开发者皈依Apple麾下,这是Apple很想看到的给力结局。有了这个指导思想,他便让秘书给 Linux的开发者Linus Torvalds发了一个邮件,问他是不是有一到两小时的时间和Steve Jobs会面。不明真相的Linus Torvalds收到邮件后相当高兴,因为这是他第一次有机会去硅谷观摩。
无果而终的会面
Apple 总部Infinity Loop终于迎来了这位稀客,Steve Jobs亲自接见,而先前任NeXT技术总监的Avie Tevanian也参加了这次会谈。不用多说,这次讨论的内容自然是还处于未知状态的Mac OS X。讨论算不上正式,但Linus Torvalds的愤青个性,却让谈判陷入僵局。
Steve Jobs自然搬出他1997年回归之际在MacWorld讲话时的那套理论,Apple虽然很颓,但骨子里是个牛逼的公司。全世界桌面领域的真正玩家就两个,一个是Apple,另一个是Microsoft,两者加起来,构成百分之百的桌面用户群。所以,Linus同学,你就从了我们吧,如果你从了我们,让我们把Mac架在Linux上,一大批桌面用户就是Linux用户啦,前景可是一片大好!
而Linus Torvalds那时候牛啊,诸多大公司如IBM、Red Hat都围着他转。他可是企业家中的大红人,像Apple这样的企业根本就不在他眼里。作为一个开源软件的革命家,在他的想象中Linux的潜在用户应该比Apple还多。他始终相信,按照目前开源软件的发展态势,自己很快就能在桌面领域分到一杯羹。而且这个命题在他这种古怪性格下的直接推论是,即使我能占领桌面领域,我也要摆出一副不在乎这个领域的态度来。所以实际上Steve Jobs的开场白就失败了。
接着,Avie Tevanian向Linus Torvalds介绍了整个计划。他们想把Mach和Linux内核合并起来作为Mac OS X的基础,我估计Linus Torvalds是听错了(因为Avie Tevanian很早就意识到相比于微内核,混合内核有明显优势),他以为Apple想把Linux作为Mach的一个服务来跑(当然我个人认为,即使是合并Mach和Linux成为混合内核,依Linus Torvalds的愤青性格,依然是不可能接受的),这正让他回想到先前和Tanenbaum教授的笔战。并且,他也知道Apple和IBM合搞的失败项目Taligent正是用Mach的。
Linus Torvalds对于微内核有他自己的看法,之前也曾在不同的地方表述过。若把关于微内核的笔战去掉限制级敏感词的话可概括成两方面。一方面,设计一个微内核和相关的服务,可能造成各种设计上的灾难.gNU/Hurd早在八十年代末就考虑尝试在Mach上写一系列Unix的服务层,结果他们始终无法搞明白到底是让这些服务先发消息到另几个服务呢,还是考虑其他方案。所以直到2011年我写这篇文章时,Hurd项目依然处于半死不活的状态。而另一方面,微内核的效率无法和传统内核相比,最简单的系统调用会涉及一系列底层服务的互相通信。所以很多研究者着手研究如何把微内核的效率提上去,结果就导致微内核变得更加复杂。能提高微内核效率的很多研究成果都已在Mach项目中实现了。而在Linus Torvalds看来这恰使Mach成为了一个非常复杂的项目,并且效率也不怎么高。
会谈时坐一旁的Avie Tevanian事实上是Mach最早的开发者之一,他热情地给Linus讲述Mac OS X系统蓝图。而Linus实际上早就不耐烦了。比如,Mac OS X中,有一个模拟层,可让用户使用经典的Mac OS程序。这个技术极类似于现在跑在Unix系统上执行Windows程序的Wine.apple当时的考虑是这样,因为老的Mac OS在设计API时,就没有考虑到类似内存保护之类的问题,所以这层API必须废掉,Mac OS X中所有的新程序必须采用NeXT的那套更先进的API(根据我的考证,当时还没有Carbon这样的想法,而且事实上Carbon不管在API还是 ABI上都和经典Mac OS不兼容)。而短期内已有的软件又不可能快速重写迁移至Mac OS X。所以,如果用户需要使用老版Mac OS的第三方应用程序,就可以使用Apple提供的这个兼容层。但是由于刚才提到的原因,老版程序并不享受新版程序的待遇,因为模拟器本身运行多个老 Mac OS任务时,和原先老版Mac OS一样,实际上只有一个进程,没有内存保护。这样做的好处是明显的,因为一方面老的程序在Mac OS X发布之初还能用,另一方面Apple又和老技术划清了界限,逼着开发者使用新技术,技术方面的原因是最重要的。但这个看似很正确的技术在Linus Torvalds看来是古怪的,他想当然地认为,完全可以运行多个不同的模拟器进程,来执行不同的任务,使得每个任务都可以享受内存保护。这种浪漫主义情调让他无比鄙视Apple员工的智商。而事后当笔者使用早期版本的Mac OS X时,发现Linus Torvalds的想法完全是不切实际的。因为这个模拟层本来就要占用不少的内存和CPU,在处理器速度不及今日手机、内存无比精贵的90年代末,跑一堆模拟器进程无异于是和自己过不去。
Steve Jobs考虑到Linus Torvalds是开源软件的领军人物,便继续以开源为话题,动之以情,晓之以理。他告诉Linus Torvalds,我们这个系统做出来后呢,所有的Unix层(非图形界面层),都会开源,所以事实上你加入我们,也是在给开源做贡献啊!而由于在开源圈子混久了,Linus Torvalds对此丝亳不领情,他认为,有谁会想用一个底层是开源而图形界面是不开源的系统呢?所以,像笔者这样的用户被“代表”了。
Mac OS X与Linux分道扬镳
总之,这次会面完全谈崩,两人站在不同的角度去看问题,加上Steve Jobs和Linus Torvalds都是个性鲜明、唯我独尊的人,技术和商业上的考虑都不同,所以会谈中双方简直就是鸡同鸭讲。这次讨论也使得Apple放弃Linux,转而采用FreeBSD技术,并在2001年任命FreeBSD的发起者、领军人物Jordan Hubbard为BSD技术小组的经理,并在后来升为Unix技术总监。至于Apple的内核技术后来走向何方,我们下期再讲。
笔者认为,Apple和Linus Torvarlds的商谈破裂,以今天的眼光来看,是因Linus Torvarlds的自命清高和短视造成的。他不懂得尊重其他开发者的意见,并且不断抬扛。包括后来关于C++的论战.mac OS X发布后,Linus Torvalds又数次嘲笑Mac的技术落后,并说这些他在当年和Steve Jobs开会时就预料到了。直到最近,他终于有些成熟,对Mac OS X的观点开始缓合,但还是不忘批评Mac的文件系统就是垃圾(事实上,Linux的也没好到哪去,至少Apple还搞过一阵ZFS)。这种性格最终导致在 Mac OS X和iOS大行其道的时候,Linus Torvalds连兔子汤都不曾分到。
而事实上这对Apple也是件好事.apple重要的是利益而不是折腾,即使是开源也是利益驱动。像类似Linux开发组那样自以为是但代码又写得差的开源项目,Apple事后也遇到不少,比如GCC编译器项目组。虽然大把钞票扔进去,在先期能够解决一些问题,但时间长了这群人总和Apple过不去,并以自己在开源世界的地位恫吓之,最终Apple由于受不了这些项目组人员的态度、协议、代码质量,觉得还不如自己造轮子来得方便,因此Apple推动了类似LLVM这样宏伟的项目,并且在短短几年内,使其成为最领先的开源软件技术。这无异于扇了Linux小组、GCC小组一记响亮的耳光。