天天看點

修完1300萬行代碼,我幫蘋果省下2億美元,但沒拿到承諾的千萬股票

作者 | Terry Lambert

譯者 | Sambodhi、燕珊

策劃 | Tina

“Mac OS X 核心一共 1300 萬行代碼,SVN 顯示我寫了其中 7%。”

近日,在 Quora(類似知乎)網站上,有 Po 主提出了一個問題:“要使作業系統獲得 UNIX 認證,需要做些什麼?” 答主 Terry Lambert 給出了非常精彩的回答,鑒于他的身份——前蘋果工程師,曾負責 Mac OS X 核心的大部分工作,該回答很快就獲得廣泛關注并獲得了上萬贊。

這是一個引人入勝的故事。

早年蘋果公司推出 Mac OS X 作業系統的時候,經常利用“相容作業系統的 UNIX 核心”作為宣傳手段。比如,在其網站上,就專門有一頁介紹 Mac OS X 的 UNIX 的文章。

The Open Group(國際開放标準組織)對此提出了訴訟,稱其未經授權便擅自使用 Unix 名稱。一旦蘋果敗訴,就需要賠償 2 億美元。

不過,蘋果公司堅持自己可以自由使用 Unix 的名稱,認為自己沒有進行虛假宣傳。但為了應付這場訴訟,據 Lambert 回憶,當時蘋果對于此事主要有兩個解決方案,要麼以大約 10 億美元的代價收購國際開放标準組織,要麼趕緊獲得 Unix 相容認證,進而化解這場訴訟。

喬布斯·史蒂夫将這個認證的“秘密”任務交到了前蘋果技術負責人 Lambert 手上,需要針對現有的 Mac OS 源代碼運作合規性測試,邊測試邊修改,完成時間隻給了一年。這也意味着 Lambert 需要在短時間内對 Mac OS X 核心的 1300 萬行代碼了如指掌,技術難度非常大。

Lambert 被承諾在任務完成之後,團隊将會獲得 2000 萬美元的股份,Lambert 個人将得到 1000 萬美元。實際上,這種任務如果是針對 Linux 的,需要一個二三十人的團隊工作五年,但 Lambert 帶着一支五人團隊在一年内完成了,期間還為數百個開源項目貢獻了大約 200 萬行的代碼。隻不過,Lambert 最終沒有得到這 1000 萬美元報酬,他的股票被其上司獨吞了。

有些人說不存在 10x 程式員,但我認為他們是沒有遇到像你這樣的 100x 程式員。

雖然我們都知道最終 Mac OS X 已經通過 UNIX 認證,不過這并不影響我們跟着 Lambert 的回憶去了解這段有趣過往的細節。

讓 Mac OS X 成為真正的 UNIX

按照 Lambert 的說法,為了讓 Mac OS X 通過 UNIX 認證,這裡面要做的工作可太多了。

讓 Mac OS X 成為真正的 UNIX,進而化解這場訴訟,這對于國際開放标準組織其實是有好處的,因為當時他們正因為 Linux 越來越受歡迎而漸漸丢失市場。

以大約 10 億美元的代價收購國際開放标準組織,這樣蘋果公司就可以自由地使用該商标;但是,這并不能使他們免除與 Sun Microsystems、IBM 和其他公司的現有合同義務,因為這些公司都已經獲得了 UNIX 商标的使用許可。

當時有人問 Lambert 是否可以帶領一支團隊去做第一個選項的工作,他表示答應的前提是可以基于這個項目,訓示整個組織的其他部分都在自己的代碼庫上進行相應的修改,并且可以對送出規則進行相當寬松的處理。

随之,Lambert 獲得準許并開展認證工作。他們首先針對現有的 Mac OS 源代碼運作合規性測試套件,由于頭檔案的緣故,測試套件立即顯示出錯。

他和同僚 Ed Moy 做了兩行更改,将類型定義從 移到它應該在的位置。在 中有一行更改,而另一行的更改是在該類型實際上應當存在的檔案中。

接着再次運作測試,發現首次測試中的其中一個頭檔案錯誤消失了。是以,Lambert 等人做了一次“世界建構”(world build),将 Mac OS X 中的一切,包括 iTunes 都進行了重建。這一更改之下,有接近 150 個項目未能順利重建,iTunes 也在其中。

于是 Lambert 和 Ed 仔細研究,并修複了其中的每一個項目,以讓它們都能夠進行建構。他們接着又進行了一次“世界建構”,所有東西都建立起來了。

也正是在那個時候, Lambert 才有機會接觸到蘋果的所有源代碼。然後他們向項目送出了高優先級的錯誤修複,但其中一些立即被降低了優先級,另一些隻需要做簡單修複,因為他們幫提供了更新檔。接着工程副總裁 Bertrand Serlet 重新提升了那些被降級的項目的優先級。然後,Lambert 他們送出了頭檔案更改。

項目甚至“驚動”喬布斯

事已至此,Lambert 他們這時候必須回頭再對整個項目進行一次可行性評估。鑒于他為這個項目設定的先決條件,他和 Ed 都覺得這在時間範圍内是可以繼續下去的。

該項目還更新到喬布斯·史蒂夫那裡。Lambert 繼續獲得執行準許,畢竟,這樣做能讓蘋果公司節省許多錢,而且還改進了所有 Mac OS X 伺服器的營銷宣傳資料。

