为什么 Mac OS X 先进?

这个世界上,接触过三大主流桌面操作系统的人,总会有相当一部分承认 OS X 的相对先进,也会有很多人反对。我认为讨论 OS X 先进性的文章里《开发人员为何应该使用 Mac OS X 兼 OS X 小史》是比较全面的。包括 OS X 先进的图形系统,完全继承 UNIX 的命令行优势,发扬光大的 scriptability ,以及让开发者有机会避开在其它平台上避之不及的 C++ 等等。还有 2003 年出版的《 The Art of UNIX Programming 》,虽然当时 OS X 尚不成熟,作者 Eric Raymond 已经对其继承 UNIX 的风格大加赞扬了。

如果对这些赞扬 OS X 先进性的文字不屑一顾,也请忽略我这篇「枪文」,因为我想的问题更虚无:不是要在上面的鸿篇巨著后面再添上 OS X 如何先进的证据,而是思考一下促成这些成就的原因。

我认为根本原因在于 OS X 是一个「新」的系统。它的开发始于 1997 年。那时,操作系统中各种技术决策的优点和失算之处都逐渐显露出来。拿窗口管理系统 (window manager) 来说,UNIX 的 X 的体现了分离窗口系统和系统底层内核的正确性,也体现了把上层策略(如窗口的 theme/style )和底层机制分离的正确性。但是 X 系统也有层次过多和协议过于繁琐的缺陷,让 UNIX/Linux 在图形硬件高速发展的时期陷入困境。OS X 作为后来者有机会审视和改进这一切。所以它最终采用了和 X 相似的用户态窗口管理系统,采用了先进的图层混合 (layer blending) 模式,同时抛弃了繁琐的 X 协议和 client-server 架构。另一个例子是绘图模式 (drawing model) 。Windows 的 GDI 绘图模式在当时质量和能力已显粗糙,而在出版业 PDF 正在成为标准,所以 OS X 采用了 PDF 成熟的绘图模式。几年以后 Windows 才推出 GDI+ 效仿 PDF 的高级绘图模式,但是让 Windows 开发者完全脱离旧的 GDI 模式还要等上几年。还可以举出的例子是,究竟让 toolkit(按钮等控件)作为用户进程的一部分来管理,让窗口系统只负责像素;还是像 Windows 那样把 toolkit 作为内核对象来管理。Cocoa 给出的答案也是对先行方案的反思和改进。同样,几年以后,.NET 的 WPF 才开始仿效这种让窗口管理和 toolkit 分离的做法。

所以,公平地说,Windows 的很多问题在于它的「陈旧」,甚至可以归功于它是「先行者」。我想有些读者可能已经等不及要反驳我了:第一,上面说的很多技术(比如 X )并不是在 1997 年前后才显露其优势和不足的,它们的成熟和优劣定论要早得多;第二,OS X 的开发不是 1997 年才开始白纸一张地开始,它的前身 NeXTSTEP  在1980 年代中期就动土了。

没错,反驳的一语中的!即便如此,我仍然认为 OS X (NeXTSTEP) 有机会审视和反思前人的优秀技术(或者优秀的失误),而 Windows 则没有这种机会。为什么?因为当年这些技术被认为是「严肃计算 (serious computing) 」,圈限在服务器和高端工作站领域。当时 Microsoft 的判断是这些基于昂贵硬件的技术一时半会(也就是十来年吧)不会进入 PC 领域。所以,弃这些计算机工程领域的思想珍宝不顾,Microsoft 忙着在 PC 领域重新发明关于安全、多任务、多线程、图形等等功能。甚至在 Windows NT 4.0 中,为了考虑 PC 的「特殊情况」,把 NT 3.5 已经实现的而且被业界认为是正确趋势的用户态窗口管理系统搬到了内核态,开历史的倒车。另一方面,乔布斯离开 Apple 之后,给自己的创业定了一个奇特的目标 —— 创造最好的学术研究电脑。为此而打造的 NeXT 硬件系统真的是贵族血统,却也落得个血本无归的局面。但正是在这个贵族平台上,NeXT 有机会审视和改进那些 Microsoft 不敢问津的「严肃」技术。Windows 的「陈旧」和 OS X 的「新」不在于时间,而在于前者 quick-and-dirty 的战略和后者略显固执的坚持不妥协。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

w

Connecting to %s


%d 博主赞过: