最近更新日期:2009/08/05
1. Linux是什麼
1.1 Linux是什麼 1.2 Linux之前,Unix的歷史 1.3 關於GNU計畫 2. Torvalds的Linux發展 2.1 與Minix之間 2.2 對386硬體的多工測試 2.3 初次釋出Linux 0.02 2.4 Linux的發展:虛擬團隊的產生 2.5 Linux 的核心版本 2.6 Linux distributions 3. Linux的特色 3.1 Linux的特色 3.2 Linux的優缺點 3.3 關於授權 4. 重點回顧 5. 本章習題 6. 參考資料與延伸閱讀 7. 針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=23871 Linux是什麼 我們知道Linux這玩意兒是在電腦上面運作的,所以說Linux就是一組軟體。問題是這個軟體是作業系統還是應用程式?
且Linux可以在哪些種類的電腦上面運作?而Linux源自哪裡?為什麼 Linux 還不用錢?這些我們都得來談一談先! Linux是什麼 我們在第零章、計算機概論裡面有提到過整個電腦系統的概念, 電腦是由一堆硬體所組成的,為了有效率的控制這些硬體資源,於是乎就有作業系統的產生了。 作業系統除了有效率的控制這些硬體資源的分配,並提供電腦運作所需要的功能(如網路功能)之外, 為了要提供程式設計師更容易開發軟體的環境,所以作業系統也會提供一整組系統呼叫介面來給軟體設計師開發用喔! 知道為什麼要講這些了嗎?嘿嘿!沒錯,因為Linux就是一套作業系統!如同下圖所示, Linux就是核心與系統呼叫介面那兩層。至於應用程式算不算Linux呢?當然不算啦!這點要特別注意喔! 圖1.1.1、作業系統的角色 由上圖中我們可以看到其實核心與硬體的關係非常的強烈。早期的Linux是針對386來開發的, 由於Linux只是一套作業系統並不含有其他的應用程式,因此很多工程師在下載了 Linux 核心並且實際安裝之後,就只能看著電腦開始運作了! 接下來這些高級工程師為了自己的需求,再在Linux上面安裝他們所需要的軟體就是了。
由於不同的硬體他的功能函數並不相同,例如IBM的Power CPU與Intel的x86架構就是不一樣! 所以同一套作業系統是無法在不同的硬體平台上面運作的!舉例來說,如果你想要讓x86上面跑的那套作業系統也能夠在Power CPU上運作時,就得要將該作業系統進行修改才行。如果能夠參考硬體的功能函數並據以修改你的作業系統程式碼, 那經過改版後的作業系統就能夠在另一個硬體平台上面運作了。 這個動作我們通常就稱為『軟體移植』了!
Linux提供了一個完整的作業系統當中最底層的硬體控制與資源管理的完整架構, 這個架構是沿襲Unix良好的傳統來的,所以相當的穩定而功能強大!此外, 由於這個優良的架構可以在目前的個人電腦(x86系統)上面跑, 所以很多的軟體開發者漸漸的將他們的工作心血移轉到這個架構上面,所以 Linux 作業系統也有很多的應用軟體啦! 雖然Linux僅是其核心與核心提供的工具,不過由於核心、核心工具與這些軟體開發者提供的軟體的整合, 使得Linux成為一個更完整的、功能強大的作業系統囉!約略瞭解Linux是何物之後,接下來,我們要談一談, 『為什麼說Linux是很穩定的作業系統呢?他是如何來的?』 Linux之前,Unix的歷史 早在Linux出現之前的二十年(大約在1970 年代),就有一個相當穩定而成熟的作業系統存在了! 那就是Linux的老大哥『Unix』是也!怎麼這麼說呢?他們這兩個傢伙有什麼關係呀?這裡就給他說一說囉! 眾所皆知的,Linux的核心是由Linus Torvalds在1991年的時候給他開發出來的,
並且丟到網路上提供大家下載,後來大家覺得這個小東西(Linux Kernel)相當的小而精巧,
所以慢慢的就有相當多的朋友投入這個小東西的研究領域裡面去了!
但是為什麼這個小東西這麼棒呢?又為什麼大家都可以免費的下載這個東西呢?
嗯!等鳥哥慢慢的唬xx....喔不!聽我慢慢的道來!
早期的電腦並不像現在的個人電腦一樣普遍,他可不是一般人碰的起的呢∼ 除非是軍事或者是高科技用途,或者是學術單位的學術研究,否則真的很難接觸到。 非但如此,早期的電腦架構還很難使用,除了運算速度並不快之外,操作介面也很困擾的! 因為那個時候的輸入設備只有讀卡機、輸出設備只有印表機, 使用者也無法與作業系統互動(批次型作業系統)。 在那個時候,寫程式是件很可憐的事情,因為程式設計者,必須要將程式相關的資訊在讀卡紙上面打洞, 然後再將讀卡紙插入讀卡機來將資訊讀入主機中運算。光是這樣就很麻煩了,如果程式有個小地方寫錯, 哈哈!光是重新打卡就很慘,加上主機少,使用者眾多,光是等待,就耗去很多的時間了! 在那之後,由於硬體與作業系統的改良,使得後來可以使用鍵盤來進行資訊的輸入。 不過,在一間學校裡面,主機畢竟可能只有一部,如果多人等待使用,那怎麼辦?大家還是得要等待啊! 好在1960年代初期麻省理工學院(MIT)發展了所謂的: 『相容分時系統(Compatible Time-Sharing System, CTSS)』, 它可以讓大型主機透過提供數個終端機(terminal)以連線進入主機,來利用主機的資源進行運算工作。 架構有點像這樣: 圖1.2.1、早期主機與終端機的相關性圖示
如此一來,無論主機在哪裡,只要在終端機前面進行輸入輸出的作業,就可利用主機提供的功能了。 不過,需要注意的是,此時終端機只具有輸入/輸出的功能,本身完全不具任何運算或者軟體安裝的能力。 而且,比較先進的主機大概也只能提供30個不到的終端機而已。 為了更加強化大型主機的功能,以讓主機的資源可以提供更多使用者來利用,所以在1965年前後, 由貝爾實驗室(Bell)、麻省理工學院(MIT)及奇異公司(GE, 或稱為通用電器)共同發起了Multics的計畫, Multics計畫的目的是想要讓大型主機可以達成提供300個以上的終端機連線使用的目標。 不過,到了1969年前後,計畫進度落後,資金也短缺,所以該計畫雖然繼續在研究,但貝爾實驗室還是退出了該計畫的研究工作。 (註:Multics有複雜、多數的意思存在。)
在認為Multics計畫不可能成功之後,貝爾研究室就退出該計畫。不過,原本參與Multics計畫的人員中,已經從該計畫當中獲得一些點子, Ken Thompson 就是其中一位! Thompson因為自己的需要,希望開發一個小小的作業系統以提供自己的需求。 在開發時,有一部DEC(Digital Equipment Corporation)公司推出的PDP-7剛好沒人使用, 於是他就準備針對這部主機進行作業系統核心程式的撰寫。本來Thompson應該是沒時間的(有家有小孩的宿命?), 無巧不巧的是,在1969年八月份左右,剛好Thompson的妻兒去了美西探親, 於是他有了額外的一個月的時間好好的待在家將一些構想實現出來! 經過四個星期的奮鬥,他終於以組合語言(Assembler)寫出了一組核心程式,同時包括一些核心工具程式, 以及一個小小的檔案系統。那個系統就是Unix的原型! 當時Thompson將Multics龐大的複雜系統簡化了不少,於是同實驗室的朋友都戲稱這個系統為:Unics。(當時尚未有Unix的名稱) Thompson 的這個檔案系統有兩個重要的概念,分別是:
這些概念在後來對於Linux的發展有相當重要的影響喔!
由於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很容易被移植到不同的機器上面喔!
雖然貝爾屬於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改版而來!)
由於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業界之間的緊張氣氛,並且也引爆了很多的商業糾紛∼
關於1979年的版權聲明中,影響最大的當然就是學校教Unix核心原始碼相關學問的教授了! 想一想,如果沒有核心原始碼,那麼如何教導學生認識Unix呢?這問題對於Andrew Tanenbaum(譚寧邦)教授來說,實在是很傷腦筋的!不過,學校的課程還是得繼續啊!那怎麼辦? 既然1979年的Unix第七版可以在Intel的x86架構上面進行移植, 那麼是否意味著可以將Unix改寫並移植到x86上面了呢?在這個想法上, 譚寧邦教授於是乎自己動手寫了Minix這個Unix Like的核心程式! 在撰寫的過程中,為了避免版權糾紛,譚寧邦完全不看Unix核心原始碼! 並且強調他的Minix必須能夠與Unix相容才行!譚寧邦在1984年開始撰寫核心程式, 到了1986年終於完成,並於次年出版Minix相關書籍,同時與新聞群組(BBS及News)相結合∼
這個Minix版本比較有趣的地方是,他並不是完全免費的,無法在網路上提供下載! 必須要透過磁片/磁帶購買才行!雖然真的很便宜∼不過,畢竟因為沒有在網路上流傳, 所以Minix的傳遞速度並沒有很快速!此外,購買時,隨磁片還會附上Minix的原始碼! 這意味著使用者可以學習Minix的核心程式設計概念喔! (這個特色對於Linux的啟始開發階段,可是有很大的關係喔!) 此外,Minix作業系統的開發者僅有譚寧邦教授,因為學者很忙啊!加上譚寧邦始終認為Minix主要用在教育用途上面,
所以對於Minix是點到為止!沒錯,Minix是很受歡迎,不過,使用者的要求/需求的聲音可能就比較沒有辦法上升到比較高的地方了!
這樣說,你明白吧?^_^
Richard Mathew Stallman(史托曼)在1984年發起的GNU計畫,對於現今的自由軟體風潮, 真有不可磨滅的地位!目前我們所使用得很多自由軟體,幾乎均直接或間接受益於GNU這個計畫呢! 那麼史托曼是何許人也?為何他會發起這個GNU計畫呢?
有鑑於圖形使用者介面(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在BBS上面貼了一則消息, 宣稱他以bash, gcc等工具寫了一個小小的核心程式,這個核心程式可以在Intel的386機器上面運作, 讓很多人很感興趣!從此開始了Linux不平凡的路程! 關於GNU計畫 GNU計畫對於整個自由軟體來說是佔有非常重要的角色!底下我們就來談談這咚咚吧!
1984年創立GNU計畫與FSF基金會的Stallman先生認為,寫程式最大的快樂就是讓自己發展的良好的軟體讓大家來使用了! 而既然程式是想要分享給大家使用的,不過,每個人所使用的電腦軟硬體並不相同, 既然如此的話,那麼該程式的原始碼(Source code)就應該要同時釋出, 這樣才能方便大家修改而適用於每個人的電腦中呢!這個將原始碼連同軟體程式釋出的舉動, 就稱為自由軟體(Free Software)運動! 此外,史托曼同時認為,如果你將你程式的Source code分享出來時,若該程式是很優秀的,那麼將會有很多人使用,
而每個人對於該程式都可以查閱source code,無形之中,就會有一票人幫你除錯囉!
你的這支程式將會越來越壯大!越來越優秀呢!
而為了避免自己的開發出來的Open source自由軟體被拿去做成專利軟體, 於是Stallman同時將GNU與FSF發展出來的軟體,都掛上GPL的版權宣告∼ 這個FSF的核心觀念是『版權制度是促進社會進步的手段, 版權本身不是自然權力。』對於FSF有興趣或者對於GNU想要更深入的瞭解時,請參考朝陽科技大學洪朝貴教授的網站 http://people.ofset.org/~ckhung/a/c_83.php,或直接到GNU去: http://www.gnu.org 裡面有更為深入的解說!
那麼這個GPL(GNU General Public License, GPL)是什麼玩意兒? 為什麼要將自由軟體掛上GPL的『版權宣告』呢?這個版權宣告對於作者有何好處? 首先,Stallman對GPL一直是強調Free的,這個Free的意思是這樣的: "Free software" is a matter of liberty, not price. To understand the concept, you should think of "free speech", not "free beer". "Free software" refers to the users' freedom to run, copy, distribute, study, change, and improve the software 大意是說,Free Software(自由軟體)是一種自由的權力,並非是『價格!』 舉例來說,你可以擁有自由呼吸的權力、你擁有自由發表言論的權力, 但是,這並不代表你可以到處喝『免費的啤酒!(free beer)』,也就是說, 自由軟體的重點並不是指『免費』的,而是指具有『自由度, freedom』的軟體, 史托曼進一步說明了自由度的意義是: 使用者可以自由的執行、複製、再發行、學習、修改與強化自由軟體。 這無疑是個好消息!因為如此一來,你所拿到的軟體可能原先只能在Unix上面跑, 但是經過原始碼的修改之後,你將可以拿他在Linux或者是Windows上面來跑!總之, 一個軟體掛上了GPL版權宣告之後,他自然就成了自由軟體!這個軟體就具有底下的特色:
但請特別留意,你所修改的任何一個自由軟體都不應該也不能這樣:
也就是說,既然GPL是站在互助互利的角度上去開發的,你自然不應該將大家的成果佔為己有,
對吧!因此你當然不可以將一個GPL軟體的授權取消,即使你已經對該軟體進行大幅度的修改!
那麼自由軟體也不能販賣嗎?當然不是!還記得上一個小節裡面,
我們提到史托曼藉由販賣Emacs取得一些經費,讓自己生活不至於匱乏吧?是的!
自由軟體是可以販售的,不過,不可僅販售該軟體,應同時搭配售後服務與相關手冊∼
這些可就需要工本費了呢!
很多人還是有疑問,目前不是有很多Linux開發商嗎?為何他們可以販售Linux這個GPL授權的軟體? 原因很簡單,因為他們大多都是販售『售後服務!』所以,他們所使用的自由軟體, 都可以在他們的網站上面下載!(當然,每個廠商他們自己開發的工具軟體就不是GPL的授權軟體了!) 但是,你可以購買他們的Linux光碟,如果你購買了光碟,他們會提供相關的手冊說明文件, 同時也會提供你數年不等的諮詢、售後服務、軟體升級與其他協力工作等等的附加價值! 所以說,目前自由軟體工作者,他們所賴以維生的,幾乎都是在『服務』這個領域呢! 畢竟自由軟體並不是每個人都會撰寫,有人有需要你的自由軟體時,他就會請求你的協助, 此時,你就可以透過服務來收費了!這樣來說, 自由軟體確實還是具有商業空間的喔!
上面提到的大多是與使用者有關的項目,那麼 GPL 對於自由軟體的作者有何優點呢?大致的優點有這些:
這是因為既然是Open Source的自由軟體,那麼你的程式碼將會有很多人幫你查閱, 如此一來,程式的漏洞與程式的優化將會進展的很快!所以,在安全性與效能上面, 自由軟體一點都不輸給商業軟體喔!此外,因為GPL授權當中,修改者並不能修改授權, 因此,你如果曾經貢獻過程式碼,嘿嘿!你將名留青史呢!不錯吧! ^_^ 對於程式開發者來說,GPL實在是一個非常好的授權,因為大家可以互相學習對方的程式撰寫技巧, 而且自己寫的程式也有人可以幫忙除錯。那你會問啊,對於我們這些廣大的終端用戶,GPL有沒有什麼好處啊?有啊!當然有! 雖然終端用戶或許不會自己編譯程式碼或者是幫人家除錯,但是終端用戶使用的軟體絕大部分就是GPL的軟體, 全世界有一大票的工程師在幫你維護你的系統,這難道不是一件非常棒的事嗎? ^_^ Torvalds的Linux發展 我們前面一節當中,提到了Unix的歷史,也提到了Linux是由Torvalds這個芬蘭人所發明的。那麼為何托瓦茲可以發明Linux呢?
憑空想像而來的?還是有什麼淵源?這裡我們就來談一談囉! 與Minix之間 Linus Torvalds(托瓦茲, 1969年出生)的外祖父是赫爾辛基大學的統計學家, 他的外祖父為了讓自己的小孫子能夠學點東西,所以從小就將托瓦茲帶到身邊來管理一些微電腦。 在這個時期,托瓦茲接觸了組合語言(Assembly Language),那是一種直接與晶片對談的程式語言,也就是所謂的低階語言。 必須要很瞭解硬體的架構,否則很難以組合語言撰寫程式的。 在1988年間,托瓦茲順利的進入了赫爾辛基大學,並選讀了電腦科學系。在就學期間,因為學業的需要與自己的興趣, 托瓦茲接觸到了Unix這個作業系統。當時整個赫爾辛基只有一部最新的Unix系統,同時僅提供16個終端機(terminal)。 還記得我們上一節剛剛提過的,早期的電腦僅有主機具有運算功能,terminal僅負責提供Input/Output而已。在這種情況下, 實在很難滿足托瓦茲的需求,因為.....光是等待使用Unix的時間,就很耗時∼為此,他不禁想到: 『我何不自己搞一部Unix來玩?』不過,就如同Stallman當初的GNU計畫一樣,要寫核心程式,談何容易∼ 不過,幸運之神並未背離托瓦茲,因為不久之後,他就知道有一個類似Unix的系統, 並且與Unix完全相容,還可以在Intel 386機器上面跑的作業系統, 那就是我們上一節提過的,譚寧邦教授為了教育需要而撰寫的Minix系統! 他在購買了最新的Intel 386的個人電腦後,就立即安裝了Minix這個作業系統。 另外,上個小節當中也談到,Minix這個作業系統是有附上原始碼的, 所以托瓦茲也經由這個原始碼學習到了很多的核心程式設計的設計概念喔! 對386硬體的多工測試 事實上,托瓦茲對於個人電腦的CPU其實並不滿意,因為他之前碰的電腦都是工作站型的電腦, 這類電腦的CPU特色就是可以進行『多工處理』的能力。什麼是多工呢?理論上, 一個CPU在一個時間內僅能進行一個程式, 那如果有兩個以上的程式同時出現到系統中呢?舉例來說, 你可以在現今的電腦中同時開啟兩個以上的辦公軟體,例如電子試算表與文書處理軟體。 這個同時開啟的動作代表著這兩個程式同時要交給CPU來處理∼ 啊!CPU一個時間點內僅能處理一個程式,那怎麼辦?沒關係,這個時候如果具有多工能力的CPU就會在不同的程式間切換∼ 還記得前一章談到的CPU時脈吧?假設CPU時脈為1GHz的話,那表示CPU一秒鐘可以進行109次工作。 假設CPU對每個程式都只進行1000次運作週期,然後就得要切換到下個程式的話,那麼CPU一秒鐘就能夠切換106次呢! (當然啦,切換工作這件事情也會花去一些CPU時間,不過這裡暫不討論)。這麼快的處理速度下,你會發現, 兩個程式感覺上幾乎是同步在進行啦!
早期Intel x86架構電腦不是很受重視的原因,就是因為x86的晶片對於多工的處理不佳, CPU在不同的工作之間切換不是很順暢。但是這個情況在386電腦推出後,有很大的改善。 托瓦茲在得知新的386晶片的相關資訊後,他認為,以性能價格比的觀點來看, Intel的386相當的便宜,所以在性能上也就稍微可以將就將就 ^_^。最終他就貸款去買了一部Intel的386來玩。 早期的電腦效能沒有現在這麼好,所以壓榨電腦效能就成了工程師的一項癖好! 托瓦茲本人早期是玩組合語言的,組合語言對於硬體有很密切的關係,托瓦茲自己也說:『我始終是個性能癖』^_^。 為了徹底發揮386的效能,於是托瓦茲花了不少時間在測試386機器上! 他的重要測試就是在測試386的多功效能。首先,他寫了三個小程式,一個程式會持續輸出A、一個會持續輸出B, 最後一個會將兩個程式進行切換。他將三個程式同時執行,結果,他看到螢幕上很順利的一直出現ABABAB...... 他知道,他成功了! ^_^ 圖2.2.1、386電腦的多工測試
初次釋出Linux 0.02 探索完了386的硬體之後,終於拿到Minix並且安裝在托瓦茲的386電腦上之後,托瓦茲跟BBS上面一堆工程師一樣, 他發現Minix雖然真的很棒,但是譚寧邦教授就是不願意進行功能的加強,導致一堆工程師在作業系統功能上面的欲求不滿! 這個時候年輕的托瓦茲就想:『既然如此,那我何不自己來改寫一個我想要的作業系統?』 於是他就開始了核心程式的撰寫了。 撰寫程式需要什麼呢?首先需要的是能夠進行工作的環境,再來則是可以將原始碼編譯成為可執行檔的編譯器。 好在有GNU計畫提供的bash工作環境軟體以及gcc編譯器等自由軟體, 讓托瓦茲得以順利的撰寫核心程式。他參考Minix的設計理念與書上的程式碼,然後仔細研究出386個人電腦的效能最佳化, 然後使用GNU的自由軟體將核心程式碼與386緊緊的結合在一起,最終寫出他所需要的核心程式。 而這個小玩意竟然真的可以在386上面順利的跑起來∼還可以讀取Minix的檔案系統。 真是太好了!不過還不夠,他希望這個程式可以獲得大家的一些修改建議, 於是他便將這個核心放置在網路上提供大家下載,同時在BBS上面貼了一則消息:
他說,他完成了一個小小的作業系統,這個核心是用在386機器上的, 同時,他真的僅是好玩,並不是想要做一個跟GNU一樣大的計畫! 另外,他希望能夠得到更多人的建議與回饋來發展這個作業系統!這個概念跟Minix剛好背道而馳呢! 這則新聞引起很多人的注意,他們也去托瓦茲提供的網站上下載了這個核心來安裝。 有趣的是,因為托瓦茲放置核心的那個FTP網站的目錄為:Linux, 從此,大家便稱這個核心為Linux了。(請注意,此時的Linux就是那個kernel喔! 另外,托瓦茲所丟到該目錄下的第一個核心版本為0.02呢!) 同時,為了讓自己的Linux能夠相容於Unix系統,於是托瓦茲開始將一些能夠在Unix上面運作的軟體拿來在Linux上面跑。 不過,他發現到有很多的軟體無法在Linux這個核心上運作。這個時候他有兩種作法, 一種是修改軟體,讓該軟體可以在Linux上跑, 另一種則是修改Linux,讓Linux符合軟體能夠運作的規範! 由於Linux希望能夠相容於Unix,於是托瓦茲選擇了第二個作法『修改Linux』! 為了讓所有的軟體都可以在Linux上執行,於是托瓦茲開始參考標準的POSIX規範。
這個正確的決定讓Linux在起步的時候體質就比別人優良∼因為POSIX標準主要是針對Unix與一些軟體運行時候的標準規範, 只要依據這些標準規範來設計的核心與軟體,理論上,就可以搭配在一起執行了。 而Linux的發展就是依據這個POSIX的標準規範,Unix上面的軟體也是遵循這個規範來設計的, 如此一來,讓Linux很容易就與Unix相容共享互有的軟體了!同時,因為Linux直接放置在網路下,提供大家下載, 所以在流通的速度上相當的快!導致Linux的使用率大增!這些都是造成Linux大受歡迎的幾個重要因素呢! Linux 的發展:虛擬團隊的產生 Linux能夠成功除了托瓦茲個人的理念與力量之外,其實還有個最重要的團隊!
Linux雖然是托瓦茲發明的,而且內容還絕不會涉及專利軟體的版權問題。
不過,如果單靠托瓦茲自己一個人的話,那麼Linux要茁壯實在很困難∼
因為一個人的力量是很有限的。好在托瓦茲選擇Linux的開發方式相當的務實!
首先,他將釋出的Linux核心放置在FTP上面,並請告知大家新的版本資訊,
等到使用者下載了這個核心並且安裝之後,如果發生問題,
或者是由於特殊需求亟需某些硬體的驅動程式,那麼這些使用者就會主動回報給托瓦茲。
在托瓦茲能夠解決的問題範圍內,他都能很快速的進行Linux核心的更新與除錯。
不過,托瓦茲總是有些硬體無法取得的啊,那麼他當然無法幫助進行驅動程式的撰寫與相關軟體的改良。 這個時候,就會有些志工跳出來說:『這個硬體我有,我來幫忙寫相關的驅動程式。』 因為Linux的核心是Open Source的,駭客志工們很容易就能夠跟隨Linux的原本設計架構, 並且寫出相容的驅動程式或者軟體。志工們寫完的驅動程式與軟體托瓦茲是如何看待的呢? 首先,他將該驅動程式/軟體帶入核心中,並且加以測試。 只要測試可以運行,並且沒有什麼主要的大問題,那麼他就會很樂意的將志工們寫的程式碼加入核心中! 總之,托瓦茲是個很務實的人,對於Linux核心所欠缺的項目,他總是『先求有且能跑, 再求進一步改良』的心態!這讓Linux使用者與志工得到相當大的鼓勵! 因為Linux的進步太快了!使用者要求虛擬記憶體,結果不到一個星期推出的新版Linux就有了! 這不得不讓人佩服啊! 另外,為因應這種隨時都有程式碼加入的狀況,於是Linux便逐漸發展成具有模組的功能! 亦即是將某些功能獨立出於核心外,在需要的時候才載入到核心中。如此一來, 如果有新的硬體驅動程式或者其他協定的程式碼進來時,就可以模組化, 大大的增加了Linux核心的可維護能力!
後來,因為Linux核心加入了太多的功能,光靠托瓦茲一個人進行核心的實際測試並加入核心原始程式實在太費力∼ 結果,就有很多的朋友跳出來幫忙這個前置作業!例如考克斯(Alan Cox)、與崔迪(Stephen Tweedie)等等, 這些重要的副手會先將來自志工們的修補程式或者新功能的程式碼進行測試, 並且結果上傳給托瓦茲看,讓托瓦茲作最後核心加入的原始碼的選擇與整併! 這個分層負責的結果,讓Linux的發展更加的容易! 特別值得注意的是,這些托瓦茲的Linux發展副手,以及自願傳送修補程式的駭客志工, 其實都沒有見過面,而且彼此在地球的各個角落,大家群策群力的共同發展出現今的Linux, 我們稱這群人為虛擬團隊!而為了虛擬團隊資料的傳輸,於是Linux便成立的核心網站: http://www.kernel.org! 而這群素未謀面的虛擬團隊們,在1994年終於完成的Linux的核心正式版!version 1.0。 這一版同時還加入了X Window System的支援呢!更於1996年完成了2.0版。此外,托瓦茲指明了企鵝為Linux的吉祥物。
Linux由於托瓦茲是針對386寫的,跟386硬體的相關性很強,所以, 早期的Linux確實是不具有移植性的。不過,大家知道Open source的好處就是, 可以修改程式碼去適合作業的環境。因此,在1994年以後,Linux便被開發到很多的硬體上面去了! 目前除了x86之外,IBM、HP、Sun等等公司出的硬體也都有被Linux所支援呢! Linux的核心版本 Linux的核心版本編號有點類似如下的樣子:
如前所述,因為對於Linux核心的開發者太多了,以致於造成Linux核心經常性的變動。 但對於一般家用電腦或企業關鍵應用的話,常變動的核心並不適合的。因此托瓦茲便將核心的發展趨勢分為兩股, 並根據這兩股核心的發展分別給予不同的核心編號,那就是:
至於釋出版本則是在主、次版本架構不變的情況下,新增的功能累積到一定的程度後所新釋出的核心版本。 而由於Linux核心是使用GPL的授權,因此大家都能夠進行核心程式碼的修改。因此,如果你有針對某個版本的核心修改過部分的程式碼, 那麼那個被修改過的新的核心版本就可以加上所謂的修改版本了。 Linux核心版本與distribution (下個小節會談到) 的版本並不相同,很多朋友常常上網問到:『我的Linux是9.x版,請問....』之類的留言, 這是不對的提問方式,因為所謂的Linux版本指的應該是核心版本, 而目前最新的核心版本應該是2.6.30(2009/08) 才對,並不會有9.x的版本出現的。 妳常用的Linux系統則應該說明為distribution才對!因此,如果以CentOS這個distribution來說, 妳應該說:『我用的Linux是CentOS這個 distribution,版本為5.x 版,請問....』才對喔!
Linux distributions 好了,經過上面的說明,我們知道了Linux其實就是一個作業系統最底層的核心及其提供的核心工具。 他是GNU GPL授權模式,所以,任何人均可取得原始碼與可執行這個核心程式,並且可以修改。 此外,因為Linux參考POSIX設計規範,於是相容於Unix作業系統,故亦可稱之為Unix Like的一種。
Linux的出現讓GNU計畫放下了心裡的一塊大石頭,因為GNU一直以來就是缺乏了核心程式, 導致他們的GNU自由軟體只能在其他的Unix上面跑。既然目前有Linux出現了,且 Linux也用了很多的GNU相關軟體,所以Stallman認為Linux的全名應該稱之為GNU/Linux呢! 不管怎麼說,Linux實在很不錯,讓GNU軟體大多以Linux為主要作業系統來進行開發, 此外,很多其他的自由軟體團隊,例如sendmail, wu-ftp, apache等等也都有以Linux 為開發測試平台的計畫出現!如此一來,Linux除了主要的核心程式外,可以在Linux 上面運行的軟體也越來越多,如果有心,就能夠將一個完整的Linux作業系統搞定了! 雖然由Torvalds負責開發的Linux僅具有Kernel與Kernel提供的工具, 不過,如上所述,很多的軟體已經可以在Linux上面運作了,因此, 『Linux + 各種軟體』就可以完成一個相當完整的作業系統了。 不過,要完成這樣的作業系統......還真難∼ 因為Linux早期都是由駭客工程師所開發維護的,他們並沒有考慮到一般使用者的能力...... 為了讓使用者能夠接觸到Linux,於是很多的商業公司或非營利團體, 就將Linux Kernel(含tools)與可運行的軟體整合起來,加上自己具有創意的工具程式, 這個工具程式可以讓使用者以光碟/DVD或者透過網路直接安裝/管理Linux系統。 這個『Kernel + Softwares + Tools的可完整安裝』的咚咚,我們稱之為Linux distribution, 一般中文翻譯成可完整安裝套件,或者Linux發佈商套件等。 圖2.5.1、Linux可完整安裝發佈套件
由於GNU的GPL授權並非不能從事商業行為,於是很多商業公司便成立來販售Linux distribution。
而由於Linux的GPL版權宣告,因此,商業公司所販售的Linux distributions通常也都可以從Internet上面來下載的!
此外,如果你想要其他商業公司的服務,那麼直接向該公司購買光碟來安裝,也是一個很不錯的方式的!
不過,由於發展Linux distributions的社群與公司實在太多了,例如在台灣有名的Red Hat, SuSE, Ubuntu, Fedora, Debian等等,所以很多人都很擔心,如此一來每個distribution是否都不相同呢? 這就不需要擔心了,因為每個Linux distributions使用的kernel都是http://www.kernel.org所釋出的,而他們所選擇的軟體,幾乎都是目前很知名的軟體,重複性相當的高, 例如網頁伺服器的Apache,電子郵件伺服器的Postfix/sendmail,檔案伺服器的Samba等等。 此外,為了讓所有的Linux distributions開發不致於差異太大,且讓這些開發商在開發的時候有所依據,還有Linux Standard Base (LSB)等標準來規範開發者,以及目錄架構的File system Hierarchy Standard (FHS)標準規範! 唯一差別的,可能就是該開發者自家所開發出來的管理工具,以及套件管理的模式吧! 所以說,基本上,每個Linux distributions除了架構的嚴謹度與選擇的套件內容外, 其實差異並不太大啦! ^_^ 。大家可以選擇自己喜好的distribution來安裝即可!
底下列出幾個主要的Linux distributions發行者網址:
當然發行套件者不僅於此。但是值得大書特書的,是中文Linux的延伸計畫:CLE這個套件! 早期的Linux因為是工程師發展的,而這些工程師大多以英文語系的國家為主, 所以Linux對於國人的學習是比較困擾一點。後來由國人發起的CLE計畫: http://cle.linux.org.tw/ 開發很多的中文套件及翻譯了很多的英文文件,使得我們目前得以使用中文的Linux呢! 另外,目前正在開發中的還有台南縣臥龍小三等老師們發起的眾多自由軟體計畫, 真是造福很多的朋友啊! 此外,如果只想看看Linux的話,還可以選擇所謂的可光碟開機進入Linux的Live CD版本, 亦即是KNOPPIX這個Linux distributions呢!台灣也有阿里巴巴兄維護的中文Live CD喔!
那我到底應該要選擇哪一個distributions?就如同我們上面提到的,其實每個distributions差異性並不大! 不過,由於套件管理的方式主要分為Debian的dpkg及Red Hat系統的RPM方式, 目前鳥哥的建議是,先學習以RPM套件管理為主的RHEL/Fedora/SuSE/CentOS等台灣使用者較多的版本, 這樣一來,發生問題時,可以提供解決的管道比較多。如果你已經接觸過Linux了, 還想要探討更嚴謹的Linux版本,那可以考慮使用Debian,如果你是以效能至上來考量, 那麼或許Gentoo是不錯的建議! 總之,版本很多,但是各版本差異其實不大,建議你一定要先選定一個版本後, 先徹頭徹尾的瞭解他,那再繼續玩其他的版本時,就可以很快的進入狀況。 鳥哥的網站僅提供一個版本,不過是以比較基礎的方式來介紹的, 因此,如果能夠熟練俺這個網站的話,呵呵!哪一個distributions對你來說,都不成問題啦! 不過,如果依據電腦主機的用途來分的話,在台灣鳥哥會這樣建議:
Linux的特色 Linux是Torvalds先生所開發出來的,基於GPL的版權宣告之下,可以在x86的架構下運作,也可以被移植到其他的大型主機上面。 由於開發的相關理念與相容的問題,因此,我們也可以稱Linux為Unix Like作業系統的一種。
Linux的特色 那麼這個系統有什麼特異功能呢?簡單的說:
目前Linux已經是相當成熟的一套作業系統囉!而且不耗資源又可以自由取得!呵呵, 可以說造成微軟相當大的壓力呀!此外,由於他的系統硬體要求很低, 加上目前很多的人由於『Intel 的陰謀』而造成手邊有相當多的淘汰掉的硬體配備, Linux在這些被淘汰的硬體中就可以執行的相當的順暢與穩定!因此也造成相當多朋友的關注囉!
這也是造成Linux成為最近幾年來最受矚目的作業系統之一,如前所述, 他會受到矚目的原因主要是因為他是『free』的,就是可以自由取得的作業系統啦! 然後他是開放性的系統,也就是你可以隨時的取得程式的原始碼,這對於程式開發工程師是很重要的! 而且,雖然他是Free的自由軟體,不過功能卻很強大!另外, Linux對於硬體的需求是很低的,這一點更造成它流行的主因,因為硬體的汰換率太快了, 所以很多人手邊都有一些很少在用的零件,這些零件組一組就可以用來跑Linux了, 反正做一個工作站又不用使用到螢幕(只要主機就可以囉),因此Linux就越來越流行囉!
Linux的優缺點 那幹嘛要使用Linux做為我們的主機系統呢?這是因為Linux有底下這些優點:
反正Linux好處說不完啦!不過雖然Linux具有這樣多的好處,但是他先天上有一個足以致命的地方, 使他的普及率受到很大的限制,就是Linux需要使用『指令列』的終端機模式進行系統的管理! 雖然近年來有很多的圖形介面開發使用在Linux上面,但畢竟要熟悉Linux還是以指令列來使用是比較好的, 因此要接受Linux的玩家必須比較要能熟悉對電腦下指令的行為,而不是用滑鼠點一點icon就行了! Linux 還可以改進的地方:
老實說,這些缺點絕大部分都不是Linux本身的問題,倒是一些政策面與商業方面的考量,才是最大的困擾。 不過,Linux與其他的作業系統一樣,就是一個工具而已!希望大家能夠在快樂中學習到Linux的精髓啦!^_^ 關於授權 現在市面上有好多的軟體,有的是自由軟體,有的是專利軟體。有的專利軟體免費,有的自由軟體要錢∼
啊!好煩啊!怎麼分辨這些東西?其實,鳥哥並不是律師,對於法律也不十分懂,不過,
還是有幾個授權模式可以來談一談∼
軟體以Open Source的方式釋出時,表示除了可執行的軟體本身外,一定伴隨著原始碼的釋出喔!通常Open Source的軟體有幾個好處:
Open source的代表授權為GNU的GPL授權及BSD等等,底下列出知名的Open Source授權網頁:
相對於Open Source的軟體會釋出原始碼,Close source的程式則僅推出可執行的二進位程式(binary program)而已。 這種軟體的優點是有專人維護,你不需要去更動他;缺點則是靈活度大打折扣,使用者無法變更該程式成為自己想要的樣式! 此外,若有木馬程式或者安全漏洞,將會花上相當長的一段時間來除錯!這也是所謂專利軟體(copyright)常見的軟體出售方式。 雖然專利軟體常常代表就是需要花錢去購買,不過有些專利軟體還是可以免費提供大眾使用的! 免費的專利軟體代表的授權模式有:
重點回顧
本章習題
(要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看)
實作題部分:
參考資料與延伸閱讀
2002/06/25:第一次完成 2003/01/26:重新修訂,加入一些歷史事件、重新編排與加入 FAQ 2003/02/28:加入百資以及 distrowatch 兩個網站的推薦! 2005/05/31:舊有的資料放於 此處 2005/06/02:做了大幅度的改版,很多資料參考了網路農夫及 Linux 傳奇等書籍,建議大家要多看看網路農夫的大作喔! 2005/06/08:將原本的 binary / compiler / Emacs 的地方再說明一下!比較容易瞭解那是什麼!順便加入習題 2005/07/21:網路農夫的網站結束了∼真傷心∼只好提供網路農夫之前發表的文章連結了! 2005/08/03:感謝網友 babab 的來信告知,修訂了國家高速網路中心網址:http://www.nchc.org.tw 2005/10/24:經由網友的回報,洪朝貴老師已經調職到樹德大學,因此整個連結內容已作修訂。 2006/05/31:加入了重點回顧的項目啦! 2006/06/06:感謝網友 "Warren Hsieh" 兄的提醒,由於麥金塔在 2006 年後使用 Intel 的 x86 硬體架構,故 Windows 是可能可以在上面安裝的! 2008/07/23:因為加入了計算機概論的章節,所以本文做了挺大幅度的修改!原本針對FC4的版本請點選這裡。 2007/07/26:將整份文章重新校閱過,修訂一些文辭,也將格式調整為適合的XHTML了! 2007/07/29:將主、次核心版本加強說明! 2009/08/05:移除最後一小節的標準,將FHS與LSB向前挪到distribution解釋中。拿掉伺服器、工作站、終端機的說明。 2012/02/20:更新了 Linux 在台灣的相關連結資訊 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||