Linux簡介
Linux簡介
前言
相信大家對Linux核心為基礎的Android系列一定毫不陌生,但你可能不知道,從架設網站、物聯網、穿戴式設備、崁入式作業系統、工業自動控制....幾乎無所不在 OS(作業系統) 幾乎都用 Linux。
Linux的誕生,就是在1991年,一名芬蘭大學生Linus Torvalds托瓦茲 ,就藉由GNU計劃的協助下,發展出了著名的Linux,一個讓大眾可以自由參與、集體協作、開源免費的OS。
大綱
- Linux 的由來
- Linux 發行版
- Linux OS(作業系統) 架構
- 核心(Kernel)
- 關於 GNU計畫、自由軟體與開放原始碼
- 自由軟體的活動
- 自由軟體的版權GNU GPL
- 1991年:芬蘭大學生Linus Torvalds的一則簡訊
- 自由(Free)的真諦
- 自由軟體與商業行為
- 開放原始碼
- 專屬軟體/專利軟體 (close source)
- Linux 的發展-Torvalds
- Linux在台灣
- 選擇適合你的Linux distribution
Linux 的由來
- Unix的前身是由貝爾實驗室(Bell lab.)的Ken Thompson利用組合語言寫成的。
- 1969年,Unix在美國AT&T公司的貝爾實驗室開發出來。
- 1977年由Bill Joy釋出BSD (Berkeley Software Distribution),這些稱為Unix-like的作業系統。
- 1983年,Richard Stallman創立GNU計劃。這個計劃有一個目標,是為了發展一個完全自由的類Unix作業系統。
- 1984年由Andrew Tanenbaum開始製作Minix作業系統,該系統可以提供原始碼以及軟體。
- 1985年,發表GNU宣言。
- 1989年,發表GNU通用公眾授權條款(GPL)。GNU計畫中的其他部份,如編輯器、編譯器、shell等都已經完成,獨缺作業系統核心。
- 1991年,Linux內核在8月25日由21歲的芬蘭學生Linus Benedict Torvalds公開發布。
- 1992年,在GNU GPL下Linux內核被重新授權使用,產生第一個「Linux發行版本」。
- 1993年,超過100個開發者致力於Linux內核開發。在他們的努力下,內核逐漸適應GNU的環境,這個為Linux創造巨大的應用空間的廣闊環境。Slackware首次釋出。後來在同一年,Debian專案設立,現已成為最大的社群釋出專案。
- 1994年,Torvalds認為內核的所有元件已經完全成熟,他放出了Linux的1.0版本。XFree86專案組提供了一個圖形化使用者介面(GUI).同年Red Hat公司和SUSE發行他們各自的Linux 1.0分發版本。
- 1996年,Linux內核2.0版本釋出。此時內核已經支援多處理器,因而成為各大公司的絕佳選擇。
Linux發行版
Linux 發行版(Linux distribution,也被叫做GNU/Linux 發行版),是基於 Linux 核心(Linux kernel),為一般使用者預先整合好的Linux作業系統及各種應用軟體。便是因為 Linux 核心(Linux kernel)基於集體協作、開源免費的原則,也就是說你可以發佈你自己的Linux而非一定要用Ubuntu或是CentOS,你甚至可以收費喔!
由於我們要選擇的Linux發行版需要考慮不只是功能價格的考量,更重要的是他們是否持續更新、壯大、有優良的家族背景、和提供豐富多樣的套件驅動程式,因此,我們從 Linux發行版列表 的家族發展史片如下圖,可以看到:
- Linux的家族樹的 "根"(Root)是“GNU/Linux”,出現在1991年。
- 1993年年中,從這樹根生長出兩個強壯分支:Debian 和 Slackware。
- 1994年年底,又從這個樹根上,生長出紅帽(Red Hat)這一強壯分支。在此後5年時間,發展比較平靜。
- 2003年下半年在紅帽(Red Hat)分支上,出現了2個大分支 Fedora 和 CentOS。
- 2004年下半年在 Debian 分支上,出現了新分支的"大暴發" Ubuntu,從此,Ubuntu 成為基於Debian的一個新的“樹根”(分支中心)。
- 1999-2000年間,又從這個樹根上,生長出 Enoch 這一強壯分支。
- 2002年年初,又從這個樹根上,生長出 Arch Linux 這一強壯分支。
- 2007年年底,又從這個樹根上,生長出 Android 這一強壯分支。
各大Linux Distributions發行版的主要異同:支援標準!
不過,由於發展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來安裝即可!
distributions主要分為兩大系統,一種是使用 RPM 方式安裝軟體的系統,包括Red Hat, Fedora, SuSE等都是這類; 一種則是使用 Debian 的 dpkg 方式安裝軟體的系統,包括Debian, Ubuntu, B2D等等。若是加上商業公司或社群單位的分類,那麼我們可以簡單的用下表來做個解釋喔!
RPM 軟體管理 | DPKG 軟體管理 | 其他未分類 | |
---|---|---|---|
商業公司 | RHEL (Red Hat 公司) SuSE (Micro Focus) |
Ubuntu (Canonical Ltd.) | |
社群單位 | Fedora CentOS OpenSuSE |
Debian B2D |
Gentoo |
主要的Linux distributions發行者
底下列出幾個主要的Linux distributions發行者網址:
- Red Hat: http://www.redhat.com
- SuSE: https://www.suse.com
- Fedora: https://getfedora.org/
- CentOS: http://www.centos.org/
- Debian: http://www.debian.org/
- Ubuntu: http://www.ubuntu.com/
- Gentoo: http://www.gentoo.org/
到底是要買商業版還是社群版的Linux distribution呢?如果是要裝在個人電腦上面做為桌上型電腦用的,建議使用社群版, 包括Fedora, Ubuntu, OpenSuSE等等。如果是用在伺服器上面的,建議使用商業版本,包括Red Hat, SuSE等。 這是因為社群版通常開發者會加入最新的軟體,這些軟體可能會有一些bug存在。至於商業版則是經過一段時間的磨合後, 才將穩定的軟體放進去。
舉例來說,Fedora兜出來的軟體套件經過一段時間的維護後,等到該軟體穩定到不容易發生錯誤後, Red Hat才將該軟體放到他們最新的釋出版本中。所以,Fedora的軟體比較經常改版,Red Hat的軟體就較少更版。
Linux OS(作業系統) 架構
電腦是由一堆硬體所組成的,為了有效率的控制這些硬體資源,於是乎就有OS(作業系統) 的產生了。 作業系統除了有效率的控制這些硬體資源的分配,並提供電腦運作所需要的功能(如網路功能)之外, 為了要提供程式設計師更容易開發軟體的環境,所以作業系統也會提供一整組系統呼叫介面來給軟體設計師開發用喔!
核心(Kernel)
在大多數的作業系統中,有一個相當重要的角色稱做「核心(Kernel,或稱內核)」,他所提供的就是所有最基本的功能,比方說鍵盤輸入、螢幕輸出,記憶體管理,同時間多工運行。當然也包含更多一般我們沒注意到卻相當重要的硬體元件、驅動程式的管理(沒注意到多半都是因為他並不直接接觸使用者)。內核所以叫“內”“核”,就是因為它就像是一個內部的核心,跟心臟與其他身體器官的組合一樣。提供了你活動運行的最基本功能,你的心臟並不能幫你打籃球,但是沒有心臟應該沒有人可以打籃球。
Linux的核心版本
所謂的Linux版號,也就是指Linux核心的版號喔。所以千萬可別把Linux 核心(kernel)與Linux 發行版(distribution) 搞混了。參閱 : Linux Kernel 官方下載頁面。因此,如果你遇到問題在網路上留言時,以CentOS這個distribution來說, 妳應該說:『我用的Linux是CentOS這個 distribution,版本為7.x 版,請問....』才對喔!
Linux的核心版本編號有點類似如下的樣子:
3.10.0-123.el7.x86_64
主版本.次版本.釋出版本-修改版本
奇數、偶數版本分類
在 2.6.x 版本以前,Torvalds托瓦茲 將核心的發展趨勢分為兩股,並根據這兩股核心的發展分別給予不同的核心編號,那就是:
- 主、次版本為奇數:發展中版本(development) : 如2.5.xx,這種核心版本主要用在測試與發展新功能,所以通常這種版本僅有核心開發工程師會使用。 如果有新增的核心程式碼,會加到這種版本當中,等到眾多工程師測試沒問題後,才加入下一版的穩定核心中。
- 主、次版本為偶數:穩定版本(stable) : 如2.6.xx,等到核心功能發展成熟後會加到這類的版本中,主要用在一般家用電腦以及企業版本中。 重點在於提供使用者一個相對穩定的Linux作業環境平台。
至於釋出版本則是在主、次版本架構不變的情況下,新增的功能累積到一定的程度後所新釋出的核心版本。 而由於Linux核心是使用GPL的授權,因此大家都能夠進行核心程式碼的修改。因此,如果你有針對某個版本的核心修改過部分的程式碼, 那麼那個被修改過的新的核心版本就可以加上所謂的修改版本了。
主線版本、長期維護版本(longterm version)
不過,這種奇數、偶數的編號格式在 3.0 推出之後就失效了。從 3.0 版開始,核心主要依據主線版本 (MainLine) 來開發,開發完畢後會往下一個主線版本進行。 例如 3.10 就是在 3.9 的架構下繼續開發出來的新的主線版本。通常新一版的主線版本大約在 2~3 個月會被提出喔! 之所以會有新的主線版本,是因為有加入新功能之故。現在 (2021/11) 最新的主線版本已經來到 5.15 版了喔!好快!
而舊的版本在新的主線版本出現之後,會有兩種機制來處理,一種機制為結束開發 (End of Live, EOL),亦即該程式碼已經結束,不會有繼續維護的狀態。 另外一種機制為保持該版本的持續維護,亦即為長期維護版本 (Longterm)!例如 3.10 即為一個長期維護版本,這個版本的程式碼會被持續維護,若程式碼有 bug 或其他問題, 核心維護者會持續進行程式碼的更新維護喔!
所以囉,如果你想要使用 Linux 核心來開發你的系統,那麼當然要選擇長期支援的版本才行!要判斷你的 Linux 核心是否為長期支援的版本, 可以使用『 uname -r 』來查閱核心版本,然後對照下列連結來了解其對應值喔! 請參閱 : 活躍的內核版本。
關於GNU計畫、自由軟體與開放原始碼
Linux 誕生的基本精神是自由、開放原始碼的軟體,那我們就必需要了解對於整個自由軟體與開放原始碼軟體來說是佔有非常重要的角色的 GNU 計畫。
為什麼要稱為GNU呢?其實GNU是GNU's Not Unix的縮寫,意思是說,GNU並不是Unix啊!另外,什麼是Open Source呢?所謂的source code是程式發展者寫出的原始程式碼, Open Source就是,軟體在發佈時,同時將作者的原始碼一起公布的意思!
自由軟體的活動
1984年創立 GNU 計畫與 FSF 自由軟體基金會(Free Software Foundation) 的 Stallman 史托曼先生認為,寫程式最大的快樂就是讓自己發展的良好的軟體讓大家來使用了! 另外,如果使用方撰寫程式的能力比自己強,那麼當對方修改完自己的程式並且回傳修改後的程式碼給自己,那自己的程式撰寫功力無形中就更往上爬了! 這就是最早之前 AI 實驗室的駭客風格!
而既然程式是想要分享給大家使用的,不過,每個人所使用的電腦軟硬體並不相同, 既然如此的話,那麼該程式的原始碼(Source code)就應該要同時釋出, 這樣才能方便大家修改而適用於每個人的電腦中呢!這個將原始碼連同軟體程式釋出的舉動,在 GNU 計畫的範疇之內就稱為自由軟體(Free Software)運動!
此外,史托曼先生同時認為,如果你將你程式的Source code分享出來時,若該程式是很優秀的,那麼將會有很多人使用, 而每個人對於該程式都可以查閱source code,無形之中,就會有一票人幫你除錯囉! 你的這支程式將會越來越壯大!越來越優秀呢!
自由軟體的版權GNU GPL
到了1985年,為了避免GNU所開發出來的Open source自由軟體被拿去做成專利軟體, 於是史托曼先生同時將GNU與FSF發展出來的軟體,都掛上GPL(General Public License)的版權宣告~ 這個FSF的核心觀念是『版權制度是促進社會進步的手段, 版權本身不是自然權力。』對於FSF有興趣或者對於GNU想要更深入的瞭解時,請參閱 : GNU 官網。
GNU所開發的幾個重要軟體,如:
- Emacs
- GNU C (GCC)
- GNU C Library (glibc)
- Bash shell
造成後來很多的軟體開發者可以藉由這些基礎的工具來進行程式開發! 進一步壯大了自由軟體團體!這是很重要的!不過,對於GNU的最初構想 『建立一個自由的Unix作業系統』來說,有這些優秀的程式是仍無法滿足, 因為,當下並沒有『自由的Unix核心』存在...所以這些軟體仍只能在那些有專利的 Unix平台上工作~~一直到Linux的出現...更多的FSF開發的軟體可以參考如下網頁:https://www.fsf.org/resources。
1991年:芬蘭大學生Linus Torvalds的一則簡訊
到了1991年,芬蘭的赫爾辛基大學的Linus Torvalds在BBS上面貼了一則消息, 宣稱他以bash, gcc等 GNU 的工具寫了一個小小的核心程式,該核心程式單純是個玩具,不像 GNU 那麼專業。 不過該核心程式可以在Intel的386機器上面運作就是了。這讓很多人很感興趣!從此開始了Linux不平凡的路程!
自由(Free)的真諦
那麼這個GPL(General Public License)是什麼玩意兒? 為什麼要將自由軟體掛上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授權~
- 單純販賣:你不能單純的販賣自由軟體。
也就是說,既然GPL是站在互助互利的角度上去開發的,你自然不應該將大家的成果佔為己有, 對吧!因此你當然不可以將一個GPL軟體的授權取消,即使你已經對該軟體進行大幅度的修改! 那麼自由軟體也不能販賣嗎?當然不是!還記得上一個小節裡面, 我們提到史托曼藉由販賣Emacs取得一些經費,讓自己生活不至於匱乏吧?是的! 自由軟體是可以販售的,不過,不可僅販售該軟體,應同時搭配售後服務與相關手冊~ 這些可就需要工本費了呢!
自由軟體與商業行為
很多人還是有疑問,目前不是有很多Linux開發商嗎?為何他們可以販售Linux這個GPL授權的軟體? 原因很簡單,因為他們大多都是販售『售後服務!』所以,他們所使用的自由軟體, 都可以在他們的網站上面下載!(當然,每個廠商他們自己開發的工具軟體就不是GPL的授權軟體了!) 但是,你可以購買他們的Linux光碟,如果你購買了光碟,他們會提供相關的手冊說明文件, 同時也會提供你數年不等的諮詢、售後服務、軟體升級與其他協力工作等等的附加價值!
所以說,目前自由軟體工作者,他們所賴以維生的,幾乎都是在『服務』這個領域呢! 畢竟自由軟體並不是每個人都會撰寫,有人有需要你的自由軟體時,他就會請求你的協助, 此時,你就可以透過服務來收費了!這樣來說, 自由軟體確實還是具有商業空間的喔!
很多人對於GPL授權一直很疑惑,對於GPL的商業行為更是無法接受! 關於這一點,我們在這裡還是要再次的申明,GPL是可以從事商業行為的! 而很多的作者也是藉由這些商業行為來得以取得生活所需,更進一步去發展更優秀的自由軟體! 千萬不要聽到『商業』就排斥!或是要求光碟、客製化、售後服務服務...等一切都免費,這對於發展優良軟體的朋友來說,是不禮貌的!
上面提到的大多是與使用者有關的項目,那麼 GPL 對於自由軟體的作者有何優點呢?大致的優點有這些:
- 軟體安全性較佳;
- 軟體執行效能較佳;
- 軟體除錯時間較短;
- 貢獻的原始碼永遠都存在。
這是因為既然是提供原始碼的自由軟體,那麼你的程式碼將會有很多人幫你查閱, 如此一來,程式的漏洞與程式的優化將會進展的很快!所以,在安全性與效能上面, 自由軟體一點都不輸給商業軟體喔!此外,因為GPL授權當中,修改者並不能修改授權, 因此,你如果曾經貢獻過程式碼,嘿嘿!你將名留青史呢!不錯吧! ^_^
對於程式開發者來說,GPL實在是一個非常好的授權,因為大家可以互相學習對方的程式撰寫技巧, 而且自己寫的程式也有人可以幫忙除錯。那你會問啊,對於我們這些廣大的終端用戶,GPL有沒有什麼好處啊?有啊!當然有! 雖然終端用戶或許不會自己編譯程式碼或者是幫人家除錯,但是終端用戶使用的軟體絕大部分就是GPL的軟體, 全世界有一大票的工程師在幫你維護你的系統,這難道不是一件非常棒的事嗎?
就跟人類社會的科技會進步一樣,授權也會進步喔!因應原始碼分割與重組的問題,與其他開源軟體的授權包容性,以及最重要的數位版權管理 (Digital Rights Management, DRM) 等問題,GPL 目前已經出到第三版 GPLv3。但是,目前使用最廣泛的,還是 GPLv2 喔!包括 Linux 核心就還是使用 GPLv2 的說!
開放原始碼
由於自由軟體使用的英文為 free software,這個 free 在英文是有兩種以上不同的意義,除了自由之外,免費也是這個單字! 因為有這些額外的聯想,因此許多的商業公司對於投入自由軟體方面確實是有些疑慮存在的!許多人對於這個情況總是有些擔心~
為了解決這個困擾,1998 年成立的『開放原始碼促進會 (Open Source Initiative)』提出了開放原始碼 (Open Source,亦可簡稱開源軟體) 這一名詞! 另外,並非軟體可以被讀取原始碼就可以被稱為開源軟體喔!該軟體的授權必須要符合底下的基本需求,才可以算是 open source 的軟體哩!
- 公佈原始碼且用戶具有修改權:用戶可以任意的修改與編譯程式碼,這點與自由軟體差異不大;
- 任意的再散佈:該程式碼全部或部份可以被販售,且程式碼可成為其他軟體的元件之一,作者不該宣稱具有擁有權或收取其他額外費用。
- 必須允許修改或衍生的作品,且可讓再發佈的軟體使用相似的授權來發表即可。
- 承上,用戶可使用與原本軟體不同的名稱或編號來散佈。
- 不可限制某些個人或團體的使用權
- 不可限制某些領域的應用:例如不可限制不能用於商業行為或者是學術行為等特殊領域等等
- 不可限制在某些產品當中,亦即程式碼可以應用於多種不同產品中。
- 不可具有排他條款,例如不可限制本程式碼不能用於教育類的研究中,諸如此類。
另外,Open source 這個名詞只是一個指引,而實際上並不是先有 open source 才有相關的授權。早在 open source 出來之前就有些開源軟體的授權存在了 (例如 GPL 啊!)! 不過有 open source 這個名詞之後,大家才更了解到開源軟體授權的意義就是了。那常見的開放原始碼授權有哪些呢?
- Apache License 2.0
- BSD 3-Clause "New" or "Revised" license
- BSD 2-Clause "Simplified" or "FreeBSD" license
- GNU General Public License (GPL)
- GNU Library or "Lesser" General Public License (LGPL)
- MIT license
- Mozilla Public License 2.0
- Common Development and Distribution License
每個授權詳細的內容也可以參考 OSI 協會的介紹啦!
如前所述,GPL 也是合乎 Open source 所定義的授權之一,只是它更著重於保護自由軟體本身的學習與發展就是了!那如果你想要開發開源軟體時, 到底使用哪種授權比較好呢?其實跟妳對這個軟體的未來走向的定義有關啦!簡單的來說,如果你的軟體未來你允許它用於商業活動中, 可以考慮 BSD 之類的授權,如果你的軟體希望少一些商業色彩,GPLv2 大概是不二選擇囉!那如果你的軟體允許分支開發, 甚至可以考慮分成兩種版本分別授權哩!
專屬軟體/專利軟體 (close source)
相對於Open Source的軟體會釋出原始碼,Close source的程式則僅推出可執行的二進位程式(binary program)而已。 這種軟體的優點是有專人維護,你不需要去更動他;缺點則是靈活度大打折扣,使用者無法變更該程式成為自己想要的樣式! 此外,若有木馬程式或者安全漏洞,將會花上相當長的一段時間來除錯!這也是所謂專利軟體(copyright)常見的軟體出售方式。
雖然專利軟體常常代表就是需要花錢去購買,不過有些專利軟體還是可以『免費』提供大眾使用的!免費的專利軟體代表的授權模式有:
- Freeware:不同於Free software,Freeware為『免費軟體』而非『自由軟體!』雖然它是免費的軟體,但是不見得要公布其原始碼, 端看釋出者的意見囉!這個東西與Open Source畢竟是不太相同的東西喔!此外,目前很多標榜免費軟體的程式很多都有小問題! 例如假藉免費軟體的名義,實施使用者資料竊取的目的! 所以『來路不明的軟體請勿安裝!』
- Shareware:共享軟體這個名詞就有趣了!與免費軟體有點類似的是,Shareware在使用初期,它也是免費的,但是, 到了所謂的『試用期限』之後,你就必須要選擇『付費後繼續使用』或者『將它移除』的宿命~ 通常,這些共享軟體都會自行撰寫失效程式,讓你在試用期限之後就無法使用該軟體。
Linux 的發展-Torvalds
我們前面一節當中,提到了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...... 他知道,他成功了! ^_^
初次釋出Linux 0.02
探索完386的硬體性能之後,終於拿到Minix並且安裝在托瓦茲的386電腦上之後,托瓦茲跟BBS上面一堆工程師一樣, 他發現Minix雖然真的很棒,但是譚寧邦教授就是不願意進行功能的加強,導致一堆工程師在作業系統功能上面的欲求不滿! 這個時候年輕的托瓦茲就想:『既然如此,那我何不自己來改寫一個我想要的作業系統?』 於是他就開始了核心程式的撰寫了。
撰寫程式需要什麼呢?首先需要的是能夠進行工作的環境,再來則是可以將原始碼編譯成為可執行檔的編譯器。 好在有GNU計畫提供的bash工作環境軟體以及gcc編譯器等自由軟體, 讓托瓦茲得以順利的撰寫核心程式。他參考Minix的設計理念與書上的程式碼,然後仔細研究出386個人電腦的效能最佳化, 然後使用GNU的自由軟體將核心程式碼與386緊緊的結合在一起,最終寫出他所需要的核心程式。 而這個小玩意竟然真的可以在386上面順利的跑起來~還可以讀取Minix的檔案系統。 真是太好了!不過還不夠,他希望這個程式可以獲得大家的一些修改建議, 於是他便將這個核心放置在網路上提供大家下載,同時在BBS上面貼了一則消息:
I'm doing a (free) operating system (just a hobby,
won't be big and professional like gnu) for 386(486) AT clones.
I've currently ported bash (1.08) and gcc (1.40),
and things seem to work. This implies that i'll get
something practical within a few months, and I'd like to know
what features most people want. Any suggestions are welcome,
but I won't promise I'll implement them :-)
他說,他完成了一個小小的作業系統,這個核心是用在386機器上的, 同時,他真的僅是好玩,並不是想要做一個跟GNU一樣大的計畫! 另外,他希望能夠得到更多人的建議與回饋來發展這個作業系統!這個概念跟Minix剛好背道而馳呢! 這則新聞引起很多人的注意,他們也去托瓦茲提供的網站上下載了這個核心來安裝。 有趣的是,因為托瓦茲放置核心的那個FTP網站的目錄為:Linux, 從此,大家便稱這個核心為Linux了。(請注意,此時的Linux就是那個kernel喔! 另外,托瓦茲所丟到該目錄下的第一個核心版本為0.02呢!)
同時,為了讓自己的Linux能夠相容於Unix系統,於是托瓦茲開始將一些能夠在Unix上面運作的軟體拿來在Linux上面跑。 不過,他發現到有很多的軟體無法在Linux這個核心上運作。這個時候他有兩種作法, 一種是修改軟體,讓該軟體可以在Linux上跑, 另一種則是修改Linux,讓Linux符合軟體能夠運作的規範! 由於Linux希望能夠相容於Unix,於是托瓦茲選擇了第二個作法『修改Linux』! 為了讓所有的軟體都可以在Linux上執行,於是托瓦茲開始參考標準的POSIX規範。
POSIX是可攜式作業系統介面(Portable Operating System Interface)的縮寫,重點在規範核心與應用程式之間的介面, 這是由美國電器與電子工程師學會(IEEE)所發佈的一項標準喔!
這個正確的決定讓Linux在起步的時候體質就比別人優良~因為POSIX標準主要是針對Unix與一些軟體運行時候的標準規範, 只要依據這些標準規範來設計的核心與軟體,理論上,就可以搭配在一起執行了。 而Linux的發展就是依據這個POSIX的標準規範,Unix上面的軟體也是遵循這個規範來設計的, 如此一來,讓Linux很容易就與Unix相容共享互有的軟體了!同時,因為Linux直接放置在網路下,提供大家下載, 所以在流通的速度上相當的快!導致Linux的使用率大增!這些都是造成Linux大受歡迎的幾個重要因素呢!
其實托瓦茲有意無意之間常常會透露他自己是個只喜歡玩 (Just for Fun) 的怪人!Linux 一開始也只是托瓦茲的一個作業發展出來的玩具而已。 他也說,如果 Minix 或 hurd 這兩個中的任何一個系統可以提早開發出他想要的功能與環境,也許他根本不會想要自己開發一個 Linux 哩! 哇!人類智慧真是沒有極限!各位啊: 1)要先有基礎知識與技能、2)有了第一點後,要勇於挑戰權威、3)把你們的玩具發揚光大吧! ^_^
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版、2011 年釋出 3.0 版,更於 2015 年 4 月釋出了 4.0 版哩! 發展相當迅速喔!此外,托瓦茲指明了企鵝為Linux的吉祥物。
奇怪的是,托瓦茲是因為小時候去動物園被企鵝咬了一口念念不忘, 而正式的2.0推出時,大家要他想一個吉祥物。他在想也想不到什麼動物的情況下, 就將這個念念不忘的企鵝當成了Linux的吉祥物了......
Linux由於托瓦茲是針對386寫的,跟386硬體的相關性很強,所以, 早期的Linux確實是不具有移植性的。不過,大家知道Open source的好處就是, 可以修改程式碼去適合作業的環境。因此,在1994年以後,Linux便被開發到很多的硬體上面去了! 目前除了x86之外,IBM、HP等等公司出的硬體也都有被Linux所支援呢!甚至於小型單板電腦 (樹莓派/香蕉派等) 與手持裝置 (智慧型手機、平板電腦) 的 ARM 架構系統,大多也是使用 Linux 核心喔!
Linux在台灣
當然發行套件者不僅於此。但是值得大書特書的,是中文Linux的延伸計畫:CLE這個套件! 早期的Linux因為是工程師發展的,而這些工程師大多以英文語系的國家為主, 所以Linux對於國人的學習是比較困擾一點。後來由國人發起的CLE計畫, 開發很多的中文套件及翻譯了很多的英文文件,使得我們目前得以使用中文的Linux呢! 另外,目前正在開發中的還有台南縣臥龍小三等老師們發起的眾多自由軟體計畫, 真是造福很多的朋友啊!
- 自由軟體技術交流網: http://freesf.tw/
- B2D: http://b2d-linux.com/
此外,如果只想看看Linux的話,還可以選擇所謂的可光碟開機進入Linux的Live CD版本, 亦即是KNOPPIX這個Linux distributions呢!台灣也有阿里巴巴兄維護的中文Live CD喔!
如果你還想要知道更多的Linux distributions的下載與使用資訊,可以參考:http://distrowatch.com/。
選擇適合你的Linux distribution
那我到底應該要選擇哪一個distributions?就如同我們上面提到的,其實每個distributions差異性並不大! 不過,由於套件管理的方式主要分為Debian的dpkg及Red Hat系統的RPM方式, 目前我們的建議是,先學習以RPM套件管理為主的RHEL/Fedora/SuSE/CentOS等台灣使用者較多的版本, 這樣一來,發生問題時,可以提供解決的管道比較多。如果你已經接觸過Linux了, 還想要探討更嚴謹的Linux版本,那可以考慮使用Debian,如果你是以效能至上來考量, 那麼或許Gentoo是不錯的建議!
總之,版本很多,但是各版本差異其實不大,建議你一定要先選定一個版本後, 先徹頭徹尾的瞭解他,那再繼續玩其他的版本時,就可以很快的進入狀況。
不過,如果依據電腦主機的用途來分的話,在台灣會這樣建議:
- 用於企業環境:建議使用商業版本,例如Red Hat的RHEL或者是SuSE都是很不錯的選擇! 畢竟企業的環境強調的是永續的經營,你可不希望網管人員走了之後整個機房的主機都沒有人管理吧! 由於商業版本都會提供客戶服務,所以可以降低企業的風險喔!
- 用於個人或教學的伺服器環境:要是你的伺服器所在環境如果當機還不會造成太大的問題的話, 加上你的環境是在教學的場合當中時(就是說,唔!經費不足的環境啦!)那麼可以使用『號稱』完全相容商業版RHEL的CentOS。 因為CentOS是抓RHEL的原始碼來重新兜起來的一個Linux distribution,所以號稱相容於RHEL。 這一版的軟體完全與RHEL相同,在改版的幅度較小,適合於伺服器系統的環境;
- 用於個人的桌上型電腦:想要嘗鮮嗎?建議使用很炫的Fedora/Ubuntu等Desktop(桌面環境)使用的版本! 如果不想要安裝Linux的話,那麼Fedora或CentOS也有推出Live CD了!也很容易學習喔!
延伸閱讀►如何學習 Linux
參考資料
特色、摘要,Feature、Summary:
關鍵字、標籤,Keyword、Tag:
- Linux,Ubuntu,
留言
張貼留言
Aron阿龍,謝謝您的留言互動!