几个月前写的《为什么 Mac OS X 先进?》有人认同也有人反感。想给它写个续篇缘于最近发生的两件事情。一件是为了买《 The Design and Implementation of the FreeBSD Operating System 》在 amazon.com 上闲逛(后来在 china-pub.com 上买到了影印版),惊喜地看到《 DTrace: Dynamic Tracing on Oracle Solaris, Mac OS X, and FreeBSD 》已经出版了。五年前在杭州西湖边的酒店首次听 Sun Microsystems 工程师介绍 DTrace,还只是 Solaris 上和我不太相关的东西。半年前得知 DTrace 已经被移植到 OS X 上,在 amazon.com 上看到这本书处于未出版的预定状态。今天终于能翻着这本书在 OS X 上把玩 DTrace,心情有些许激动。
另一件事是同事向我推荐 Blackhat 的 Dionysus Blazakis 的《 The Apple Sandbox 》。在《 Sandbox 初探 》中我提到过,Sandbox 是在 DAC 和 MAC 两种安全模型都不适合个人计算的情况下另辟的第三条路。读了 Blazakis 的 paper 发现 Apple 没我描绘的那么特立独行 [注]。OS X 自 Leopard 起就已经集成了通用 MAC 架构 TrustedBSD,只是一直未有具体策略施加其上(TrustedBSD 只是执行 MAC 策略的机制而不是策略本身)。Lion 中新出现的 Sandbox 是在该架构上编写的 policy module。如《 Sandbox 初探 》所述,Apple 的创新在于和 UI framework 集成的动态安全策略。在执行安全策略的底层架构上,Apple 并不是自己发明车轮,而是直接采用了 BSD 社区的方案。另一方面,如 Blazakis 所说,Sandbox 也为 TrustedBSD 增加了高价值的功能,没有这类 closed 系统的无缝封装,无法想像 TrustedBSD 能在普通大众的计算机上发挥作用。
这两件事情让我回忆起前段时间看到的关于「开放模式」的讨论。Mac OS X 常被称为 closed 系统,相对而言有人甚至称 Windows 为 open 系统。Closed 略带贬义,因为有人盲目崇信 open 必胜。Steve Jobs 和 Bill Gates 都更愿意用含蓄一些的词,前者称 Mac 为 integrated 系统,后者称 Windows 为 compatible 系统。我认为做比较还是该用 open/closed 这样的直白词汇,但是要在各个层次分别描述:
- Closed open-core 系统:Mac OS X
- Open closed-core 系统:Windows
- Open 系统:Linux,BSD
这些年 Mac 似乎远比 Windows 成功。Linux 和 BSD 这类 open 系统的成功领域是嵌入式设备、移动系统、服务器和超级计算等定制硬件系统,从软硬件的整体角度来说也构成 closed open-core 系统。看来 close open-core 是这阵子的黄金模式。传记《 Steve Jobs 》反复表达 closed 系统在提供优秀用户体验方面的 open 系统不可比拟的优势。但是人们经常忽视 Apple 产品在 open-core 方面的优势。
上面两个实例充分体现了 open-core 模式的优势。Jobs 公布 OS X 的第一个预览版时强调它是 Unix 并非吸引观众的权宜之计,目前为止七个版本的发展中,OS X 和Unix-like 系统社区一直保持密切的交流(还没有提这些年 Apple 向 Unix-like 反哺的代码,比如 Grand Central Dispatch)。这几年 Mac 上很多创新都来自公共领域经过考验的杰作。Closed-core 的 Windows 尽管能用于更广范围的廉价硬件(以牺牲用户体验为代价),但是集成这些创新明显力不从心。一是和 Unix-like 不兼容的内核必然导致移植成本增加,二是长久隔离于 Unix 圈之外的开发团队对公共领域的创新缺乏敏感,以至于只有 Apple 等其它厂商早有所行动之后才能缓慢跟进。
关于底层和上层的 open/close 模式问题,曾经在《 Open Source 的界限 》中从 open source 项目角度讨论过。Open-core 无疑是总结这个模式的好名字。Open source 的界限,就是 open 的界限,也是 open 的生命力所在。
注:虽然《 Sandbox 初探 》在 Sandbox 和 MAC 之间的关系上不太准确,但是这不妨碍它是 Blazakis 的 paper 的有益补充。后者虽然有无可比拟的 reverse engineering 实证作为基础,却没有涵盖 Sandbox 最重要部分 —— 和 UI 集成的通过 Powerbox 动态扩展 sandbox 范围的机制。关于这部分机制我认为《 Sandbox 初探 》的解释是正确的。
发表评论