Unix 50 年:Android 和 iOS 操作系統,源自于同一個失敗的項目

產品

11 小時前

原文來自 Ars Technica,原標題《Unix at 50: How the OS that powered smartphones started from failure》,作者 RICHARD JENSEN,36 氪神譯局編譯,愛范兒經授權發布。

你或許不知道,安卓和 iOS 兩個充滿競爭的操作系統,其實是源自于同一個系統 ——Unix,直到現在,還在為這兩個操作系統提供著支撐力量。

Unix 誕生 50 周年了。當時,這個幾乎驅動著所有智能手機的操作系統,其實是一個項目失敗的產物,開發者這個系統的程序員,并沒有的獲得支持,只能夠使用別人閑置下來不用的計算機。

從一個失敗的項目,到無處不在,Unix 誕生的早期,到底發生了什么?

也許它的無處不在早已掩蓋了它的起源。 但是 Unix ,這個幾乎驅動所有智能手機的操作系統,其實是 50 年前一個充滿野心的項目失敗后的產物。

當時,這個項目的團隊陣容也非常豪華,有貝爾實驗室、通用電氣和麻省理工學院。

具體來說,Unix 主要是貝爾實驗室中一些程序員的想法,它不可思議的故事,開始于一次會議,舉辦地點是新澤西州默里山貝爾實驗室中一個不起眼的附屬建筑頂層。

1969 年 3 月的最后一天,是一個陽光明媚、天氣寒冷的星期一,這個計算機科學部門接待了兩位來賓:貝爾實驗室副主任比爾?貝克(Bill Baker)和研究主任埃德?戴維(Ed David)。

貝克準備終止 Multics (一種復合信息和計算服務的縮寫) —— 這是一個計算機科學部門已經研究了四年的軟件項目。當時,Multics 已經延期兩年了,遠遠超出預算,而且只能在最寬松的條件中發揮作用。

為了盡可能好地解釋這個明顯失敗的項目,貝克在一次演講中聲稱,貝爾實驗室已經完成了它在 Multics 中試圖完成的所有事情,他們不再需要繼續這個項目。

正如出席會議的伯克?塔格(Berk Tague)后來在普林斯頓大學所說的那樣,「和越南一樣,他宣布了勝利,并退出了 Multics。」

在部門內部,這一聲明并不出人意料。程序員們敏銳地意識到,項目范圍和他們被要求為之開發的計算機存在各種問題。

盡管如此,這仍然是一件值得努力的事情,而且只要貝爾實驗室還在研究 Multics,他們就有一臺價值 700 萬美元的大型計算機可以在業余時間使用。

在 Multics 項目上工作的程序員之一丹尼斯?里奇后來說,他們都覺得這個項目想要成功,要承擔一定的風險,而且成功的可能性非常渺茫。

取消 Multics 意味著,計算機科學部的程序員們必須從事的唯一項目的終結了,也意味著計算機科學部門失去了唯一一臺計算機。

在 GE 645 的主機被拆卸下來運走之后,計算機科學部門的資源被削減到只剩下一些辦公用品和幾臺終端機。

正如另一位參與這個項目的程序員肯?湯普森在 Unix Oral History 項目中挖苦地評論的那樣,「我們的個人生活方式變得更加簡樸。」

幸運的是,對計算機愛好者來說,約束有時會產生巨大的創造力。

所以,有史以來最有影響力的操作系統不是由風險資本家投資的,而且寫這個系統的人也不會因此成為億萬富翁。

Unix 的出現,是因為貝爾實驗室雇傭了聰明的人,并給予他們自由的空間,相信他們的項目是有用的。

在 Unix 之前,貝爾實驗室的研究人員已經發明了晶體管和激光,以及在計算機圖形學、語音合成和語音識別領域有許多創新。

為 Multics 讓路

一開始的時候,大家都對 Multics 充滿希望,盡管乍看之下,它的目標有點含糊,甚至有點夸張。

作為一個由通用電氣、麻省理工和貝爾實驗室共同參與的項目,Multics 被宣傳為一個將計算能力轉化為像電力或電話服務一樣容易獲得的項目。

在未來,貝爾實驗室的研究人員只需要在他們的辦公室里安裝一個插孔,將他們的終端與 Multics 主機連接起來,就能夠實時訪問主機的全部資源,還可以在主機上存儲文件并隨意檢索。

