標籤:

為什麼蘋果在很早之前開發一個自己的iOS很容易,而現在中國很多互聯網巨頭卻無法擁有真正屬於自己的系統?

現在的互聯網公司或者手機公司都在嘗試自己的移動操作系統,可是大部分都是基於Android系統來的,為什麼好多大體量的公司卻無法開發或者成功推廣屬於自己的真正的系統?


因為iOS源於Mac OS X,Mac OS X又源於NEXTSTEP,蘋果有將近20年的積累在那裡。


這種問題有句專門的俗語:看人挑擔不吃力


魅族M8當年不也是用 wince 自己搞?

結果不還是要乖乖抱安卓大腿

簡單來說就是一句話:得開發者,得天下

就目前來看除了 Google 微軟 蘋果 貌似短時間內很難見到第四家有這個實力的了。


/*

因為原文太長,被大家抱怨,所以節選了轉載的前三章我覺得算重要的。

(想看完全文的點Mac OS X 背後的故事)

*/

iOS跟Mac OS都是基於同一個類Unix內核 Darwin 擼出來的,類似於Android則是基於Linux內核開發出來的一樣。所以你可以參考一下下面轉載的這篇關於講解蘋果操作系統內核前世今生的 &,看完也算大概了解了蘋果Mac OS和iOS的來龍去脈和有多麼的不容易了。

即使是蘋果那種級別的公司一開始就匯聚了那麼多世界頂尖的人才和資金也是花了那麼多年的積累,走過那麼多坑,中途甚至面臨被其他公司收購的危機,最後靠著喬幫主關鍵時候抱住了FreeBSD這個粗大腿,才在Mac OS上取得了一定的成果讓蘋果最終站穩自己的腳根,一年以後又開始有了iOS最初的版本,再一步步有了今天的不可一世的地位。

以國內的公司人才儲備,資金和技術積累,想一步登天就到iOS這個地步幾乎是不可能的。

--------------------------------------------------------------------------------------

Mac OS X 背後的故事

作者王越,美國賓夕法尼亞大學計算機系研究生,中國著名 TeX 開發者,非著名 OpenFOAM 開發者。

故事還得從 20 世紀 90 年代說起。Ellen Hancock 是本文的主人公,也是一位女英雄。她因在 IBM 的經歷而被人們所熟悉。1966-1995 年間,Ellen Hancock 在 IBM 共工作了 29 年。1985 年,她成為 IBM 的副主席。在 1986-1988 年間,Ellen Hancock 擔任過 IBM 通信產品的主席,並在 1992 年被選為資深副總裁。1995 年 9 月,她被時任美國國家半導體(National Semiconductor)CEO的 Gil Amelio 忽悠,跳槽來到這個企業,做執行副總裁。她在這裡帶領團隊完成了 CompactRISC 架構,這個架構事後成為 ARM7 系列的前身。很多人早已經把她忘了,也很少有人能夠在回憶時將她和 Mac OS X 聯繫起來。但事實上,她是讓蘋果放棄 Copland 轉而購買 NeXT 的關鍵人物。

Ellen Hancock曾任蘋果公司技術總監

早在 1994 年,Gil Amelio 就找好了下家 Apple,成為 Apple 董事會的成員。1997 年 2 月,Gil Amelio 從 National Semiconductor 辭職,並成為 Apple 的 CEO。為了緊跟老闆的召喚,Ellen Hancock 再次被忽悠,來到了當時危機四伏的 Apple。這時是 1996 年 5 月,為什麼是危機四伏呢?還得從早先的事情說起。

20 世紀 80 年代,賣可樂的 John Sculley 成為 Apple 的 CEO,隨之 Steve Jobs 被轟出Apple。畢竟可樂和計算機不是一回事,因此不管是硬體還是 Mac OS,整個公司的開發項目越來越受阻。而且由於先天的不足,Mac OS 從誕生之初就不具有一個現代操作系統所應有的特性。所以,在 1987 年,開發下一代操作系統的計劃呼之欲出。具體的規劃是,把新的系統所需要的功能,寫在一堆卡片上。短期可實現的目標,比如增加顏色支持(當時計算機仍是黑白的),寫在藍色的卡片上;長期的目標,比如多任務功能,寫在粉色的卡片上;而在可預見的未來都無法實現的長期的目標,比如加一個純物件導向的文件系統,就寫在紅色的卡片上。在這樣的思路下,Mac OS 的開發團隊馬上就被分成兩個組,一個叫藍組,目標是在 1991 年,發布一個關於 Mac OS 的更新版本;另一個叫粉組,和藍組同時工作,計劃在 1993 年,發布一個全新的操作系統。

1991 年 5 月 13 日,藍組順利按時完成開發任務,發布了 Mac OS 7(一般被稱為 System 7),而粉組卻沒做出什麼有實際用途的東西來,因此接連跳票。而且,由於 Mac OS 7 的發布缺乏人手,為了保持正常發布,常常需要從粉組抽調人員參加藍組的開發,再加上 Apple 當時把重心放在了和 IBM 等公司的合作上(Taligent 項目)而不是在粉組上,最終導致了粉組項目夭折。而本來 Apple 指望和 IBM 合作的Taligent 項目能開發出一個可用的新系統,但後來 IBM 不跟 Apple 繼續玩了,因而 Taligent 的果子又吃不到,Apple 相當鬱悶。這時由於 Mac OS 有先天不足(單任務,沒有內存保護),再加上 Apple 以及第三方軟體的無限量增加(在這段時期,單 Apple 自己就已經加入了 QuickDraw、PowerTalk、QuickTime 等軟體和技術,每一個都比 Mac OS 本身來得大),Mac OS 的問題終於大爆發。上個世紀 90 年代,Mac OS 給人的印象就是很不穩定、經常崩潰,同 Windows 95 留給 PC 用戶的印象差不多,甚至更甚。

