## 第?45?章?Unix
**目錄**
[](ch45.html#id3164152)
[發展](ch45s02.html)
[UNIX家譜](ch45s03.html)
[現在幾種主要的UNIX版本](ch45s04.html)
[附錄: Unix 時代的開創者 Ken Thompson](ch45s05.html)
作者:不詳
1965年時,貝爾實驗室(Bell Labs)加入一項由奇異電子(General Electric)和麻省理工學院(MIT)合作的計畫;該計畫要建立一套多使用者、多任務、多層次(multi-user、multi- processor、multi-level)的MULTICS操作系統。直到1969年,因MULTICS計畫的工作進度太慢,該計畫就被停了下來。當時,Ken Thompson(后被稱為Unix之父)已經有一個稱為「星際旅行」的程序在GE-635的機器上跑,但是反應非常的慢,正巧也被他發現了一部被閑置的 PDP-7(Digital的主機),Ken Thompson和Dernis Ritchie就將「星際旅行」的程序移植到PDP-7上。而這部PDP-7就此在整個計算機歷史上留下了芳名。
MULTICS 其實是"MULTiplexed Information and Computing System"的縮寫,在1970年時,那部PDP-7卻只能支持兩個使用者,當時,Brian Kernighan 就開玩笑地戲稱他們的系統其實是:"UNiplexed Information and Computing System",縮寫為"UNICS",后來,大家取其諧音,就稱其為"Unix"了。1970年可稱為是Unix元年。
1971 年,他們申請了一部PDP-11/20,申請的名義是:要發展文書處理系統。該提案被獲采納,他們也發展出了一套文書處理系統 ─ 就是現在Unix操作系統里面文書處理系統(nroff/troff)的前身。有趣的是,沒有多久,貝爾實驗室的專利部門真的采用了這套系統作為他們處理文件的工具,而貝爾實驗室的專利部門也就順理成章地成為Unix的第一個正式使用者。當時,那部PDP-11/20只有0.5MB磁盤空間。而描述這整個系統的文件被標示為:"First Edition",版本日期是1970年11月。從此以后,Unix的版本就以系統文件的版別來稱呼。
## 發展
Unix操作系統的歷史漫長而曲折,它的第一個版本是1969年由Ken Thompson在AT&T貝爾實驗室實現的,運行在一臺DEC PDP-7計算機上。這個系統非常粗糙,與現代Unix相差很遠,它只具有操作系統最基本的一些特性。后來Ken Thompson和Dennis Ritchie使用C語言對整個系統進行了再加工和編寫,使得Unix能夠很容易的移植到其他硬件的計算機上。從那以后,Unix系統開始了令人矚目的發展。
由于此時 AT&T還沒有把Unix作為它的正式商品,因此研究人員只是在實驗室內部使用并完善它。正是由于Unix是被作為研究項目,其他科研機構和大學的計算機研究人員也希望能得到這個系統,以便進行自己的研究。AT&T以分發許可證的方法,對Unix僅僅收取很少的費用,大學和研究機構就能獲得Unix的源代碼以進行研究。Unix的源代碼被散發到各個大學,一方面使得科研人員能夠根據需要改進系統,或者將其移植到其他的硬件環境中去,另一方面培養了懂得Unix使用和編程的大量的學生,這使得Unix的普及更為廣泛。
由于操作系統的開發相當困難,只有少數的計算機廠商,如 IBM、Digital等大型公司,才擁有自己的操作系統,而其他眾多生產計算機的硬件廠商則采用別人開發的操作系統。因為Unix不需要太多的花費,因此很多廠商就選擇了Unix作為他們生產的計算機使用的操作系統。他們把Unix移植到自己的硬件環境下,而不必從頭開發一個操作系統。
到了 70年代末,在Unix發展到了版本6之后,AT&T認識到了Unix的價值,成立了Unix系統實驗室(Unix System Lab,USL)來繼續發展Unix。因此AT&T一方面繼續發展內部使用的Unix版本7,一方面由USL開發對外正式發行的Unix版本,同時AT&T也宣布對Unix產品擁有所有權。幾乎在同時,加州大學伯克利分校計算機系統研究小組(CSRG)使用Unix對操作系統進行研究,因此他們的研究成果就反映在他們使用的Unix中。他們對Unix的改進相當多,增加了很多當時非常先進的特性,包括更好的內存管理,快速且健壯的文件系統等,大部分原有的源代碼都被重新寫過,以支持這些新特性。很多其他Unix使用者,包括其他大學和商業機構,都希望能得到CSRG改進的Unix系統。因此CSRG中的研究人員把他們的Unix組成一個完整的Unix系統──BSD Unix(Berkeley Software Distribution),向外發行。
BSD Unix在Unix的歷史發展中具有相當大的影響力,被很多商業廠家采用,成為很多商用Unix的基礎,而AT&T與其同時存在的Unix版本的影響就小得多。同時很多研究項目也是以BSD Unix為研究系統,例如美國國防部的項目─ARPANET,ARPANET今天發展成為了Internet,而BSD Unix中最先實現了TCP/IP,使Internet和Unix緊密結合在一起。
而 AT&T的Unix系統實驗室,同時也在不斷改進他們的商用Unix版本,直到他們吸收了BSD Unix中已有的各種先進特性,并結合其本身的特點,推出了Unix System V版本之后,情況才有了改變。從此以后,BSD Unix和Unix System V形成了當今Unix的兩大主流,現代的Unix版本大部分都是這兩個版本的衍生產品。
Unix的版本號表示方式比較復雜,各種不同的Unix版本有自己的版本標識方式,如最早AT&T開發的內部Unix使用簡單的順序號來標識版本,從V 1到V 7。
BSD使用主版本加次版本的方法標識,如4.2BSD,4.3BSD,在原始版本的基礎上還有派生版本,這些版本通常有自己的名字,如4.3BSD-Net/1,4.3BSD-Net/2。
AT&T使用羅馬數字來標識他們的對外發布的Unix版本,用Release來表示次版本。如System V Release 4(簡寫為SVR4)標識AT&T的Unix System V的第四次發布的版本。
其他商業公司的 Unix使用自己的版本標識,如Sun的Solaris 2.6,IBM的AIX 4.0等。
雖然 AT&T的Unix System V也是非常優秀的Unix版本,但是BSD Unix在Unix領域內的影響更大。AT&T的Unix系統實驗室一直關注著BSD的發展,在1992年,Unix系統實驗室指控BSDI── 一家發行商業BSD Unix的公司,違反了AT&T的許可權,發布自己的Unix版本,并進一步指控伯克利計算機系統研究組泄漏了Unix的商業機密(此時的 4.3BSD中來自AT&T Unix的代碼已經不足10%)。這個官司影響了很多Unix廠商,使他們不得不從BSD Unix轉向Unix System V,以避免法律問題。以至于當今大多數商業Unix版本都是基于Unix System V的。
這件有關 Unix版權的案子直到Unix系統實驗室被AT&T賣給了Novell公司后才得以解決,Novell不打算陷入這樣的法律紛爭中,因此就采用了比較友好的做法。伯克利的CSRG被允許自由發布BSD,但是其中來自于AT&T的代碼必須完全刪除。因此CSRG就對他們最新的4.4BSD 進行了修改,刪除了那些來自于AT&T的源代碼,發布了4.4 BSD Lite版本(該系統是不完整的,尤其對于英特爾386體系的計算機系統)。由于這個版本不存在法律問題,4.4BSD Lite成為了現代BSD系統的基礎版本。
Novell的比較友善的做法還不止對BSD,他把自己的Unix改名為Unixware,而將Unix商標贈送給X/Open── 一個由眾多Unix廠家組成的聯盟,這樣這個聯盟內的所有成員均可使用Unix商標。從此之后,Unix不再是專有產品的名字了。同時,由于BSD系統已經十分成熟,作為對操作系統進行研究的目標已經達到,伯克利計算機系統研究組(CSRG)在發布了4.4BSD-lite2之后就解散了,小組的科研人員有些進入了Unix商業公司,有些繼續進行其他計算機領域的研究。此時,嚴格意義上的Unix System V和BSD Unix都不復存在了,存在的只是他們的各種后續版本。
回顧 Unix的發展,可以注意到Unix與其他商業操作系統的不同之處主要在于其開放性。在系統開始設計時就考慮了各種不同使用者的需要,因而Unix被設計為具備很大可擴展性的系統。由于它的源碼被分發給大學,從而在教育界和學術界影響很大,進而影響到商業領域中。大學生和研究者為了科研目的或個人興趣在 Unix上進行各種開發,并且不計較金錢利益,將這些源碼公開,互相共享,這些行為極大豐富了Unix本身。很多計算機領域的科學家和技術人員遵循這些方式,開發了數以千計的自由軟件,包括FreeBSD在內。正因為如此,當今的Internet才如此豐富多采,與其他商業網絡不同,才能成為真正的全球網絡。開放是Unix的靈魂,也是Internet的靈魂。
由于 Unix的開放性,另一方面就使得存在多個不同的Unix版本。由于不同的Unix使用稍有差別的文件、目錄結構,提供略有不同的系統調用,因此對系統管理、以及為Unix開發可移植的應用程序帶來一定的困難。例如System V和BSD的很多系統調用就存在不同。在Unix歷史發展中也存在將Unix完全統一的努力,例如POSIX規范就是各個Unix廠商經過協商,達成的 Unix操作系統應該遵循的一套基本系統調用的規定。然而由于存在多個Unix系統,各個廠商的意見很不統一,因此POSIX規范制定的很寬松,甚至 Windows NT中也存在一個POSIX子系統。事實上,只要各個Unix之間協調發展,不故意為了商業目的而人為的制造系統差異,就能夠保持各個Unix之間不致具有太大的差別,保持Unix系統的多樣性比只有唯一的一個Unix系統更能夠促進技術的進步和發展,企圖人為的統一Unix的想法只能是某一個Unix廠商的一廂情愿。
有時為了避免法律糾紛,表明自己的程序代碼是完全重寫的,一個軟件廠商會故意將一些函數聲明的與其他系統的中的同類函數不同,例如使用不同的函數參數或改變函數參數的順序等。 Unix System V中的很多系統調用與BSD Unix不同的部分原因也在于此。這些差異人為造成了不同系統的源程序的差異。
## UNIX家譜
UNIX的歷史開始于1969年ken Thompson,Dennis Ritchie(即著名的K&G,C語言的發明人)與一群人在一部PDP-7上進行的一些工作,后來這個系統變成了UNIX。它主要的幾個版本為:
V1(1971):第一版的UNIX,以PDP-11/20的匯編語言寫成。包括文件系統,fork、roff、ed等軟件。
V4(1973):以C語言從頭寫過,這使得UNIX修改容易,可以在幾個月內移植到新的硬件平臺上。最初C語言是為UNIX設計的,所以C與UNIX間有緊密的關系。
V6(1975):第一個在貝爾實驗室外(尤其是大學中)廣為流傳的UNIX版本。這也是UNIX分支的起點與廣受歡迎的開始。1.xBSD(PDP-II)就是由這個版本衍生出來的。
V7(1979):在許多UNIX玩家的心目中,這是“最后一個真正的UNIX,”這個版本包括一個完整的K&R C編譯器,Bourne shell。V7移植到VAX機器后稱為32V。
目前開發UNIX(System V)的公司是Unix System Laboratories (USL)。USL本為AT&T所有,1993年初被Novell收購。Novell于1993年末將UNIX這個注冊商標轉讓給X/Open組織。
目前為止,UNIX有兩大流派:那就是AT&T發布的UNIX操作系統System V與美國加州大學伯克利分校發布的UNIX版BSD(Berkeley Software Distribution)。SVR4是兩大流派融合后的產物。1991年底,與System V針鋒相對的開放軟件基金會(Open Software Foundation)推出了OSF/1。

## 現在幾種主要的UNIX版本
* AIX:IBM的UNIX,是根據SVR2(最近已經出到SVR3.2)以及一部分BSD延伸而來,加上各種硬件的支持。具備特有的系統管理(SMIT)。
* 386BSD:Jolitz從Net/2 software移植過來的。支持Posix,32位。
* FreeBSD:1.x從386BSD 0.1而來,FreeBSD 2.x版是用4.4BSD lite改寫。
* HP-UX(HP):舊系統是從S III(SVRx)發展面來,現在是由SVR2(4.2BSD)發展而來,目前是10.x版。
* Linux(x86):遵從POSIX,SYSV及BSD的擴展
* OSF/1(DEC):DEC對OSF/1的移植。
* SCO UNIX(x86):SVR3.2,目前影響較大的PC UNIX。
* SunOS(680x0,Sparc,i386):根據4.3BSD,包含許多來自System V的東西。Sun的主要成果在于:NFS,OpenLook GUI標準,現演變為Solaris 。
* Ultrix(DEC):根據4.2BSD再加上許多4.3BSD的東西。
* Xenix(x86):Intel硬件平臺上的UNIX,以SVR2為基礎,由微軟推出。在中國使用較廣泛。
## 附錄: Unix 時代的開創者 Ken Thompson
自圖靈獎誕生以來,其獲得者一直都是計算機領域的科學家與學者,而在所有這些屆的圖靈獎中只有唯一的一屆有個例外,那就是Ken Thompson與Dennis M. Ritchie,他們都是計算機軟件工程師。
Ken Thompson,1943年出生于美國新奧爾良。1960年,Ken進入加州大學伯克利分校主修電氣工程。1965年從伯克利畢業后,又花了一年的時間在該校取得了電子工程碩士的學位。不知道是時代造就英雄,還是英雄順應時代而生,在Ken讀書期間,正好趕上了計算機時代蓬勃發展的起步階段,自小喜歡電氣的Ken接觸到計算機后,立即完全沉迷了進去,從1962年的開始,他就在學校的計算機中心找到份工作,專門負責程序的編寫。這也為其后他一手開創的 Unix時代奠定了良好基礎。
1966年離開校園的Ken加入了貝爾實驗室。那時的計算機系統還是批處理的天下,程序員只能在又慢又笨重大型機上工作,一般來講是先將程序卡片裝入設備,然后再等1個小時再過來取回運算的結果,其效率之低可想而知。應市場的需要,當時貝爾實驗室與麻省理工學院以及通用電氣公司聯合開發了一個多用戶分時操作系統,取名為Multics(多路信息計算系統),Ken當時就是這個系統的開發人員之一,在開發Multics的期間,Ken創造出了名為 Bon的編程語言。可惜因為這個系統不但開發周期長,成本高,而且龐大而緩慢,市場前景完全不被看好,最后貝爾實驗室從這個項目中撤了出來。這對于Ken 而言,簡直是個巨大的不幸,因為他自己用寫的一個“star travel”游戲就是完全基于Multics的,退出Multics項目意味著Ken將沒有機器可以再玩這個游戲了。
面對此情此景,Ken作為一個創造者的本性立即體現了出來,于是他決定自己寫一個操作系統來滿足他玩游戲的需要,說干就干,Ken找到了一臺廢棄已久的老式PDP-7,并在這臺機器上重寫了他的游戲。在這個過程中,Ken有了一個主意,要開發一個全新的操作系統。利用PDP-7上的匯編語言,Ken 只花了一個月就編寫完了操作系統的內核,在這個一個月中,他一周一個內核,一個文件系統,一個編輯器和一個編譯程序的完成。做完這個系統后,Ken將其命名為UNiplexed Information and Computing System,縮寫為 UNICS,后來做了一下改動,稱為UNIX,在開發第一版Unix的過程中,Ken還開發出一種新的語言,即C語言的前身——B語言,這種語言簡潔明了,接近于硬件語言,第一版的Unix就是基于B語言來開發的。
Unix的出現開始雖然并不為大家所看好,但是卻引起了貝爾實驗室另一位同事的注意,這就是Dennis M. Ritchie,于是Dennis主動加入了進來共同完善這個系統。至此一場轟轟烈烈的Unix的傳奇時代才真正的拉開了序幕。1972年,他們聯手將 Unix移植到當時最先進的大型機PDP-2上,由于Unix是如此的簡潔、穩定與高效,以至于當時大家都放棄了PDP-2上自帶的DEC操作系統,而完全改用Unix,這時的Unix已經開始走向成熟了。在1973年之前Unix還不太為外界所知,到同年10月,Unix在IBM舉辦的操作系統原理專題研討會上被提及,當Ken和Dennis在會上宣讀論文并展示Unix后,整個會場轟動了,大家都立即涌上來索取這種新型的操作系統的程序。隨著Unix 的需求量的日益增加,Ken與Dennis決定將Unix進一步改寫,以便可以移植到各種不同的硬件系統,由于Unix的原碼中不少是用匯編完成,不具備良好的移植性,正好Dennis在1973年在B語言的基礎上開發出了C語言,C語言靈活,高效性,與硬件無關,并且不失其簡潔性,正是Unix移植所需要的法寶,于是舊版的Unix與C語言完美結合在一起產生了新的可移植的Unix系統。隨著Unix的廣泛使用,C語言也成為了當時最受歡迎的編程語言一直到延續至令。
說到Unix與C語言,還有一段小故事,當時安裝了Unix的PDP-11被放在貝爾實驗室供大家使用,有一天大家伙發現Ken總是可以得到最高的權限輕松進入他們的帳戶,在貝爾實驗室這種高人云集的地方,這簡單是太不能容忍了,于是有若干高人跳了出來,仔細分析Unix代碼,找到后門,修改后再重新編譯整個Unix,當所有人都以為這個世界應該從此清靜了的時候,卻發現Ken還是很容易就取得了他們的帳戶權限,為此大家郁悶不已。至到很多年后,Ken才道出其中的原委,原來代碼里確實存在后門,不過并不在Unix代碼中,而是藏在編譯Unix的編譯器里,每次編譯器編譯時就會自動加入后門代碼,而當時整個貝爾實驗室都用的是Ken所寫的C編譯器。
由于Unix與C語言的深遠影響,1983年美國計算機協會將當年的圖靈獎破例頒給了作為軟件工程師的Ken與Dennis,并在當年還決定新設立一個獎項――軟件系統獎,以獎勵那些優秀的軟件開發者,當然首個軟件系統獎也是非他們兩人莫屬了。
雖然Unix與C語言讓Ken與Dennis功成名就,但是他們兩人都沒有走那些IT史上自己創業的通用套路,而是一直留在貝爾實驗室從事其喜愛的軟件開發工作。到了2000年12月時,Ken正式退休,離開了工作了幾十年的貝爾實驗室開始享受他晚年的時光,但是Ken怎么能閑得下來呢,于是他干脆將他的另一個愛好:飛機,變成正式的職業,成為了一名專職的飛行員。至此,他所開創的Unix時代已經完全與他無關了。
- 開源世界旅行手冊
- 授權
- 致謝
- 序言
- 更新紀錄
- 導讀
- 如何寫作科技文檔
- 部分?I.?氣候
- 第?1?章?GUI? CLI?
- 第?2?章?UNIX 縮寫風格
- 第?3?章?版本號的迷霧
- 第?4?章???Vim 還是 Emacs
- 第?5?章???DocBook 還是 TeX
- 第?6?章?完全用 Gnu/Linux 工作
- 第?7?章?病毒
- 第?8?章?磁盤 分區
- 第?9?章?文件系統
- 第?10?章???發行版介紹
- 第?11?章???編程語言
- 第?12?章?無根的根:無名師的 Unix 心傳
- 部分?II.?地理
- 第?13?章?基礎知識
- 第?14?章?命令系統
- 第?15?章?基本系統
- 第?16?章?軟件管理
- 第?17?章?核心工具集
- 第?18?章?編譯工具鏈
- 第?19?章?圖形界面
- 第?20?章?國際化
- 第?21?章???內核
- 第?22?章?Grub
- 第?23?章?服務器
- 第?24?章?Vim 編輯器
- 第?25?章?Emacs 入門
- 第?26?章?正則表達式
- 第?27?章?docbook 指南
- 第?28?章?Git 版本控制系統
- 第?29?章?ConTeXt 入門指南
- 部分?III.?景觀
- 第?30?章?終極 Shell -- ZSH
- 第?31?章?完美工作站 Archlinux
- 第?32?章?組織你的意念:Emacs org mode
- 第?33?章???Zsh+screen
- 第?34?章???gentoo stage3
- 第?35?章???硬件問題
- 第?36?章???網絡設置
- 第?37?章???自制 LiveCD
- 第?38?章?awesome
- 第?39?章?openbox 工作環境
- 第?40?章???Emacs muse
- 第?41?章???寫作工具鏈
- 第?42?章?使用 lftp
- 第?43?章???Firefox 使用技巧
- 第?44?章???FVWM
- 部分?IV.?地質
- 第?45?章?Unix
- 第?46?章???Gnu
- 第?47?章?軟件業自由之神——Richard Stallman
- 第?48?章?Linux
- 第?49?章?GNOME與KDE的戰爭
- 第?50?章???Vim Emacs
- 第?51?章???年代紀
- 第?52?章?我的選擇
- 第?53?章???補遺