盡管這些聽起來都是微不足道的,但證明了即使對于簡單的計算任務來說,這些功能也十分重要。

但是,當 Multics 在 20 世紀 60 年代初被首次構想出來時,文件存儲是一個新鮮事物,而「分時」(即多個用戶共享一臺計算機資源的能力)只是在實驗中完成的,并不是在擁有大量用戶的生產環境中實現的。

在 20 世紀 60 年代早期,計算機只是一個接一個地運行程序。貝爾實驗室的研究人員要編寫一個程序,并把它轉換成計算機接受的任何形式的輸入 (穿孔卡片、紙帶或者花哨的機器磁性介質) ,然后把它傳輸到計算機中心。

計算機操作員會把程序排好隊,運行它,然后把打印出來的結果和原始程序交給研究人員。

如果代碼中有錯誤,打印出穿孔卡片,把它們帶到計算機中心,等待的結果可能就會是一個上面寫著類似「SYNTAX ERROR」的打印輸出。也許你還可以得到一個線索或其它可能有用的信息。

隨著程序變得越來越復雜,這種調試代碼的方法變得更加令人沮喪。

但沒有哪家公司或大學,甚至貝爾實驗室,能夠為每位研究員購買一臺主機 ——1965 年,貝爾實驗室用于開發 Multics 的 GE 645 的成本幾乎與一架波音 737 相當。

因此,人們對分時技術(譯者注:對計算機資源的一種共享方式,利用多道程序與多任務處理使多個用戶可以同時使用一臺計算機。)產生了廣泛的興趣,這種技術允許多個研究人員同時在大型主機上運行程序,并在他們的遠程終端上立即得到結果。

通過分時,程序不會被打印在穿孔卡片上,而是被編寫并存儲在主機上。理論上,研究人員可以在不離開辦公室的情況下動態地編寫、編輯和運行他們的程序。 Multics 的構想就是為了這個目標,它開始于 1964 年,最初定下的交付期限是 1967 年。

當時,麻省理工學院已經開發出了一種名為 CTSS 的原始分時系統正在使用。

具體的項目實施中,麻省理工學院提供規范,通用電氣提供硬件,通用電氣和貝爾實驗室將分擔編程任務。

Unix 團隊:聚集!

陸克文?凱納迪(Rudd Canaday)是 Multics 項目的首批程序員之一。凱納迪在 1964 年被貝爾實驗室聘用,在 1966 年被調到 Multics 項目上之前,還為耐克導彈防御計劃編寫了一個簡單的分時系統。

第二年,實驗室雇傭了里奇和肯?湯普森,前者是哈佛大學畢業生,父親是貝爾實驗室的校友,后者自稱是軍人,據他自己承認,至少在一個月的時間內,他都在 Cal-Berkeley 的校區躲避貝爾實驗室的招聘人員。

凱納迪、里奇和湯普森來自不同的地方,但最終卻來到了同一個地方:貝爾實驗室大樓的頂層,在狹窄的空間里工作。沒有空調,但他們可以訪問價值數百萬美元的大型主機,而且監管相當寬松。

這三個研究人員都是 MTS,或者說是實驗室的技術人員。

這個稱號帶來了一種隱含的信任,即他們有能力找到自己的項目,并且 —— 如果讓他們自行決定的話 —— 從事對實驗室的母公司 AT & T 有利的研究。

幸運的是,這份工作也給了他們很大的自由。

馬爾科姆?道格拉斯?麥克羅伊(Malcolm Douglas McIlroy)是名義上的監督人員,畢業于麻省理工學院,自 1958 年以來一直在貝爾實驗室工作。

湯普森、里奇、卡納迪和麥克羅伊都很清楚麻省理工學院的規范中存在的缺陷 —— 到這個時候已經有幾千頁了 —— 他們知道,至少他們面臨的一些挑戰可以歸咎于 GE 645 的架構。

隨著時間的推移,他們四個,特別是湯普森,開始相信如果給他們一個新的開始,他們可以開發出一個比 Multics 更好的操作系統。

舒適的環境

▲ 肯·湯普森 (Ken Thompson,坐著) 和丹尼斯·里奇 (Dennis Ritchie,站著) 在 PDP-11 前(譯者注:PDP-11 是最著名的計算機之一,是數字設備公司(DEC)從 1960 年代早期開始制造的產品之一)。

