Blackrose's Blog Blackrose's Blog

Mac OS X的内核——向左或向右

in growth-logread (578) 文章转载请注明来源!

本文转载自Weiphone论坛,作者fantacyleo(weiphone's id)。遵循CC版权协议原文链接

1976年2月3日,当时还名不见经传的微软公司创始人比尔盖茨发布了一封致业余电脑编程爱好者的公开信:

这封公开信可算是最早的反软件盗版宣言,尽管盖茨自己的屁股也不太干净。同时,它也宣告了专有软件时代的来临。所谓专有软件,就是其使用、修改、复制和分享受到版权持有人限制的软件。以微软为代表的专有软件支持者认为,软件所有者通过限制他人对软件的使用和分享并从软件的销售、技术支持中获得收益,能够更好地激励软件所有者不断改进软件,促进整个产业的发展。

软件专有并非计算机产业的传统。起初,软件是在不同用户之间自由分享的,我看到你的程序不错,就向你要一份源代码,放到自己的电脑上研究、使用。如果我对其中的某些功能不满意,还可以自己修改源代码,并将修改后的软件重新发布给其他人使用。其他人也可以随意向我索要源代码,研究、自用或修改后再发布。这一切都是免费的,而且被视为理所当然的。软件自由分享更正式的定义请看:http://www.gnu.org/philosophy/free-sw.html

专有软件出现后,版权限制加上许多开发者投入专有软件的怀抱,软件自由分享的传统日渐衰弱。上一章中提到,Unix源自一个失败的项目——MULTICS。但是,当早已撤出MULTICS项目的AT&T见Unix广受欢迎、有利可图时,就抡起了专利的大棒,将Unix变成专有软件,并向Unix的著名分支BSD发起了诉讼。1985年,一位对专有软件感到极度不满的年轻人从MIT的人工智能实验室辞职,并发表了著名的自由软件运动宣言,成立GNU组织,正式宣布要开始进行一项宏伟的计划:创造一套完全自由免费,兼容于Unix的操作系统GNU,并建立了自由软件基金会(FSF)来为该计划筹集资金。 此人便是自由软件教父Richard Stallman,搞编程,特别是Unix/Linux环境下编程的应该没有不知道这位大胡子的,Emac编辑器就是他的杰作。

几张2005年Stallman来中国时的照片: Stallman在复旦演讲

Stallman带领着一帮有理想的程序员,用了不到5年就将Unix上的各种带有版权保护的工具重新写了一遍,并以自由软件的形式重新发布。万事俱备,只欠OS,没想到这个代号为Hurd的内核难产了多年都没有进展。东方不亮西方亮,正当GNU组织犯愁的时候,芬兰的小伙子Linus Torvalds平地起惊雷,给他们送来了Linux,至此,GNU/Linux操作系统正式成型。

Linus Torvalds

Linux的发展极其迅猛,我从2002年上映的纪录片《操作系统的革命》 中节选几个数字: 1991年,Linux 0.01 10000行代码 1用户(Linus本人) 1992年,Linus 0.96 40000行代码 1000用户 1995年,Linux 1.2 250000行代码 50万用户 1997年,Linux 2.1 800000行代码 350万用户 1999年,Linux 2.2 1200万用户

Linux的发展也引起了苹果公司的注意。1996年,苹果公司和OSF合作搞了一个MkLinux系统,以实现了纯粹微内核的Mach3.0+Linux服务为内核,它可以运行在装备PowerPC的苹果电脑上,这个PowerPC版的Mach被叫作osfmk,我在第二章中提到过,Mach的这个变体后来被用在Mac OS X中。乔帮主回归苹果时,Linus已经成了个名人,开源界的大佬,背后有着350万用户和开源社区、GNU、IBM、Sun、Redhat等的大力支持,其话语权不可估量,而Linux系统也被认为是抗衡微软的希望之星。正好Mac OS X的非GUI层(Darwin)又是开源的,乔帮主自然希望能把Linus拉到苹果一边。于是,他请Linus到苹果总部一叙,以下内容来自Linus的自传兼回忆录:Just for fun的中文翻译版(这个版本貌似是某些爱好者翻译的,国内没有出正式授权的中文版)。

Linus当时刚到美国不久,也正好想见见硅谷的明星们,于是屁颠屁颠来到乔帮主的办公室,看到乔帮主和Tevanian正在等他。乔帮主直入主题,声称在操作系统的领域只有两个玩家――微软与苹果,现在他给Linus指条明路,就是与苹果公司联合,并号召开源社区都帮着苹果玩转Mac OS X。

帮主是极有个性之人,可这位Linus也不是什么善主,他决不像外表看上去那样温和(例如,Linus炮轰C++事件)。加上帮主这话摆明了是没把Linux放在眼里,更是深深地刺激了Linus,所以这次见面从一开始就几乎注定了要无果而终。

不过,Linus还是耐着性子想听听苹果的这个新系统到底有多牛B。于是接下去Tevanian就开始介绍Mac OS X的内核设计,也就是Mach微内核+Unix服务+I/O Kit,而且强调这个内核还是开源的,跟Linux的运作模式也是契合的。在第二章中我提到过,Linus没来美国之前,就和微内核的拥护者,Minix操作系统的发明者Tanenbaum在网上大吵了一架,因为两人对宏内核和微内核孰优孰劣意见相左(关于不同的内核形态,大家可以回头去看第二章)。Linus在他的自传中也提到了这次争吵,并且摆明了他的观点,微内核无法应对内核功能分解后不同内核模块之间猛增的通讯量。Linus这么说并不完全出于偏见,事实上,当年GNU自己的Hurd操作系统项目就打算采用微内核,结果正是因为无法Hold住内核模块间通讯的复杂性而难产(《操作系统的革命》23分40秒,Stallman承认了这一点,并且举了个例子)。听到牛B哄哄的Mac OS X使用的竟是自己最鄙视的架构,而自己的得意之作Linux可能只会被当作外部服务挂在这个微内核上(苹果公司在MkLinux上就干过这事),Linus再也忍不住了。他直言自己不喜欢微内核,微内核有各种缺点blabla。到了回忆录中,Linus更是直接写上他认为Mach“只是一堆废物”,而可怜的Tevanian更是连名字都没出现,只是被称为“随史蒂夫同来的那位苹果公司的主要技术人员”。我想,宾主寒喧时肯定会相互介绍,报上自己的名号,而Linus不写从大学时就开始热衷Mach的Tevanian的名字,也反映出他对Mach和微内核架构的极度不屑。接着,Tevanian又表示Mac OS X还要兼容旧的应用程序,Linus更不耐烦了,因为旧的Mac OS连内存保护都没有,也就是说,一个应用程序随时可能侵入另一个正在运行的应用程序的内存空间,随时都可能导致后者崩溃。

乔帮主在技术问题上碰了一鼻子灰,便又一次把他的开场白拿了出来,说Linux如果想占领个人电脑市场,抗衡微软,就一定要和苹果联合。这话倒是一点儿都没有夸大,由于Win统治下的用户很难适应Unix/Linux的那套命令行工作模式(就是像DOS那样的界面),如果GUI不行,那么Unix/Linux想要吸引个人电脑用户就难于上青天。以Linux目前的几个GUI,也就Ubuntu自带的那个弄得不错,其他的无论KDE还是GNOME,跟Win比都差着一截,遑论Mac OS了,而且它们还在不断地模仿Win和Mac OS的GUI(特别是KDE),搞得有点四不象。可是,这个美好的许诺依然没有打动Linus,他表示自己对打败微软没有兴趣(他的自传书名都说了,Just for fun嘛)。。。

KDE最新的4.7版,窗口看着还挺漂亮,那几个磁盘图标和Home文件夹是不是和Mac OS X上的似曾相识,而废纸篓图标又酷似Win7的回收站?一看任务栏,我凌乱了,这TM是回到win 98时代了吗?

Gnome 3,顶部那一行完全就是模仿Mac OS的嘛。。。底下那个地址簿APP的图标,是不是也和Mac OS X的地址簿长!得像?

两个都个性十足而又坚持己见的人,如果出现了意见分歧,那几乎是不可调和的,所以乔帮主和Linus的这次会面没有取得任何成果也在情理之中。和开源界的大佬谈崩了,可苹果还得和开源社区打交道,毕竟那个Darwin是开源的啊。不过,正是这个Darwin,让苹果和开源社区最后也闹得非常不愉快。

话说Stallman领*导的自由软件运动10多年之后出现了一些分裂的迹象。自由软件许可证要求源代码开放、任何人有修改再发行的权利,这就意味着自由软件的开发者是不可能通过软件销售获利的。Stallman当初的设想是自由软件可以通过服务赚钱。软件的售后技术支持对个人来说可能无足轻重,我想即使用着正版Win、正版Office的也没有几个找过微软的售后,实在不行卸载重装嘛。可是对企业来说就没有这么容易了,谁也不敢拿商业数据的安全开玩笑。企业用户更倾向于选择丛有信誉的厂商获取软件和售后技术支持,哪怕要花钱,而不是直接到自由软件主页免费下载没有任何后续支持的源代码。在这方面也确实有不少成功的案例,比如1/9/8/9年成立的Cygnus Solutions,以及后来的RedHat。

然而,任何纯粹的东西在经济利益的侵蚀下都不免带上现实功利的色彩,更何况“自由分享”精神对人的道德水平的要求似乎高了一点儿。随着自由软件运动的发展壮大,专有软件厂商也开始盯上了这块蛋糕,当然,他们看上的可不是“自由分享”,而是“开源”。开放源代码,意味着可以吸引一大批程序员为软件的改进出谋划策、增加新功能、消除BUG,三个臭皮匠,顶个诸葛亮,何况这些为“开源”社区工作的臭皮匠还是自愿无偿的,如此好事谁不喜欢。于是,许多专有软件厂商也纷纷竖起“开源”的大旗,吸引一批程序员到自己麾下无偿贡献,而一旦发现软件有商业价值,便将其闭源变为专有软件。Stallman强烈反对这种违背自由软件精神的所谓“开源”,2007年,他在回答《ComputerWorld》记者提问时,明确指出自由软件和开源软件是不同的两个概念,“Free software is a political movement; open source is a development model.”,并把Linus归为“开源”一方。Stallman把他对开源软件的看法及开源与自由的区别写成一篇短文,放在了GNU网站上(http://www.gnu.org/philosophy/open-source-misses-the-point.zh-cn.html)。同时,GNU也没有完全抛弃一度失败的开源操作系统Hurd的开发(http://www.gnu.org/software/hurd/hurd.html),可能是打算作为Linux的备胎,虽说现在人们不再认为纯粹的微内核操作系统效率低,但Hurd依然没有发布过任何的稳定版本,生死难测。

苹果的Darwin也是开源而不开放,第一个原因嘛,就是苹果也是以盈利为目的的公司,搞个开源社区,招呼一帮无偿服务的臭皮匠来帮自己,何乐而不为?第二个原因是技术上的,苹果公司在操作系统内核的开发方面远不如他们的GUI那样耀眼。Mach和BSD都是从学术界走出来、遵循自由分享传统的产品,无论是NeXT还是苹果都只是站在巨人的肩膀上修改了一下拿来用。倒是内核的硬件驱动程序部分——I/O Kit是正儿八经的用苹果自家的Objective-C语言写的,后来又改为C++版本。第三个原因,也是最重要的原因,就是乔帮主的固执己见。

对帮主来说,开源也好闭源也罢,他都是有底线的,他必须实现对Mac OS的完全控制。他不能容忍Mac OS像Win那样被授权给无数PC厂商,这改一点,那改一点,以便兼容各厂商的硬件。在这方面,他像个清教徒似地严格遵守着GUI先驱、smalltalk之父Alan Kay的那句名言:每个热爱软件的人都应该有自己的硬件系统(讽刺的是,Kay加入苹果公司后却致力于推动Mac OS像windows那样授权给PC厂商)。他认为最好的产品是一体的,软件是为硬件量身定做的,硬件也是为软件度身定制的。如果一台电脑要兼容那些在其他电脑上也能运行的软件,它必定要牺牲一些功能(乔布斯传第13章)。1982年5月,时任Macintosh营销总监的Mike Murray曾给乔帮主一份机密备忘录,提出Mac操作系统的授权计划。1985年,比尔盖茨致信赶走乔帮主的斯卡利,强烈建议他开放Mac OS的授权,允许Mac兼容机的出现。这两次提议都没有奏效。到了1994年,已处于困境的苹果公司终于向两家电脑厂商授权Mac OS,1996年摩托罗拉也获得了授权,生产StarMax。然而授权并不能解决苹果的问题。一方面如《乔布斯传》中所说,兼容机挤占了苹果电脑的销售,而当时每台苹果电脑的利润远高于兼容机的授权费,经济上得不偿失。另一方面,即使苹果像微软那样,彻底放弃自己的硬件,变为纯粹的软件厂商,但由于微软已经占领市场,而Mac OS却固步自封,多年未有重大更新,并且缺乏乔帮主这样的领军人物,苹果公司放弃软硬件一体的传统,就等于自废武功,变得毫无特色,依然很难翻身。乔帮主在回归后立刻着手消灭Mac兼容机。为此,他不惜花费1亿美元收购了其中一家获得授权的厂商PowerComputing(《乔布斯传》24章)。而对摩托罗拉,他采取了胡萝卜加大棒的策略:如果摩托罗拉能为Powerbook(后来的Macbook)制造出性能堪比Intel的芯片,就允许摩托罗拉继续生产Mac兼容机。不过摩托罗拉高层既不是吃素的,也不是厦大毕业的,谈判不欢而散,摩托罗拉立即中止了StarMax的生产(《乔布斯传》31章)。

以上三个原因注定了苹果的开源不可能是自由分享式的,甚至连彻底的开源都做不到,只是一开始开源社区的人还没有认识到这一点。2002年,苹果和国际互联网联盟成立了帮助Darwin发展的OpenDarwin社区。但是苹果和社区开发者的关系并不对等,苹果从OpenDarwin社区索取颇多,要求开发者积极反馈,却很少回报社区,Darwin中某些关键代码和API不开放给社区,Darwin有什么修改也很少和社区沟通交流,这引起了开发者的强烈不满(参见“Leopard:unix王朝的终极进化“)。顺带一提,有开发者提议以一只名为Helexy的鸭嘴兽作为Darwin项目的吉祥物,本来它应该叫Huxley的,中译为赫胥黎,达尔文进化理论的坚定捍卫者,但是被错拼为Helexy,结果将错就错就沿用下来了(http://en.wikipedia.org/wiki/Darwin%28operatingsystem%29)。

2003年,苹果发布了苹果公开源代码许可证APSL 2.0,自由软件基金会(OSF)认可了这个许可证,不过他们也指出,苹果在这个许可证中留了两手(参见http://www.gnu.org/philosophy/apsl.html),一是这个许可证允许一个软件中同时存在自由和专有部分,二是这个许可证与GNU组织的GPL许可证并不兼容,FSF给软件开发者的建议是,可以使用或修改这个许可证发布的软件,但如果你要再发行,就不要再依据此许可证了。事实证明,FSF的这个建议非常有先见之明,2011年末,Mac平台著名的视频播放软件VLC正是因为许可证冲突从Mac App Store下架。VLC基于GPL第2版发行,在Mac App Store上架时一切顺利。不过,VLC的一位开发者随后发现了GPL许可证和Mac App Store的许可协议在分发、修改条款方面存在矛盾,于是他向苹果提出了申诉,2个月后,VLC从Mac App Store下架(http://fosschef.com/2011/01/vlc-removed-from-apple-app-store/)。 VLC的图标源自交通路障

在Darwin源代码的发放上,苹果也不那么配合开源社区的传统。一般的开源社区允许用户通过版本控制系统访问源代码,并提供源代码打包下载,而苹果对源代码的提供方式就是文件浏览,没有对软件包进行任何的打包,这会让想下载源码的人非常麻烦(参见这位开发者的体验:http://blog.fatduck.org/2011/03/blog-post.html)。

两件事成了苹果和开源社区彻底翻脸的导火索。

第一件事是苹果在从PowerPC转向Intel这件事情上对开发者撒了谎。这个故事来自天涯上的这个帖子:http://www.tianya.cn/new/publicforum/content.asp?stritem=itinfo&flag=1&idarticle=64059&idwriter=0&key=0。Darwin的源代码刚刚开放下载时,开发者就发现代码有一个PowerPC版本和一个x86(Intel平台)版本。于是就有人怀疑苹果是不是要转向Intel平台。后来,苹果在官网上给出了一个Q&A,表明没有任何移植MacOS X到PC平台的计划。

Q: Will Mac OS X be ported to the PC? 问:Mac OS X(苹果机的操作系统)会被移植到PC上么? A: There are no plans to make Mac OS X available on any non-Apple platforms. We're simply making Darwin, the underlying operating system of Mac OS X, a better system by using x86 as a test bed to ensure architectural soundness and to reap the benefits from applying portable software coding practices. 答:我们没有任何让MacOSX在其他平台上运行的计划。我们在x86上运行Darwin内核,只是为了使得Darwin作为现在MacOSX的内部操作系统,从软件的可移植性角度来说,能够具有更好,更坚实的体系结构。”

原文链接应该是:http://developer.apple.com/darwin/news/qa20010927.html#x86。遗憾的是这个链接已经失效了,即使通过http://web.archive.org也找不回来(被苹果屏蔽了)。天涯的帖子给了个据说存了档的网页,不过也已经打不开了。。。经过一番努力,我在wiki百科的这个appleoldfaq页面找到了这个Q&A,无巧不成书,页面作者也是在看到天涯帖子提供的那个网页后制作了这个wiki页面:http://en.wikipedia.org/wiki/User:Lielei/AppleOLDFAQ。

根据原始网址,那个Q&A发布于2001年9月27日,有证据表明,苹果在此之前已经开始准备转向Intel平台,但它向开发者隐瞒了这一点。当2005年乔帮主在WWDC大会上宣布苹果电脑将转向Intel平台时,开源社区一片哗然。

第二件事,也是更让开发者愤怒的事情就是苹果在宣布转向Intel平台后迅速关闭了Darwin基于x86版本的源代码。本来嘛,苹果不配合,开发者也就忍了,毕竟他们可以利用Darwin源代码,在自由软件许可证下修改发布自己的新操作系统,事实上,他们当时正在开发一个可以运行在PC上的Darwin,开发中他们向苹果索要一下关键技术的信息,苹果对他们就爱理不理,现在干脆连PC分支的源代码都关闭了,开源社区彻底没戏了,他们也彻底明白自己被苹果耍了,社区主力开发者Rob Braun在邮件列表中写道:

”随着Mac OS X在x86 芯片上的发行,苹果决定不再开放一些操作系统的核心组件和驱动的源代码。这决定了Darwin/x86已经胎死腹中。Darwin/ppc已经有很多闭源的成份并且已经是要淘汰的体系。人们不禁要问苹果何必要释出这些非GPL协议代码,如果它不愿意和外界的(开源)开发者合作来增加他们对投入的回报和对Bug的修复以及新的功能。人们甚至更要问:我们为什么要花时间在这样一个没有结果和无意义的工作上。”

2006年7月,OpenDarwin项目宣告停止。2008年,在波特兰举行的世界开源大会(OSCON 2008)上,Ubuntu创始人Mark Shuttleworth发表了主题演讲,直言苹果是开源的敌人

就事论事,我们当然可以批评苹果在Darwin项目上的做法,甚至,我们也可以以阴谋论的观点来看待苹果推动其他开源项目,如WebKit,的目的。但是,开源软件与自由软件的分裂已经表明,自由软件运动的困境是系统性的,而并非苹果一家造成的。在商业利益的诱惑下,如今由Google主导的Android,谁能保证它不会成为下一个OpenDarwin呢?自由软件的铁杆粉丝们是不是也该重新规划一下如何推进他们的事业,在专有软件的荆棘丛中杀开一条血路?

文章二维码

扫描二维码,在手机上阅读!

mac
发表新评论
仅有 1 条评论
  1. 7hao
    7hao
    回复

    作为KDE的fans, 我跟你没完

博客已萌萌哒运行
© 2018 由 Typecho 强力驱动.Theme by Yodu
前篇 后篇
雷姆
拉姆