前面的文章都在講內核代碼細節,實(shí)在有點(diǎn)費腦,這次我們來(lái)聊點(diǎn)輕松的歷史故事吧?,F在我們已經(jīng)知道 macOS 的內核主要是由 BSD 和 Mach 組成,但是為什么是這樣的混合設計呢?
Amit Singh 的 Mac OS X Internals 一書(shū)在開(kāi)頭就介紹了從 Apple OS X 誕生的歷史,幾年前剛買(mǎi)這本書(shū)的時(shí)候我還覺(jué)得為啥講這么長(cháng)的故事一直不進(jìn)入“干貨”部分?,F在回過(guò)頭來(lái)看,正是作者介紹了這段歷史,后面內核中一些有點(diǎn)疑惑的地方才順理成章。
本文主要來(lái)自 Amit Singh 書(shū)中所述,再加上我查閱的資料所寫(xiě)。年代久遠,如有謬誤,煩請諸位不吝雅正。
一、蘋(píng)果公司早期(1972-1991)喬布斯(Steve Jobs)和史蒂夫·沃茲尼克(Steve Wozniak) 1976 創(chuàng )辦蘋(píng)果公司,關(guān)于這家公司的故事已經(jīng)廣為流傳,OS X 的誕生也與喬布斯后來(lái)的回歸息息相關(guān)。我們知道喬布斯離開(kāi)蘋(píng)果后創(chuàng )辦了 NeXT 公司,也知道今天我們開(kāi)發(fā)的 iOS/macOS 系統跟 NeXTSTEP 系統有千絲萬(wàn)縷的關(guān)系。但是喬布斯一回歸 NeXTSTEP 就變成今天的 macOS 了嗎?并不是,歷史的道路是非常曲折的。
時(shí)間回到 1977 年,喬布斯在 West Coast Computer Faire 發(fā)布了 Apple II 這款個(gè)人電腦,這是蘋(píng)果公司對外發(fā)售的第一款消費級個(gè)人電腦。這款產(chǎn)品大獲成功,也讓兩位創(chuàng )始人成為百萬(wàn)富翁。
1984 年 1 月 22 日,蘋(píng)果在超級碗(Super Bowl)中場(chǎng)休息時(shí)播放了一個(gè)堪稱(chēng)歷史經(jīng)典的廣告—— 《1984》 ,以此發(fā)布新產(chǎn)品 Macintosh 計算機。
但是在蘋(píng)果公司內部,與 Macintosh 研發(fā)的同一時(shí)期,喬布斯還帶領(lǐng)了一個(gè)團隊開(kāi)發(fā) Lisa 電腦(1983 年發(fā)布)?,F在我們知道這是一個(gè)失敗的產(chǎn)品,并且喬布斯也于 1985 年被董事會(huì )趕出了蘋(píng)果,后來(lái)自己創(chuàng )辦了 NeXT 公司。
一晃四年過(guò)去,1988 年蘋(píng)果的團隊在開(kāi)會(huì )討論下一代操作系統應該帶上什么特性。他們在白板上用三種顏色的便利貼表示不同的 idea:
當時(shí) Macintosh 上跑的系統版本是閉源的 System 6,1988 年 4 月發(fā)布,蘋(píng)果自家的很多產(chǎn)品都使用這個(gè)系統。在這個(gè)階段,蘋(píng)果的圖形界面操作系統依然還是處于比較領(lǐng)先的地位,市面上有 GUI 的操作系統 還不算多 ,做得好的更沒(méi)幾個(gè)。但是蘋(píng)果的下一代系統 System 7 的研發(fā)卻出現了問(wèn)題,一連好幾年沒(méi)法發(fā)布。
這時(shí)候隔壁家微軟已經(jīng)在 1990 年發(fā)布了 Windows 3.0 (1.0 和 2.0 市場(chǎng)反響都一般),借此一炮而紅,成為當年最流行的圖形界面操作系統。
1991 年蘋(píng)果終于發(fā)布了 System 7 版本,但是這些“藍色”的 idea 不過(guò)是對現有系統的改進(jìn),并沒(méi)有特別大的突破。
而微軟在 Windows 3.0 成功后,又繼續在操作系統上發(fā)力。當時(shí)微軟內部有一個(gè)代號為 Chicago 的項目,原計劃在 1993 年發(fā)布。但是項目一直延期,最終在 1995 年才終于面世。這款產(chǎn)品就是廣為人知的 Windows 95。除了家用系統,微軟在 1993 年也發(fā)布了面向服務(wù)器的 Windows NT 系統,自帶網(wǎng)絡(luò )服務(wù), NTFS 文件系統,支持 Win32 API。
反過(guò)來(lái)看蘋(píng)果,卻陷入了深深的危機。1998 年開(kāi)始蘋(píng)果一直在探索自家操作系統未來(lái)的方向。除了已經(jīng)發(fā)布的“藍色” System 7,“粉紅色”的部分蘋(píng)果與 IBM 合作,成立 Taligent 公司試圖研發(fā)下一代操作系統,但是該項目一直沒(méi)有產(chǎn)出,直到最后公司被 IBM 收購也沒(méi)有對外發(fā)布過(guò)任何系統。
至于更加激進(jìn)的“紅色”項目,代號為 Raptor,則無(wú)疾而終。個(gè)中細節在網(wǎng)絡(luò )上未有記錄,只在《Mac OS X Internals》一書(shū)有所提及??梢哉f(shuō) 1990 年代的蘋(píng)果,正在一步步走向深淵。
二、蘋(píng)果在操作系統上的嘗試(1991-1997)面對微軟的挑戰,蘋(píng)果做了很多操作系統的探索和嘗試,內部開(kāi)發(fā)與外部合作兼備。當時(shí)的 CPU 還不像今天基本只剩 Intel 和 AMD 兩家(手機端基本都是 ARM),Macintosh 的機器使用的是摩托羅拉 68K 系列的 CPU,而 Windows 則使用的是 Intel 的 x86 系列 CPU。68K CPU 雖然能提供 Intel 486 一樣的能力但是發(fā)熱比 486 高,這時(shí)候如果蘋(píng)果也開(kāi)始遷移到 Intel 平臺那可能歷史就改寫(xiě)了。
Intel 的 CEO Andy Grove 還找過(guò)蘋(píng)果,期望能讓 Macintosh 支持 Intel CPU。但是當時(shí)蘋(píng)果評估之后覺(jué)得 Intel 的 CISC (復雜指令集) 設計未來(lái)肯定打不過(guò) RISC (精簡(jiǎn)指令集),所以沒(méi)有投入 Intel 的懷抱。他們選擇了與 IBM, 摩托羅拉合作成立 AIM 聯(lián)盟,研發(fā) RISC 的 PowerPC CPU。
1994 年蘋(píng)果發(fā)布的高性能機器 Power Macintosh 首次搭載了這顆芯片,在市場(chǎng)上獲得不錯的反響,在 9 個(gè)月內賣(mài)出超過(guò) 100 萬(wàn)臺。但是長(cháng)期來(lái)看當時(shí)沒(méi)有選擇 Intel 是個(gè) 錯誤的決定 。
2.1 Star Trek 項目 (1992-1993)但是研發(fā) PowerPC 的同時(shí),蘋(píng)果也沒(méi)有放棄 Intel x86 架構。1992 年他們跟 Novell 公司合作,打算把 System 7 移植到 x86 架構上。蘋(píng)果有操作系統經(jīng)驗,Novell 則有跨平臺經(jīng)驗。但是 1993 年中,PC 價(jià)格戰開(kāi)始后因為業(yè)績(jì)壓力董事會(huì )把 CEO John Sculley (也就是那位著(zhù)名的賣(mài)可樂(lè )的 CEO,也是他把喬布斯趕走的)辭退了,新任 CEO Michael Spindler 對 Intel 不感興趣于是這個(gè)項目就被取消了。
2.2 Copland-Mac OS 8 (1994-1996)
Michael Spindler 在 CEO 的位子只坐了 3 年,他在職期間發(fā)布了 PowerPC 倒是挺成功的,但是后來(lái)的 Newton 和 Copland 操作系統卻均是失之作。
蘋(píng)果一直以來(lái)都自信自家的產(chǎn)品能提供遠超其他產(chǎn)品的用戶(hù)體驗,但是隨著(zhù) Windows 95 的發(fā)布這種差距在縮小,并且隨著(zhù) PC 價(jià)格的下降蘋(píng)果的性?xún)r(jià)比已然極低,于是蘋(píng)果急于讓自家的操作系統提供遠超微軟 Windows 的能力。
從 System 7.6 開(kāi)始,Macintosh 的操作系統正式改名為 Mac OS 7.6。1994 年蘋(píng)果宣布 Mac OS 8 將提供非常革命性的新特性,項目代號為 Copland。
Copland 的目標包括擁抱 RISC 讓整個(gè)系統原生支持 PowerPC 架構,集成并改進(jìn)蘋(píng)果現有的技術(shù)比如 OpenDoc,ColorSync 等等。保留現有的 Mac OS 界面并提供可自定義的能力。擴展系統能力,允許跟 DOS 和 Windows 系統協(xié)作。支持多用戶(hù)登錄。以及一些其他革命性的特性。
一開(kāi)始這個(gè)項目在公司內是非常激動(dòng)人心的,1995 年還對 50 個(gè) Mac 開(kāi)發(fā)者放出了 Beta 版。但是從那以后,Copland 就再也沒(méi)有更新過(guò),也從來(lái)沒(méi)有正式對外發(fā)布過(guò)。

