1. 程式人生 > >Linux學習 :Unix的歷史

Linux學習 :Unix的歷史

引用:《鳥哥的Linux私房菜基礎篇第三版》

早在Linux出現之前的二十年(大約在 1970 年代),就有一個相當穩定而成熟的作業系統存在了!那就是Linux的老大哥“Unix”是也!怎麼這麼說呢?他們這兩個傢伙有什麼關係呀?眾所周知的,Linux的核心是由Linus Torvalds在1991年的時候開發出來的,並且丟到網路上提供大家下載,後來大家覺得這個小東西(Linux Kernel)相當的小而精巧,所以慢慢的就有相當多的朋友投入這個小東西的研究領域裡面去了!但是為什麼這個小東西這麼棒呢?又為什麼大家都可以免費的下載這個東西呢?

1969年以前:一個偉大的夢想--Bell,MIT

與GE的“Multics”系統

早期的計算機並不像現在的個人計算機一樣普及,他可不是一般人碰的到的,除非是軍事或者是高科技用途,或者是學術單位的學術研究,否則真的很難接觸到。非但如此,早期的計算機架構還很難使用,除了指令週期並不快之外,操作介面也很困擾的!因為那個時候的輸入裝置只有卡片閱讀機、輸出裝置只有印表機,使用者也無法與作業系統互動(批次型作業系統)。

在那個時候,寫程式是件很可憐的事情,因為程式設計者,必須要將程式相關的資訊在讀卡紙上面打孔,然後再將讀卡紙插入卡片閱讀機來將資訊讀入主機中運算。光是這樣就很麻煩了,如果程式有個小地方寫錯,光是重新打卡就很慘,加上主機少,使用者眾多,光是等待就耗去很多的時間了。

在那之後,由於硬體與作業系統的改良,使得後來可以使用鍵盤來進行資訊的輸入。不過,在一間學校裡面,主機畢竟可能只有一部,如果多人等待使用,那怎麼辦?大家還是得要等待啊!好在1960年代初期麻省理工學院(MIT)發展了所謂的“相容分時系統(Compatible Time-Sharing System,CTSS)”,它可以讓大型主機通過提供數個終端機(terminal)以聯機進入主機,來利用主機的資源進行運算工作。架構有點像這樣:

這個相容分時系統可以就是近代作業系統的始祖呢!它可以讓多個使用者在某一段時間內分別使用CPU 的資源,感覺上你會覺得大家是同時使用該主機的資源!事實上,是CPU 在每個使用者的工作之間進行切換,在當時,這可是個劃時代的技術。

如此一來,無論主機在哪裡,只要在終端前面進行輸入輸出的作業,就可利用主機提供的功能了。不過,需要注意的是,此時終端機只具有輸入輸出的功能,本身完全不具任何運算或軟體安裝的能力。而且,比較先進的主機大概也只能提供30個不到的終端機而已。

為了更加強化大型主機的功能,以讓主機的資源可以提供更多使用者來利用,所以在1965年前後,由貝爾實驗室(Bell)、麻省理工學院(MIT)及奇異公司(GE,或稱為通用電器)共同發起了Multics的計劃,Multics計劃的目的是想要讓大型主機可以達成提供300個以上的終端機聯機使用的目標。不過,到了1969年前後,計劃進度落後,資金也短缺,所以該計劃雖然繼續在研究,但貝爾實驗室還是退出了該計劃的研究工作。

Tips:最終Multics還是有成功的發展出他們的系統,完整的歷史說明可以參考:http://www.multicians.org/網站內容。Multics計劃雖然後來沒有受到很大的重視,但是他培養出來的人才是相當優秀的!

1969年:Ken Thompson的小型file server system

在認為Multics計劃不可能成功之後,貝爾實驗室就退出該計劃。不過,原本參與Multics計劃的人員中,已經從該計劃當中獲得一些點子,Ken Thompson就是其中一位!

Thompson因為自己的需要,希望開發一個小小的作業系統以滿足自己的需求。在開發時,有一部DEC(Digital Equipment Corporation)公司推出的PDP-7剛好沒人使用,於是他就準備針對這部主機進行作業系統核心程式的編寫。本來Thompson應該是沒時間的(有家有小孩的宿命?),無巧不巧的是,在1969年八月份左右,剛好Thompson的妻兒去了美西探親,於是他有了額外的一個月的時間好好的待在家將一些構想實現出來!