Taligent 項目掛掉後,Apple 自己嘗試過十多個不同的內部項目,但大多沒做多久就夭折了。而這時正是 Windows NT 走向成熟的關鍵時期。眼看著日子逐漸變得不好過了,Apple 開始重新開始考慮建立下一代操作系統的事情。1994年,Mac OS 7.5(Mozart)發布後,Apple 推出新規劃,建立一個全新的操作系統,以 Copland 命名(紀念 Aaron Copland,Mac OS 的發布以音樂家名字命名,和 Mac OS X 後使用貓科動物名字很不一樣),這個項目將有一個全新的內核,具有類似 Windows NT 內核的所有高級特性,而老的軟體都當作獨立的進程模擬運行。這個項目時間緊、任務重,1995 年 3 月公布計劃,預期 1996 年發布。而 Copland 後的版本 Gershwin(紀念 George Gershwin),預計 1997 年發布,將重寫 Mac 的所有系統主要部件,以適合新內核的各種特性。

Copland 將使用微內核技術,只做任務和內存分配。除此之外的所有功能,比如文件系統、硬體驅動等作為微內核上的服務運行。而 Mac OS 的所有用戶界面功能將成為一個獨立的框架,稱為藍盒(Blue Box,今後介紹 Mac OS X 時,我們還會遇到這個詞)。所有的任務相互獨立,佔用獨立內存,也可以用 IPC 相互交流。學過操作系統的人都知道,微內核是當時的一個熱詞,一個系統只有被稱為微內核才可被看作是先進的,當時還有針對 Linux 系統的著名的 Tanenbaum-Torvalds 筆戰。但事實證明,所有本來想做成微內核系統的成功項目都放棄了原先的設計(包括 NeXTSTEP、Windows NT),因為這種類似 Mach 微內核的系統往往難產,GNU/Mach + Hurd 之類的項目做到現在經過了20年,仍未成事,一年內搞一個微內核系統談何容易。

微內核還沒搞成,Apple 幾乎所有開發組的成員都來添亂。大家都說自己做的東西很重要,一定要加入 Copland 開發組,所以 QuickDraw GX、OpenDoc 之類的開發組產品成為新系統的核心組件,甚至類似用戶界麵皮膚之類的開發組都來湊熱鬧,馬上就使 Copland 成為一個無法維護的項目。開出的計劃越來越長,項目越來越多,但相關進展越來越少,完成速度越來越慢。即便做出了產品,連測試人手都不夠。1995 年就有工程師指出,在 1996 年發布 Copland 純粹是幻想,能 1997 年發布就不錯了。

1996年,Gil Amelio 已經掌權。在蘋果電腦全球研發者大會上他開心地宣布,傳說中的 Copland,也就是 System 8 的開發版會在當年夏天發布,而正式版在秋天就可以送到每位用戶手上。時任 TidBITs 編輯的 Matt Neuburg 有幸見到了這個傳說中的系統。令他大吃一驚的是,這個系統在當時只能打開或關閉文件,而無法對文本文件進行編輯,甚至所有用戶界面的文本框都不能輸字。哪怕什麼都沒做,整個系統也會隨機崩潰,而崩潰甚至會造成文件系統損壞。參加演示的蘋果員工,則需要不斷守在旁邊,他們的工作是不斷地格式化已崩潰的計算機磁碟,然後重裝系統。那年夏天,第零個測試版送到一小簇不明真相的開發者手中,把那些脆弱的沒見過世面的人嚇得半死。就連 Apple 內部都開玩笑說 Copland 的正式發布日期可能得推遲到 2030 年。

Gil Amelio 心急如焚,希望 Copland 快點走到正道上來。作為 Gil Amelio 永遠的好朋友,Ellen Hancock 就在這個亂糟糟的時候來到了 Apple。她的職務,正是擔任這個亂糟糟項目的負責人。她親自下訪各小組體察民情,了解情況。畢竟在 IBM 幹了近三十年,她依靠自己過人的判斷力在 2~3 個月內便得出結論,Copland 這個項目是沒有指望的,就按目前 Apple 這樣的狀態,Copland 永遠都不可能發布,還不如早點取消了好。在短期內,先把 Copland 中的一些有用的成果一點點合併到老的 Mac OS 中,並且抓緊從外部購買一個全新系統來滿足 Apple 的需要。正是她的這個結論,結束了 Apple 長達五年的糾結,使公司重新走向正軌。整個 PC 的黃金時代已經過去,Apple 想要翻身,還有很長一段路要走。Gil Amelio 支持了 Ellen Hancock 的計劃。1996 年 8 月,Apple 取消 Copland 項目。開發預覽版的 CD 封套都已制完,每個郵包上的地址都已列印就續,而 CD 卻從未曾制出。

1996-1998 年是 Apple 最混亂的幾年。在商業上,有一陣曾傳出 Apple 要被 Sun 收購的消息。更有意思的是,《連線》雜誌在 1997 年的六月還發表了一篇文章,名為《101 種拯救 Apple 的方法》,其中一條說最好的方式是 Apple 讓自己被 Motorola 買下,成為 Motorola 的一個部門,做 PowerPC 系列產品。以當時的眼光來看這些建議非常諷刺好笑,以今天的眼光看更為好笑。而 Ellen Hancock 在這段時間內的出色工作,成功地挽救了 Apple。

首先,Ellen Hancock 的對內政策是繼續 Mac OS 7.5 的開發工作,一步步把 Copland 中的技術併到 7.5 中。同時,也大量購買第三方的系統增強包,包括插件管理工具、層次化菜單等技術。Apple 把它們買過來,整合到現有的系統中。整個老系統在新系統尚未完成的時候不斷更新,至 2000 年已出到 9.0 版,儘可能地留住了老用戶。並且,前面提到的藍盒(Blue Box)也作為後來新 Mac OS X 系統的一部分,支持用戶運行經典 Mac OS 的程序。