里奇開玩笑說,與 1999 年 3 月《科學美國人》(Scientific American) 等雜志刊登自己的照片時相比,他那時的頭發「更加茂密」。

對于貝爾實驗室的程序員來說,Multics 并不是他們的全職工作,他們使用的通用電氣主機也可以用于其他項目。

湯普森的操作系統就是其中之一。 那年冬天他一直在做這個程序,并且想出了如何讓每個終端同時連接到機器上打印「HELLO」。

但是在他能夠進一步發展之前,Multics 項目被取消了,大型機被打包并搬出了他所在的計算機科學部門。

貝克和戴維斯取消 Multics 項目的時候,并沒有給麥克羅伊的團隊提供新的工作,這讓他們有點忐忑不安。 他們擔心,隨著 Multics 的消亡,自己在貝爾實驗室的職位也不會持續很長時間。

然而,這個蓬勃發展的開發團隊恰好處于適合 Unix 蓬勃發展的環境中。 貝爾實驗室與其他地方不同,它的資金來自美國幾乎所有電話線路的月收入的一部分。

把一小部分程序員放在默里山綜合樓的頂層并不會讓公司破產。湯普森所在的部門,也有一個有理想的經理人來支持他們追求好奇心。

管理計算機科學研究部門 (由麥克羅伊的程序員和一群數學家組成) 的山姆?摩根也沒打算依靠麥克羅伊的團隊,因為他們突然沒有什么特別的事情可做。

摩根是一名受過專業訓練的應用數學家,1967 年被提升為部門主任。

「我不認為管理是他最喜歡的活動,」布萊恩?科尼漢 (Brian Kernighan) 告訴 Ars,他的辦公室就在湯普森對面。「但他非常努力地把它做好。 他很善良,試圖善待每一個人。」

「這里的管理原則是雇傭聰明的人,然后向他們提供環境,」摩根自己在 Unix 口述歷史項目中回憶道。「你給他們大致的指示,告訴他們需要什么樣的東西,給他們很多自由。」

因此,摩根沒有提供具體的方向,而是傾向于運用他所說的「選擇性熱情」來鼓勵一個特定的研究項目,他指出,「如果你錯誤地阻止或沒有回應一些后來證明是好的東西,如果它真的是一個好的想法,它會回來。」

「他讓人們做自己的事情,從不告訴任何人他們應該做什么,」科尼漢回憶說。 當時,貝爾實驗室也強調跨學科的合作。「每個人都一直開著門,所以如果你有什么問題,附近有個專家,你可以走進去尋求幫助,」科尼漢回憶道。

盡管如此,對于湯普森和他的同事們來說,目前還有一個小問題 —— 沒有人有計算機。雖然實驗室管理人員對計算機本身沒有問題,但麥克羅伊的程序員無法說服他們的老板給他們購買一臺計算機。

由于 Multics 的慘敗,他們沒法說服任何人給他們一臺新計算機,以便他們繼續操作系統的研究和開發。

但從實驗室管理人員的角度來看,湯普森和其他團隊成員似乎只想繼續從事 Multics 項目。

共享計算財富

計算機科學部門與聲學和行為研究部門共用一層樓。這個部門更大,由電子音樂、聲音合成和聲音識別領域的先驅馬克斯?馬修斯(Max Mathews)領導。

聲學部門,明顯應用于 AT&T 的核心業務,顯然比計算機科學部門資金更充足。

此外,這里還有一種似乎有意激怒里奇和湯普森的情況 —— 聲學部門并不缺少計算機。里奇和湯普森本來就對公司的官僚作風有一定的不屑。 事實上,聲學的計算機數量遠遠超過了他們的需要。

而且,只要聲學部門的程序變得過于復雜,無法在他們的計算機上高效運行時,他們只需要向實驗室管理人員索要新的計算機就可以了。

▲馬克斯?馬修斯在貝爾實驗室的模擬電子實驗室里演奏一把電子小提琴。

盡管他們對隔壁能夠獲取大量資金存在一定程度的嫉妒,但在 60 年代和 70 年代聲學和計算機科學部門之間也有一些合作。其實,貝爾實驗室在計算機技術方面的許多創新,實際上來自聲學系。

