本文地址:https://blog.hoppinglife.com/?p=19
警告:这是一篇高度个人化的文章,不适者请跳过。
这篇文章不是要探讨OS X的可用性或者设计优劣:尽管那个题目很热闹。我要讲的话是:『Mac OS X不是unix』。
从字面角度上,这句话不太正确:OS X通过了SUSv3,这使得它成为地球上不超过十个可以自称自己是『UNIX』的操作系统之一。其他的成员包括AIX, HP-UX, Solaris等等。
但是Linux和BSD都不是这个家族的成员,而它们加起来占了Unix服务器的绝大部分,所以让我略加修改APUE的名言:
On the other hand, if it does not look like a duck, does not walk like a duck, and does not quack like a duck, then it’s probably not a duck.
所以我们来看看Mac OS X是不是unix:Again,这无关某个动物或者鸭子是好还是坏,我只想说明某只特定的动物是不是鸭子。
一 内核
『Mac的底层是Darwin,Darwin是BSD』大概是最常听到的关于Mac和BSD的关系的描述。但事实上不是这回事。
事实上这个内核的核心还是mach:内存管理、进程管理都由mach负责,而mach不管从历史还是特征上都更像NT内核。部分Darwin kernel的源代码来自4.4BSD – 和Berkeley有关的最后一个版本。但是这部分代码运行在Mach的上层,几乎只负责提供SUS/POSIX子系统的API,而且被大规模的修改过. 除此以外,Darwin kernel拥有自己的Driver API和I/O Kit,(面向对象的),从这个角度上来说,与其说Darwin kernel像unix, 还不如说它像VMS/Windows。
二 API
让我从一个问题开始:『装着cygwin的Windows』是unix吗?
OS X的感觉与这个类似:你确实可以使用POSIX的API,但大多数OS X的GUI会基于闭源的cocoa,会使用特有的thread API,会使用launching API来运行daemon,会使用GCD来做消息处理,会使用不一样的动态链接库。
简而言之,除了使用了Posix的API,OS X和BSD/Linux并不share太多的共同点。你可能会使用一些POSIX的API,但你几乎同样必须使用Apple专有的API。
与其说你在开发unix软件,不如说你在开发OS X软件。
三 Look’n’Feel
OK,回到使用上,Mac OS X到底有多unix-y呢?
事实上,Apple在努力隐藏这个系统的unix部分:Apple有自己的路径规则和文件系统。用户使用Applescript来做自动化。时至今日,安装软件很多时候还是运行一个installer或者把文件copy到Application folder。App Store里找不到wget或者macvim,你可以清晰的区分出两类程序——一类装在/usr下面,一类装在/Applications里。
你的用户感受是『Mac OS』,不是『unix』。与其说Mac OS X像unix,不如说它更像Mac OS 9。
四 哲学
“Keep it simple and stupid”
“Do not reinvent the wheel”
“Write prog1rams that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.”
unix的最核心的价值之一,在于它提供的模式:充分利用已有的成果,给最终用户以选择的机会,系统高度透明和模块化,高度可配置。
Mac OS X不是这样的一个系统。Apple搭建了一个自有的平台,通过限制功能和封闭来达到稳定性,通过复杂的封装来达到可用性。macports和homebrew能够很好的反映这一点:你要么选择冗余(重新安装所有文件),要么选择匮乏(被系统工具的版本限制).
五
如果从内核,API,操作方式到哲学,Mac OS X都更像Mac OS 9而非unix的话,为什么我们还要叫它unix呢?
我对Mac OS X没有什么意见——出于个人的偏爱,我不会用它,但我相信它是一个出色的系统。
但我不喜欢Apple用Unix当商标来推广Mac OS X,unix不仅仅是一个『好用的shell』而已,它的价值,也在于『类似的系统路径和配置方式』,更重要的,在于『高度透明和可配置』,在于『充分利用既有的社区成果而非重新发明轮子』。对这些哲学的坚持,是unix社区成功的要素之一。
但OS X是一个和unix社区从理念到实践都相差甚远的OS。它有着特有的操作方式和配置规则,有着比Windows还厚的封装,重新发明了比Ubuntu还多的轮子。
它只是碰巧能兼容一部分BSD程序而已。认为『Mac OS X有Unix认证所以是unix』和认为『Windows + cygwin是POSIX兼容的所以是unix』没有什么本质不同。就算猩猩和老鼠99%的基因相同,猩猩也不是老鼠。
你可以喜欢unix,也可以讨厌它,但是希望你喜欢或讨厌unix的原因,不是因为你喜欢或者讨厌Mac OS X。