而對外政策更是一個大手筆。Ellen Hancock 協助 Gil Amelio 在 Apple 之外找尋操作系統技術。在 IBM 和 Microsoft 合作 Big Blue 的經驗告訴她,購買一個操作系統的使用權問題多多,最好的計劃是整個一併買下來。因此,Gil Amelio 開始和當時看好的 Be 談,卻因價格問題沒有成功,最終轉而收購了 NeXT。而 Apple 合併 NeXT 後,NeXTSTEP 就演化為 Rhapsody,並最終成為 Mac OS X。這些事情我們今後會詳細再談。

買完 NeXT 後,Steve Jobs 執政,Gil Amelio 因任 CEO 期間 Apple 虧損嚴重而被炒。Steve Jobs 把信得過的人(很多是前 NeXT 員工)拉攏到周圍,開始新政,而同 Gil Amelio 有關的 Ellen Hancock 則在人事變動中被疏遠。Steve Jobs 甚至在很多場合稱她為「笨蛋」。Ellen Hancock 最終於 1998 年主動辭職。事後同 Gil Amelio 以及 Apple 的創始人之一 Steve Wozniak 一同創業,但始終不景氣,她的輝煌時代已經過去。

Gil Amelio 總結他在 Apple 時期的工作時說:「Apple 是一艘底部有洞漏水的船,而我的工作是把這船引向正道。」(Apple is like a ship with a hole in a bottom, leaking water, and my job is to get this ship pointed in the right direction. )Ellen Hancock 雖然同 Gil Amelio 一樣,不知如何去堵這個漏水的洞,但正是由於她在 Apple 的出色表現,不但把船引到了正道上,還找來了有能力堵這個洞的人。

Mac OS X 背後的故事(二)——Linus Torvalds的短視

本文主要的故事來源是 Linus Torvalds 的自傳《Just for Fun: The Story of an Accidental Revolutionary》。

Steve Jobs 於 1997 年回歸 Apple

Steve Jobs對Mac OS X的考慮

1997 年,Steve Jobs 回歸,開發下一代操作系統的工作被提上日程。此刻的時代背景是像 Linux 這樣的開源軟體大行其道。隨著網路的發展,使得像 Red Hat、VA Linux 之類的企業成為爆發戶,把泡沫越吹越大。Steve Jobs 承認 Linux 的好處,甚至在若干年後介紹 Mac OS X 底層的 Darwin 時還不忘在幻燈片上寫道:Darwin 是類似 Linux 的系統。而當時精明的 Steve Jobs 在考慮下面幾個問題。

第一,NeXTSTEP 的內核和外圍工具中,BSD 代碼維護起來需要大量人力,而且各分支的 BSD 發展顯然不如 Linux 快。很多功能都沒有,需要 Apple 自己做。

第二,像 Apple 這樣的小公司,需要借力打力。Apple 的主要競爭對手是 Microsoft,而開源軟體的矛頭也是 Microsoft,如果聯合起來幹革命,不但能讓自己得到一個好名聲(Apple 事後一直自稱是最大的開源軟體公司),也可以獲得可觀利益,從而對 Microsoft 造成壓力。

第三,也是最重要的,聯合各開源組織能夠推動 Mac OS 的發展。畢竟開源軟體中像 GCC 之類都是很成熟的項目,Apple 用起來省時省力,投點錢就有大效益,多好。

所以,把 Linux 內核作為 Mac OS X 的重要組成部分的想法被這位偉大的智者想了出來。Apple 之前也有開發 Linux 的經驗,比如在 Steve Jobs 回歸之前,Apple 就和 OSF 合作開始把 Mach 內核移植到 PowerPC 上(Apple 是最大的 PowerPC 玩家,而 OSF 是最大的 Mach 玩家),並把 Linux 作為服務跑在 Mach 上。這個系統就是 MkLinux,我們在後續的連載中還會提到這個系統,因為它不但對 Linux 的移植性作出了重要的貢獻,也對後來的 Mac OS X 的 XNU 內核技術起到了相當重要的作用。

如果可以採用 Linux 作為系統重要組成部分,並且這個構想能夠取得在開源軟體界呼風喚雨的 Linus Torvalds 的認同,就能靠他在社區鼓動一大群開發者皈依 Apple 麾下,這是 Apple 很想看到的給力結局。有了這個指導思想,他便讓秘書給 Linux 的開發者 Linus Torvalds 發了一個郵件,問他是不是有一到兩小時的時間和 Steve Jobs 會面。不明真相的 Linus Torvalds 收到郵件後相當高興,因為這是他第一次有機會去矽谷觀摩。

無果而終的會面

Apple 總部 Infinity Loop 終於迎來了這位稀客,Steve Jobs 親自接見,而先前任 NeXT 技術總監的 Avie Tevanian(這人的故事我們今後會提到)也參加了這次會談。不用多說,這次討論的內容自然是還處於未知狀態的 Mac OS X。討論算不上正式,但 Linus Torvalds 的憤青個性,卻讓談判陷入僵局。

Steve Jobs 自然搬出他 1997 年回歸之際在 MacWorld 講話時的那套理論,Apple 雖然很頹,但骨子裡是個牛逼的公司。全世界桌面領域的真正玩家就兩個,一個是 Apple,另一個是 Microsoft,兩者加起來,構成百分之百的桌面用戶群。所以,Linus 同學,你就從了我們吧,如果你從了我們,讓我們把 Mac 架在 Linux 上,一大批桌面用戶就是 Linux 用戶啦,前景可是一片大好!

而 Linus Torvalds 那時候牛啊,諸多大公司如 IBM、Red Hat 都圍著他轉。他可是企業家中的大紅人,像 Apple 這樣的企業根本就不在他眼裡。作為一個開源軟體的革命家,在他的想像中 Linux 的潛在用戶應該比 Apple 還多。他始終相信,按照目前開源軟體的發展態勢,自己很快就能在桌面領域分到一杯羹。而且這個命題在他這種古怪性格下的直接推論是,即使我能佔領桌面領域,我也要擺出一副不在乎這個領域的態度來。所以實際上 Steve Jobs 的開場白一開始就失敗了。