例如,在 60 年代早期,聲學研究員 Bill Ninke 用 DEC PDP-7 微型計算機演示了一個基本圖形用戶界面。

雖然聲學仍然保留著那臺計算機,但是他們已經把它閑置,沒有使用它,并把它放在了六樓的某個偏僻的地方。

因此,湯普森,不知疲倦地將實驗室的角落和縫隙扒了一個遍以后,終于發現了 PDP-7,這個時候,戴維斯和貝克也剛剛宣布取消 Multics 項目后不久。

在團隊其他人的幫助下,湯普森把 PDP-7 的各種零件打包起來,把它放進了一個指定給音響部門的壁櫥里,然后開始運行。

PDP-7 的大小相當于一個冰箱,并不算終端機。而且,他們還說服聲學部門為計算機提供空間,并讓這個部門從預算中支付機器的日常修理費用。

麥克羅伊的程序員們,突然有了一臺電腦。 因此,在 1969 年夏天,湯普森、里奇和卡納迪在 PDP-7 上研究出了一個基本的文件管理器。

這不是一件簡單的任務。 批量計算 (一個接一個地運行程序) 很少能讓計算機能夠永久地存儲信息,許多大型主機上沒有任何永久存儲設備 (無論是磁盤還是硬盤)。

但是,這些程序員所喜歡的分時環境,必需要附加存儲器。當多個用戶同時連接到同一臺計算機時,文件管理器必須編寫得足夠好,以防止一個用戶的文件被寫到另一個用戶的文件上。

而且,還要求當讀取一個文件時,必須將該文件的輸出發送給打開該文件的用戶。

這是一個麥克羅伊的團隊愿意接受的挑戰。

他們已經看到了計算機的未來,并且想要探索它。他們知道 Multics 是個死胡同,但是他們發現了共享開發、共享訪問和實時計算所帶來的可能性。

20 年后,里奇在普林斯頓大學這樣描述說:「我們想要保留的不僅僅是一個做編程的好環境,而是一個可以能夠讓團隊合作的系統。」

「在 20 世紀 60 年代后期,我還在使用普林斯頓的 IBM 7094 和貝爾實驗室的 GE 635 進行批處理計算,」布萊恩?科尼漢告訴 Ars。

「但我在 1966 年夏天,在麻省理工學院用上了 CTSS,這揭示了交互式計算是多么美好。」

一旦 Unix 開始運行,科尼漢就從研究抽象主題轉向編寫程序,最終與里奇合作研究 C 語言,問世之后,其立即成為了編程手冊的黃金標準。

從貝爾實驗室的自助餐廳到我們的現代手機

盡管實驗室沒有密切關注研究人員什么時候上下班,但在那個夏天,凱納迪盡了最大努力保持正常的工作時間。但湯普森和里奇則稍微放松了一些。

他們倆的工作時間都極不規律。湯普森告訴 Unix Oral history 項目,他當時把每天當做 27 個小時來工作,這使他與其他人的每天 24 小時工作不同步。

里奇只是一個傳統的夜貓子。

因此,這三位開發者聚在一起的時間大多是在午餐時間,甚至在那個時候,有時凱納迪會打電話到湯普森和里奇家里,提醒他們貝爾實驗室的自助餐廳什么時候關門。

在自助餐廳,三位開發者討論了這個新操作系統的文件管理器的基本原理,幾乎沒有注意到員工清理他們周圍的午餐垃圾。

他們還在計算機科學部門的辦公室里研究這個系統。 麥克羅伊的辦公室就在凱納迪對面,他記得那年夏天,他們總是圍著一塊黑板工作。

最終,當他們在概念上或多或少地完善了文件管理系統后,就到了真正編寫代碼的時候了。這三個人的字寫得都很糟糕,他們決定使用實驗室的口述服務。

其中一人打電話給實驗室分機,將整個代碼庫錄入磁帶錄音機。 因此,一些身份不明的辦公室工作人員或工作人員很快就遇到了一個麻煩的任務,試圖將其轉換成打印用的文件。

當然,這個過程并不完美。 在各種各樣的錯誤中,「inode」作為「eye node」返回,但是輸出仍然被看作是對各種涂鴉的明顯改進。