經過四個星期的奮鬥,他終於以組合語言(Assembler)寫出了一組核心程式,同時包括一些核心工具程式,以及一個小小的檔案系統。那個系統就是Unix的原型!當時Thompson將Multics龐大的複雜系統簡化了不少,於是同實驗室的朋友都戲稱這個系統為:Unics。(當時未有Unix的名稱)

Thompson的這個檔案系統有兩個重要的概念,分別是:

所有的程式或系統裝置都是檔案

不管構建編輯器還是附屬檔案,所寫的程式只有一個目的,就是要有效的完成目標。

這些概念在後來對於Linux的發展有相當重要的影響。

1973年:Unix 的正式誕生,Ritchie等人以C語言寫出第一個正式Unix核心

由於Thompson寫的那個作業系統實在是太好用了,所以在貝爾實驗室內部廣泛流傳,並且數度經過改版。但是因為Unics本來是以組合語言寫成的,而組合語言具有專一性,加上當時的計算機機器架構都不太相同,所以每次要安裝到不同的機器都要重新編寫組合語言,真不方便。

後來Thompson與Ritchie合作想將Unics改用高階程式語言來編寫。當時現成的高階程式語言有B語言。但是由B語言編譯出來的核心效率不是很好。後來Dennis Ritchie將B語言重新改寫成C語言,再以C語言重新改寫與編譯Unics的核心,最後正名與發行出Unix的正式版本。

由於貝爾實驗室是隸屬於美國電信大廠AT&T公司的,只是AT&T當時忙於其他商業活動,對於Unix並不支援也不排斥。此外,Unix在這個時期的發展者都是貝爾實驗室的工程師,這些工程師對於程式當然相當有研究,所以,Unix在此時當然是不容易被一般人所接受的。不過對於學術界的學者來說,這個Unix真是學者們進行研究的福音,因為程式程式碼可改寫並且可作為學術研究之用。

需要特別強調的是,由於Unix 是以高階的C語言寫的,相對於組合語言需要與硬體有密切的配合,高階的C 語言與硬體的相關性就沒有這麼大了。所以,這個改變也使得Unix很容易被移植到不同的機器上面。

1977年:重要的Unix分支--BSD的誕生

雖然貝爾實驗室屬於AT&T,但是AT&T此時對於Unix 是採取較開放的態度,此外,Unix是以高階的C語言寫成的,理論上是具有可移植性的。亦即只要取得Unix的原始碼,並且針對大型主機的特性加以修訂原始碼(Source Code),就可能將Unix移植到另一部不同的主機上頭了。所以在1973年以後,Unix便得以與學術界合作開發。最重要的接觸就是與加州柏克萊(Berkeley)大學的合作了。

柏克萊大學的Bill Joy在取得了Unix 的核心原始碼後,著手修改成適合自己機器的版本,並且同時增加了很多工具軟體與編譯程式,最終將它命名為Berkeley Software Distribution(BSD)。這個BSD是Unix很重要的一個分支,Bill Joy也是SUN公司的創始人。Sun公司即是以BSD發展的核心進行自己的商業Unix版本的發展的。(後來可以安裝在x86硬體架構上面FreeBSD即是BSD改版而來!)

1979年:重要的System V架構與版權宣告

由於Unix的高度可移植性與強大的效率,加上當時並沒有版權的糾紛,所以讓很多商業公司開始了Unix作業系統的發展,例如AT&T自家的System V、IBM的AIX以及HP 與DEC等公司,都有推出自家的主機搭配自己的Unix作業系統。

但是,如同我們前面提到的,作業系統的核心(Kernel)必須要跟硬體配合,以提供及控制硬體的資源進行良好的工作。而在早期每一家生產計算機硬體的公司還沒有所謂的“協議”的概念,所以每一個計算機公司生產的硬體自然就不同。因此他們必須要為自己的計算機硬體開發合適的Unix 系統。例如在學術機構相當有名的SUN、Cray與HP就是這種情況。他們開發出來的Unix作業系統以及內含的相關軟體並沒有辦法在其他的硬體架構下工作的。另外,由於沒有廠商針對個人計算機設計Unix系統,因此,在早期並沒有支援個人計算機的Unix作業系統的出現。