接著,Avie Tevanian 向 Linus Torvalds 介紹了整個計劃。他們想把 Mach 和 Linux 內核合併起來作為 Mac OS X 的基礎,我估計 Linus Torvalds 是聽錯了(因為 Avie Tevanian 很早就意識到相比於微內核,混合內核有明顯優勢),他以為 Apple 想把 Linux 作為 Mach 的一個服務來跑(當然我個人認為,即使是合併 Mach 和 Linux 成為混合內核,依 Linus Torvalds 的憤青性格,依然是不可能接受的),這正讓他回想到先前和 Tanenbaum 教授的筆戰。並且,他也知道 Apple 和 IBM 合搞的失敗項目 Taligent 正是用 Mach 的。

Linus Torvalds 對於微內核有他自己的看法,之前也曾在不同的地方表述過。若把關於微內核的筆戰去掉限制級敏感詞的話可概括成兩方面。一方面,設計一個微內核和相關的服務,可能造成各種設計上的災難。GNU/Hurd 早在八十年代末就考慮嘗試在 Mach 上寫一系列 Unix 的服務層,結果他們始終無法搞明白到底是讓這些服務先發消息到另幾個服務呢,還是考慮其他方案。所以直到 2011 年我寫這篇文章時,Hurd 項目依然處於半死不活的狀態。而另一方面,微內核的效率無法和傳統內核相比,最簡單的系統調用會涉及一系列底層服務的互相通信。所以很多研究者著手研究如何把微內核的效率提上去,結果就導致微內核變得更加複雜。能提高微內核效率的很多研究成果都已在 Mach 項目中實現了。而在 Linus Torvalds 看來這恰使 Mach 成為了一個非常複雜的項目,並且效率也不怎麼高。

會談時坐一旁的 Avie Tevanian 事實上是 Mach 最早的開發者之一,他熱情地給 Linus 講述 Mac OS X 系統藍圖。而 Linus 實際上早就不耐煩了。比如,Mac OS X 中,有一個模擬層,可讓用戶使用經典的 Mac OS 程序。這個技術極類似於現在跑在 Unix 系統上執行 Windows 程序的 Wine 。Apple 當時的考慮是這樣,因為老的 Mac OS 在設計 API 時,就沒有考慮到類似內存保護之類的問題,所以這層 API 必須廢掉,Mac OS X 中所有的新程序必須採用 NeXT 的那套更先進的 API(根據我的考證,當時還沒有 Carbon 這樣的想法,而且事實上 Carbon 不管在 API 還是 ABI 上都和經典 Mac OS 不兼容)。而短期內已有的軟體又不可能快速重寫遷移至 Mac OS X。所以,如果用戶需要使用老版 Mac OS 的第三方應用程序,就可以使用 Apple 提供的這個兼容層。但是由於剛才提到的原因,老版程序並不享受新版程序的待遇,因為模擬器本身運行多個老 Mac OS 任務時,和原先老版 Mac OS 一樣,實際上只有一個進程,沒有內存保護。這樣做的好處是明顯的,因為一方面老的程序在 Mac OS X 發布之初還能用,另一方面 Apple 又和老技術劃清了界限,逼著開發者使用新技術,技術方面的原因是最重要的。但這個看似很正確的技術在 Linus Torvalds 看來是古怪的,他想當然地認為,完全可以運行多個不同的模擬器進程,來執行不同的任務,使得每個任務都可以享受內存保護。這種浪漫主義情調讓他無比鄙視 Apple 員工的智商。而事後當筆者使用早期版本的 Mac OS X 時,發現 Linus Torvalds 的想法完全是不切實際的。因為這個模擬層本來就要佔用不少的內存和 CPU,在處理器速度不及今日手機、內存無比精貴的 90 年代末,跑一堆模擬器進程無異於是和自己過不去。

Steve Jobs 考慮到 Linus Torvalds 是開源軟體的領軍人物,便繼續以開源為話題,動之以情,曉之以理。他告訴 Linus Torvalds,我們這個系統做出來後呢,所有的 Unix 層(非圖形界面層),都會開源,所以事實上你加入我們,也是在給開源做貢獻啊!而由於在開源圈子混久了,Linus Torvalds 對此絲亳不領情,他認為,有誰會想用一個底層是開源而圖形界面是不開源的系統呢?所以,像筆者這樣的用戶被「代表」了。

Mac OS X 與 Linux 分道揚鑣

總之,這次會面完全談崩,兩人站在不同的角度去看問題,加上 Steve Jobs 和 Linus Torvalds 都是個性鮮明、唯我獨尊的人,技術和商業上的考慮都不同,所以會談中雙方簡直就是雞同鴨講。這次討論也使得 Apple 放棄 Linux,轉而採用 FreeBSD 技術,並在 2001 年任命 FreeBSD 的發起者、領軍人物 Jordan Hubbard 為 BSD 技術小組的經理,並在後來升為 Unix 技術總監。至於 Apple 的內核技術後來走向何方,我們下期再講。

筆者認為,Apple 和 Linus Torvarlds 的商談破裂,以今天的眼光來看,是因 Linus Torvarlds 的自命清高和短視造成的。他不懂得尊重其他開發者的意見,並且不斷抬扛。包括後來關於 C++ 的論戰。Mac OS X 發布後,Linus Torvalds 又數次嘲笑 Mac 的技術落後,並說這些他在當年和 Steve Jobs 開會時就預料到了。直到最近,他終於有些成熟,對 Mac OS X 的觀點開始緩合,但還是不忘批評 Mac 的文件系統就是垃圾(事實上,Linux 的也沒好到哪去,至少 Apple 還搞過一陣 ZFS)。這種性格最終導致在 Mac OS X 和 iOS 大行其道的時候,Linus Torvalds 連兔子湯都不曾分到。

