FlossDoc: 請協力 GPLv3 的中文翻譯工作。

Unix

FlossDoc,自由中文開源知識庫

(重定向自UNIX)
Jump to: navigation, search

屈指一算,Unix 也有超過三十年的歷史。 Unix 積蓄了卅多年各專業電腦技術人員的心血,由 Ken Thompson 和 Bell Lab 一班研究員的 Hacker 玩具,上至 Cray 等超級電腦,下至 SGI 、 Sun Sparc 等工作站及大眾化的 PC 都遍佈 Unix 的蹤跡。

這是一個十分有趣的問題,如果問題何謂 M$-DOS ?何謂 VMS 或何謂 NT ?回答它們都是作業系統 (OS) 倒也不會有人有異議。不過對於Unix ,問題就變得複雜了。不是說 Unix 不是 OS ,但這回答對於很 Unix 玩家來說總顯得過於片面及小看了 Unix 。

目录

何謂 Unix ?

Unix 原本是一個由貝爾實驗室(Bell Labs)發展出來的多用戶(Multi-User)多工(Multitasking)的 OS 。 Unix 這名字 主要是對之前 Bell Labs 曾參與的 Multics 計劃的反嘲。由於其源碼簡單易理解及高移植性(首個使用高階程式語言編寫成的 OS) ,加上初期 AT&T 對 Unix 源碼版權的態度蠻開放 (或者正確來說應該是 AT&T 還未發覺 Unix 是這麼值錢的,而後來 AT&T 亦正受到反壟斷法限制,不敢再佔手電腦業務。) , 被不少大學及公司移植到很多不同的平台。現在上至超級電腦如 Cray ,下至個人電腦如 Macintosh 及 IBM PC 都有 Unix 。所以比較正確來說, Unix 是代表了一系列的 OS , 包括一些不 含任何原身 Bell Labs Unix 程式碼但擬似 Unix 的 OS (就是所謂的 Unix-clone , Linux 就是當中的俵俵者)。

現在由最初 Bell Labs 發展出 Unix 源碼版權屬於 Caldera 而其名字 UNIX (全大階)則屬於 The Open Group (TOG) 所有。 TOG 制定了一系列 UNIX 標準,當任何生產商的 OS 要符合其標準才可用 UNIX 這個名字,如 DEC 的 Digital UNIX 。

然而,這也還不能把 Unix 完整地描述出來。在 Larry Wall 及 Randal L. Schwartz. 所著的 Programming Perl 的辭解 (Glossary) 中,就打趣地說:

Unix 是一個肥大而不斷演進的語言,當中包含了大量互相不協調的語法。講 Unix 的人總認為它很易學,因為它可以很容易地被改變成自己熟識的語法。

這解析有點反 Unix 味,但也顯示出對於很多人來說, Unix 已超越了一個 OS ,象徵了一套操作環境、語言甚至哲學及文化。或者借一句『君處牆外,焉能知宮庭之美?』,只有真正了解及喜愛 Unix 的人才會明白 Unix 的哲學及文化。

怎了?過玄嗎?太過含糊嗎?其實就以擬似 Unix 來說,也有程度之分。 M$-DOS 在設計時就借了 Unix 不少靈感,如樹狀結構的檔案系統 (Tree-structured File System) 及管道 (pipe) 等。 Windoze NT 本身也支援 POSIX.1 (一套定義了 Unix 基本的 System Call 的標準),但總沒有人會認同它們是 Unix 的一種。個人認為 UNIX FAQ part6 中對 Unix 的定義不錯,給本文弄得糊塗的朋友參考。

我們所提的 Unix 指的是一個通常是由 C 寫成的作業系統,它有階層式的檔案系統,統合了檔案和裝置 (device) I/O ,其系 統函式呼叫(system call)介面包含了如 fork() 、 pipe() 等服務,而且它的使用者介面包含 cc 、troff 、 grep 、awk之類的工具及某一種 shell 。』

Unix 的歷史

一談到歷史,總令不少人感到頭痛,知道一樣東東的歷史好像在實際上沒有什麼用途。然而如果有有趣的故事,歷史偶然會增力在學習某樣東東的趣味。何況知道某樣東東的歷史,對於了解他本身的哲學和功用有很大的幫助,也是要對該事物有高層次了解時所必知的。

個人覺得說得最詳細和精彩的,要算是 Don Libes 及 Sandy Ressler 合著的 《LIFE WITH UNIX》。筆者在開始有自己 撰寫 Unix 歷史的想法時,也不知從圖書館中扣留了這本書不知多久。不過一直都很懶而沒有動筆,現在而沒法再借了,到處跑也買不到,唯有自己另外想辦法去找資料。以下都是筆者憑個人記憶及一些網上資源而編寫的,亦老掉牙地說在翻譯選字、資料完整性及著作權的問題上作了最大的努力,如有錯漏,請幫忙指證,以便修改。

Multics 的失敗