每一家公司自己出的Unix雖然在架構上面大同小異,但是且真的僅能支援自身的硬體,所以,早先的Unix只能與伺服器(Server)或是大型工作站(Workstation)劃上等號。但到了1979年時,AT&T推出System V第七版Unix 後,這個情況就有點改善了。這一版最重要的特色是可以支援x86架構的個人計算機系統,也就是說System V可以在個人計算機上面安裝於運作了。

不過因為AT&T由於商業的考慮,以及在當時現實環境下的思考,於是想將Unix的版權收回去。因此,AT&T在1979年發行的第七版Unix中,特別提到了“不可對學生提供原始碼”的嚴格限制。同時,也造成Unix業界之間的緊張氣氛,並且也引爆了很多的商業糾紛。

Tips:目前被稱為純種的Unix指的就是System V以及BSD這兩套。

1984年之一:x86架構的Minix作業系統的誕生

既然1979年的Unix第七版可以在Intel的x86架構上面進行移植,那麼是否意味著可以將Unix改寫並移植到x86上面呢?在這個想法上,譚寧邦教授於是自己動手寫了Minix這個Unix Like的核心程式。在編寫的過程中,為了避免版權糾紛,譚寧邦完全不看Unix核心原始碼,並且強調他的Minix必須能夠與Unix相容才行,譚寧邦在1984年開始編寫核心程式,到了1986年終於完成,並於次年出版Minix相關書籍,同時與新聞組(BBS及News)相結合。

Tips:之所以稱為Minix的原因,是因為它是個Mini的Unix系統。

這個Minix版本比較有趣的地方是,它並不是完全免費的,無法在網路上提供下載,必須要通過磁碟/磁帶購買才行。雖然真的很便宜,不過,畢竟因為沒有在網路上流傳,所以Minix的傳遞速度並沒有很快速。此外,購買時,隨磁碟還會附上Minix的原始碼,這意味著使用者可以學習Minix的核心程式設計概念。

此外,Minix作業系統的開發者僅有譚寧邦教授,因為學者很忙,加上譚寧邦教授始終認為Minix主要用在教育用途上面,所以對於Minix是點到為止。沒錯,Minix是很受歡迎,不過,使用者的要求/需求的聲音可能就比較沒有辦法上升到比較高的地方了。

1984年之二:GNU計劃與FSF基金會的成立

Richard Mathew Stallman(史託曼)在1984年發起的GNU計劃,對於現今的自由軟體風潮,真有不可磨滅的地位,目前我們所使用的很多自由軟體,幾乎均直接或間接受益於GNU這個計劃。那麼史託曼是何許人?為何他會發起這個GNU計劃呢?

一個分享的環境:

Richard Mathew Stallman(生於1953年,網路上自稱的ID為RMS)從小就很聰明,他在1971年的時候,進入黑客圈中相當出名的人工智慧實驗室(AI Lab),這個時候的黑客專指計算機能力很強的人,而非破壞計算機的怪客(cracker)。

當時的黑客圈對於軟體的著眼點幾乎都是在“分享”,所以並沒有專利方面的困擾,這個特色對於史託曼的影響很大,不過,後來由於管理階層的問題,導致實驗室的優秀黑客離開該實驗室,並且進入其他商業公司繼續發展優秀的軟體。但史託曼並不服輸,仍然持續在原來的實驗室開發新的程式與軟體。後來,他發現到,自己一個人並無法完成所有的工作,於是想要成立一個開放的團體來共同努力。

使用Unix開發階段:

1983年以後,因為實驗室硬體的更換,使得史託曼無法繼續以原有的硬體與作業系統自由程式的編寫。而且他進一步發現到,過去他所使用的Lisp作業系統,是麻省理工學院的專利軟體,是無法共享的,這對於想要成立一個開放團體的史託曼是個阻礙。於是他便放棄了Lisp這個系統。後來,他接觸到Unix這個系統,並且發現Unix在理論與實際上,都可以在不同的機器間進行移植。雖然Unix 依舊是專利軟體,但至少Unix 架構上還是比較開放的,於是他開始轉而使用Unix 系統。