而事實上這對 Apple 也是件好事。Apple 重要的是利益而不是折騰,即使是開源也是利益驅動。像類似 Linux 開發組那樣自以為是但代碼又寫得差的開源項目,Apple 事後也遇到不少,比如 GCC 編譯器項目組。雖然大把鈔票扔進去,在先期能夠解決一些問題,但時間長了這群人總和 Apple 過不去,並以自己在開源世界的地位恫嚇之,最終 Apple 由於受不了這些項目組人員的態度、協議、代碼質量,覺得還不如自己造輪子來得方便,因此 Apple 推動了類似 LLVM 這樣宏偉的項目,並且在短短几年內,使其成為最領先的開源軟體技術。這無異於扇了 Linux 小組、GCC 小組一記響亮的耳光。

Mac OS X 背後的故事(三)Mach 之父 Avie Tevanian

1975 年,美國羅徹斯特大學紐約分校,一組研究員正在做一個名為 RIG(Rochester』s Intelligent Gateway)的項目,它由 Jerry Feldman 主持設計。RIG 的目標是給所有本地以及遠端的計算設備(比如磁碟、列印機、磁帶、繪圖機等)提供一組統一的訪問方式,其作業系統稱為 Aleph。為了實現所需要的功能,Aleph 的內核主要構建了一個進程交互(Interprocess Communication,IPC)的機制。RIG 的各進程,只要設置了目標埠,就可以彼此間發送信息。RIG 項目沒過幾年就被判了死刑,主要是缺少很多有用的功能,比如埠沒有保護機制,一次最多只能發送 2KB 大小的信息(受硬體限制),也沒有很好的網路支持等。不過在 20 世紀 70 年代,這個系統依然代表著當時作業系統設計的先進水平,比如除了進程交互外,每個進程還有內存保護的功能,這足以讓 20 世紀 90 年代末都沒有做出內存保護技術的 Apple 公司汗顏。

該項目後來失敗了,隨後在 1979 年,RIG 的 Richard Rashid 博士畢業到卡內基-梅隆大學當教授,開始做 Accent 項目。它是一個網路作業系統,於 1981 年 4 月開始活躍開發。受 RIG 的影響,Accent 系統的亮點也在於可以使用 IPC,而且解決了很多 RIG 的不足。比如每個進程有 4GB 的虛擬內存空間,而且甚至連內核自已都可以被存入緩存頁面,內存有先進的更新前拷貝(Copy-on-Write)功能,可以實現進程間大信息的傳送等。讀者可以把 Accent 理解為支持虛擬內存技術,並且具有網路透明 IPC 功能的 RIG 內核。

但過了幾年,開發者們越來越對 Accent 失去興趣。在 1980 年初,很多人覺得多核計算是計算機未來發展的潮流,但 Accent 內核在設計時並沒有考慮到這些問題。而且,隨著許多實驗室紛紛購置性能更強勁的計算機,這就意味著 Accent 需要移植到新的目標架構上。此外,Unix 正大行其道,不管是在作業系統理論上還是在用戶程序上,都成為最為流行的作業系統模式,而 Accent 並不是一個 Unix 系統,所以無法享受 Unix 世界的諸多美好。為了解決這個問題,研究人員決定把所有設計推翻重來,於是就有了一個全新的系統。

在匹茲堡的一個雨天,卡內基-梅隆大學的 Avie Tevanian,此系統的最主要開發者,正打著傘和同學們在去吃午飯的路上。他們一邊繞著無數的泥塘,一邊構思給這個新系統取什麼名字好。靈感突來, Avadis Tevanian 建議把這個系統叫作 Muck,引得同學們哈哈大笑。後來,Richard Rashid 和一位義大利同事 Dario Giuse 說起這玩笑,結果這位同事不經意地把 Muck 發為 Mach,遂把 Richard Rashid 笑翻,偉大的 Mach 系統因此得名。

Mach 是一個受 Accent 啟發而搞出的Unix兼容系統。那年,Unix 已經十六歲,而且依然是作業系統理論與實踐開發的主要陣地。Unix 內核由於新加入的功能越來越多,變得越來越複雜。而 Mach 的一個主要目標就是盡量縮減 Unix 的各項服務,以使內核變得簡單可維護。此項目從 1984 年開始,目標主要是包含完整的多任務支援、良好的硬體移植性,並要把大量服務移出內核作為跑在內核上的服務,以及提供與 Unix 的兼容性。

Mach 使用純 C 編寫,所以在一定程度上保證了可移植性,這事實上為後面的 NeXT 向 PowerPC 移植以及 2005 年的向 Intel 移植提供了很重要的前提。而為了縮減內核該管的任務,Mach 做得很絕,只提供內存和處理器管理。類似於檔案系統、網路、輸入輸出等功能都作為單個的系統進程,獨立執行於內核之上。Mach 的開發過程以 4.3 BSD 作為起點,以 RIG 的 Accent 作為參考,採納 DEC 的虛擬內存設計思路,逐步開發,以新寫的代碼代替 BSD 的代碼。兩年後的 1986 年,雖然沒能把系統服務完全分離於內核之外,但已頗見成效。Mach 第一版大功告成,組員發表會議論文,成為操作系統史上里程碑式的經典,引發操作系統業界的「微內核」學潮,如今學習作業系統設計的皆需學習此文,二十五年來被引用一千二百餘次。

這篇文章主要講了兩方面內容:IPC 和虛擬內存。在 IPC 方面,Mach 把複雜的消息傳送機制分為四個獨立的清晰概念—任務、線程、埠、信息。任務是擁有一組系統資源的對象,允許線程在其中執行;線程是執行的基本單位,擁有一個任務的上下文,並且共享任務中的資源。

