Mach(Multiple Asynchronously Communication Hosts) 是一个由卡内基梅隆大学开发的操作系统内核,Mach的开发是为了取代BSD的UNIX核心。

Mach 内核的设计目标之一是要兼容 Unix 系统。
当初他们的设想是,真正的操作系统可以作为一个用户态的程序跑在 Mach 内核上。
Mach 内核开发的时候以 4.3BSD 为基础进行开发。
他们在论文上称这是”为 UNIX 开发的一个新内核”。
Mach 内核开源且无任何 licensing 约束。这意味着任何人都可以免费发行 Mach 内核。

嫌弃传统 UNIX 内核什么都干,过于臃肿。所以 Mark 的设计目标是要取代 UNIX 内核,让 UNIX 跑在 Mach 内核的用户空间里。这个特性在 Mach 3.0 真正实现了。但是众所周知 Mach 内核并不提供文件系统和网络实现,所以依然需要和 UNIX 做大量的数据交换。这种交换的方式就是通过 Mach 的 IPC 通信。而让几乎所有进程都在两个空间之间做 IPC 通信是非常低效的。

所以 NEXTSTEP 系统修改了 Mach 内核的实现,让 Mach 和 BSD 都跑在同样的内核空间上,所谓的混合内核 XNU 出现了,同时让用户空间发起的文件、网络请求等本来要通过 IPC 调用的接口都改成 system call。

Mach 继承卡内基梅隆大学的 Accent kernel,Mach 项目主导人理查德·拉希德曾于微软的研究部门担任高级人员,后成为微软副总裁。另一位 Mach 开发者阿瓦德斯·特凡尼安(Avie Tevanian)曾是 NeXT 首席程序员,之后担任苹果电脑软件技术部门主管直到2006年。

该项目在1985年启动,并且在1994年因为 mach3.0 的显著失败而告终。但是 Mach 却是一个真正的微核。GNU Mach 就是 Mach 的延续,现在 GNU Mach的计划与GNU HURD联系紧密。Debian GNU/Hurd 就是基于 GNU Mach 的。

史蒂夫·乔布斯(Steve Jobs) 1985 年创办的 NeXT 团队使用了卡耐基梅隆大学的 Mach 内核和部分 BSD 代码库来创建 NeXTSTEP 操作系统。

苹果计算机在 1997 年 2 月将 NeXT 买下,NeXTSTEP 成为 Mac OS X 的基础。

Apple 的工程师们开始使用 NeXTSTEP 4.2 作为新 Macintosh OS 的起点,并开始了为期三年的研发,将 Unix 核心的 OS 转变为一般消费者使用的作业系统。此计画的第一个专案的代号为“Rhapsody”。

1999 年 3 月发布 Mac OS X Server 1.0,这是第一个、也是唯一一个商业版本的 Rhapsody,系统核心技术则来自 NeXTSTEP。

2001 年 3 月 24 日,Apple 开始发售第一个正式版本的 Mac OS X v 10.0,由 Yellow Box 为基础开发的“Cocoa”API、图形显示技术“Quartz”以及其他来自 NeXT 的技术,最后与 Rhapsody 整合得到 Mac OS X v 10.0,Rhapsody 演化为 OS X

Darwin 是一种 类 Unix 的操作系统,整合数种的技术,包含开放源码的 XNU 核心 和 Mach 微核心,操作系统的服务和 userland 工具是以 4.4BSD,特别是以 FreeBSD 为基础。Darwin 软件本身来自于 NeXT 公司开发的 NextStep 操作系统的 BSD 层。

2005年5月苹果公司关闭了基于 Intel 架构的 Darwin 的源代码。苹果公司同时宣布,他们将继续完全开放基于PowerPC架构的Darwin的源代码。

Mac OS X 的内核中含有早期 Mach 的组件,Mac OS X 使用混合内核 XNU,XNU 是将卡耐基梅隆大学开发的 Mach 内核和 FreeBSD 组件整合而成的混合内核。

NeXT 不久后释出了NEXTSTEP系统程序开发中用到的API,NeXT将这个组API命名为 OPENSTEP。随后NeXT在1993年中止了硬件业务,转为专注于 OPENSTEP 的软件市场开发上。这里有疑问,到底是命名为 OpenStep 还是 OPENSTEP?

OpenStep 是一组面向对象的 API。1993年,NeXT 和 Sun 公司联合发布的一个针对 NEXTSTEP 系统的标准规范。OpenStep 在自由软件基金会的实现名称称为 GNUStep。此外还有一个 Linux 版本,命名为 LinuxSTEP。

OPENSTEP 是由 NeXT 开发的一个 OpenStep 的特殊实现。OPENSTEP 作为 NeXT 的主要作业系统产品,直到 1997 年被苹果电脑收购。接下来,OPENSTEP 与现存的 Mac OS 的相关技术相结合,产生了 Mac OS X。

NEXTSTEP(官方写法很多种,一开始叫做 NextStep、NeXTstep、 NeXTSTEP,最后才叫做 NEXTSTEP。)是由 NeXT 所开发的操作系统。

NEXTSTEP 是操作系统,又它衍生了一组面向对象的 API,是一种操作系统的标准规范,叫 OpenStep。

OPENSTEP 是操作系统,它是一个 OpenStep 的特殊实现。

Mac OS X 就是奠基于 OPENSTEP 和 NEXTSTEP 的基础上。

XNU 是内核,由 Mark 和 BSD 系统内核混合构建而成。XNU 最早出现在 NEXTSTEP 中,后来的 OPENSTEP 也是以 XNU 为内核。

Darwin 是操作系统,而且是最为底层的操作系统,称为核心操作系统,由 XNU 和其它苹果技术及相关工具构建而成。Darwin 是在 Mac OS X 中才出现的。

Darwin 首次出现在 1999 发布的 Mac OS X Server 1.0 中,以 XNU 为核心,但是把 4.4BSD 更新成了 FreeBSD 的代码,把 Mark 更新成了OSFMK 的 Mach 3.0 和部分来自 University of Utah 的 Mach 4 项目。

早期苹果甚至提供了 Darwin 安装包,可以作为一个独立系统安装到 x86 和 PowerPC 机器上。不过现在只开放源代码了。

严格来说现在我们接触到的 macOS 内核,官方叫做 Darwin,它的核心是 XNU,可以独立安装。严格意义上 XNU 和 Darwin 并不完全相等,较真地讲 XNU 只是 Mach/BSD 部分。在前面的文章里我基本上把 Darwin 和 XNU 当做同义词,这并不严谨。但是根据我的考证,目前 Darwin, XNU 和 macOS Kernel 基本等同于一个意思,只要读者朋友不会产生歧义即可。

Rhapsody 基于 NeXT 的 OPENSTEP 开发,可以认为是 Mac OS X 的过渡产品。

2007 年 10 月 26 日正式发布的 Mac OS X v10.5 (Leopard) 得到 The Open Group 的“Single UNIX Specification”认证,成为正式的 UNIX。

下面这张图非常好呈现了 Mac OS X 各种技术层的关系:

macos内核和IOS内核_UNIX

下图是 Mac OS X 的衍生关系图:

macos内核和IOS内核_UNIX_02

最后:Mac OS X 其实就是 Unix 的衍生操作系统,属于 BSD 这个分支