他們被承諾在完成之後将會獲得 2000 萬美元的股份。Lambert 将得到 1000 萬美元,Ed 和 Karen Crippes 将分别得到 500 萬美元。

Lambert 表示,當時他戴了很多“帽子,不隻是一個技術負責人,而是一個事實上的項目經理。

這個過程也是肉眼可見的漫長。Lambert 估算需要約一年的時間,這是一支由 5 個人組成的項目團隊:三個 mousekateers(并非拼寫錯誤),兩個承包人——一個是 Len Lattanzi,負責使用者空間的代碼;另一個是 Jaime Delgadillo,負責全職測試自動化和錯誤歸檔,還盡可能地提供了一些更新檔。

項目組還有兩個臨時承包人,一個負責工具的合規性,另一個負責手冊頁面。另外,他們還可以根據情況從蘋果的其他部門拉來一些人做短期工作。

漫長的一年

第一個大喜進展是,所有的頭檔案都通過了測試,這樣測試套件中的其他測試就可以開始運作。在那個時候,Lambert 實際上已經将所有的頭檔案的修改送出給了 Mac OS X 的其他部分。當 Tiger(指 Mac OS X v10.4)版本釋出時,頭檔案就已經符合标準了。但是,這損害了 CodeWarrior(Mac 的 IDE)的正常運作。Lambert 說自己一直想要解決這個問題,但一直沒有找到機會,而 CodeWarrior 多多少少也會是以受損。

于蘋果公司的其他部門而言,Lambert 剛剛解決了“修複頭檔案”的 Bug,它包含了許多其他針對單個頭檔案的 Bug,這用了三個月左右的時間。

Lambert 曾承諾過一年的時間,那他該如何完成一年的預期呢?

Lambert 回憶道,“我知道,對頭檔案進行強制性的更改,以及與之相關的項目更改,将會成為項目中最大的單個部分。一旦我們能夠進行其他的測試,那麼在其他方面将會有大量的‘可輕松實作的目标’需要解決。這個過程用了兩個多月的時間,我們在送出規則時總是猶豫不決,但很快就完成了。Ed 在我的協助下做了 libSystem 的大多數工作(libc + 其他的系統庫),并把它們合并到一起,把某些内容從命名空間中删除;這也是為什麼在 /usr/include/sys 中,頭檔案以"_"開頭。”

“在等待送出的過程中,你可以并行地做其他工作,我們就是這樣做的。在實作這些可輕松實作的目标之後,還有許多工作要做,例如重寫核心中的信号系統,但這并不是那麼容易實作。”

不過 Lambert 等人已經把 Umesh(我不會告訴大家他的姓)給說服了,“因為他不希望我們去觸碰他的 pthreads 代碼,而且無論如何,他也希望在那兒做一些更改,有了這個項目作為反複推敲這些更改的手段,讓他感到非常高興。”後來,他們還從 Mike Smith(Michael Smith,蘋果進階工程師)那裡得到了“勉為其難”的支援,讓他重寫檔案鎖定代碼。

項目組最終還通過詢問有關陷阱路徑的問題以及圍繞信号系統堆棧幀儲存的問題“收買”了 Joe Sokol。不過 Lambert 強調,在這些人當中,Umesh 對他們的 deadline 有着最大的幫助。

扣動扳機

一切都已就緒,Lambert 準備“扣動扳機”,意外随之而來。

“他們引入了英特爾的代碼更改,讓我們再等兩個星期,但一切都亂了套。是以我花了三天的時間,将一緻性分支上所有的更新檔都重新整合到英特爾的核心代碼中。到了那時候,我已經對 Mac OS X 核心的 1300 萬行代碼了如指掌。”

然後大家又回到了通過測試的狀态。後來有人告訴 Lambert,不能為 Tiger 做整合。但這樣會錯過已設定好的 deadline。Tiger 在釋出之前又推遲了六個月,一次又一次地推遲。這是英特爾的問題,而非核心的問題。

Lambert 說,“我們本來可以輕松地在 Tiger 上釋出,和我們自己設定的 deadline 保持一緻。”但如果要他給 Linux 做相同的工作,可能要花五年的時間,而且還得有二三十人。畢竟 Linux 發行版過多,産生了大量的陣營。

Lambert 最後提到,團隊為開源社群做了很多貢獻,“我們從開源社群收獲了許多感謝,尤其是讓 bash 順利通過測試的修複。你絕對不會知道,作為這個項目的一部分,蘋果公司為開源社群做出了多大的貢獻,至少對于非蘋果公司的人而言,這是一個秘密項目,是以我們并沒有宣傳這一事實。但是我估計,當年我們為數百個開源項目貢獻了大約 200 萬行的代碼。雖然感激之情很多,但這種感激并非歸于集體,是以,蘋果公司依然一直被指責‘使用開源代碼,但從不回饋’。但,我們修複了至少 15 個 GCC 的 Bug。而你根本不知道。”

是以,整體來說這是一項規模不小的工程,尤其是為了獲得合規性。“在 Karen 所做的一切工作之前,有關于自我認證、合同、基于 OSF/1 Mach 的現有例外獲得測試例外,等等。”Lambert 感慨,這的确是一個漫長的過程。

修完1300萬行代碼,我幫蘋果省下2億美元,但沒拿到承諾的千萬股票

盡管如此,Lambert 在評論區透露,自己由于一些原因最終并未獲得預期中的 1000 萬美元股份。

參考連結:

https://www.quora.com/What-goes-into-making-an-OS-to-be-Unix-compliant-certified