由於該論文的影響力,所以項目得到了 OSF(Open Software Foundation)在內的很多投資。當然了,學術和工程永遠存在差距,所以即使是最受歡迎的 Mach 2.5 其實仍然是一個包括大多數 BSD 服務層的單內核。但包括 NeXTSTEP、OSF/1 在內的很多操作系統都採用 Mach 作為其內核技術,原因是廣大研究人員依然相信微內核代表著未來。雖然 Mach 2.5 的效率比傳統的 Unix 系統稍低一些,但研究者們表示情緒淡定,因為 Mach 支持多處理器系統,可以利用多線程把任務處理得飛快,相比之下其他 Unix 內核並沒有多處理器的完善支援,因此 Mach 效率稍低完全可以接受。但隨著真正把 Mach 和 BSD 服務完全脫離的 Mach 3 微內核面世,研究人員們的情緒就再也淡定不起來了。因為服務和內核分離後,任務間的 IPC 數量暴漲,一個簡單的 Unix 系統調用要涉及到十多個開埠、設許可權、發送、收取消息的操作,哪怕是使用數年後的 1997 年的硬體,跑一個系統調用密集的程序,Mach 的效率要比一般的 Unix 系統慢 50%,而且根本沒有什麼好方法來解決這個問題。

所以 Mach 3 出來後,雖有少數微內核信徒繼續執著地改進 Mach,或者開始其他微內核比如 L4 的研究。但學術界對 Mach 的興趣大減,因而 Mach 3 也成為最後一版。項目解散後,Richard Rashid 去了微軟研究院。

再說我們的主角 Avie Tevanian,他 1987 年博士畢業去了 NeXT。這家公司剛剛由 Steve Jobs 成立兩年,這兩年 Steve Jobs 啥正經事都沒幹,只是花了十萬美元雇 Paul Rand 設計了一個公司商標。直到 Avie Tevanian 加入後,這個公司才開始干實事。1987 年公司確認要開發一個面向研究人員使用的計算機工作站,於是軟硬體的開發工作緊鑼密鼓地展開。硬體組由領導過 Apple Lisa 的 Rich Page 原班人馬負責,而軟體則由 Avie Tevanian 負責,計劃開發一個有圖形界面的操作系統 NeXTSTEP。由於 Avie Tevanian 是 Mach 主要的開發者,自然 NeXTSTEP 就基於 Mach 了。1988 年 10 月 12 日,NeXT 發布預覽版(0.8版),並於 1989 年 9 月 18 日發布 1.0 版(註:NeXTSTEP)。

作為 NeXTSTEP 系統的內核,NeXT 分支的 Mach 經歷了不少變化。NeXTSTEP 0.8 主要使用 Mach 2.0 版,而稍後的 NeXTSTEP 1.0 版主要基於 Mach 2.5 版,包含一個自己定製的當時最新的 4.3 BSD 服務層。從 3.1 版開始,NeXT 分支的 Mach 還包括一個全新的設備驅動框架, 名為 Driver Kit,僅供 x86 系列的硬體使用。和 Mach 以及 BSD 代碼不同,Driver Kit 是使用 Objective-C 寫的。為什麼是一個面向對象的語言呢?看 NeXTSTEP 3.3 的 DriverKit 文檔。讀者大概就會發現,NeXTSTEP 把所有硬體設備理解為對象,而我們知道,對象之間有繼承關係,比如,磁碟(IODisk物件)屬於輸入輸出設備(IODevice物件)的子物件,而磁碟(IODisk)本身又是邏輯磁碟(IOLogicalDisk)的父物件。硬體的初始化對應於每個物件的初始化(init方法),硬體又有讀、寫,所以可以用 getter/setter 的方法。因此,DriverKit 是一個非常有特色的實現。而且由於 Objective-C 的效率很高,依賴很少(Objective-C 程序可以直接被編譯器翻譯成等價的C語言程序並編譯,而 Objective-C 的運行庫 libobjc 也以高效著稱),所以也是編寫驅動的良好選擇。幾年後的 IOKit 其實就是個 DriverKit 的翻版。

這時,NeXTSTEP 操作系統大獲成功,風險投資商們紛紛購買,但硬體卻始終賣不出去(註:Aaron Hillegass《Cocoa Programming for Mac OS X》前言),所以 NeXT 砍掉了硬體部門專做軟體,更是使 NeXTSTEP 發展到了巔峰時期,同時支持 68K、x86、PA-RISC 和 SPARC 等硬體,但頗有意味的是它就是不支持 PowerPC 架構。它可以同時產生一個包含所有架構可執行碼的二進位文件,來使開發的程序在所有平台上執行。這個功能也影響了後來 Mac OS X 的技術。Mac OS X 10.4 時代有兩件跨時代意義的事情,一件是 Apple 搞出了 64 位的 Power Mac,開發者可以發布一個包含64位和32位程序的單一可執行文件,而無需讓用戶去區分;另一件是和 Intel 合作。Apple 正式發表了 Universal Binary 技術,可以一個 Mach-O 文件同時包含 Intel 和 PowerPC 的指令。這非常貼心的設計(要知道,大多數電腦用戶根本不知道 Intel、PowerPC、64位、32位等技術)就是來自於 Mach 的技術。

NeXTSTEP 3.3 後,NeXTSTEP 因為 NeXT 和 Sun 的合作改名為 OPENSTEP,1996 年發布 4.0 版,到 1997 年 2 月 4 日,NeXT 被 Apple 收購之前,期間內核改進除源碼同步到 Mach 3.0 版外不明,而且出於不知道的原因,我手頭的 OPENSTEP 正式版光碟中,居然找不到 DriverKit 的發布說明和編程文檔,故不作詳述。不過這段時間,Apple 的活動值得好好一說。之前在《Linus Torvalds的短視》中,我們曾提到,1996 年,Apple 和 OSF 曾經合作,把 Mach 移到 PowerPC Mac 上,再把 Linux 作為單一的服務跑在 Mach 上,這個項目叫做 MkLinux。在 1996 年發布基於 Mach 3.0 和 Linux 1.3 的預覽版,並更新到 2002 年結束其歷史使命,對 Mach 在 PowerPC 的移植性上做出了重要貢獻。這個 PowerPC 版的 Mach 被叫作 osfmk 分支,也正是現在 Mac OS X 中用的分支。當然了,NeXT 被合併後做了大量修改。