要談 Unix 的歷史,一定要回溯到 1965-68 年美國電話及電報公司 (American Telephone and Telegraph Inc., AT&T) 、 通用電器公司 (General Electrics, G.E.) 及麻省理工學院 (Massachusetts Institute of Technology, MIT) 的 Multics (MULTiplexed Information and Computing Service) 計劃。

在那時期,大部份電腦都是採用批次處理 (Batch Processing) 方式。為了顯示多用途 (general-purpose) 及多用戶 (multiuser) 的分時系統 (timesharing system) 是可行的,MIT 以在試驗 CTSS (Compatible Time-Sharing System) 當中所得的研究成果取得了 G.E 的同意合作為 G.E. 的大型電腦 GE-635 開發一套全新的分時作業系統 - Multics 。

由於 Multics 有不少設計在當時是頗新穎具富創意的,因此吸引了不少研究機構的注意。而其中那時仍和 AT&T 同一家的貝爾實驗室 (Bell Libraries, Bell Labs) 更在六十年代末曾正式參於過 Multics 計劃,那時剛由加州柏克萊大學 (University of California at Berkeley, UCB) 去到 Bell Labs 的 Ken Thompson 就是 Multics 研究小組的一員。

不過 Multics 的發展進度很慢,原本預算兩年有成果但過了很久仍沒有多大進展。到了 1969 年, Bell Labs 終於決定放棄,退出了 Multics 計劃。 Bell Labs 的 Dennis Ritchie (K&R 的 R) 曾描述當時 Bell Labs 由管理層到研究員都認為 Multics 的開發是太遲及太貴了。

Multics 自 Bell Labs 退出後 , 仍有繼續發展。 Honeywell 在 1972 年購入了 G.E. 的電腦部門後更把 Multics 進出商業市場,但始終不算太成功。在 Multics 比較流行的八十年代,約有 75 至 100 台每台價值數百萬美元的大型電腦跑 Multics 。 1977 年, MIT 也退出 Multics 的發展工作。後來 Honeywell 在八十年代中期把其電腦上的事業賣給 Bull 後,Multics 的發展亦終於在 1988 年打上一個句號。

『角落中乏人問津的 PDP-7 』("little-used PDP-7 in a corner")

然而,Thompson 曾在 Multics 計劃當中為 GE-635 寫了個叫做「太空旅行」(Space Travel) 的遊戲程式。這個程式模擬 了一個太空船和太陽系的環境。 Bell Labs 放棄 Multics 後, Thompson 打算找另一台機器把「太空旅行」移植 (port) 過去,於是便和 Ritchie 向 Bell Labs 提議買一台電腦以便他們建立一台自己的交談式、多用戶、分時系統,不過他們的申請並沒有被接納。最後,Thompson 在一角落裡發現了一台很少人用的 PDP-7 (Programmed Data Processor) 。

PDP-7 是迪吉多 (Digital Equipment Corporation, DEC) 在 1964 年進出的迷你電腦 (minicomputer) 。這台約和 Commodore 64 同級的電腦的作業系統對於 Thompson 來說十分簡陋,於是 Thompson 就順帶以他在 Multics 計劃中學到的技術和經驗,為這台過時的電腦上撰寫一套新作業系統。這套作業系統有很多構想是來自 Multics ,包括樹狀結構 (tree-structured) 的檔案系統、用戶層面的命令解釋器 (Command Interpreter) ,簡單表現文字檔及對週邊設備 (Device) 的綜合化存取等。

最初,Thompson並不是在PDP-7上撰寫他的新系統,而是先在一台GE-635上使用GEMAP組譯器(Assembler)的巨集(Macros)編寫程式,再經由一後置處理器(post processor)產生可供PDP-7讀取的紙帶(paper tape)。這樣一來一回,由GE到PDP-7,直到一個雛型的核心(Kernel)、一個編輯器(Editor)、一個組譯器(Assembler)、一個簡單的Shell(命令解釋器,Command Interpreter)及一些公用程式如rm、cat、及cp等完成了,整個系統可以自給自足後,所有開發工作才在PDP-7上繼續。

而這套作業系統最初由與 Thompson 共事的 Brian W. Kernighan (K&RC中的K) 命名為 Unics (UNiplexed Information and Computing System),和Multics開了個玩笑。1971年間改成Unix,用Uni對Multi,cs對x。提起Unix的名字,很多人都疑惑正確的寫法是全大楷的「UNIX」,還是只有起首大階的「Unix」。Ritchie就解釋說'UNIX'言個寫法源自1974年CACM的文件《The UNIX Time-Sharing System》,當時這班先鋒研究者剛剛得了個新的typesetter及開發了troff。一大班人正對smallcaps字款著了迷,導致了「Unix」'的產生。縱使Ritchie在往多次以Unix並不是任何句子的縮寫為理由想在幾份Bell Labs的文件用回「Unix」,最後都失敗。而後來UNIX的註冊商標也是以全大寫為準。

Personal tools