![Mac OS X 从哪里来?](https://linux22.com/image/217/Mac%20OS%20X%20%E4%BB%8E%E5%93%AA%E9%87%8C%E6%9D%A5%EF%BC%9F.png)
在与 Mac 用户的讨论中,我得到了关于 Mac OS X 来源的多个版本。众所周知,它有一定的 BSD 根基,但是有多少根基,在哪里呢?
有人说 Mac OS X 有一个 FreeBSD 内核,上面的所有实用程序使其成为 Mac 特定的操作系统。 (这里不讨论用户应用程序,仅讨论所有init
、ls
、cd
和其他应用程序。二进制工具?)
还有人说 Mac OS X 是 Darwin 内核,是纯 Mac,操作系统实用程序来自 BSD。
真相在哪里?
答案1
MacOS 的历史有点复杂。我在 90 年代末对此非常感兴趣,因为 Mach 已被宣传为构建 Unix 系统的更快方法。
内核的起源有点复杂。
这一切都始于 AT&T 免费向一些大学分发他们的操作系统。这个 Unix 在伯克利得到了广泛的改进,成为 Unix 的 BSD 版本的基础,并融入了一些新的创新,如“快速文件系统”(UFS),引入了符号链接和套接字 API。 AT&T走自己的路,同时打造了System V。
与此同时,研究仍在继续,一些人采用了 BSD 的工作作为基础。在 CMU,BSD 内核被用作一些新想法原型的基础:线程、控制虚拟内存系统的 API(通过可插入的“寻呼机”——用户级 mmap)、内核级远程过程调用系统以及大多数重要的是,将一些内核级操作移动到用户空间的想法。这成为了 Mach 内核。
我不能 100% 确定 mmap 是否来自 Mach,后来被 BSD 采用,或者 Mach 只是开创了这个想法,BSD 基于 Mach 的想法添加了自己的 mmap。
尽管Mach内核被描述为微内核,但到2.5版本为止,它只是一个提供线程、mmap、消息传递功能的系统,但仍然是一个整体内核,所有服务都运行在内核模式下。
此时,Rick Rashid(现就职于 Microsoft)和 Avie Tevanian(现就职于 Apple)提出了一个可以加速 Unix 的新想法。这个想法是使用 mmap 系统调用将要从用户空间复制的数据传递到实现文件系统的“服务器”。这个想法本质上是试图避免复制相同数据的一种变体,但它被认为是微内核的一个好处,即使该功能可以与微内核隔离。
这个由 VM 支持的更快 Unix 系统的基准促使 NeXT 和 FSF 的人们选择 Mach 作为其内核的基础。
NeXT 使用 Mach 2.5 内核(基于 BSD 4.2 或 4.3),而 GNU 实际上多年来都没有开始这项工作。这就是 NeXTSTEP 操作系统所使用的。
与此同时,在 CMU,Mach 的工作仍在继续,他们最终实现了在 3.0 版微内核之上运行多个服务器的愿景。我不知道有谁能够运行 Mach 3.0,因为所有有趣的用户级服务器都使用 AT&T 代码,因此它们被认为是阻碍,因此它仍然是一个研究产品。
大约在这个时候,Jolitz 团队完成了 4.3+ BSD 到 386 架构的移植,并在 DrDobbs 上发布了他们的移植成果。 386BSD 没有得到积极维护,因此出现了一个团队来维护和推动 386BSD,即 NetBSD 团队。 NetBSD 小组的内部斗争导致了第一次分裂,FreeBSD 由此诞生。当时的 NetBSD 希望专注于拥有一个跨平台的 BSD,而 FreeBSD 希望专注于拥有一个在 x86 平台上表现出色的 Unix。不久之后,NetBSD由于其他一些争议再次分裂,这导致了OpenBSD的创建。
用于 x86 平台的 BSD 4.3 分支在一家名为 BSDi 的公司进行了商业化,原始伯克利团队的各个成员都在那里工作,并与大学的 BSD 团队保持着良好的关系。
AT&T 并没有被逗乐,并启动了 AT&T 与 BSDi 的诉讼,该诉讼后来扩大到也起诉了该大学。该诉讼涉及 BSDi 使用 AT&T 的专有代码(未经伯克利重写)。与即将到来的 Linux 操作系统相比,这使 BSD 受到了阻碍。
尽管事情对被告来说并不好,但在某些时候有人意识到 SystemV 在 BSD 许可证下合并了大量 BSD 代码,而 AT&T 没有履行许可证中的义务。双方达成和解,AT&T 不必将其产品撤出市场,大学也同意删除任何仍可能基于 AT&T 代码的代码。
该大学随后发布了 BSD 4.4 encumbered 和 4.4 lite 两个版本。受阻碍的版本可以启动并运行,但包含 AT&T 代码。精简版不包含 AT&T 的任何代码,但无法运行。
各种 BSD 工作在新的 4.4 lite 版本之上重新完成了工作,并在几个月内有了一个启动系统。
与此同时,如果没有任何用户态服务器,Mach 3.0 微内核仍然不是很有用。
一位来自斯堪的纳维亚大学的学生(我相信,我可能错了)是第一个创建完整的 Mach 3.0 系统和基于 4.4 lite 版本的完整操作系统的人,我相信这被称为“Lites”。该系统可以工作,但速度很慢。
从 1992 年到 1996 年,到现在 BSD 和大多数其他 Unix 系统一样已经有了 mmap() 系统调用。不存在的“微内核优势”从未真正实现。 NeXT 仍然有一个整体内核。 FSF 仍在尝试构建 Mach,并且不想触及 BSD 代码或为任何开源 BSD 工作做出贡献,他们不断地对指定不明确的内核愿景发起攻击,并且淹没在自己的 RPC 协议中核心。微内核在纸面上看起来很棒,但事实证明是过度设计的,只是让一切变得更慢。
此时,我们还就微内核与单片内核进行了 Linus 与 Andy 的争论,世界开始意识到,将所有这些额外的周期添加到微内核中,并且仍然领先于设计良好的单片内核,这是不可能的。
Apple 尚未收购 NeXTSTEP,但也开始将 Mach 作为其未来操作系统的潜在内核。他们聘请了开放软件基金会将 Linux 移植到 Mach 内核,这是在他们的格勒诺布尔办公室完成的,我相信这被称为“mklinux”。
当苹果公司收购 NeXT 时,他们手上有一个相对较旧的 Unix 基础,一个基于 4.2 或 4.3 的 Unix,而现在,甚至连免费软件都不能在这些系统上很好地运行。他们从 FreeBSD 聘请了 Jordan Hubbard 来升级他们的 Unix 堆栈。他的团队负责升级用户空间,MacOS 用户空间升级到 BSD 上可用的最新版本也就不足为奇了。
苹果确实在某个时候将马赫数从 2.5 切换到了 3.0,但决定不采用微内核方法,而是将所有内容保留在进程中。我一直无法确认苹果是否使用了 Lites,是否雇佣了斯堪的纳维亚黑客,或者他们是否采用 4.4 lite 作为操作系统。我怀疑他们确实这么做了,但我已经转向 Linux,并停止跟踪 BSD/Mach 世界了。
90 年代末有传言称,Apple 的 Avie 试图聘请 Linus(当时已经很有名)来为他的孩子工作,但 Linus 选择继续从事 Linux 工作。
抛开历史不谈,本页描述了用户空间和 Mach/Unix 内核:
我找到了这张 OSX 历史图:
答案2
在 Unix 方面,OS X 是下一步,源自4.3BSD,内核核心部分替换为马赫。
NeXT 编程 API,最终被称为开放步骤,是当今 OS X 的 Cocoa API 的基础。自从 Apple 于 1997 年收购 NeXT 以来,两个 API 已经出现了很大的分歧,尽管有正在进行的 努力提供开源 API 兼容的 Cocoa 克隆。
再加上经典的 MacOS 兼容性 API(称为 Carbon),您就拥有了 OS X 编程接口。
(OS X 还有很多其他功能,但它们是所有这些之上的应用程序:Finder、BSD 和 GNU 用户区工具等。)
至于 FreeBSD 内核的想法,它有点正确,但看待它的方式并不复杂。正如我所说,最初的内核来自 NeXT,它用 4.3BSD 和 Mach 组装了他们的第一个内核。这意味着 FreeBSD 和 NeXTSTEP 通过 4.3BSD 共享一些代码。
OS X 基于 FreeBSD 的迷因有两个最新的来源。首先,Apple 继续从 BSD 世界(通常是 FreeBSD)借鉴创新。二、苹果聘请FreeBSD项目联合创始人乔丹·哈伯德在发布第一个 OS X 公开版本后不久。2013 年 6 月他一直在 Apple 工作。
答案3
当你被告知 OSX 有它自己的 Unix 风格时,他们在技术上是正确的。
BSD+ 元素来自下一步+ Apple 调整 = 达尔文
换一种方式。仅订购热软糖/冰淇淋 (BSD) 添加坚果 (NeXTStep) 加鲜奶油和樱桃(Apple 插件和调整)= 热软糖圣代(达尔文)
但 BSD 是添加其他 BSD 的基础,这就是为什么 BSD 的大部分内容都可以在 Darwin 中工作(在这里和那里进行一些调整)