Apple 收購 NeXT 後,Mach 被確定作為未來的操作系統核心。Avie Tevanian 被選為軟體開發部的總裁。合併所有項目的號角吹響後,上層的 OpenStep API 和老版 Mac OS 的部件開始合併,而 Mach 也經歷重大變化。主要是一方面,Mach 使用了 osfmk 分支,但依然包含 4.3 BSD 服務;另一方面,DriverKit 被 IOKit 取代。這是 Apple 走得很被動的一步。因為當時外界普遍對 Objective-C 不看好,逼著 Apple 走老版 Mac OS API 的老路。而 Apple 自己對 Objective-C 也很不自信,甚至想索性換用 Java 了事(我們以後會談及這段不自信的歷史)。所以 IOKit 是一個 C++ 的驅動架構,來符合大眾口味。這些改變最早在 Rhapsody 中出現(我們以後也會有一期 Rhapsody 的專題)。但由於 C++ 是門很恐怖的語言,所以 Apple 又把 C++ 給閹割了,去掉了多重繼承、模板、運行時動態以及異常,讓開發者使用這種對於 Objective-C 來說換湯不換藥的 Clean C++ 來做驅動。但公正地說,IOKit 對於 Driver Kit 是有不少改進的,比如 IOKit 可以寫在用戶空間跑的驅動(雖然大多仍是跑在內核空間上的),因而驅動掛了而系統不會掛。另外 IOKit 考慮到了計算機發展的趨勢,所以在電源管理、即插即用、動態載入上做得更好。

但各位也知道,C++ 程序得用專門的運行庫才能跑,所以 Mach 中又加入了一個叫作 libkern 的庫負責 C++ 相關的功能,同時,還有一個 libsa 的庫提供一些類似二分查找、排序等基本演算法之類的功能。最後和硬體相關的還有一個叫作 pexpert(Platform Expert)的庫,負責收集硬體設備列表、檢測機器種類(比如處理器速度等)、解析啟動參數等雜活。

至此,Mac OS X 的內核完全形成,形成 BSD、IOKit、Mach osfmk 三足鼎立的態勢,並有 pexpert、libkern、libsa 作為基礎。Apple 稱它的內核傑作為 XNU。其代碼開源,請讀者移步Source Browser,每個部分的代碼都獨立存放在一個文件夾中,條理清晰,不妨一讀。

由於 4.3 BSD 已是過眼煙雲,Apple 後來投入大量資源扶持 FreeBSD 開發。2001 年,Apple 將 FreeBSD 的發起者、領軍人物 Jordan Hubbard 收入麾下,並在 Mac OS X 10.3 時基本同步到 FreeBSD 5 的代碼(註:XNU: The Kernel)。

