操作系统那些事儿⑦:macOS——为什么它是真 Unix,而 Linux 却不是 如果把操作系统的发展史比作《三国演义》那么本文更像《三国演义》而不是《三国志》。本系列尝试用故事化的方式讲述 Unix、Linux、BSD、GNU、Windows、macOS、Android 等操作系统背后的发展历程。文中的人物、事件和技术演进都尽量参考公开资料但为了让故事更容易理解会适当简化一些历史细节也会加入作者自己的理解。它不是一篇学术论文而是一段程序员视角的技术故事。如果读完之后你产生兴趣愿意继续查阅官方资料那这篇文章的目的就达到了。引子一个奇怪的问题如果今天打开一台 Mac。你会发现它有漂亮的桌面。有 Dock。有 Finder。有各种图形化软件。普通用户甚至可能不知道它的底层其实非常接近 Unix。打开终端lscdgrepsshvim这些命令都非常熟悉。甚至很多 Linux 用户第一次使用 macOS会感觉这个系统怎么这么像 Linux但是如果进一步了解历史会发现一个有趣的问题macOS 是 Unix。Linux 却不是 Unix。等等。为什么Linux 明明继承了 Unix 的思想。命令也一样。目录结构也类似。甚至很多 Linux 工程师每天都在使用 Unix 哲学。但是它却不能叫 Unix。而 macOS却可以堂堂正正地说我是 Unix。这背后是一段非常有意思的历史。第一章苹果最初并不是 Unix 阵营今天很多人认为Apple 从一开始就是 Unix 家族。其实不是。早期 Apple 的故事和 Unix 没什么关系。1976 年。Steve Jobs、Steve Wozniak 创立 Apple。第一代个人电脑Apple I。后来Apple II。它们运行的是简单的个人电脑操作系统。那个时代Unix 主要属于大学。研究机构。大型计算机。普通消费者根本接触不到。苹果关注的是如何让普通人也能使用电脑。而 Unix 关注的是如何让工程师高效管理复杂计算系统。两者最初服务的人群完全不同。第二章Macintosh苹果第一次改变世界1984 年。苹果发布Macintosh。这是一个历史性的产品。因为它把鼠标。图形界面。窗口系统。带给了普通用户。当时的大多数电脑还停留在命令行时代。而 Macintosh 告诉大家电脑不一定需要敲命令也可以用鼠标操作。这一点影响了整个行业。后来Windows 的图形界面。Linux 桌面环境。都受到了 Macintosh 的影响。但是早期 Mac 使用的系统叫Mac OS Classic。它并不是 Unix。第三章苹果遇到了自己的危机进入 90 年代。苹果遇到了问题。Mac OS Classic 虽然成功。但是底层设计越来越落后。问题包括内存管理不足多任务能力有限稳定性不足难以适应未来硬件。苹果需要一个新的操作系统。但自己重新设计太难。于是苹果开始寻找新的方向。历史的转折点出现了。第四章一个被苹果收购的公司1996 年。苹果收购了一家公司NeXT。这家公司是谁创办的正是Steve Jobs。没错。离开苹果后的 Jobs又创办了 NeXT。而 NeXT 的操作系统叫NeXTSTEP。它非常特别。因为它不是从传统 Mac OS 发展来的。它的底层来自 Unix。更准确地说来自 BSD。NeXTSTEP 使用Mach 微内核BSD Unix 用户空间Objective-C面向对象框架。这套技术路线非常先进。虽然 NeXT 电脑商业失败。但是它的软件技术非常优秀。最终苹果买下了 NeXT。Steve Jobs 也因此重新回到了苹果。第五章macOS 的真正诞生收购 NeXT 后。苹果开始开发新的系统。这个系统后来叫Mac OS X。注意这里的 X不仅代表罗马数字 10。也暗示它和过去的 Mac OS 不一样。它拥有一个全新的 Unix 内核。这个底层叫Darwin。Darwin 是什么简单理解它是 macOS 去掉苹果图形界面后的核心部分。其中包括Mach负责任务调度内存管理进程通信。BSD负责Unix 系统接口网络文件系统用户管理。XNU苹果把Mach BSD结合起来。创造了自己的内核XNU。XNU全称X is Not Unix。名字听起来像玩笑。但它实际上成为了苹果几十年的核心。今天macOS。iOS。iPadOS。watchOS。它们背后都有 XNU。第六章为什么 macOS 是 Unix这里就回到了开头的问题。为什么 macOS 可以叫 Unix原因很简单因为它通过了 Unix 认证。Unix 并不是一个普通名称。它属于The Open Group维护的商标。一个操作系统想叫UNIX。需要符合标准。并通过认证。苹果的 macOS经过认证。所以它可以称为UNIX。甚至苹果官网也会强调macOS 是一个 UNIX 认证系统。第七章那 Linux 为什么不是 Unix这里很多人会误解。Linux像 Unix。学 Unix。用 Unix 哲学。但是它不是 Unix。原因Linux 不是 Unix 源代码发展出来的。它是Linus Torvalds1991 年从零开始编写的一个新的 Kernel。故事是这样的。1991 年。芬兰大学生Linus Torvalds觉得Minix 太有限。于是自己写了一个操作系统内核。最开始只是一个个人项目。后来它和 GNU 软件结合。形成GNU/Linux。所以Linux 更像一个“Unix 风格的新系统”。而不是Unix 家族中的血统成员。如果打个比方Unix 是一个老贵族家族。BSD是嫡系后代。macOS通过 NeXT 继承了 BSD 血统。Linux不是这个家族出生。但是学习了这个家族的文化。最后成为了世界级强者。第八章macOS 为什么比 Linux 更像 Unix这是一个很有趣的问题。很多 Linux 用户第一次使用 Mac会发现终端体验非常熟悉。原因因为 macOS 继承了大量 Unix 用户空间。例如/etc/usr/bin/sbin/dev这些目录结构都有 Unix 血统。命令sshvimgrepawksed也都是 Unix 世界留下来的工具。但是macOS 和 Linux 也有区别。例如Linux使用 Linux Kernel。生态GNU Linux 各种发行版。macOS使用 XNU。生态Darwin Apple Framework。Linux 更自由。macOS 更封闭。Linux 更适合服务器。macOS 更适合桌面开发。第九章一个有趣的历史循环回头看Unix 的故事非常奇妙。1969Unix 在 Bell Labs 诞生。↓1970-1980Unix 进入大学。↓BSD 出现。↓1983GNU 开始创造自由 Unix。↓1991Linux 出现。↓1996苹果收购 NeXT。↓2001Mac OS X 发布。最终Unix 分裂成了几条道路。一条BSD → NeXT → macOS一条GNU → Linux一条商业 UnixAIXSolarisHP-UX它们争论。它们竞争。但是它们都继承了 Unix 的思想。写在最后Unix 没有消失只是换了一种方式存在很多人认为Unix 已经过时。其实不是。Unix 更像一种文化。它留下一切皆文件小工具组合文本接口模块化设计简洁哲学。今天你的 Mac。你的 Linux 服务器。你的 Android 手机。甚至很多云计算基础设施。都能看到 Unix 的影子。如果说Linux 是一个没有 Unix 血统却继承 Unix 精神的年轻英雄。那么macOS 就像一个真正继承 Unix 家谱的贵族后代。它们走了不同的道路。但它们都证明了一件事五十年前一个为了提高工程师效率而诞生的小系统最终改变了整个计算机世界。Unix 没有消失。它只是换了一种方式继续运行在我们身边。