1969 年 8 月,湯普森的妻子和兒子去伯克利度假三周,看望家人。湯普森決定用這段時間編寫一個匯編程序、一個文件編輯器和一個管理 PDP-7 處理器的內核。

這將使這一組文件管理器成為一個成熟的操作系統。 他慷慨地為每項任務分配了一個星期的時間。

湯普森差不多按時完成了他的任務。 到了 9 月,貝爾實驗室的計算機科學部門已經有了一個運行在 PDP-7 上的操作系統,而且不是 Multics。

PDP-7 當時沒有磁帶驅動器或硬盤驅動器,系統是通過向其輸入一個打孔紙來「啟動」。 由于沒有附加的驅動器,他們辛苦開發的文件系統不得不再等待一段時間面世,但他們有一個良好的多用戶分時環境可以運行。

這個團隊還是覺得這是一項成就,并將其操作系統命名為「UNICS」,即「聯合信息與計算系統」(UNIplexed Information and Computing System)的縮寫。

▲第七版 Unix 是從 1979 年開始的 Unix 操作系統的重要早期版本。這是在 AT & T 將 Unix 商業化之前,貝爾實驗室推廣的最后一個版本。

那年 11 月,湯普森進行述職報告中,包含了對他構建的這個新操作系統的描述。

到了 1970 年夏天,這個團隊已經在 PDP-7 上安裝了一個磁帶驅動器,而且他們蓬勃發展的操作系統也為程序員提供了越來越多的工具選擇 (其中一些至今仍然存在)。

但是,盡管取得了成功,湯普森、卡納迪和里奇在申請全新的計算機時,仍然被實驗室管理層拒絕。

直到 1971 年末,計算機科學系才擁有了一臺真正現代化的計算機。 在過去一年左右的時間里,Unix 團隊已經開發了幾個工具來自動格式化文本文件以便打印。

他們這樣做是為了簡化他們所鐘愛的項目的文檔制作,但是他們的工具傳播出去了了,被頂層其他地方的幾個研究人員使用。

與此同時,實驗室的法律部門準備在一個名為「AstroText」的大型主機程序上花一大筆錢。

聽到這個風聲,Unix 的工作人員意識到他們只需要一點點努力,就可以升級他們自己編寫的工具,使之成為法律部門可以用來準備專利申請的東西。

這時,計算機科學部門提出了實驗室管理購買 DEC PDP-11,用于文檔生產。馬克斯?馬修斯提出從聲學部門的預算中來買。

最后,管理層讓步了,買了一臺電腦給 Unix 團隊使用。

最終,關于這個操作系統的消息泄露了出去,擁有 PDP-11 的企業和機構開始與貝爾實驗室聯系,想購買他們的新操作系統。 這家實驗室同意免費提供副本,只收取郵資和存儲費用。

就這樣,他們創造了科技的歷史。

到了 20 世紀 70 年代末,這個操作系統的一個副本傳到了加州大學伯克利分校,在 20 世紀 80 年代早期,那里的程序員把它改裝成可以在 PC 上運行。

他們開發的 Unix 版本,也就是 BSD 操作系統,被 NeXT 的開發人員選中。

NeXT 是史蒂夫?喬布斯在 1985 年離開蘋果公司后創立的公司,當蘋果在 1996 年收購 NeXT 時,BSD 成為了 OS X 和 iOS 的起點。

Unix 的免費發行在 1984 年停止,當時美國政府拆分 AT & T,之前禁止該公司從貝爾實驗室的許多發明中獲利的協議也到期了。

然而,Unix 社區已經習慣了免費軟件,所以當得知 AT & T 將很快對 Unix 的所有副本收費,并禁止修改源代碼時,理查德?斯托曼(Richard Stallman)和其他公司開始使用免費分發給任何人的軟件重新創建 Unix,他們稱他們的項目為「GNU」,而且對修改沒有任何限制。

1991 年,芬蘭赫爾辛基的一名大學生林納斯?托瓦茲(Linus Torvalds)使用幾個 GNU 工具,編寫了一個可以在 PC 上運行的操作系統內核。

他的軟件,最終被稱為 Linux,在 2004 年成為 Android 操作系統的基礎。

登錄,參與討論前請先登錄

評論在審核通過后將對所有人可見

正在加載中
2002年大乐透走势图