近日,在 Quora(類似知乎)網(wǎng)站上,有 Po 主提出了一個問題:“要使操作系統(tǒng)獲得 Unix 認證,需要做些什么?”答主 Terry Lambert 給出了非常精彩的回答,鑒于他的身份——前蘋果工程師,曾負責 Mac OS X 內(nèi)核的大部分工作,該回答很快就獲得廣泛關注并獲得了上萬贊。
這是一個引人入勝的故事。早年蘋果公司推出 Mac OS X 操作系統(tǒng)的時候,經(jīng)常利用“兼容操作系統(tǒng)的 UNIX 內(nèi)核”作為宣傳手段。比如,在其網(wǎng)站上,就專門有一頁介紹 Mac OS X 的 UNIX 的文章。
The Open Group(國際開放標準組織)對此提出了訴訟,稱其未經(jīng)授權(quán)便擅自使用 Unix 名稱。一旦蘋果敗訴,就需要賠償 2 億美元。
不過,蘋果公司堅持自己可以自由使用 Unix 的名稱,認為自己沒有進行虛假宣傳。但為了應付這場訴訟,據(jù) Lambert 回憶,當時蘋果對于此事主要有兩個解決方案,要么以大約 10 億美元的代價收購國際開放標準組織,要么趕緊獲得 Unix 兼容認證,從而化解這場訴訟。
史蒂夫·喬布斯將這個認證的“秘密”任務交到了前蘋果技術負責人 Lambert 手上,需要針對現(xiàn)有的 Mac OS 源代碼運行合規(guī)性測試,邊測試邊修改,完成時間只給了一年。這也意味著 Lambert 需要在短時間內(nèi)對 Mac OS X 內(nèi)核的 1300 萬行代碼了如指掌,技術難度非常大。
Lambert 被承諾在任務完成之后,團隊將會獲得 2000 萬美元的股權(quán),Lambert 個人將得到 1000 萬美元。實際上,這種任務如果是針對 Linux 的,那么需要一個二三十人的團隊工作五年,但 Lambert 帶著一支五人團隊在一年內(nèi)就完成了,期間還為數(shù)百個開源項目貢獻了大約 200 萬行的代碼。只不過,Lambert 最終沒有得到這 1000 萬美元的報酬,他的股權(quán)被其領導獨吞了。
有些人說不存在 10x 程序員,但我認為他們是沒有遇到像你這樣的 100x 程序員。雖然我們都知道最終 Mac OS X 已經(jīng)通過 UNIX 認證,不過這并不影響我們跟著 Lambert 的回憶去了解這段有趣過往的細節(jié)。
讓 Mac OS X 成為真正的 UNIX
按照 Lambert 的說法,為了讓 Mac OS X 通過 UNIX 認證,這里面要做的工作可太多了。
讓 Mac OS X 成為真正的 UNIX?,這樣就可以化解這場訴訟了,這對在 Linux 日益普及的情況下逐漸失去市場的國際開放標準組織來說是件好事。以大約 10 億美元的代價收購國際開放標準組織,這樣蘋果公司就可以自由地使用該商標;但是,這并不能使他們免除與 Sun Microsystems、IBM 和其他公司的現(xiàn)有合同義務,因為這些公司都已經(jīng)獲得了 UNIX 商標的使用許可。當時有人問 Lambert 是否可以帶領一支團隊去做第一個選項的工作,他表示,同意的前提是,可以基于這個項目,指導整個組織的其他部分都在自己的代碼庫上進行相應的修改,并且可以對提交規(guī)則進行相當寬松的處理。
隨之,Lambert 獲得批準并開展認證工作。他們首先針對現(xiàn)有的 Mac OS 源代碼運行合規(guī)性測試套件,由于頭文件的緣故,測試套件立即顯示出錯。
他和同事 Ed Moy 做了兩行更改,將類型定義從 <stdio.h> 移到它應該在的位置。在 <stdio.h> 中有一行更改,而另一行的更改是在該類型實際上應當存在的文件中。
接著再次運行測試,發(fā)現(xiàn)首次測試中的其中一個頭文件錯誤消失了。因此,Lambert 等人做了一次“世界構(gòu)建”(world build),將 Mac OS X 中的一切,包括 iTunes 都進行了重建。這一更改之下,有接近 150 個項目未能順利重建,iTunes 也在其中。
于是 Lambert 和 Ed 對這些項目進行了認真的研究,并修復了其中的每一個項目,以讓它們都能夠進行構(gòu)建。他們接著又進行了一次“世界構(gòu)建”,所有東西都建立起來了。
也正是在那個時候, Lambert 才有機會接觸到蘋果的所有源代碼。然后他們向項目提交了高優(yōu)先級的錯誤修復,但其中一些立即被降低了優(yōu)先級,另一些只需要做簡單修復,因為他們幫助提供了補丁。接著工程副總裁 Bertrand Serlet 重新提升了那些被降級的項目的優(yōu)先級。然后,Lambert 他們提交了頭文件更改。
項目甚至“驚動”喬布斯
事已至此,Lambert 他們在這時候不得不重新評估一下整個項目的可行性??紤]到他為這個項目設定的先決條件,他和 Ed 都認為,這在時間范圍內(nèi)是可以繼續(xù)下去的。
該項目還升級到喬布斯那里。Lambert 繼續(xù)獲得執(zhí)行批準,畢竟,這樣做能讓蘋果公司節(jié)約大量資金,而且還改進了所有 Mac OS X 服務器的營銷宣傳資料。
他們被承諾在完成之后將會獲得 2000 萬美元的股權(quán)。Lambert 將得到 1000 萬美元,Ed 和 Karen Crippes 將分別得到 500 萬美元。
Lambert 表示,當時他戴了很多“帽子”,不只是一個技術負責人,而且還是事實上的項目經(jīng)理。
這個過程也是肉眼可見地漫長。Lambert 估算需要約一年的時間,這是一支由 5 個人組成的項目團隊:三名 mousekateers(并非拼寫錯誤),兩名承包人:是 Len Lattanzi,負責用戶空間的代碼;Jaime Delgadillo,負責全職的自動化測試和 Bug 歸檔,并且盡量提供一些補丁。
項目組還有兩名臨時承包人,一名負責工具的合規(guī)性,另一名則負責手冊頁面。另外,他們還可以根據(jù)情況從蘋果的其他部門抽調(diào)員工進行短期的工作。
漫長的一年
第一個大喜進展是,所有的頭文件都通過了測試,這樣測試套件中的其他測試就可以開始運行。在那個時候,Lambert 實際上已經(jīng)將所有的頭文件的修改提交給了 Mac OS X 的其他部分。當 Tiger(指 Mac OS X v10.4)版本發(fā)布時,頭文件就已經(jīng)符合標準了。但是,這影響了 CodeWarrior(Mac 的 IDE)的正常運行。Lambert 說自己一直想要解決這一問題,但一直沒有機會,而且 CodeWarrior 或多或少都受到了影響。
對于蘋果公司的其他部門而言,Lambert 剛剛解決了“修復頭文件”的 Bug,它包含了許多其他針對單個頭文件的 Bug,這用了三個月左右的時間。
Lambert 曾承諾過一年的時間,那么他將怎樣實現(xiàn)這一年的預期呢?
Lambert 回憶道,“我知道,對頭文件進行強制性的更改,以及與之相關的項目更改,將會成為項目中最大的單個部分。一旦我們能夠進行其他的測試,那么在其他方面將會有大量的‘可輕松實現(xiàn)的目標’等著我們?nèi)ソ鉀Q。這個過程用了兩個多月的時間,我們在提交規(guī)則時總是猶豫不決,但很快就完成了。Ed 在我的協(xié)助下完成了 libSystem 的大多數(shù)工作(libc + 其他系統(tǒng)庫),并把它們合并到一起,從命名空間中移除某些內(nèi)容;這也是為什么在 /usr/include/sys 中,頭文件以"_"開頭。”
“在等待提交的過程中,你可以并行地做其他工作,我們就是這樣做的。在實現(xiàn)這些可輕松實現(xiàn)的目標之后,還有許多工作要做,例如重寫內(nèi)核中的信號系統(tǒng),但這并不是那么容易實現(xiàn)?!?/p>
不過 Lambert 等人已經(jīng)把 Umesh(我不會告訴大家他的姓)給說服了,“因為他不希望我們?nèi)ビ|碰他的 pthreads 代碼,不管怎么說,他還是想要在那里做出一些改動,有了這個項目作為反復推敲這些更改的手段,讓他感到非常高興?!焙髞恚麄冞€從 Mike Smith(Michael Smith,蘋果高級工程師)那里得到了“勉為其難”的支持,讓他重寫文件鎖定代碼。
項目組最終還通過詢問有關陷阱路徑的問題以及圍繞信號系統(tǒng)堆棧幀保存的問題“收買”了 Joe Sokol。不過 Lambert 強調(diào),在這些人當中,Umesh 對他們的 deadline 有著最大的幫助。
扣動扳機
萬事俱備,Lambert 正準備“扣動扳機”,意外隨之而來。
“他們引入了英特爾的代碼更改,讓我們再等上兩個星期,但一切都亂了套。所以我花了三天的時間,將一致性分支上所有的補丁都重新整合到英特爾的內(nèi)核代碼中。到了那時候,我已經(jīng)對 Mac OS X 內(nèi)核的 1300 萬行代碼了如指掌?!?/p>
然后大家又回到了通過測試的狀態(tài)。后來有人告訴 Lambert,不能為 Tiger 做整合。但這樣會錯過已設定好的 deadline。Tiger 的發(fā)布時間被再次延遲了 6 個月,一次又一次地延遲。這個問題不在內(nèi)核,而是在英特爾。
Lambert 說,“我們本來可以輕松地在 Tiger 上發(fā)布,和我們自己設定的 deadline 保持一致?!钡绻o Linux 做相同的工作,可能要花五年的時間,而且還得需要二三十人。畢竟 Linux 發(fā)行版過多,產(chǎn)生了大量的陣營。
Lambert 最后提到,團隊為開源社區(qū)做了很多貢獻,“我們從開源社區(qū)收獲了許多感謝,尤其是讓 bash 順利通過測試的修復。你絕對不會知道,作為這個項目的一部分,蘋果公司為開源社區(qū)做出了多少貢獻,至少對于非蘋果公司的人而言,這是一個秘密項目,因此我們并沒有將這一事實宣揚出去。但是我估計,當年我們?yōu)閿?shù)百個開源項目貢獻了大約 200 萬行的代碼。雖然感激之情有很多,但這種感激并非歸于集體,因此,蘋果公司總是被人詬病為‘使用開源代碼,但從不回饋’。但,我們修復了至少 15 個 GCC 的 Bug。而你根本不知道。”
因此,整體來說這是一項規(guī)模不小的工程,尤其是在為了獲得合規(guī)性的情況下。Lambert 感慨道,這真是一個漫長的過程。
盡管如此,Lambert 在評論區(qū)透露,自己由于一些原因 ,最終并未獲得預期的 1000 萬美元股權(quán)。
原文鏈接:
https://www.quora.com/What-goes-into-making-an-OS-to-be-Unix-compliant-certified