因為Lisp與Unix是不同的系統,所以,他原本已經編寫完畢的軟體是無法在Unix上面執行的。為此,他就開始將軟體移植到Unix上面。並且,為了讓軟體可以在不同的平臺上執行,因此,史託曼將他發展的軟體均編寫成可以移植的版本,也就是他都會將程式的原始碼公佈出來。

GNU計劃的推進:

1984年,史託曼開始GNU計劃,這個計劃的目的是:建立一個自由、開放的Unix作業系統(Free Unix)。但是建立一個作業系統談何容易啊!而且在當時的GNU是僅有自己一個人單打獨鬥的,這實在太麻煩,但又不想放棄這個計劃,那可怎麼辦呢?

聰明的史託曼乾脆反其道而行“既然作業系統太複雜,我就先寫可以在Unix上面執行的小程式,這總可以吧”在這個想法上,史託曼開始參考Unix上面現有的軟體,並依據這些軟體的作用開發出功能相同的軟體,且開發期間史託曼絕不看其他軟體的原始碼,以避免吃上官司。後來一堆人知道免費的GNU軟體,並且實際使用後發現與原有的專利軟體也差不了太多,於是便轉而使用GNU軟體,於是GNU計劃逐漸開啟知名度。

雖然GNU計劃漸漸開啟知名度,但是能見度還是不夠。這時史託曼又想:不論是什麼軟體,都得要進行編譯成為二進位制檔案(binary program)後才能夠執行,如果能夠寫出一個不錯的編譯程式,那不就是大家都需要的軟體了嗎?因此他便開始編寫C語言的編譯程式,那就是現在相當有名的GNU C Compiler(gcc),這個點相當的重要,這是因為C語言編譯程式版本眾多,但都是專利軟體,如果他寫的C編譯程式夠棒,效率高,那麼將會大大的讓GNU 計劃出現在眾人眼前。

但開始編寫GCC時並不順利,為此,他先轉而將他原先就已經寫過的Emacs編輯器寫成可以在Unix上面跑的軟體,並公佈原始碼。Emsca是一種程式編輯器,它可以在使用者編寫程式的過程中就進行程式語法的檢驗,此一功能可以減少程式設計師出錯的時間,因為Emacs太優秀了,因此,很多人便直接向他購買。

此時因特網還未流行,所以,史託曼便藉著Emacs以磁帶(tape)出售,賺了一點錢,進而開始全力編寫其他軟體。並且成立自由軟體基金會(FSF,Free Software Foundation),請更多工程師編寫軟體。終於還是完成了GCC,這比Emacs還更有幫助。此外,他還編寫了更多可以被呼叫的C函式庫(GNU C Library),以及可以被用來操作作業系統的基本介面BASH Shell,這些都在1990年左右完成了。

GNU的通用公共許可證:

到了1985年,為了避免GNU所開發的自由軟體被其他人所利用而成為專利軟體,所以他與律師草擬了有名的通用公共許可證(General Public License,GPL),並且稱呼為copyleft(相對於專利軟體的copyright)。GNU開發了幾個重要的軟體,如:

Emacs

GNU C(GCC

GNU C Library(glibc

Bash shell

造成後來很多的軟體開發者可以基於這些基礎的工具來進行程式開發,進一步壯大了自由軟體團體。這是很重要的,不過,對於GNU的最初構想“建立一個自由的Unix作業系統”來說,有這些優秀的程式是仍無法滿足,因為,當下並沒有“自由的Unix核心”存在,所以這些軟體仍只能在那些有專利的Unix平臺上工作,一直到Linux的出現。

1988年:圖形介面XFree86計劃

由於圖形使用者介面(Graphical User Interface,GUI)的需求日益加重,在1984年由MIT與其他第三方首次發表了X Window System,並且更在1988年成立了非營利性質的XFree86這個組織。所謂的XFree86其實是X Window System+Free +X86的整合名稱,而這個XFree86的GUI介面更是在Linux的核心1.0版於1994年發行時,整合到Linux作業系統當中。

1991年:芬蘭大學生Linus Torvalds的一則簡訊

到了1991年,芬蘭的赫爾辛基大學的Linus Torvalds在BBS上面貼了一則訊息,宣稱他以Bash,gcc等工具寫了一個小小的核心程式,這個核心程式可以在Intel的386機器上面執行,讓很多人很感興趣,從此開始了Linux不平凡的路程。