另外,Apple 的開發也同時反饋到 FreeBSD 小組,包括 FreeBSD 6.2 內核引入的 AUDIT (man audit 或參見http://manpages.unixforum.co.uk/man-pages/unix/freebsd-6.2/4/audit-man-page.html),後來 FreeBSD 8引入的 libdispatch (GCD - FreeBSD Wiki, 在 Apple 這項技術叫 Grand Central Dispatch,是 Mac OS X 10.6 主推的新功能,FreeBSD 基本在 Mac OS X 10.6 上市的同時就擁有這項最新技術),以及 FreeBSD-CURRENT 中的 LLVM-Clang,全是 Apple 的手筆。從 1999 年開始,FreeBSD 源碼倉庫可以搜索到 Apple 提供的大量的補丁以及新功能。

Mac OS X 早期版本不太穩定,所以會內核崩潰。10.0 版本會直接像 Linux 或者 BSD 那樣打出回溯信息,很不美觀,所以 Apple 在 10.2 版本開始設計了一個多國語言的圖片告訴用戶你的內核崩潰了,以讓內核崩得看起來更優雅一點。由於包含四國語言,被國內用戶戲稱為「四國」(註:優雅的圖片見下圖,詳見 http://support.apple.com/kb/ht1392),這是 XNU 的 Mach osfmk 部分的功能。但從 10.3~10.4 版本開始,系統越發穩定,正常使用已很少見到內核崩潰。而且,內核提供的服務也越來越多,使得 Mac OS X 成為一個完善的系統。

21 世紀 XNU 架構方面的最重大改動是支持了 PPC64(10.4 版本時代)、x86 架構(其實本來也一直支持的,以後講 Apple 的 Intel 遷移時詳談)、x86_64(64位支持是蘋果長年努力逐步展開的。10.4 時代 32 位內核支持載入 64 位的用戶程序,10.5 系統提供 64 位的Cocoa框架,但系統大部分程序都是 32 位的,10.6 時代內核支持以 64 位模式啟動,但在不少硬體上這是非默認的方式,但系統大量程序已被改寫並編譯為 64 位的二進位程序,10.7 時代內核默認以 64 位模式啟動。)和 ARM 架構(iPhone 和 iPad 使用 XNU 內核)等多個新架構。

而其中 ARM 架構的支持別具意義。但 2006 年 5 月 31 日,功成名就的 Avie Tevanian 離開 Apple 另謀發展,此時,離 Apple 的 iPhone 奇蹟發生,只有不到一年時間。

( 後續關於iOS以及Objective -C和 LLVM的誕生點擊 --&> )Mac OS X 背後的故事


略過開發,先說成功推廣。要想有用戶就要有應用,有生態系統。微軟不比國內的公司牛多了?開發的WP不也照樣1%

要解決生態系統的問題,目前倆思路:

一、兼容Android。內置一個Dalvik虛擬機(現在是ART) 你說這根正常Android有啥區別。自己實現一個虛擬機,阿里雲OS不就這麼幹了最後被Google告。只有Win10的應用轉制看起來靠譜點,具體原理不太清楚,不過鑒於C#可以認為是早期Java的一個fork……

二、自己搞開發者社區,提供一套新的API。這就陷入了 應用少-》沒用戶-》開發者沒理由學習新平台-》應用少 的循環。像FF OS和Ubuntu OS之類搞HTML5應用的到現在似乎還不是很現實。

綜上,想推廣一個獨立的全新移動OS難度很大


是因為你覺得很容易而已


中國這麼多互聯網巨頭都沒有真正擁有自己的手機操作系統就已經說明開發一個手機操作系統或者是電腦操作系統的困難了 我們老師上課的時候和我們介紹了一下微軟開發windows的規模 產品經理就有幾百人 手下的員工也有上千人 連續開發三到四年的時間 才能完成一代系統的開發 這幾年每年都要有幾億美元的投入 連續三到四年 也就是至少10億美元吧 我們老師說的數字不一定準確 但是至少說明開發一套操作系統需要承擔很大的資金上的風險 連續幾年的投入是沒有回報的 做成之後也要需要市場的認可

現在的桌面操作系統基本上已經是window和其他操作系統 移動端是ios,安卓,wp和其他操作系統 國內廠商的手機操作系統都是基於安卓改的 如果真的要從底層開始 開發一套全新的操作系統 現在中科院在做原創的桌面操作系統 他們不差錢也不差人 至於做的怎麼樣 就不知道了 不過之前中科院做了一個cos的手機操作系統 可以參考一下 你就懂了 不過還是很希望他們能做出一個好的操作系統 不論是手機的還是桌面的


你覺得很容易而已,多少世界級技術大牛費了老鼻子勁弄出來的,你一句很容易就帶過了


2007 年 iOS 1.0 推出之時,Apple Inc. (包括其收購的 NeXT) 有超過 20 年的操作系統 (包括內核、GUI) 研發經驗,業界僅有 Microsoft 可以相比。


要做一個操作系統不難,但是要形成一個生態圈卻非常難,這不僅僅是技術問題了,還要大量的資金支持以及機遇,兩者缺一不可。微軟做操作系統的實力沒的說吧,可是錯過了那次機遇,現在wp很難往上爬了。


偏題一點,就算你寫出了一個還不錯能用的系統,那你系統又能佔多少市場份額?有多少開發者原意為你這個系統開發應用?WP有微軟這個爹目前市場份額都占的很少。

你要能佔有市場規模就要有其他系統無法比擬的優勢,當初安卓興起時因為蘋果太封閉產品太貴,這時候出來一個安卓功能差不多體驗差一些但是開源免費給廠家使用,一路發展足以正面抗衡。你一個新系統怎麼和這兩家比?怎麼活下來?怎麼掙錢?

這也是為什麼不去開發一個新系統的原因之一。

畢竟風險太大了,還是用安卓成本最低風險小~


只是把我的一些見解表達出來,不正確的希望指正。

蘋果的最底層是UNIX,安卓的底層是Lunix,這是那個時代經過過濾演變出來的兩大派系,最大區別是LUNIX開源。萬物的發現創造總的有一個基礎演化吧,不可能憑空出現的,不會一下子就演化出來個魚,出來個人,是有積澱的。你所說的屬於有很多含義的。中國的麒麟系統就是基於LUNIX開發的,這也算是中國人自己的系統吧


軟體開發也是一個工程問題。雖然摸不著,看不見,但是這個是實實在在的工程。就好像建大樓,造汽車一樣,它是一項工程。而且操作系統是一個非常龐大的系統,工程量非常巨大,非一般人能完成的。


軟體架構和管理天然一體。中國人這兩方面都很欠缺。


一個系統要成為真正的系統,其實要在於它能被關注,蘋果是智能系統領悟吃到第一個螃蟹的公司,吸引了很多開發者,這讓後起之秀難以生存,抵擋不住啊,所以不是沒有,而是消失了


人家做操作系統你用著容易,還以為開發很容易呢。

容易個{bi^.......}

開發難度都把這幫廠商難成這個揍性了,做的好再把難度乘以1000


開發一個系統,不難,中國開發出好幾個系統了,各種平台都有。朝鮮都有紅星系統,所以可以看得出,其實開發一個系統不難。

但是,一個系統之所以被稱作是「系統」,是因為在其內有完整的生態圈。打個比方,光有windows,沒有IE行嗎?或者,沒有其他各種軟體行嗎?缺了這些,這系統就沒什麼意義了。

所以咯,像上面的大眾提到的,沒有開發者入住,沒有配套的軟體,以至於沒有人會去用這麼一個什麼都幹不了的系統。而缺乏用戶問津,自然也不會有開發者有心思去入住這個系統,為其購置生態圈。

這是個死循環。


因為蘋果做的生態比當時其他生態的體驗(諾基亞和WP需要自己電腦下載軟體傳到手機,還要特別找適配的機型等等)都要好,並且在這個基礎上不斷進步,像支付,統一推送,適配性等等,當然大家就越來越願意用,進一步繁榮了生態系統。國產巨頭現在自己建生態系統,功能上也只是抄襲蘋果,但再怎麼做也不能比蘋果更優秀了。

打敗iOS的肯定不是另外一個能和iOS干同樣事情的系統,不過在交互和創新性上國內巨頭也看不到什麼希望。


因為市場已經切分完畢,在白紙上作畫相對容易


推薦閱讀:

從實際體驗來看,M7 處理器是否為 iPhone 5s 的續航帶來了顯著提升?
如何看待蘋果年底前在華建設第一座亞太研發中心?
小米MIUI和蘋果iOS界面你們覺得那個更好?
Retina 屏幕上,3D 遊戲還有必要進行抗鋸齒渲染嗎?
下面這段字元為什麼會讓手機QQ未響應?

TAG:iOS | Android |