Mac OS X 来自哪里?

Did*_*set 43 osx freebsd bsd

与 Mac 用户讨论后,我得到了几个版本的 Mac OS X 来源。众所周知,在 BSD 中有一些根,但是有多少,在哪里?

有人说 Mac OS X 有一个 FreeBSD 内核,上面的所有实用程序使它成为特定于 Mac 的操作系统。(这里不讨论用户应用程序,只讨论所有的initlscd、 和其他人。binutils?

其他人说 Mac OS X 是 Darwin 内核,即纯 Mac,并且 OS 实用程序来自 BSD。

真相在哪里?

mig*_*aza 68

MacOS 的历史有点复杂。我在 90 年代后期对此非常感兴趣,因为 Mach 已在世界各地被宣传为构建 Unix 系统的更快方法。

内核的起源有点复杂。

这一切都始于 AT&T 免费向一些大学分发他们的操作系统。这个 Unix 在伯克利得到了广泛的改进,成为了 Unix 的 BSD 变体的基础,并结合了一些新的创新,比如“快速文件系统”(UFS),引入了符号链接和套接字 API。AT&T 走自己的路,同时构建了 System V。

同时,研究还在继续,一些人采用了 BSD 的工作作为基础。在 CMU,BSD 内核被用作一些新想法原型设计的基础:线程、控制虚拟内存系统的 API(通过可插入的“分页器”——用户级 mmap)、内核级远程过程调用系统和大多数重要的是将一些内核级操作移到用户空间的想法。这成为了 Mach 内核。

我不确定 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 已经有一个 mmap() 系统调用以及大多数其他 Unix 系统。不存在的“微内核优势”从未真正实现。NeXT 仍然有一个整体内核。FSF 仍在尝试让 Mach 构建,并且不想接触 BSD 代码或为任何开源 BSD 工作做出贡献,他们不断向未指定的内核愿景收费,并且他们自己淹没在 RPC 协议上核心。微内核在纸面上看起来很棒,但结果证明是过度设计的,只会让一切都变慢。

在这一点上,我们还进行了关于微内核与单片内核的 Linus 与 Andy 辩论,世界开始意识到不可能将所有这些额外的周期添加到微内核中,并且仍然领先于精心设计的单片内核.

Apple 尚未收购 NeXTSTEP,但也开始将 Mach 作为其未来操作系统的潜在内核。他们聘请开放软件基金会将 Linux 移植到 Mach 内核,这是在他们的格勒诺布尔办公室完成的,我相信这被称为“mklinux”。

当 Apple 购买 NeXT 时,他们手头上拥有的是一个相对较旧的 Unix 基础,一个基于 4.2 或 4.3 的 Unix,到现在为止,在这些系统上甚至没有开箱即用的自由软件。他们聘请了来自 FreeBSD 的 Jordan Hubbard 来升级他们的 Unix 堆栈。他的团队负责升级用户区,MacOS 用户区升级到 BSD 上可用的最新版本也就不足为奇了。

Apple 确实在某个时候将他们的 Mach 从 2.5 切换到 3.0,但决定不采用微内核方法,而是让所有内容都在进行中。我一直无法确认 Apple 是否使用了 Lites,雇佣了斯堪的纳维亚黑客,或者他们是否采用 4.4 lite 作为他们的操作系统。我怀疑他们这样做了,但我已经转向 Linux 并停止跟踪 BSD/Mach 世界。

90 年代末有传言说 Apple 的 Avie 试图聘请 Linus(此时已经很出名)为他的孩子工作,但 Linus 选择继续在 Linux 上工作。

撇开历史不谈,这个页面描述了用户空间和 Mach/Unix 内核:

http://developer.apple.com/mac/library/documentation/Darwin/Conceptual/KernelProgramming/Architecture/Architecture.html#//apple_ref/doc/uid/TP30000905-CH1g-CACDAEDC

我找到了 OSX 历史的这张图: 替代文字

  • 图像不再可用。 (22认同)
  • 图像*仍然*不可用 (8认同)
  • 如果您真的想看到真正的微内核在运行,请尝试 QNX。在 QNX4 中,内核只有 32 K 字节,并且只处理消息传递、CPU 调度和中断。QNX 操作系统的所有其他部分都可以在不关闭或重新启动系统的情况下进行更换,而且它非常强大。曾经有一个 QNX 的窗口模拟器叫做 Willows,它运行 Windows 应用程序的速度比原生窗口快。虽然这与 OS-X 本身无关,但 QNX 证明了微内核在做得对的情况下确实是可行的。 (4认同)

War*_*ung 24

在 Unix 方面,OS X 是NeXTSTEP的后代,它是从 4.​​3BSD 派生而来的,内核的核心部分被Mach取代。

NeXT 编程 API,最终被称为OpenStep,是当今 OS X 的 Cocoa API 的基础。自 1997 年 Apple 收购 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。其次,在发布第一个公开的 OS X 版本后不久,Apple 聘请了 FreeBSD 项目的联合创始人Jordan Hubbard他在苹果公司工作到 2013 年 6 月。