Linux發展史及簡介
作業系統介紹
核心負責控制硬體資源分配,而如果只有核心,則只能讓計算機硬體執行,而不能有任何功能,因此需要系統呼叫提供給開發者使用,從而開發應用程式;核心能夠控制硬體,比如:讓CPU可以運算、讓硬碟可以讀寫資料等;只有核心的話,只能讓計算機執行,但是我們不能控制計算機;而系統呼叫是作業系統提供給開發者的呼叫介面;任何硬體都不會預設就被作業系統控制,而需要開發商根據作業系統提供的介面開發驅動程式,只有安裝了驅動程式才能夠控制硬體裝置。
UNIX作業系統
Linux 作業系統是UNIX 作業系統的一個克隆版本。UNIX作業系統是美國貝爾實驗室的Ken.Thompson和Dennis RitchieMINIX作業系統
MINIX 系統是由Andrew S. Tanenbaum(AST)開發的。AST 是在荷蘭Amsterdam 的Vrije 大學數學與計算機科學系統工作,是ACM 和IEEE 的資深會員(全世界也只有很少人是兩會的資深會員)。MINIX 是他1987 年編制的,主要用於學生學習作業系統原理。到1991 年時版本是1.5。目前主要有兩個版本在使用:1.5 版和2.0 版。當然目前MINIX 系統已經是免費的,可以從許多FTP 上下載。
對於Linux 系統,他後來曾表示對其開發者Linus的稱讚。但他認為Linux的發展很大原因是由於他為了保持MINIX 的小型化,能讓學生在一個學期內就能學完,因而沒有接納全世界許多人對MINIX的擴充套件要求。因此在這樣的前提下激發了Linus 編寫Linux 系統。當然Linus 也正好抓住了這個好時機。
作為一個作業系統,MINIX 並不是優秀者,但它同時提供了用C語言和組合語言編寫的系統原始碼。這是第一次使得有抱負的程式設計師或hacker能夠閱讀作業系統的原始碼。在當時,這種原始碼是軟體商們一直小心守護著的祕密。
GNU計劃
軟體產業在70年代成就了兩位針鋒相對的領袖人物,來自哈佛大學的比爾·蓋茨和Richard M.Stallman。前者宣佈了Copyright(版權)時代的到來,並構建了微軟帝國的輝煌;後者於1984年創立自由軟體體系GNU,擬定普遍公用版權協議(GeneralPublicLicense,簡稱GPL),今天Linux的成功就得益於GPL協議。
所有GPL協議下的自由軟體都遵循著Richard M. Stallman的"Copyleft"(非版權)原則:即自由軟體允許使用者自由拷貝、修改和銷售,但是對其原始碼的任何修改都必須向所有使用者公開。
GNU計劃和自由軟體基金會FSF(the Free Software Foundation)是由Richard M. Stallman 於1984 年一手創辦的。旨在開發一個類似UNIX 並且是自由軟體的完整作業系統:GNU系統(GNU 是"GNU's Not Unix"的遞迴縮寫,它的發音為"guh-NEW")。
各種使用Linux作為核心的GNU 作業系統正在被廣泛的使用。雖然這些系統通常被稱作"Linux",但是Stallman 認為,嚴格地說,它們應該被稱為GNU/Linux系統。
到上世紀90 年代初,GNU 專案已經開發出許多高質量的免費軟體,其中包括有名的emacs 編輯系統、bash shell 程式、gcc 系列編譯程式、gdb 除錯程式等等。這些軟體為Linux 作業系統的開發創造了一個合適的環境。這是Linux 能夠誕生的基礎之一,以至於目前許多人都將Linux 作業系統稱為“GNU/Linux”作業系統。
POSIX標準
POSIX(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 開發的一簇標準。該標準是基於現有的UNIX 實踐和經驗,描述了作業系統的呼叫服務介面。用於保證編制的應用程式可以在原始碼一級上在多種作業系統上移植和執行。它是在1980 年早期一個UNIX 使用者組(usr/group)的早期工作基礎上取得的。該UNIX 使用者組原來試圖將AT&T 的System V 作業系統和BerkeleyCSRG 的BSD 作業系統的呼叫介面之間的區別重新調和整合。並於1984 年定製出了/usr/group 標準。
在90 年代初,POSIX 標準的制定正處在最後投票敲定的時候,那是1991-1993 年間。此時正是Linux剛剛起步的時候,這個UNIX 標準為Linux 提供了極為重要的資訊,使得Linux 能夠在標準的指導下進行開發,並能夠與絕大多數UNIX 作業系統相容。在最初的Linux 核心原始碼中(0.01 版、0.11 版)就已經為Linux 系統與POSIX 標準的相容做好了準備工作。在Linux 0.01 版核心的/include/unistd.h 檔案中就已經定義了幾個有關POSXI 標準要求的符號常數,而且Linus 在註釋中已寫道:“OK,這也許是個玩笑,但我正在著手研究它呢”。
Internet 網路
Internet是linux開發、交流、發展的資訊和資源的交流平臺。Linux簡單介紹
Linux核心理念:萬物皆檔案;
Linux:是一個核心,而不是一個作業系統;因此我們平常說的“作業系統用的是Windows、Mac還是Linux啊?”是錯誤的,Ubuntu、Fedora等才是作業系統的名字,他們都使用Linux核心;
1991年最初由Linus Torvalds針對386(個人計算機)開發;Linus Torvalds那時是芬蘭的一名研究生;
Unix Like:很像Unix的作業系統;
蘋果電腦為什麼現在能裝Windows作業系統?因為蘋果使用了Intel的X86架構,而windows也是針對此架構的,因此按理論來說一般的PC上也可以安裝mac作業系統;
Linux的吉祥物是企鵝(英文名:Tux),因為Torvalds在小時候被企鵝咬過,因此印象非常深刻;
Unix和Linux的程式碼是由90%的C語言和10%的彙編組成,因此只需要稍加修改,就能移植到其他硬體上;
Linux的優缺點
1、Linux的優點
1.開放的學習環境;
2.漏洞快速修補;
3.因為核心只有幾百k,因此適合嵌入式系統;
2、Linux的缺點
1.有些專業軟體沒有Linux版本;
Linux發展史
* 1969年以前:一個沒有完成的夢想:Bell,MIT與GE的‘Multics’系統
早期的電腦並不像現在的個人電腦一樣普遍,他可不是一般人碰的起的呢~ 除非是軍事或者是高科技用途,或者是學術單位的學術研究,否則真的很難接觸到。 非但如此,早期的電腦架構還很難使用,除了運算速度並不快之外,操作介面也很困擾的! 因為那個時候的輸入裝置只有讀卡機、輸出裝置只有印表機, 使用者也無法與作業系統互動(批次型作業系統)。
在那個時候,寫程式是件很可憐的事情,因為程式設計者,必須要將程式相關的資訊在讀卡紙上面打洞, 然後再將讀卡紙插入讀卡機來將資訊讀入主機中運算。光是這樣就很麻煩了,如果程式有個小地方寫錯, 哈哈!光是重新打卡就很慘,加上主機少,使用者眾多,光是等待,就耗去很多的時間了!
在那之後,由於硬體與作業系統的改良,使得後來可以使用鍵盤來進行資訊的輸入。 不過,在一間學校裡面,主機畢竟可能只有一部,如果多人等待使用,那怎麼辦?大家還是得要等待啊! 好在1960年代初期麻省理工學院(MIT)發展了所謂的: ‘相容分時系統(Compatible Time-Sharing System, CTSS)’, 它可以讓大型主機透過提供數個終端機(terminal)以連線進入主機,來利用主機的資源進行運算工作。 架構有點像這樣:
Tips:這個相容分時系統可以說是近代作業系統的始祖呢!他可以讓多個使用者在某一段時間內分別使用CPU的資源, 感覺上你會覺得大家是同時使用該主機的資源!事實上,是CPU在每個使用者的工作之間進行切換, 在當時,這可是個劃時代的技術喔!
如此一來,無論主機在哪裡,只要在終端機前面進行輸入輸出的作業,就可利用主機提供的功能了。 不過,需要注意的是,此時終端機只具有輸入/輸出的功能,本身完全不具任何運算或者軟體安裝的能力。 而且,比較先進的主機大概也只能提供30個不到的終端機而已。
為了更加強化大型主機的功能,以讓主機的資源可以提供更多使用者來利用,所以在1965年前後, 由貝爾實驗室(Bell)、麻省理工學院(MIT)及奇異公司(GE)共同發起了Multics的計畫, Multics計畫的目的是想要讓大型主機可以達成提供300個以上的終端機連線使用的目標。 不過,到了1969年前後,計畫進度落後,資金也短缺,所以該計畫雖然繼續在研究,但貝爾還是退出了該計畫的研究工作。 (注:Multics有複雜、多數的意思存在。)
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的發展有相當重要的影響喔!
Tips:套一句常聽到的廣告詞:‘科技始終來自於人性’,當初Thompson會寫這套Unix核心程式,卻是想要移植一套名為‘太空旅遊’的遊戲呢! ^_^。
* 1973年:Unix的正式誕生,Ritchie等人以C語言寫出第一個正式Unix核心
由於Thompson寫的那個作業系統實在太好用了,所以在貝爾實驗室內部廣為流傳,並且數度經過改版。 但是因為Unics本來是以組合語言寫成的,而如第零章計算機概論談到的, 組合語言具有專一性,加上當時的機器都不太相同,所以每次要安裝到不同的機器都得要重新編寫組合語言,真不方便!
後來Thompson與Ritchie合作想將Unics改以高階程式語言來撰寫。當時現成的高階程式語言有B語言。 但是由B語言所編譯出來的核心效能不是很好。後來Dennis Ritchie將B語言重新改寫成C語言,再以C語言重新改寫與編譯Unics的核心, 最後正名與發行出Unix的正式版本!
Tips:這群高階駭客實在很厲害!因為自己的需求來開發出這麼多好用的工具! C程式語言開發成功後,甚至一直沿用至今呢!你說厲不厲害啊!這個故事也告訴我們,不要小看自己的潛能喔! 你想作的,但是現實生活中沒有的,就動手自己搞一個來玩玩吧!
由於貝爾實驗室是隸屬於美國電信大廠AT&T公司的, 只是AT&T當時忙於其他商業活動,對於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也是Unix業者‘Sun(昇陽)’這家公司的創辦者! Sun公司即是以BSD發展的核心進行自己的商業Unix版本的發展的。 (後來可以安裝在x86硬體架構上面FreeBSD即是BSD改版而來!)
* 1979年:一個措手不及的版權宣告!
由於Unix的高度可移植性與強大的效能,加上當時並沒有版權的糾紛, 所以讓很多商業公司開始了Unix作業系統的發展,例如AT&T自家的System V、IBM的AIX以及HP與DEC等公司, 都有推出自家的主機搭配自己的Unix作業系統。
但是,如同我們前面提到的,作業系統的核心(Kernel)必須要跟硬體配合, 以提供及控制硬體的資源進行良好的工作!而在早期每一家生產電腦硬體的公司還沒有所謂的‘協定’的概念, 所以每一個電腦公司出產的硬體自然就不相同囉!因此他們必須要為自己的電腦硬體開發合適的Unix系統。 例如在學術機構相當有名的Sun、Cray與HP就是這一種情況。 他們開發出來的Unix作業系統以及內含的相關軟體並沒有辦法在其他的硬體架構下工作的! 另外,由於沒有廠商針對個人電腦設計Unix系統,因此,在早期並沒有支援個人電腦的Unix作業系統的出現。
Tips:如同相容分時系統的功能一般,Unix強調的是多人多工的環境! 但早期的286個人電腦架構下的CPU是沒有能力達到多工的作業,因此,並沒有人對移植Unix到x86的電腦上有興趣。
每一家公司自己出的Unix雖然在架構上面大同小異,但是卻真的僅能支援自身的硬體, 所以囉,早先的Unix只能與伺服器(Server)或者是大型工作站(Workstation)劃上等號!
但是這個高度開放的Unix系統在1979年有了重大的轉折~因為AT&T由於商業的考量, 以及在當時現實環境下的思考,於是將想Unix的版權收回去。因此,AT&T在1979年發行的第七版Unix中,特別提到了 ‘不可對學生提供原始碼’的嚴格限制! 同時,也造成Unix業界之間的緊張氣氛,並且也引爆了很多的商業糾紛~。
Tips:AT&T這一版開發出來的Unix被稱為System V,目前被稱為純種的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的核心程式設計概念喔! (這個特色對於Linux的啟始開發階段,可是有很大的關係喔!)
此外,Minux作業系統的開發者僅有譚寧邦教授,因為學者很忙啊!加上譚寧邦始終認為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系統。
因為Lisp與Unix是不同的系統,所以,他原本已經撰寫完畢的軟體是無法在Unix上面執行的!為此, 他就開始將軟體移植到Unix上面。並且,為了讓軟體可以在不同的平臺上運作, 因此,史託曼將他發展的軟體均撰寫成可以移植的型態!也就是他都會將程式的原始碼公佈出來!
* GNU計畫的推展:
1984年,史託曼開始GNU計畫, 這個計畫的目的是想要:建立一個自由的開放的Unix作業系統(Free Unix)。 但是建立一個作業系統談何容易啊!而且在當時的GNU是僅有自己一個人單打獨鬥的史託曼~ 這實在太麻煩,但又不能不做這個計畫,於是史託曼反其道而行~‘既然作業系統太複雜, 我就先寫可以在Unix上面執行的小程式,這總可以了吧?呵呵!’在這個想法上, 史託曼便開始了程式的寫作。在寫作期間,為了不讓自己吃上官司,他絕對不看專利軟體的原始碼! 為了這個計畫,他開始使用原本Unix上面跑的軟體, 並自行撰寫功能與Unix原有專利軟體相仿的軟體。
但不論是什麼軟體,都得要進行編譯成為二進位檔案(binary file)後才能夠執行, 因此他便開始撰寫C語言的編譯器,那就是現在相當有名的GNU C Compiler(gcc)! 這個點相當的重要!這是因為C語言編譯器版本眾多,但都是專利軟體, 如果他寫的C編譯器夠棒,效能夠佳,那麼將會大大的讓GNU計畫出現在眾人眼前!
Tips:電腦僅認識0/1的資料,但是人類不認識啊!人類對於純文字的資料(就是所謂的ASCII檔案格式)比較有感覺。 但是偏偏電腦又不認識ASCII格式的文字,很頭痛,不是嗎? 後來就有所謂的‘編譯器’來輔助我們。
我們一般使用文字編輯器以ASCII純文字格式來撰寫程式, 再透過所謂的‘編譯器(compiler)’將剛剛完成的文字檔案‘編譯’成為電腦認識的二進位制(binary file)的檔案, 以讓電腦認識且可以執行的程式啊!
但開始時並不順利,為此,他先轉而將Emacs編輯器寫成可以在Unix上面跑的軟體,並公開公佈原始碼。 Emacs是一種程式編輯器,他可以在使用者撰寫程式的過程中就進行程式語法的檢驗,此一功能可以減少程式設計師除錯的時間! 因為Emacs太優秀了,因此,很多人便直接向他購買。
此時網際網路尚未流行,所以,史託曼便藉著Emacs以磁帶(tape)出售,賺了一點錢 ,進而開始全力撰寫其他軟體。並且成立自由軟體基金會(FSF, Free Software Foundation),請更多工程師與志工撰寫軟體。終於還是完成了GCC,這比Emacs還更有幫助! 此外,了更他還撰寫多可以被呼叫的C函式庫(GNU C library),以及可以被使用來操作作業系統的基本介面BASH shell! 這些都在1990年左右完成了!
Tips:如果純粹使用文字編輯器來編輯程式的話,那麼程式語法如果寫錯時, 只能利用編譯時發生的錯誤訊息來修訂了,這樣實在很沒有效率。 Emacs則是一個很棒的編輯器!注意!是編輯(editor)而非編譯(compiler)! 他可以很快的立刻顯示出你寫入的語法可能有錯誤的地方,這對於程式設計師來說, 實在是一個好到不能再好的工具了!所以才會這麼的受到歡迎啊!
* 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的出現...更多的FSF開發的軟體可以參考如下網頁:
* https://www.fsf.org/resources
* 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作業系統當中!
Tips:為什麼稱圖形使用者介面為X呢?因為由英文單字來看,Window的W 接的就是X啦!意指Window的下一版就是了! 需注意的是,X Window並不是X Windows喔!
* 1991年:芬蘭大學生Linus Torvalds的一則簡訊
到了1991年,芬蘭的赫爾辛基大學的Linus Torvalds在BBS上面貼了一則訊息, 宣稱他以bash, gcc等工具寫了一個小小的核心程式,這個核心程式可以在Intel的386機器上面運作, 讓很多人很感興趣!從此開始了Linux不平凡的路程!Linux重要人物
1、Ken Thompson:C語言之父和Unix之父
2.Dennis Ritchie:C語言之父和Unix之父;
3.Stallman:著名黑客,GNU創始人,開發了Emacs、gcc、bash shell;
4.Bill Joy:BSD開發者;
5.Tanenbaum:Minix開發者;
6.Linus Torvalds:Linux之父,芬蘭赫爾辛基大學;