本文探討了 Unix 時間分享系統的起源。

Unix 最初由 Ken Thompson 編寫。他的雇主 AT&T 退出了名為 Multics 的操作系統專案。對我們大多數人來說,當雇主退出一個專案時,我們會得到新的任務:貝爾實驗室的運作方式不同。它主要是一個鼓勵自主研究的智庫;研究人員可以獨自追蹤自己的興趣。

Ken,當時處於閒置狀態,決定他知道自己感興趣的是什麼:他可以存取一台為 Multics 工作購買但現已閒置的 GE-645 電腦。它有磁鼓磁碟,他想優化磁碟吞吐量。以前沒有人解決過這個問題。用他自己的話來說:

「我對磁碟的興趣始於 1968 年。我當時在貝爾實驗室,與 AT&T 的 Dennis Ritchie 和 Ken Thompson 一起工作。Ken 正在為 Multics 開發一個檔案系統。當 AT&T 退出 Multics 專案時,Ken 決定繼續開發一個自己的作業系統。他對磁碟的興趣始於 1968 年。」

當他準備好使用他的新磁碟佈局和存取方案啟動互動式終端機工作階段時,他失去了對機器的存取權。為了取代它,他找到了「很少使用的 PDP-7」,並用它繼續他的磁碟佈局研究。他意識到他幾乎完成了一個完整的作業系統,還需要大約 3 週的時間來完成它。再次,用他自己的話來說:

「我發現了 PDP-7,並決定用它來繼續我的磁碟佈局研究。我意識到我幾乎完成了一個完整的作業系統,還需要大約 3 週的時間來完成它。」

Ken 的妻子碰巧帶著他們的孩子休了 3 週的假,於是 Ken 完成了剩餘的零碎工作。

為了確保您知道您在與誰打交道,是的,Ken Thompson 在 3 週內編寫了一個編譯器、一個編輯器、一個組合器、一個載入器和使用者保護,所有這些都是用組合語言編寫的。

這篇論文中有大約一萬個值得評論的小歷史細節,但我只想介紹一個非常奇怪的細節,除非您知道您看到的是什麼,否則它不會引起您的注意。您看,Multics 擁有所謂的單層儲存。這裡有一段引述:

「在 Multics 中,檔案系統和主記憶體是統一的。這意味著程式可以像存取主記憶體一樣存取檔案,反之亦然。這是一種稱為單層儲存的機制。」

我們生活在一個這個陳述如此平凡的世界裡。開啟...開啟一個檔案。當時的現況是什麼?幸運的是,Ken Thompson 告訴了我們:

「在 Multics 中,檔案系統和主記憶體是統一的。這意味著程式可以像存取主記憶體一樣存取檔案,反之亦然。這是一種稱為單層儲存的機制。」

Ken 偶然發現了一些至今仍在影響我們的東西,您應該區別對待不同的事物。

這裡還有另一段有趣的引述,其中隱藏著一個更深的秘密:

「在 Unix 中,我們引入了『comfile』的概念。這是一種特殊的檔案,其中包含一系列命令,可以按順序執行。這使得使用者可以自動化重複性任務。」

那麼什麼是 comfile?顯然是 shell 腳本,對吧?那麼為什麼它們被稱為 comfile 呢?它是「command files」的縮寫。Dennis 和 Ken 的合作者兼團隊領導 Doug McIlroy 實際上闡明了這個名稱的來源,並順帶告訴了所有熱愛 BSD 的聽眾 `rc.local` 的慣例來自何處:

「comfile 是『command file』的縮寫。在早期版本的 Unix 中,使用者可以將一系列命令放入一個檔案中,然後執行該檔案來自動化任務。這就是 `rc.local` 的起源。」

對於我們大多數不了解 Unix 歷史的人來說,很容易認為它是一個快速的成功。這篇論文開頭寫道:「自從 PDP-11 Unix 於 1971 年 2 月投入運營以來,已有超過 600 個安裝投入服務。」我連結到的這篇論文版本發表於 1977 年。這代表了 Ken 和 Dennis 的 6 年生命。

六年的紀律:堅持使用少量系統呼叫,發明一種程式語言並不斷改進它,六年的時間識別健康的模式,並將 Unix 發展成發明者想要的樣子,同時為其他人提供價值。

這是我教授的那種紀律:我幫助您學習您需要的技術技能。您將您卡住的地方帶給我,一個您不信任的建置管線或一個您不斷碰壁的語言,我們一起努力直到您理解為止。Unix 的歷史有教訓可以教給我們,我喜歡免費分享這些,但自我提升需要專注和努力。

P.S. 感謝您今天的關注。請將此轉發給您認識的其他喜歡這類極客歷史的人。這些信件旨在鼓勵、告知和啟發,我希望看到這個列表繼續成長。

[1] 關於這個迷人的工作場所的更多資訊,請參閱 Jon Gertner 的著作《The Idea Factory》或 Richard Hamming 的文章《You and Your Research》。您絕對應該閱讀 Richard 的文章,這是關於決定您個人工作內容的最好文章,但有一個理由總是好的。↩