當時(shí)的蘋(píng)果公司以及負債累累,John Sculley 辭職的時(shí)候蘋(píng)果公司還有 20 億美元的現金與 2 億美元的負債。到了 1996 年,有超過(guò) 500 名工程師投入到 Copland 項目中,光這個(gè)項目一年就要花去 2.5 億美元的預算。那一年蘋(píng)果虧損 7.4 億美元,CEO Michael Spindler 被辭退,Gil Amelio 上任,該項目被正式取消。
Gil 后來(lái)在他的 On the Firing Line: My 500 Days at Apple一書(shū)中是這樣描述這個(gè)項目的:
just a collection of separate pieces, each being worked on by a different team… that were expected to magically come together somehow… Copland 項目雖然失敗了,但是它讓蘋(píng)果重新思考了自家操作系統的定位,同時(shí)感受到了強烈的生存危機,畢竟從 1991 年發(fā)布 System 7 到 1997 年之間,蘋(píng)果一直沒(méi)能發(fā)布一個(gè)正式的大版本。
此時(shí)的蘋(píng)果急需尋找一款足夠優(yōu)秀的操作系統來(lái)拯救蘋(píng)果。這時(shí)候收購一個(gè)操作系統公司的選項浮出水面。差不多是時(shí)候喬布斯要出場(chǎng)了,但是在他出現之前,還有另外一家公司成為蘋(píng)果的候選。
三、收購與轉折(1996-1997)
1996 年 Gil Amelio 上任后蘋(píng)果已岌岌可危。當時(shí)考慮過(guò)跟微軟合作,開(kāi)發(fā)基于 Windows NT 的 Apple OS。同時(shí)也考慮采用 Sun 公司的 Solaris 系統,或者收購 Be 公司的 BeOS。
Be 公司也跟 Apple 頗有淵源,甚至有點(diǎn)狗血。BeOS 的創(chuàng )始人 Jean-Louis Gassée 曾經(jīng)是蘋(píng)果公司歐洲運營(yíng)負責人。1985 年 Gassée 得知喬布斯準備把當時(shí)人還在中國的 CEO John Sculley 趕走的時(shí)候,通知了 John Sculley,于是 Sculley 召開(kāi)了董事會(huì )討論這件事情。當時(shí)喬布斯在蘋(píng)果內部可謂是眾叛親離,這是他自己盲目自信帶來(lái)的后果。當時(shí)他利用自己的權威給 Macintosh 部門(mén)很多資源,員工的收入都比隔壁 Apple II 高得多,但實(shí)際上 Apple II 才是真正貢獻公司利潤的部門(mén)。1985 年初連創(chuàng )始人史蒂夫·沃茲尼克也離開(kāi)了蘋(píng)果,連帶著(zhù)很多高層也相繼離開(kāi)。所以最終董事會(huì )站在 Sculley 這邊,反而把喬布斯趕走了。
John Sculley 成功把喬布斯趕走了之后,就讓 Gassée 主管 Macintosh 產(chǎn)品。1988 年 Gassée 主管蘋(píng)果的高級產(chǎn)品開(kāi)發(fā)和全球市場(chǎng),有傳言稱(chēng)他要取代 Sculley 成為 CEO。不過(guò) 1990 年他就被 Sculley 和其他董事會(huì )成員要求離職了。
1991 年離開(kāi)蘋(píng)果之后 Gassée 創(chuàng )辦了 Be 公司,帶走了一堆蘋(píng)果員工。他們開(kāi)發(fā)了 BeOS,能在 PowerPC 上跑,目標很明確就是希望蘋(píng)果可以收購他們,取代前面說(shuō)的已經(jīng)快掛掉的 Mac OS。BeOS 的特性很多,首先可以在 PowerPC 運行,然后支持內存保護,搶占式多任務(wù),支持對稱(chēng)多處理等等。但是,BeOS 當時(shí)還沒(méi)有完全實(shí)現,也并沒(méi)有經(jīng)歷過(guò)市場(chǎng)的考驗。
1996 年蘋(píng)果給 Be 開(kāi)價(jià) 5000 萬(wàn)美元(Be 公司的總投資大約 2000 萬(wàn)美元),但是 Gassée 非常自信地給出 5 億美元回價(jià)。蘋(píng)果又協(xié)商給 1.25 億,Gassée 回 3 億,蘋(píng)果再開(kāi)價(jià) 2 億,但是 Gassée 仍不接受,給了個(gè)最終價(jià) 2.75 億。
于是交易告吹。
蘋(píng)果于同年底宣布以 4 億美元收購了喬布斯的 NeXT,1997 年 2 月正式完成收購,喬幫主回歸蘋(píng)果,7 月份說(shuō)服董事會(huì )辭退 Amelio,自己成為公司 CEO,開(kāi)啟了蘋(píng)果的新世紀。
四、NeXT 篇章
NeXT 的操作系統 NEXTSTEP (也寫(xiě)作 NeXTstep, NeXTStep) 跟 BeOS 不一樣,它是經(jīng)歷過(guò)市場(chǎng)驗證的。蘋(píng)果當時(shí)的 CEO Amelio 還戲稱(chēng)這場(chǎng)收購是用 “plan A” 取代了 “plan Be”。
最終 NEXTSTEP 與 Mac OS 的結合誕生了如今我們使用的 Mac OS X (macOS)。不過(guò)并不是說(shuō)喬布斯一回到蘋(píng)果這系統就整合完了,他的回歸到 OS X 誕生大約隔了 3 年。
4.1 NEXTSTEP(1985-1997)
1985 年喬布斯離開(kāi)蘋(píng)果的時(shí)候,帶走了 5 個(gè)蘋(píng)果員工創(chuàng )辦 NeXT 公司,專(zhuān)做面向教育的產(chǎn)品。四年后,1988 年 10 月 12 日, 喬布斯在舊金山市區的 Davies Symphony Hall 發(fā)布了 NeXT Computer ,跑在上面的操作系統就是 NEXTSTEP。
NeXT 公司的創(chuàng )始團隊還包括來(lái)自 CMU Mach 內核的團隊的成員 Avie Tevanian。他是 Mach 內核的主要設計者和開(kāi)發(fā)者之一。所以 NEXTSTEP 系統從第一天起就是基于 Mach 和 BSD 內核進(jìn)行開(kāi)發(fā)。當時(shí)發(fā)布的第一個(gè)版本采用的是 Mach 2.0 版本和 BSD 4.3 版本。Avie Tevanian 后來(lái)也成為蘋(píng)果公司軟件工程的高級 VP,2003 年當上 CTO,2006 年離職。
NEXTSTEP 系統提供了圖形界面和 Unix 風(fēng)格的命令行操作??梢哉f(shuō)今天我們見(jiàn)到的 macOS 的很多特性都來(lái)自于 NEXTSTEP。比如說(shuō):
Application Kit1992 年,NEXTSTEP 發(fā)布了可以跑在 x86 架構上的版本。當時(shí)它們可以支持在 68K(摩托羅拉), x86(英特爾), PA-RISC(惠普), SPARC(Sun)等多種不同的芯片上運行。并且可以把多種架構的代碼打包成一個(gè) fat binary,也就是我們今天在 iOS 上常見(jiàn)的所謂 Universal Binary。
4.2 OpenStep(1993-1997)
NeXT 公司還和 Sun 公司合作開(kāi)發(fā)了 OpenStep。這是一套能跑在 SunOS, HP-UX 和 Windows NT 上的面向對象的接口?;谶@個(gè)接口,一個(gè)精簡(jiǎn)版的 NEXTSTEP 就可以跑在支持這個(gè)接口的機器上。1994 年 OpenStep 發(fā)布了第一個(gè)版本。
不過(guò)沒(méi)多久 NeXT 公司就轉而專(zhuān)注在 WebObjects 技術(shù)上了。1996 年喬布斯還在微軟的 Professional Developers conference 演示了這一技術(shù): [Microsoft Professional Developers Conference 1996 Keynote Speaker: Steve Jobs](Microsoft Professional Developers conference)
簡(jiǎn)單說(shuō)這個(gè)技術(shù)就是用 Java 開(kāi)發(fā)網(wǎng)站的技術(shù)。這里有一份 官方文檔 有興趣的讀者可以看看。
這項技術(shù)在 NeXT 被蘋(píng)果收購之后也用在了部分蘋(píng)果產(chǎn)品上,但是從 2008 年開(kāi)始就不更新了,2016 年官方宣布中止開(kāi)發(fā)。據稱(chēng)目前還用于 Apple Store 以及 iTunes Store 的一部分,不過(guò)除非內部負責該項目的開(kāi)發(fā)者,不然無(wú)從考證了。
五、Mach 的歷史我們知道 Mach 是 NEXTSTEP 以及后來(lái)的 OS X 非常重要的組成部分。它是由 CMU (Carnegie Mellon University) 開(kāi)發(fā)的微內核。它的前身是 CMU 開(kāi)發(fā)的 Accent 內核,Accent 的前身則是 UR (University of Rochester) 開(kāi)發(fā)的 RIG (Rochester’s Intelligent Gateway) 項目的一部分。
5.1 Rochester’s Intelligent Gateway (1976)1975 年一群來(lái)自羅切斯特大學(xué)(University of Rochester)的學(xué)者在開(kāi)發(fā)一個(gè)智能網(wǎng)關(guān)系統,叫做 RIG (Rochester’s Intelligent Gateway)。這個(gè)項目跑在 Aleph 系統上,這個(gè)系統跑在 Data General 公司的 Eclipse 小型機上。

