Mac OS X 從何而來?
在與 Mac 使用者討論時,我得到了 Mac OS X 的幾個版本。眾所周知,它在 BSD 中有一些根,但有多少,在哪裡?
有人說 Mac OS X 有一個 FreeBSD 核心,上面的所有實用程序使它成為一個特定於 Mac 的作業系統。(這裡不討論使用者應用程序,只討論所有的
init
,ls
,cd
和其他*。binutils?*)其他人說 Mac OS X 是一個達爾文核心,即純 Mac,並且作業系統實用程序來自 BSD。
真相在哪裡?
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 已經有了 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 上可用的最新版本也就不足為奇了。
蘋果確實在某個時候將他們的 Mach 從 2.5 切換到了 3.0,但決定不採用微核心方法,而是將所有內容都保持在程序中。我一直無法確認 Apple 是否使用了 Lites,僱傭了斯堪的納維亞黑客,或者他們是否採用了 4.4 lite 作為他們的作業系統。我懷疑他們這樣做了,但我已經轉向 Linux 並且不再跟踪 BSD/Mach 世界。
90 年代後期有傳言稱,Apple 的 Avie 試圖聘請 Linus(此時他已經很有名)來為他的孩子工作,但 Linus 選擇繼續在 Linux 上工作。
撇開歷史不談,這個頁面描述了使用者空間和 Mach/Unix 核心:
我發現了這張 OSX 歷史的圖表: