Unix 起源於 Bell Labs 的小型系統,後來成為數種彼此相關的事物:原始碼譜系、介面傳統、標準化環境與註冊商標。當這些類別被合併成一棵家族樹時,歷史主張便會產生誤導。
從 Multics 到 PDP-7 #
Bell Labs 在 1960 年代與 MIT 及 General Electric 共同參與 Multics 專案,後於 1969 年退出。Ken Thompson 仍對互動式運算與檔案系統設計感興趣。他也曾撰寫 Space Travel,先為 Multics 撰寫,後移植到 GECOS 系統;該系統的開發週期使實驗成本高昂。
Bell Labs 一台使用率不高的 DEC PDP-7 提供了實際目標。Thompson 在 1969 年為它撰寫檔案系統、程序支援、組合器、shell 與工具。Dennis Ritchie、Rudd Canaday、Doug McIlroy 及其他研究人員都對逐漸成形的環境有所貢獻。Brian Kernighan 將「Unix」命名為「Multics」的文字遊戲。
PDP-7 實作以組合語言撰寫,且受到嚴重記憶體限制。數個持久的概念已經存在:階層式檔案系統、程序、透過檔案導向介面存取裝置、作為普通程式的命令直譯器,以及可以組合的小型工具。
移往 PDP-11 #
Bell Labs 在該團隊提出文字處理系統後,於 1970 年取得 PDP-11/20。機器起初沒有磁碟,因此開發需要交叉組合器與紙帶,直到新系統能自我支援。文字處理提供了組織上的用途:Bell Labs 的專利部門後來使用 Unix 與 roff、nroff 及 troff。
早期 PDP-11 Unix 仍是組合語言軟體。硬體相依性使移植困難,因為指令排序、呼叫慣例、中斷與裝置程式碼遍布核心。高階實作語言可以降低這項相依性,但前提是它能暴露有效率的指標、整數操作與機器層級儲存。
從組合語言經 B 到 C #
Thompson 從 BCPL 衍生 B,用於系統程式設計。B 無型別且以字組為導向的模型適合 PDP-7,但與 PDP-11 的位元組定址及新興浮點支援對映不佳。Ritchie 透過「New B」擴充語言,加入型別、結構與適合 PDP-11 的編譯器,形成 C。
一次 B 重寫嘗試未能提供所需的效能與語意。1972 至 1973 年間,Thompson 與 Ritchie 以 C 重寫核心大部分內容,同時保留啟動、陷阱、上下文切換及其他架構特定操作的組合語言。可移植性因此意味著隔離機器相依性,而不是移除它。
1974 年 Communications of the ACM 論文公開描述該系統。後來的 Interdata 移植驗證了這項策略:提供編譯器、執行環境與機器相依核心層後,C 核心與使用者空間可以移往不同架構。
Research Unix 版本 #
「Research Unix」指的是 Bell Labs Computing Science Research Center 產生的版本,而不是每項 AT&T 產品。版本編號來自 Unix Programmer’s Manual 的連續版本:
- 第一版於 1971 年為 PDP-11 發布。
- 第三版包含管線,McIlroy 曾倡議將其作為組合機制。
- 第四版反映 C 重寫。
- 第六版於 1975 年發布,成為廣泛研究與授權的學術系統。
- 第七版於 1979 年發布,整合大量核心與工具開發,成為數個後續分支的祖先。
- Research Unix 在 Bell Labs 內持續發展至第八、第九與第十版。
AT&T 依授權將 Unix 原始碼分發給大學、政府使用者與商業組織。當時的同意令限制影響 AT&T 的電腦業務活動,而授權條款仍控制再分發。學術被授權者可以研究與修改原始碼,但這種安排並不是現代意義上的開放原始碼授權。
UNIX/32V 將第七版程式碼帶到 VAX,但沒有 Berkeley 後來的虛擬記憶體工作。原始碼路徑很重要,因為 BSD 與數個商業系統納入或演進了授權的 Research Unix 程式碼,而不只是模仿其介面。
BSD 與 AT&T 商業產品線 #
Berkeley Software Distribution 起初是加州大學 Berkeley 分校針對已授權 Unix 的軟體與修補程式。後續版本加入 vi 編輯器、C shell、虛擬記憶體、sockets API、TCP/IP、Fast File System,以及其他核心與使用者空間工作。3BSD 與 4BSD 保留 AT&T 祖源;後來的 Networking Release 2 與 4.4BSD-Lite 經過程式碼審查與替換,啟用可自由再分發的 BSD 後代。
現代 FreeBSD、NetBSD 與 OpenBSD 都透過 BSD 程式碼衍生。Darwin 是 macOS 的開放原始碼基礎,將 Mach 與大量 BSD 功能及使用者空間結合,因此 macOS 具有 BSD 程式碼祖源,但不是某個 Research Unix 核心的直接延續。
AT&T 的產品線經過 Programmer’s Workbench、UNIX/TS、System III 與 System V 走向不同路徑。System V Release 4 將 AT&T 工作與 BSD、SunOS 及其他貢獻結合。商業後代與衍生系統包括 Solaris、AIX 與 HP-UX,但其確切原始碼關係與保留元件會依版本而異。
POSIX 與介面譜系 #
廠商分歧使原始碼可移植性變得困難,因此 IEEE 將可移植作業系統介面標準化。POSIX 規定 API、shell 與工具行為,以及相關慣例。The Open Group 的 Base Specifications 將 POSIX 與 Single UNIX Specification 結合。
標準譜系不是程式碼譜系:
- Linux 是獨立實作,並不會僅因實作許多 POSIX 介面,就必然具有 Research Unix 或 BSD 核心祖源。
- BSD 衍生系統可以保留歷史程式碼,同時與目前的 POSIX 要求不同。
- 應用程式可以以 POSIX 原始碼介面為目標,而不依賴某個核心架構或歷史 Unix 原始碼授權。
GNU 為類 Unix 環境提供獨立開發的編譯器、C 函式庫、shell 與工具。Linux 發行版將 Linux 核心與 GNU 及其他專案結合,進一步說明介面家族不是單一程式碼庫。
UNIX 商標 #
UNIX 是 The Open Group 的註冊商標。產品符合適用的 Single UNIX Specification 並完成認證計畫後,才可以使用 UNIX 品牌。認證關注可觀察的相容性;不要求源自 Bell Labs 原始碼。
相反地,「Unix-like」是描述性的工程術語,而不是認證。系統可以共用程序、檔案系統、shell 與 API 慣例,卻不持有 UNIX 商標。精確的歷史寫作應指出預期的關係:
- 程式碼譜系追蹤繼承與替換的原始碼。
- 標準譜系追蹤對 POSIX 或 Single UNIX Specification 的符合性。
- 商標狀態追蹤認證與命名權利。
評論
在 GitHub 上閱讀或評論(發表評論需要登入)