文/王越 《Mac OS X背后的故事》系列文章将为大家介绍Mac OS X的发行版本、技术历史、相关人物等内容。本文是系列连载的第二篇,主要的故事来源是Linus Torvalds的自传《Just for Fun: The Story of an Accidental Revolutionary》。 [caption id="attachment_6618" align="aligncenter" width="275" caption="Steve Jobs于1997年回归Apple"]

[/caption] Steve Jobs对Mac OS X的考虑 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编译器项目组[1]。虽然大把钞票扔进去,在先期能够解决一些问题,但时间长了这群人总和Apple过不去,并以自己在开源世界的地位恫吓之,最终Apple由于受不了这些项目组人员的态度、协议、代码质量,觉得还不如自己造轮子来得方便,因此Apple推动了类似LLVM这样宏伟的项目,并且在短短几年内,使其成为最领先的开源软件技术。这无异于扇了Linux小组、GCC小组一记响亮的耳光。 参考资料: [1]来自于openbsd创始人的访谈,Theo de Raadt,Otto Moerbeek,Jem Matzan,MORE ON OPENBSD'S NEW COMPILER,Oct 15,2007。   作者王越,美国宾夕法尼亚大学计算机系研究生,中国著名TeX开发者,非著名OpenFOAM开发者。  Mac OS X 背后的故事系列更多精彩内容 《程序员》6期精彩内容:移动应用的成功法则 《程序员》杂志订阅

Mac OS X 背后的故事(二)——Linus Torvalds的短视相关推荐

  1. Mac OS X 背后的故事(三)Mach之父Avie Tevanian 1

    1975年,美国罗彻斯特大学纽约分校,一组研究员正在做一个名为RIG(Rochester"s Intelligent Gateway)的项目,它由Jerry Feldman主持设计.RIG的 ...

  2. Mac OS X 背后的故事(四)——政客的跨界

    文/王越 <Mac OS X背后的故事>系列文章将为大家介绍Mac OS X的发行版本.技术历史.相关人物等内容.本文是系列连载的第四篇. 2000年,美国总统大选,由于选票设计问题,时任 ...

  3. Mac OS X 背后的故事(六)Cordell Ratzlaff 引发的 Aqua 革命(上)

    Mac OS X 背后的故事(六)CordellRatzlaff 引发的 Aqua 革命(上) 文 / 王越 Aqua是Mac OS X Public Beta全新用户界面的名字,英文中为水的词根,寓 ...

  4. Mac OS X 背后的故事(九)半导体的丰收(下)

    文 / 王越 随着CPU与GPU合并成技术发展的趋势,苹果开发出了OpenCL框架,能够进行高速并行处理的能力使OpenCL成为了业界标准,被广泛应用. 最近几年,GPU的发展吸引了很多来自科学计算界 ...

  5. Mac OS X 背后的故事(一)力挽狂澜的Ellen Hancock

    原文地址: http://www.programmer.com.cn/6727/#more-6727 文 / 王越 从本期开始,我们将在杂志上连载一系列关于Mac OS X发展历史的文章.本系列将为大 ...

  6. Mac OS X 背后的故事(六)Cordell Ratzlaff 引发的 Aqua 革命

    原文地址:http://www.programmer.com.cn/9016/ Aqua是Mac OS X Public Beta全新用户界面的名字,英文中为水的词根,寓意以水为灵感,精心设计.Ste ...

  7. Mac OS X 背后的故事(八)半导体的丰收

    原文地址: http://www.programmer.com.cn/10071/ 文/王越 在美国宾夕法尼亚州的东部,有一个风景秀美的城市叫费城.在这个城市诞生了一系列改变世界的奇迹:第一个三权分立 ...

  8. 【转】操作系统Unix、Windows、Mac OS、Linux的故事

    电脑,计算机已经成为我们生活中必不可少的一部分.无论是大型的超级计算机,还是手机般小巧的终端设备,都跑着一个操作系统.正是这些操作系统,让那些硬件和芯片得意组合起来,让那些软件得以运行,让我们的世界在 ...

  9. 操作系统Unix、Windows、Mac OS、Linux的故事

    2019独角兽企业重金招聘Python工程师标准>>> 我们熟知的操作系统大概都是windows系列,近年来Apple的成功,让MacOS也逐渐走进普通用户.在服务器领域,恐怕Lin ...

最新文章

  1. C++中的容器(STL容器)container
  2. 自定义异常类(restful api)
  3. linux 初始化数组,c – 使用initializer_list初始化数组?
  4. Shell入门(七)之关系运算
  5. 基于图像分割的立体匹配方法
  6. 微软推出Azure区块链开发套件,重点解决两大难题
  7. python内置模块在哪个文件夹_用 Python 内置模块处理 ini 配置文件
  8. 随机森林和GBDT的几个核心问题
  9. c语言实用程序6,C语言实用程序设计100例流程图
  10. 通达信标记符号_通达信在股票名称后自动标记
  11. matlab 调速系统试验,实验三-双闭环直流调速系统MATLAB仿真.doc
  12. Android科大讯飞语音集成(语音输入,语音合成文字转声音)
  13. Ubuntu压缩、解压
  14. 6.后台验证码-session作用域
  15. Book Sharing
  16. python下求特征向量与特征值
  17. Windows系统不用工具软件查看U盘VID和PID的方法
  18. 项目管理工具之甘特图
  19. 音视频开发:直播推流技术指南
  20. html 图像处理 灰度图和浮雕图类PS

热门文章

  1. 态度决定高度,高度决定命运。对自己要狠一点,再狠一点,因为,你要的比别人多,就必须付出得比别人多。...
  2. 以神奇“三”为本的逻辑与指号学----皮尔斯逻辑之三
  3. 如何解析xml报文获取数据集合
  4. 抖音如何开通直播带货?抖音直播带货权限开通和直播带货选品小技巧分享!
  5. 哪些单位可以解决户口?附落户北京渠道
  6. 关于使用手机电池替换3节干电池的尝试
  7. 硅谷最干货大会之一AI Frontiers 详解全球投资热区和5大应用趋势
  8. 服务器地址和客户端地址详解与区别
  9. Go 调用 Java 方案和性能优化分享
  10. 洛谷 P2597 灾难(支配树)