這個(gè)內核的主要功能是提供 IPC 能力(interprocess communication),也就是我們常說(shuō)的“進(jìn)程間通信”。我們可以從 Aleph 的 IPC 抽象上看到 Mach IPC 的設計。系統采用 Message 在多個(gè)進(jìn)程間傳遞信息,采用 Port 來(lái)對應信息的接收方。跟后來(lái)的 Mach 設計是一樣的。但是當時(shí)這個(gè)系統有幾個(gè)非常嚴重的基礎缺陷,比如說(shuō):
關(guān)于這個(gè)系統的論文可以在 這里下載 ,有興趣的讀者可以看看。
5.2 Accent (1981-1985)
RIG 項目的其中一個(gè)成員——也是上述論文的作者之一——Richard Rashid 在 1979 年轉到 CMU 當教授。在 CMU 工作的其中一個(gè)項目就是 Accent 內核,從 1981 年開(kāi)始正式啟動(dòng)。這個(gè)內核面向的是網(wǎng)絡(luò )操作系統。作為一個(gè)面向通信的系統,Accent 也采用了類(lèi)似 RIG IPC 通信方式的設計,不過(guò)做了很多改進(jìn):
看起來(lái) Accent 比 RIG 好多了,但是這個(gè)內核設計的時(shí)候是跑在 PERQ 工作站上的。雖然它擁有很多厲害的特性但是設計的時(shí)候非常依賴(lài)硬件,也不支持 Unix 軟件運行。
為了支持 Unix, Richard Rashid 開(kāi)始了 Mach 項目,并于 1985 年發(fā)布了第一個(gè)版本。這位厲害的學(xué)者因為 Mach 一戰成名,1991 年加入微軟,后來(lái)成為微軟的 VP 直到 2012 年。
關(guān)于 Accent 的論文可以到 這里下載 。
5.3 Mach (1985-1994)Mach 內核的設計目標之一是要兼容 Unix 系統。在這個(gè)項目啟動(dòng)的時(shí)候,Unix 已經(jīng)存在了 15 年之久,有大量的 feature 被集合到這個(gè)巨大的內核里。
Richard 甚至把 Unix 戲稱(chēng)為”所有新特性或功能的垃圾場(chǎng)”(dumping ground for virtually every new feature or facility)。所以 Mach 項目就是要設計一個(gè)可以為其他操作系統內核基礎的一個(gè)微內核,他們的目標包括:
Mach 內核設計的時(shí)候主要 focus 在 CPU 支持與內存管理上,沒(méi)有考慮支持文件系統,網(wǎng)絡(luò )接口或者設備 I/O 接口。當初他們的設想是,真正的操作系統可以作為一個(gè)用戶(hù)態(tài)的程序跑在 Mach 內核上。Mach 內核采用 C 語(yǔ)言開(kāi)發(fā),這意味著(zhù)可以很輕易地移植到各個(gè)平臺。
Mach 內核開(kāi)發(fā)的時(shí)候以 4.3BSD 為基礎進(jìn)行開(kāi)發(fā)。Richard 由于有 RIG 和 Accent 的經(jīng)驗,在 Mach 內核的設計上可謂駕輕就熟。1986 年正式對外發(fā)布的時(shí)候,他們在論文上稱(chēng)這是”為 UNIX 開(kāi)發(fā)的一個(gè)新內核”。
當時(shí)選擇新的 Mach 內核作為自家操作系統內核的,不止 NeXT 一家。1994 年蘋(píng)果還沒(méi)收購 NeXT 之前,在 Copland 項目中也用到了作為 Mach 3.0 作為系統內核。但是在對外公布的測試版中卻極其不穩定。這個(gè)內核項目叫做 NuKernel,當然后來(lái)也隨著(zhù) Copland 項目的結束也無(wú)疾而終。
Mach 內核的基礎抽象

