与Mac所有者讨论后,我获得了Mac OS X来源的多个版本。众所周知,它在BSD中具有一定的根源,但是它在哪里,在哪里?
有人说Mac OS X具有FreeBSD内核,上面的所有实用程序都使其成为Mac专用的OS。(不谈论用户的应用程序在这里,只有在所有的init
,ls
,cd
,和其他人。binutils的?)
也有人说Mac OS X是Darwin内核,即纯Mac,并且OS实用程序来自BSD。
真相在哪里?
与Mac所有者讨论后,我获得了Mac OS X来源的多个版本。众所周知,它在BSD中具有一定的根源,但是它在哪里,在哪里?
有人说Mac OS X具有FreeBSD内核,上面的所有实用程序都使其成为Mac专用的OS。(不谈论用户的应用程序在这里,只有在所有的init
,ls
,cd
,和其他人。binutils的?)
也有人说Mac OS X是Darwin内核,即纯Mac,并且OS实用程序来自BSD。
真相在哪里?
Answers:
MacOS的历史有些混乱。在90年代后期,我对这一点非常感兴趣,因为Mach在世界范围内被推崇为构建Unix系统的一种更快的方法。
内核的起源要复杂一些。
一切始于AT&T将其操作系统免费分发给一些大学。该Unix在伯克利进行了广泛的改进,成为Unix BSD变体的基础,并结合了诸如“快速文件系统”(UFS),引入了符号链接和套接字API的若干新创新。AT&T坚持自己的方式,并同时构建了SystemV。
同时,研究仍在继续,一些人以BSD的工作为基础。在CMU中,BSD内核被用作制作一些新概念的原型的基础:线程,控制虚拟内存系统的API(通过可插入的“寻呼机”-用户级mmap),内核级远程过程调用系统以及大多数重要的是将一些内核级操作移至用户空间的想法。这成为了马赫内核。
我不确定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团队已经将386 + BSD移植到386架构上,并在DrDobbs上发表了移植工作。386BSD并未得到积极维护,因此出现了一个小组来维护和推动386BSD向前发展,即NetBSD团队。NetBSD小组内部的争执引起了第一次分裂,由此形成了FreeBSD。当时的NetBSD希望专注于拥有跨平台的BSD,而FreeBSD希望专注于拥有在x86平台上表现出色的Unix。稍后,由于其他一些争议,NetBSD再次分裂,这导致了OpenBSD的创建。
BSD 4.3 for x86平台的一个分支与一家名为BSDi的公司进行了商业合作,最初的伯克利团队的各个成员在那里工作,并与大学的BSD团队保持了良好的关系。
AT&T对此并不感到高兴,因此开始了AT&T与BSDi的诉讼,后来又扩大到起诉大学。该诉讼是关于BSDi使用AT&T的专有代码(尚未由伯克利重写)的。与即将推出的Linux操作系统相比,这使BSD受到挫折。
尽管情况对被告不利,但有人意识到SystemV已根据BSD许可合并了大块BSD代码,而AT&T并未履行其许可义务。达成了一项和解协议,AT&T不必将其产品从市场上撤出,大学同意删除仍可能基于AT&T代码的所有代码。
然后,该大学发布了两个版本的BSD 4.4固定版本和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的辩论,全世界开始意识到,不可能将所有这些额外的循环添加到微内核中,而仍然领先于精心设计的整体内核。
苹果尚未收购NeXTSTEP,但也开始考虑将Mach作为其未来操作系统的潜在内核。他们聘请了开放软件基金会(Open Software Foundation)将Linux移植到Mach内核,而这是在其格勒诺布尔办公室完成的,我相信这被称为“ mklinux”。
当苹果公司购买NeXT时,他们手中拥有的是一个相对较旧的Unix基础,一个基于4.2或4.3的Unix,到目前为止,甚至没有免费软件在这些系统上运行得很好。他们雇用了FreeBSD以外的Jordan Hubbard来升级他们的Unix堆栈。他的团队负责升级用户土地,MacOS用户土地升级到BSD上的最新版本也就不足为奇了。
苹果确实在某个时候将其Mach从2.5更改为3.0,但决定不采用微内核方法,而是将所有内容保持在处理过程中。我一直无法确认苹果是否使用了Lites,聘请了斯堪的纳维亚黑客或他们是否采用4.4 lite作为其操作系统。我怀疑它们确实做到了,但是我已经转向Linux,并且已经停止跟踪BSD / Mach世界。
在90年代后期,有传言说Apple的Avie试图聘请Linus(在这一点上已经很出名了)为他的孩子工作,但是Linus选择继续从事Linux的工作。
除了历史记录,此页面还介绍了用户区和Mach / Unix内核:
我找到了OSX历史的图形:
在Unix方面,OS X是NeXTSTEP的后代,它是从4.3BSD派生而来,内核的核心部分已替换为Mach。
NeXT编程API(最终被称为OpenStep)是当今用于OS X的Cocoa API的基础。自从苹果公司于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的模因有两个最近的来源。首先,苹果继续从BSD世界(通常是从FreeBSD)中借鉴创新。其次,在发布第一个公共OS X版本后不久,苹果聘用了FreeBSD项目联合创始人约旦·哈伯德(Jordan Hubbard)。他在Apple任职至2013年6月。