banner
MIG

MIG

Angelos·MIG·Trubetskoy

Mac OS X 背后的故事 贰

贰 Linus Torvalds 的短视#

文 / 王越

Steve Jobs 对 Mac OS X 的考虑#

1997 年,Steve Jobs 回归,开发下一代操作系统的工作被提上日程。此刻的时代背景是像 Linux 这样的开源软件大行其道。随着网络的发展,使得像 Red Hat、VA Linux 之类的企业成为爆发户,把泡沫越吹越大。

steve_jobs.jpg
Steve Jobs 于 1997 年回归 Apple

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 收到邮件后相当高兴,因为这是他第一次有机会去硅谷观摩。

Linus Torvalds.jpeg
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 的。

battle.jpg
Torvalds 与 Tanenbaum,二者曾就宏 / 微内核优劣展开论战

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 又和老技术划清了界限,逼着开发者使用新技术,技术方面的原因是最重要的。

Avie Tevanian.jpg
Avie Tevanian

但这个看似很正确的技术在 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 的内核技术后来走向何方,我们下期再讲。

Jordan Hubbard.jpg
Jordan Hubbard

笔者认为,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 编译器项目组1。虽然大把钞票扔进去,在先期能够解决一些问题,但时间长了这群人总和 Apple 过不去,并以自己在开源世界的地位恫吓之,最终 Apple 由于受不了这些项目组人员的态度、协议、代码质量,觉得还不如自己造轮子来得方便,因此 Apple 推动了类似 LLVM 这样宏伟的项目,并且在短短几年内,使其成为最领先的开源软件技术。这无异于扇了 Linux 小组、GCC 小组一记响亮的耳光。

本文作者王越,美国宾夕法尼亚大学计算机系研究生,中国著名 TeX 开发者,非著名 OpenFOAM 开发者。

王越老师是我最崇敬的人之一,此系列文章发布至今已有十余年,网络上已几无完整版本,在下希望能在此基础上进一步完善,让更多人所知。

参考资料:

Footnotes#

  1. 来自于 openbsd 创始人的访谈,Theo de Raadt,Otto Moerbeek,Jem Matzan,MORE ON OPENBSD’S NEW COMPILER,Oct 15,2007。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。