在前面的文章中我們也提到過(guò) Mach 內核的一些基本抽象,這里還是簡(jiǎn)單介紹一下:
當年 CMU 做了一個(gè)非常重要的決定,就是 Mach 內核開(kāi)源且無(wú)任何 licensing 約束。這意味著(zhù)任何人都可以免費發(fā)行 Mach 內核。
5.4 MkLinux (1996)
1996 年 12 月蘋(píng)果宣布收購 NeXT 公司 , 但是在那之前,2 月份蘋(píng)果就已經(jīng)開(kāi)始了一個(gè)特別的項目:把 Linux 移植到 PowerPC 平臺,讓 Macintosh 機器也能跑 Linux 。
這個(gè)項目的產(chǎn)品叫做 MkLinux , 由 OSF ( Open Software Foundation ) 和蘋(píng)果公司聯(lián)合開(kāi)發(fā)的,目標是讓 Linux 內核跑在 Mach 3.0 內核上。
OSF 早期的成立是為了給 UNIX 系統提供一個(gè)開(kāi)放標準。在 CMU 開(kāi)發(fā) Mach 2.5 版本的時(shí)候,OSF 宣布用于其開(kāi)發(fā)的 OSF/1 系統,并將 host Mach 內核的未來(lái)版本。事實(shí)上 Mach 3.0 版本是從 CMU 開(kāi)始,后來(lái)也是由 OSF 開(kāi)發(fā)完成。當時(shí) NEXTSTEP 用的是 Mach 2.x 內核。
1996 年在 WWDC 上蘋(píng)果公司 正式宣布將把 Linux 移植到 Power Macintosh 機器上 ,名為 MkLinux (Microkernel Linux)。
這個(gè)項目后來(lái)也隨著(zhù) OS X 的整合而終止,交回給社區維護。但是這個(gè)項目對蘋(píng)果整合 NEXTSTEP 幫助不小,在官方的 Kernel Programming Guide 有曰:
OS X is based on the Mach 3.0 microkernel, designed by Carnegie Mellon University, and later adapted to the Power Macintosh by Apple and the Open Software Foundation Research Institute (now part of Silicomp). This was known as osfmk, and was part of MkLinux (http://www.mklinux.org). Later, this and code from OSF’s commercial development efforts were incorporated into Darwin’s kernel. 這也是為什么我們看 XNU 代碼里面,Mach 的部分都放在 osfmk 目錄下。目前 MkLinux 社區也沒(méi)什么聲音了,最后一個(gè)發(fā)版本在 2002 年。
P.S. osfmk 就是 Open Software Foundation Mach Kernel 的縮寫(xiě)。
5.5 Mach 內核的性能問(wèn)題前面我們提到 CMU 開(kāi)發(fā) Mach 內核時(shí)嫌棄傳統 UNIX 內核什么都干,過(guò)于臃腫。所以設計目標是要取代 UNIX,讓 UNIX 跑在 Mach 內核的用戶(hù)空間里。這個(gè)特性在 Mach 3.0 真正實(shí)現了。但是眾所周知 Mach 內核并不提供文件系統和網(wǎng)絡(luò )實(shí)現,所以依然需要和 UNIX 做大量的數據交換。這種交換的方式就是通過(guò) Mach 的 IPC 通信。而讓幾乎所有進(jìn)程都在兩個(gè)空間之間做 IPC 通信是 非常低效 的。
所以 NEXTSTEP 系統修改了 Mach 內核的實(shí)現,讓 Mach 和 BSD 都跑在同樣的內核空間上,同時(shí)讓用戶(hù)空間發(fā)起的文件、網(wǎng)絡(luò )請求等本來(lái)要通過(guò) IPC 調用的接口都改成 system call。
六、OS X (1997-)
1997 年 1 月份 Macworld 上的演講 是喬布斯回歸后的第一次登臺,講了一堆蘋(píng)果過(guò)去十年犯下的錯誤之后,宣布 Rhapsody 項目,很有救世主之風(fēng)。
同年 WWDC 是喬布斯 第一次演示了 Rhapsody 的 demo。在他登臺之后,現場(chǎng)響起了綿延不絕的掌聲。
Rhapsody 基于 NeXT 的 OPENSTEP 開(kāi)發(fā),可以認為是 Mac OS X 的過(guò)渡產(chǎn)品。經(jīng)過(guò)漫長(cháng)的研發(fā)階段,終于在 2000 年 12 月正式發(fā)布第一個(gè) Public Beta 版。這期間大概的時(shí)間線(xiàn)是這樣的:
其中在 1999 開(kāi)始開(kāi)源了系統的核心部分,名為 Darwin。其核心就來(lái)自 NEXTSTEP 的 XNU,也就是 Mach/BSD 混合內核。Mach 部分更新了 OSFMK 的 Mach 3.0 和部分來(lái)自 University of Utah 的 Mach 4 項目,BSD 部分更新了 FreeBSD 項目的代碼。早期蘋(píng)果甚至提供了 Darwin 安裝包,可以作為一個(gè)獨立系統安裝到 x86 和 PowerPC 機器上。不過(guò)現在只開(kāi)放源代碼了。
2000 年喬布斯在 Macworld Expo 上首次介紹了 Mac OS X,演講風(fēng)格非常喬幫主,有興趣的朋友可以看看: Macworld San Francisco 2000-The Mac OS X Introduction (Pt.1) – YouTube
嚴格來(lái)說(shuō)現在我們接觸到的 macOS 內核,官方叫做 Darwin,它的核心是 XNU,可以獨立安裝。嚴格意義上 XNU 和 Darwin 并不完全相等,較真地講 XNU 只是 Mach/BSD 部分。在前面的文章里我基本上把 Darwin 和 XNU 當做同義詞,這并不嚴謹。但是根據我的考證,目前 Darwin, XNU 和 macOS Kernel 基本等同于一個(gè)意思,只要讀者朋友不會(huì )產(chǎn)生歧義即可。
使用 uname -a 可以查看自己的系統版本:
Darwin xxx.local 19.0.0 Darwin Kernel Version 19.0.0: Thu Oct 17 16:17:15 PDT 2019; root:xnu-6153.41.3~29/RELEASE_X86_64 x86_64Mach 內核最初的設計是一個(gè)微內核,但是現在 Darwin 已經(jīng)是一個(gè)什么都干的宏內核(Monolithic kernel)了。在看這段歷史的時(shí)候頗有一種天下大勢,分久必合,合久必分的感覺(jué)。想想從 1971 年第一個(gè) Unix 版本到現在(2019 年)已經(jīng) 48 年過(guò)去了,OS X 10.0 也過(guò)去 18 年了。2016 年,蘋(píng)果在 WWDC 宣布 OS X 改名為 macOS。
風(fēng)云變幻幾十年,既有技術(shù)的發(fā)展也有商業(yè)的博弈,很多今天看起來(lái)完全看不懂的代碼,都是當年歷史遺留的未解之謎。XNU 代碼里的注釋?zhuān)灿袣v史的痕跡:
/* * Well-known UDP port, debugger side. * FIXME: This is what the 68K guys use, but beats me how they chose it... */#define KDP_REMOTE_PORT 41139 /* pick one and register it */至少現在我終于明白,什么是 68K guys 了。XDDD
聯(lián)系客服