Linux 基礎學習篇 - Fedora Core 4

第一章、什麼是 Linux - for Fedora Core 4

要學習 Linux 之前,還是得要瞭解一下 Linux 的相關歷史才行喔!

最近更新時間: 2006/05/31

本文資料主要針對 Fedora Core 4 的系統進行說明, Fedora Core 1 主要是由 Red Hat Linux 9 改版而來, 這個 Red Hat Linux 9 並不是當前大家聽到的 RHEL 喔!那是在 RHEL 出現之前的產品,基本上是在 2003 年以前的作品了!Fedora Core 4 則是在 2005 年 6 月份釋出,使用的核心是 2.6.11 版,當時是很紅的一個作品!只是生命週期太短,所以用這個 Fedora 系列來介紹 Server, 當時的決定確實有點莫名其妙了...

建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 Fedora Core 4 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!

眾所皆知的, Linux 的核心原型是 1991 年由托瓦茲 (Linus Torvalds) 寫出來的, 但是托瓦茲為何可以寫出 Linux 這個作業系統?為什麼他要選擇 386 的電腦來開發? 為什麼 Linux 的發展可以這麼迅速?又為什麼 Linux 是免費的? 以及目前為何有這麼多的 Linux 版本 (distributions) 呢? 瞭解這些東西後,才能夠知道為何 Linux 可以免除專利軟體之爭, 並且瞭解到 Linux 為何可以同時在個人電腦與大型主機上面大放異彩! 所以,在實際進入 Linux 的世界前,就讓我們來談一談這些有趣的歷史故事吧! ^_^

什麼是 Linux ?

Linux 這玩意兒是在電腦上面運作的,所以,當然得要瞭解一下電腦這玩意兒。首先,到底有哪些種類的電腦呢? 而 Linux 可以在哪些種類的電腦上面運作?且 Linux 源自哪裡?這些我們都得來談一談先!

計算機:計算的輔助工具

在目前的都市生活中,您應該很難不接觸到電腦這個玩意兒吧? 這個電腦當初在開發的時候,是希望可以輔助與簡化人們進行大量的運算工作, 後來才發展成為一些特殊用途。無論如何,電腦基本的功能就是: 『接受使用者輸入指令,經由 CPU 的數學與邏輯單元運算處理後, 以產生或儲存成有用的資訊』。為了達成這個功能,當然電腦就必須要有:
  • 輸入單元:例如滑鼠、鍵盤、讀卡機等等
  • 中央處理器(CPU):含有算數邏輯、控制、記憶等單元
  • 輸出單元:例如螢幕、印表機等等
如果您看過電腦的話,那麼上面的東西其實就是組成您電腦的主要元件囉! 而為了連結各個元件,因此有了主機板,所以,您的主機裡面就包含了主機板以及 CPU , 還有各種需要的介面卡。而螢幕、鍵盤、滑鼠則透過與主機的連結,就構成一部可以運作的電腦了。 另外,由於電腦僅認識 0/1 ,因此電腦主要是以二進位的方式來計算的, 因此,通常電腦的記憶/儲存單位都是以 Byte 或 bits 為基本單位。他們的單位是這樣的:
  • 1 Bytes = 8 bits
  • 1 KB = 1024 Bytes
  • 1 MB = 1024 KB
  • 1 GB = 1024 MB
而電腦也因為他的複雜度,而分為數種等級,例如:
  • 超級電腦(Supercomputer):
    超級電腦是運作速度最快的電腦,但是他的維護、操作費用也最高! 主要是用於需要有高速計算的計畫中。例如:國防軍事、氣象預測、太空科技, 用在模擬的領域較多。詳情也可以參考:國家高速網路與計算中心http://www.nchc.org.tw/ 的介紹! 至於全世界的 500 大超級電腦,則請參考:http://www.top500.org/

  • 大型電腦(Mainframe Computer):
    大型電腦通常也具有數個高速的 CPU ,功能上雖不及超級電腦, 但也可用來處理大量資料與複雜的運算。例如大型企業的主機、 全國性的證券交易所等每天需要處理數百萬筆資料的企業機構, 或者是大型企業的資料庫伺服器等等。

  • 迷你電腦(Minicomputer):
    迷你電腦仍保有大型電腦同時支援多使用者的特性,但是主機可以放在一般作業場所, 不必像前兩個大型電腦需要特殊的空調場所。通常用來作為科學研究、 工程分析與工廠的流程管理等。

  • 微電腦(Microcomputer):
    又可以稱為個人電腦,也是我們這本書主要探討的目標!體積最小,價格最低, 但功能還是五臟俱全的!大致又可分為桌上型、筆記型等等。
雖然在目前個人電腦的使用甚為廣泛,但是在 1990 年以前,個人電腦是比較不被重視的! 因為(1)他的運算速度在當時實在很差,而且(2)當時比較有名的作業系統也沒有對個人電腦支援。 所以才會流行不太起來~ 嘿嘿!提到作業系統囉~ 底下我們就來談一談之前的作業系統。

什麼是作業系統

什麼是作業系統 (Operation System, OS) 呢?我們先來想一想, 上面介紹的計算機(電腦)是如何工作的?舉例來說,您電腦螢幕上面顯示的訊息, 是如何顯示出來的呢?嗯!是藉由顯示卡與螢幕顯像的。那麼如果你想要看 VCD 呢? 呵呵,就需要 1.)有影音資料的光碟片、 2.)可讀取光碟片的光碟機、 3.) 可以轉換影音資料輸出的中央處理器 (CPU)、 4.)可以顯示影像的顯示晶片(顯示卡)、 5.) 可以傳輸聲音的音效晶片(音效卡)、 6.)可以輸出影像的螢幕以及 7.)可以發出聲音的喇叭! 也就是說:所有在『工作』的東西都是『硬體』呀! 對啦!就是硬體在工作!

那麼問題來了,現在我們知道,電腦所進行的工作都是電腦硬體幫我們達成的,但是, 為什麼這些硬體知道如何播放 VCD 呢?這當然是因為有某個東西在正確的控制硬體的工作了, 那個咚咚就是: 作業系統 啦! 作業系統可以管理整部電腦的硬體,他可以控制 CPU 進行正確的運算, 他可以分辨硬碟裡頭的資料並進行讀取,他還必須要能夠認識所有的介面卡, 這樣,才能夠將所有的硬體通通正確的使用上啊! 所以,如果沒有這個作業系統,那麼您的電腦就等於是一堆廢鐵而已啊!

雖然作業系統可以完整的掌控所有的硬體資源,但是,對於使用者來說,還是不夠的! 因為作業系統雖然可以掌控所有的硬體,但是,如果使用者無法與作業系統溝通, 那麼這個作業系統就沒有什麼用處了。簡單的來說,以上面的 VCD 為例, 雖然作業系統可以控制硬體播放 VCD ,但是,如果使用者沒有辦法控制何時要播出 VCD 的話, 那麼到底我們要怎麼看 VCD 啊?對吧!

所以說,一個比較『完整的作業系統』應該要包含 兩個東西,一個是『核心與其提供的介面工具』、 一個是『利用核心提供的介面工具所開發出來的軟體』。 我們以大家常使用的 Windows 電腦來做一個簡單的說明好了。大家應該都使用過 Windows 電腦裡面的『檔案總管』吧!當你開啟檔案總管的時候,他就會顯示你硬碟當中的資料, 這個『顯示硬碟裡面的資料,就是核心幫你做的』,但是, 『你要核心去顯示硬碟哪一個目錄下的資料,則是由檔案總管這個工具幫你達成的』! 這樣可以理解嗎?

那麼核心有沒有作不到的事?當然有的,舉例來說, 如果您曾經自行安裝過比較新的顯示卡在您的個人電腦上面, 那麼應該常常會發生 Windows 電腦告知您:『找不到合適的驅動程式來顯示』的問題吧? 也就是說,即使您有最新的顯示卡安裝在您的個人電腦上面,而且也有播放 VCD 的程式, 但是因為『核心』無法操控這個最新的顯示卡,所以,就無法正常的顯示您的 VCD 了。 沒錯!你的整個硬體是由核心來管理的,而如果核心不認識你的硬體, 那麼你將無法使用該硬體設備,例如上面提到的最新的顯示卡。
Tips 鳥哥 在定義上,只要能夠讓電腦硬體正確無誤的運作,那就算是作業系統了。 所以說,作業系統其實就是核心與其提供的介面工具, 不過,就如同上面講的,因為最陽春的核心缺乏了與使用者溝通的親和介面, 所以在目前,一般我們提到的『作業系統』都會包含核心與相關的使用者應用軟體呢!
核心就是『Kernel』, 他是一個作業系統的最底層的東西,由他來掌管整個硬體資源的工作狀態,而 每個作業系統都有自己的核心,所以說, 當有新的硬體加入到你的系統中的時候,若你的『 Kernel 』並沒有支援他的時候,呵呵,這個新的硬體就肯定無法工作的,因為控制他的 Kernel 並不認識他呀!這樣瞭解了嗎?!先有個概略性的瞭解, 後面我們提到『核心編譯』的時候會再更詳細的談到他!

一般來說,Kernel 為了達成使用者所需要的正確運算結果,他必須要管理的事項有:
  • 系統呼叫介面(System call interface) : 為了方便程式開發者可以輕易的透過與 kernel 的溝通,將硬體的資源進一步的利用, 於是需要有這個簡易的介面來方便程式開發者。
  • 行程管理(Process control) : 總有聽過所謂的『多工環境』吧?一部電腦可能同時間有很多的工作跑到 CPU 等待運算處理, Kernel 這個時候必須要能夠控制這些工作,讓 CPU 的資源作有效的分配才行!
  • 記憶體管理(Memory management) : 控制整個系統的記憶體管理,若記憶體不足, Kernel 最好還能夠提供虛擬記憶體的功能!
  • 檔案系統管理(File system management) : 檔案系統的管理,例如資料的輸入輸出 (I/O) 等等的工作啦! 還有不同檔案格式的支援啦等等,如果你的核心不認識某個檔案系統, 那麼您將無法使用該檔案格式的檔案囉!例如: Windows 98 就不認識 NTFS 檔案格式的硬碟;
  • 裝置的驅動(Device drivers) : 就如同上面提到的,硬體的管理是 Kernel 的主要工作之一,當然囉,裝置的驅動程式就是核心需要做的事情啦! 好在目前都有所謂的『可載入模組』功能,可以將驅動程式編輯成模組, 就不需要重新的編譯核心啦!這個也會在後續的核心編譯當中提到的!
所以啦!所有硬體的資源都是 kernel 來管理的!至於我們要達成一些工作時,除了藉由核心本身提供的功能 ( 例如上面提到的檔案總管 ) 之外,還可以藉由其他的應用軟體來達成喔!舉個例子來說,你要看 VCD 影片是吧!那麼除了 Windows 提供的媒體播放程式之外,你也可以自行安裝 VCD 播放程式來播放 VCD 囉!這個播放程式就是應用軟體囉,而這個應用軟體可以幫你去控制核心來工作 ( 就是放映影片囉 ) ,因此,我們可以這樣說, 核心是控制整個硬體支援的咚咚,也是一個作業系統的最底層, 然而要讓整個作業系統更完備的話,那還需要含有相當豐富的核心提供的工具, 以及核心相關的應用軟體來支援

OK!提到這裡那麼您知道 Linux 是什麼了嗎?呵呵!對啦!其實 Linux 就是一個作業系統,這個作業系統裡頭含有最主要的 kernel 以及 kernel 提供的工具啦!他提供了一個完整的作業系統當中最底層的硬體控制與資源管理的完整架構, 這個架構是沿襲 Unix 良好的傳統來的,所以相當的穩定而功能強大!此外, 由於這個優良的架構可以在目前的個人電腦( X86 系統 ) 上面跑, 所以很多的軟體開發者將他們的工作心血移轉到這個架構上面,那就是很多的應用軟體啦! 雖然 Linux 僅是其核心與核心提供的工具, 不過,由於核心、核心工具與這些軟體開發者提供的軟體的整合,使得 Linux 成為一個更完整的、功能強大的作業系統囉!我們可以將 Linux 的系統與使用者的相關性看成底下的圖示:
使用者、使用者介面>與核心工具、核心及硬體之相關性
圖一、使用者、使用者介面與核心工具、核心、與硬體之相關性

約略瞭解 Linux 是何物之後,接下來,我們要談一談,『為什麼說 Linux 是很穩定的作業系統呢?他是如何來的?
Tips 鳥哥 Torvalds 先生在寫出 Linux 的時候,其實該核心僅能『驅動 386 所有的硬體』而已, 所謂的『讓 386 電腦開始運作,並且等待使用者指令輸入』而已,事實上, 當時能夠在 Linux 上面跑得軟體還很少呢!
Tips 鳥哥 由上面的說明中,我們知道硬體是由『核心』來控制的,而每種作業系統都有他自己的核心。 這就產生了一個很大的問題,因為早期硬體的開發者所開發的硬體架構或多或少都不相同, 舉例來說,2006年以前的蘋果電腦公司是請 IBM 公司幫忙開發硬體 (所謂的 power CPU), 而蘋果電腦公司則在該硬體架構上發展自家的作業系統(就是俗稱的麥金塔, MAC 是也)。 Windows 則是開發在 x86 架構上的作業系統之一。

那麼 Windows 是否可以在蘋果電腦的硬體上面跑?答案是『不行』的!不過,在 2006 年以後, 蘋果電腦轉而請 Intel 設計其硬體架構,亦即其硬體架構已經轉為 x86 系統,因此在 2006 年以後的蘋果電腦若使用 x86 架構時,其硬體則『可能』可以安裝 Windows 作業系統了。 不過,您可能需要自己想些方式來處理該硬體的相容性囉!
Tips 鳥哥 因為 Windows 作業系統本來就是針對個人電腦 x86 架構的硬體去設計的,所以他當然只能在 x86 的個人電腦上面運作,在不同的平台,當然就無法運行了。也就是說, 每種作業系統都是在他專門的機器上面運行的喔!這點得要先瞭解。 不過, Linux 由於是 Open Source 的作業系統,所以他的程式碼可以被修改成適合在各種機器上面運行的, 也就是說, Linux 是具有『可移植性』,這可是很重要的一個功能喔! ^_^

Linux 之前, Unix 的歷史

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

  • 1969 年以前:一個沒有完成的夢想: Bell, MIT 與 GE 的『 Multics』系統
      早期的電腦並不像現在的個人電腦一樣,他可不是一般人碰的起的呢~ 除非是軍事或者是高科技用途,或者是學術單位的學術研究,否則,真的很難接觸到。 非但如此,早期的電腦架構還很難使用,除了運算速度並不快之外,操作介面也很困擾的! 在那個時候,寫程式是件很可憐的事情,因為,程式設計者,必須要將程式相關的資訊在讀卡紙上面打洞, 然後再將讀卡紙插入讀卡機來將資訊讀入主機中運算。光是這樣就很麻煩了,如果程式有個小地方寫錯, 哈哈!光是重新打卡就很慘,加上主機少,使用者眾多,光是等待,就耗去很多的時間了!

      在之後,經由作業系統的改良,使得後來可以使用鍵盤來進行資訊的輸入/輸出。 不過,在一間學校裡面,主機畢竟可能只有一部,如果多人等待使用,那怎麼辦? 好在 1960 年代初期麻省理工學院 (MIT) 發展了所謂的: 『相容分時系統( Compatible Time-Sharing System, CTSS )』, 它可以讓大型主機透過提供數個終端機(terminal)以連線進入主機,來利用主機的資源進行運算工作。 架構有點像這樣:
      早期主機與終端機的相關性圖示
      圖二、早期主機與終端機的相關性圖示

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

      為了更加強化大型主機的系統,以讓主機的資源可以提供更多使用者來利用,所以在 1965 年前後, 由貝爾實驗室 (Bell)、麻省理工學院 (MIT) 及奇異公司 (GE) 共同發起了 Multics 的計畫, Multics 目的是想要讓大型主機可以達成提供 300 個以上的終端機連線使用的目標。 不過,到了 1969 年前後,計畫進度落後,資金也短缺,所以該計畫就宣告不治.....喔!是宣告失敗~ (註: 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 。 Thompson 的這個檔案系統有兩個重要的概念,分別是:

      • 所有的程式或系統裝置都是檔案
      • 不管建構編輯器還是附屬檔案,所寫的程式只有一個目的,且要有效的完成目標。

      這些概念在後來對於 Linux 的發展有相當重要的影響喔!
  • 1973 年: Unix 的正式誕生,Ritchie 等人以 C 語言寫出第一個正式 Unix 核心
      由於 Thompson 寫的那個作業系統實在太好用了,所以在貝爾實驗室內部廣為流傳,並且數度經過改版。 但是,比較重要的改版則發生在 1973 年。Unix 本來是以組譯語言寫成的,後來因為系統移植與效能的需求, 該系統被 B 語言所改寫。不過,效能依舊不是很好。後來, Dennis Ritchie 將 B 語言重新改寫成 C 語言,C 語言算是比較高階的程式語言,可以在不同的機器上面運作, 而 Ritchie 等人也同時將原本 Thompson 的那個作業系統重新以 C 語言改寫, 最後發行出 Unix 的正式版本!

      在這個時候需要特別注意的是,貝爾實驗室是隸屬於 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 作業系統的出現 ( 由於 Unix 強調的是多人多工的環境,但早期的 x86 個人電腦架構下的 CPU 是沒有能力達到多工的作業,因此,並沒有人對移植 Unix 到 x86 的電腦上有興趣 )。 每一家公司自己出的 Unix 雖然在架構上面大同小異,但是卻真的僅能支援自身的硬體, 所以囉,早先的 Unix 只能與伺服器 ( Server ) 或者是大型工作站 ( Workstation ) 劃上等號

      但是這個高度開放的 Unix 系統在 1979 年有了重大的轉折~ 因為 AT&T 由於商業的考量,以及在當時現實環境下的思考,於是將想 Unix 的版權收回去, 因此,在 AT&T 在 1979 年發行的第七版 Unix 中,特別提到了 『不可對學生提供原始碼』的嚴格限制! 同時,也造成 Unix 業界之間的緊張氣氛,並且也引爆了很多的商業糾紛~
  • 1984 年之一: x86 架構的 Minix 誕生
      關於 1979 年的版權聲明中,影響最大的當然就是學校教 Unix 相關學問的教授了! 想一想,如果沒有核心原始碼,那麼如何教導學生認識 Unix 呢? 這問題對於 Andrew Tanenbaum (譚寧邦)教授來說,實在是很傷腦筋的! 不過,學校的課程還是得繼續啊!那怎麼辦?? 既然 1979 年的 Unix 第七版可以在 Intel 的 x86 架構上面進行移植, 那麼是否意味著可以將 Unix 改寫並移植到 x86 上面了呢?在這個想法上, 譚寧邦教授於是乎自己動手寫了 Minix 這個 Unix Like 的核心程式! 在撰寫的過程中,為了避免版權糾紛,譚寧邦完全不看 Unix 核心原始碼! 並且強調他的 Minix 必須能夠與 Unix 相容才行!譚寧邦在 1984 年開始撰寫核心程式, 到了 1986 年終於完成,並於次年出版 Minix 相關書籍,同時與新聞群組相結合~

      這個 Minix 版本比較有趣的地方是,他並不是完全免費的,無法在網路上提供下載! 必須要透過磁片/磁帶購買才行!雖然真的很便宜~不過,畢竟因為沒有在網路上流傳, 所以 Minix 的傳遞速度並沒有很快速!此外,購買時,隨磁片還會附上 Minix 的原始碼! 這意味著使用者可以學習 Minix 的核心程式設計概念喔! (這個特色對於 Linux 的啟始開發階段,可是有很大的關係喔!) 此外,開發者僅有譚寧邦教授,因為學者很忙啊!加上譚寧邦始終認為 Minix 主要用在教育用途上面, 所以對於 Minix 是點到為止!所以, Minix 很受歡迎沒錯, 不過,使用者的要求/需求的聲音可能就比較沒有辦法上升到比較高的地方了! 這樣說,您明白吧??? ^_^
  • 1984 年之二: GNU 與 FSF 計畫的成立
      Richard Mathew Stallman (史托曼) 在 1984 年發起的 GNU 計畫,對於現今的自由軟體風潮, 真有不可磨滅的地位!目前我們所使用得很多自由軟體,幾乎均直接或間接助益於 GNU 這個計畫呢! 那麼史托曼是何許人也?為何他會發起這個 GNU 計畫呢?

      Richard Mathew Stallman (生於 1953 年, 網路上自稱的 ID 為 RMS) 從小就很聰明!他在 1971 年的時候,進入駭客圈中相當出名的人工智慧實驗室(AI Lab.), 這個時候的駭客專指電腦功力很強的人,而非破壞電腦的怪客 (cracker) 喔! 當時的駭客圈對於軟體的著眼點幾乎都是在『分享』,所以並沒有專利方面的困擾! 這個特色對於史托曼的影響很大!不過,後來由於管理階層的問題,導致實驗室的優秀駭客離開該實驗室, 並且進入其他商業公司繼續發展優秀的軟體。但史托曼並不服輸,仍然持續在原來的實驗室開發新的程式與軟體。 後來,他發現到,自己一個人並無法完成所有的工作,於是想要成立一個開放的團體來共同努力!

      1983 年以後,因為實驗室硬體的更換,使得史托曼無法繼續以原有的硬體與作業系統繼續自由程式的撰寫~ 而且他進一步發現到,過去他所使用的 Lisp 作業系統,是麻省理工學院的專利軟體, 是無法共享的,這對於想要成立一個開放團體的史托曼是個阻礙。於是他便放棄了 Lisp 這個系統。 後來,他接觸到 Unix 這個系統,並且發現, Unix 在理論與實際上,都可以在不同的機器間進行移植。 於是他開始轉而使用 Unix 系統。因為 Lisp 與 Unix 是不同的系統, 所以,他原本已經撰寫完畢的軟體是無法在 Unix 上面運行的!為此, 他就開始將軟體移植到 Unix 上面。並且,為了讓軟體可以在不同的平台上運作, 因此,史托曼將他發展的軟體均撰寫成可以移植的型態!

      1984 年,史托曼開始 GNU 計畫,這個計畫的目的是想要: 建立一個自由的開放的 Unix 作業系統。 但是建立一個作業系統談何容易啊!而且在當時的 GNU 是僅有自己一個人單打獨鬥的史托曼~ 這實在太麻煩,但又不能不做這個計畫,於是史托曼反其道而行~『既然作業系統太複雜, 我就先寫可以在 Unix 上面運行的小程式,這總可以了吧?呵呵!』在這個想法上, 史托曼便開始了程式的寫作。在寫作期間,為了不讓自己吃上官司,他絕對不看專利軟體的原始碼! 為了這個計畫,他開始使用原本 Unix 上面跑的軟體, 並自行撰寫功能與 Unix 原有專利軟體相仿的軟體。

      但不論是什麼軟體,都得要進行編譯成為二進位檔案(binary file)後才能夠執行, 因此他便開始撰寫 C 語言的編譯器,那就是現在相當有名的 GNU C (gcc)! 這個點相當的重要!這是因為 C 語言編譯器版本眾多,但都是專利軟體, 如果他寫的 C 編譯器夠棒,效能夠佳,那麼將會大大的讓 GNU 計畫出現在眾人眼前!
      Tips 鳥哥 我們在前面稍微提過,電腦僅認識 0/1 的資料,但是人類不認識啊! 人類對於純文字的資料(就是所謂的 ASCII 檔案格式)比較有感覺。 但是偏偏電腦又不認識 ASCII 格式的文字,很頭痛,不是嗎? 為此,就會有很多的所謂的『編譯器』來輔助我們撰寫程式。 我們一般使用文字編輯器以 ASCII 純文字格式來撰寫程式, 再透過所謂的『編譯器(compiler)』』將剛剛完成的文字檔案 『編譯』成為電腦認識的二進位制(binary file)的檔案, 以讓電腦認識且可以執行的程式啊!
      但開始時並不順利,為此,他先轉而將 Emacs 編輯器寫成可以在 Unix 上面跑得軟體, 並公開公布原始碼,因為 Emacs 太優秀了,因此,很多人便直接向他購買。此時 Internet 尚未流行, 所以,史托曼便藉著 Emacs 以磁帶(tape)出售,賺了一點錢 ,進而開始全力撰寫其他軟體。並且成立 自由軟體基金會 (FSF, Free Software Foundation),請更多工程師與志工撰寫軟體。 終於還是完成了 GCC,這比 Emacs 還更有幫助! 此外,他還撰寫了更多可以被呼叫的 C 函式庫(GNU C library), 以及可以被使用來操作作業系統的基本介面 BASH shell ! 這些都在 1990 年左右完成了!
      Tips 鳥哥 如果純粹使用文字編輯器來編輯程式的話,那麼程式語法如果寫錯時, 只能利用編譯時發生的錯誤訊息來修訂了,這樣實在很沒有效率。 Emacs 則是一個很棒的編輯器!注意!是編輯(editor)而非編譯(compiler)! 他可以很快的立刻顯示出您寫入的語法可能有錯誤的地方,這對於程式設計師來說, 實在是一個好到不能再好的工具了!所以才會這麼的受到歡迎啊!
      到了 1985 年,為了避免 GNU 所開發的自由軟體被其他人所利用而成為專利軟體, 所以他與律師草擬了有名的通用公共許可證 (General Public License, GPL), 並且稱呼他為 copyleft (相對於專利軟體的 copyright!)。 關於 GPL 的相關內容我們在下一個小節繼續談論,在這裡,必須要說明的是, 由於有 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 作業系統當中!
      Tips 鳥哥 為什麼稱圖形使用者介面為 X 呢?因為由英文單字來看, Window 的 W 接的就是 X 啦!意指 Window 的下一版就是了! 需注意的是, X Window 並不是 X Windows 喔!
  • 1991 年: 芬蘭大學生 Linus Torvalds 的一則簡訊
      到了 1991 年,芬蘭的赫爾辛基大學的 Linus Torvalds 在 BBS 上面貼了一則消息, 宣稱他以 bash, gcc 等工具寫了一個小小的核心程式,這個核心程式可以在 Intel 的 386 機器上面運作,讓很多人很感興趣!從此開始了 Linux 不平凡的路程!
  • 關於 GNU 計畫

    1984 年創立 GNU 計畫與 FSF 基金會的 Stallman 先生認為, 寫程式最大的快樂就是讓自己發展的良好的軟體讓大家來使用了! 而既然程式是想要分享給大家使用的,不過,每個人所使用的電腦軟硬體並不相同, 既然如此的話,那麼該程式的原始碼 (Source code) 就應該要同時釋出, 這樣才能方便大家修改而適用於每個人的電腦中呢!這個將原始碼釋出的舉動, 就稱為 Open Source !此外,史托曼同時認為,如果您將您程式的 Source code 分享出來時,若該程式是很優秀的,那麼將會有很多人使用, 而每個人對於該程式都可以查閱 source code ,無形之中,就會有一票人幫您除錯囉! 您的這支程式將會越來越壯大!越來越優秀呢!

    而為了避免自己的開發出來的 Open source 的自由軟體被拿去做成專利軟體, 於是 Stallman 同時將 GNU 與 FSF 發展出來的軟體,都掛上 GPL 的版權宣告~ 這個 FSF 的核心觀念是『版權制度是促進社會進步的手段, 版權本身不是自然權力。』對於 FSF 有興趣或者對於 GNU 想要更深入的瞭解時,請參考樹德大學的洪朝貴教授的網站 http://saturn.stu.edu.tw/~ckhung/a/c_83.php,或直接到 GNU 去: http://www.gnu.org 裡面有更為深入的解說!
    Tips 鳥哥 為什麼要稱為 GNU 呢?其實 GNU 是 GNU's Not Unix 的縮寫, 意思是說, GNU 並不是 Unix 啊!那麼 GNU 又是什麼呢? 就是 GNU's Not Unix 嘛!.....如果您寫過程式, 就會知道,這個 GNU = GNU's Not Unix 可是無窮迴圈啊!忙碌~

    另外,什麼是 Open Source 呢?所謂的 source 是程式發展者寫出的原始程式碼, Open Source 就是,軟體在發佈時,同時將作者的原始碼一起公布的意思!
    那麼這個 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 授權~
    • 單純販賣:您不能單純的販賣自由軟體。
    也就是說,既然 GPL 是站在互助互利的角度上去開發的,您自然不應該將大家的成果佔為己有, 而取消 GPL 授權的!對吧!因此您當然不可以將一個 GPL 軟體的授權取消, 即使您已經對該軟體進行大幅度的修改!那麼自由軟體也不能販賣嗎?當然不是!還記得上一個小節裡面, 我們提到史托曼藉由販賣 Emacs 取得一些經費,讓自己生活不至於匱乏吧??是的! 自由軟體是可以販售的,不過,不可僅販售該軟體,應同時搭配售後服務與相關手冊~ 這些可就需要工本費了呢!

    很多人還是有疑問,目前不是有很多 Linux 開發商嗎?為何他們可以販售 Linux 這個 GPL 授權的軟體? 原因很簡單,因為他們大多都是販售『售後服務!』所以,他們所使用的自由軟體, 都可以在他們的網站上面下載!(當然,每個廠商他們自己開發的工具軟體就不是 GPL 的授權軟體了!) 但是,您可以購買他們的 Linux 光碟,如果您購買了光碟,他們會提供相關的手冊說明文件, 同時也會提供您數年不等的諮詢、售後服務、軟體升級與其他協力工作等等的附加價值! 所以說,目前自由軟體工作者,他們所賴以維生的,幾乎都是在『服務』這個領域呢! 畢竟自由軟體並不是每個人都會撰寫,有人有需要您的自由軟體時,他就會請求您的協助, 此時,您就可以透過服務來收費了!這樣來說, 自由軟體確實還是具有商業空間的喔!

    Tips 鳥哥 很多人對於 GPL 授權一直很疑惑,對於 GPL 的商業行為更是無法接受! 關於這一點,鳥哥在這裡還是要再次的申明, GPL 是可以從事商業行為的! 而很多的作者也是藉由這些商業行為來得以取得生活所需,更進一步去發展更優秀的自由軟體! 千萬不要聽到『商業』就排斥!這對於發展優良軟體的朋友來說,是不禮貌的!
    上面提到的大多是與使用者有關的項目,那麼 GPL 對於自由軟體的作者有何優點呢? 大致的優點有這些:
    • 軟體安全性較佳;
    • 軟體執行效能較佳;
    • 軟體除錯時間較短;
    • 貢獻的原始碼遠永都存在。
    這是因為既然是 Open Source 的自由軟體,那麼您的程式碼將會有很多人幫您查閱, 如此一來,程式的漏洞與程式的優化將會進展的很快!所以,在安全性與效能上面, 自由軟體一點都不輸給商業軟體喔!此外,因為 GPL 授權當中,修改者並不能修改授權, 因此,您如果曾經貢獻過程式碼,嘿嘿!您將名留青史呢!不錯吧! ^_^

    不過,就鳥哥的觀點來看, GPL 對於程式開發者的優點是相當多的,不過, 對於不熟悉程式的一般人來說, GPL 的優點其實不太容易看出來~ 首先,雖然他是隨手可得的自由軟體,不過,您也必須要會使用基本的編譯器才行吧! (呵呵!這也是您為何要買這本書/察看鳥哥的網站的原因吧! ^_^) 這對於一般人來說並不容易!當然啦,如果每個人都跟 Stallman 一樣神,那商業公司就不用存在啦! 嘿嘿!對於不懂程式的人來說,商業公司是一個很快速的解決之道啊! 而對於我們廣大的讀者群來說,認識了/學習了 Linux 與自由軟體的相關技巧後, 對於未來真的是有很不錯的幫助喔!

    Torvalds 的 Linux 發展

    我們前面一節當中,提到了 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 就會自動在不同的工作間切換~ 亦即我先跑 10% 的電子試算表,再轉到文書處理器跑 10% ,再回去電子試算表.... 一直到將兩個工作結束為止(不一定同時結束!如果某個工作先結束了, CPU 就會全速去跑剩下的那個工作了!)
    Tips 鳥哥 為什麼有的時候我同時開兩個檔案(假設為 A, B 檔案)所花的時間, 要比開完 A 再去開 B 檔案的時間還要多?現在是否稍微可以理解? 因為如果同時開啟的話, CPU 就必須要在兩個工作之間不停的切換~ 而切換的動作還是會耗去一些 CPU 時間的!所以囉,同時啟用兩個以上的工作在一個 CPU 上, 要比一個一個的執行還要耗時一點。這也是為何現在 CPU 開發商要整合兩個 CPU 於一個晶片中! 也是為何在運作情況比較複雜的伺服器上,需要比較多的 CPU 負責的原因!
    早期 Intel 的 x86 架構電腦不是很受重視的原因,就是因為 x86 的晶片對於多工的處理不佳, CPU 在不同的工作之間切換不是很順暢。但是這個情況在 386 電腦推出後, 有很大的改善。托瓦茲在得知新的 386 晶片的相關資訊後,他認為, 以價格性能比的觀點來看, Intel 的 386 便宜而且性能上也就稍微可以將就將就 ^_^。 所以他就貸款去買了一部 Intel 的 386 來玩。

    前面提到,托瓦茲是玩組合語言的,組合語言對於硬體有很密切的關係, 為了徹底發揮 386 的效能,於是托瓦茲花了不少時間在測試 386 機器上! 他的重要測試就是在測試 386 的多功效能上。首先,他寫了兩個小程式, 一個程式會持續輸出 A ,另一個會持續輸出 B,他將兩個程式同時執行, 結果,他看到螢幕上很順利的一直出現 ABABABAB...... 他知道,他成功了! ^_^
    Tips 鳥哥 要達到多工(multitasking)的環境,除了硬體(主要是 CPU)需要能夠具有多工的特性外, 作業系統也需要支援這個功能喔!一些不具有多工特性的作業系統, 想要同時執行兩個程式是不可能的。除非先被執行的程式執行完畢,否則, 後面的程式不可能被主動執行。至於多工的作業系統中,每個程式被執行時, 都會有一個最大 CPU 使用時間,若該工作運作的時間超過這個 CPU 使用時間時, 該工作就會先被丟出 CPU 的運作中,而再度的進入核心工作排程中,等待下一次的 CPU 運作。 這有點像在開記者會啦,主持人(CPU)會問『誰要發問』?一群記者(工作程式) 就會舉手(看誰的工作重要!),先舉手的自然就被允許發問,問完之後, 主持人又會問一次誰要發問,當然,所有人(包括剛剛那個記者)都可以舉手! 如此一次一次的將工作給他完成啊! ^_^ 多工的環境對於複雜的工作情況,幫助很大喔!

    初次釋出 Linux 0.02

    探索完了 386 的硬體相關資訊,並且也安裝了類似 Unix 的 Minix 作業系統, 同時還取得 Minix 的原始碼,接下來,托瓦茲幹嘛去了?? 因為 Minix 的發展控制在譚寧邦教授手上,他希望 Minix 能以教育的立場去發展, 所以對於 Minix 的開發並不是十分的熱中,但是一堆人對於 Minix 的功能需求又很強烈, 例如一些介面與周邊的驅動程式與新的協定等等。在無法快速的得到解決後, 托瓦茲就想,那我乾脆自己寫一個更適合我自己用的 Minix 好了! 於是他就開始進行核心程式的撰寫了。

    對於托瓦茲來說, GNU 真的是一個不可多得的好傢伙~ 因為他用來撰寫屬於自己小核心的工具,就是 GNU 的 bash 操作介面與 gcc 編譯器等等自由軟體。 他以 GNU 的軟體針對 386 並參考 Minix 的設計理念(注意,僅是程式設計理念, 並沒有使用 Minix 的原始碼)來寫這個小核心。喝!沒想到竟然可以寫出這個小玩意, 而這個小玩意竟然可以在 386 上面順利的跑起來~還可以讀取 Minix 的檔案系統。 真是太好了!不過還不夠,他希望這個程式可以獲得大家的一些修改建議, 於是他便將這個核心放置在網路上提供大家下載,同時在 BBS 上面貼了一則消息:
    Hello everybody out there using minix-
    I'm doing a (free) operation system (just a hobby,
    won't be big and professional like gnu) for 386(486) AT clones.
    
    他說,他完成了一個好玩的小核心作業系統,這個核心是用在 386 機器上的, 同時,他真的僅是好玩,並不是想要做一個跟 GNU 一樣大的計畫!這則新聞引起很多人的注意, 他們也去托瓦茲提供的網站上下載了這個核心來安裝。 有趣的是,因為托瓦茲放置核心的那個 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 核心放置在 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 版, 同時因應商業版本的需求, 於是開始將核心版本以測試版及穩定版同時開發, 次版本偶數為穩定版,奇數為開發中的測試版。 例如 2.6 與 2.5 版為相同的版本,不過, 2.6 為穩定版, 2.5 則為測試版。 測試版含有較多的功能,不過,穩定性可不敢說~ 並且托瓦茲指明了企鵝為 Linux 的吉祥物。
    Tips 鳥哥 奇怪的是,托瓦茲是因為小時候去動物園被企鵝咬了一口念念不忘, 而正式的 2.0 推出時,大家要他想一個吉祥物。他在想也想不到什麼動物的情況下, 就將這個念念不忘的企鵝當成了 Linux 的吉祥物了......

    Linux 由於托瓦茲是針對 386 寫的,跟 386 硬體的相關性很強,所以, 早期的 Linux 確實是不具有移植性的。不過,大家知道 Open source 的好處就是, 可以修改程式碼去適合作業的環境。因此,在 1994 年以後, Linux 便被開發到很多的硬體上面去了! 目前除了 x86 之外, IBM、HP、Sun 等等公司出的硬體也都有被 Linux 所支援呢!

    Linux distributions

    好了,經過上面的說明,我們知道了 Linux 其實就是一個作業系統最底層的核心及其提供的核心工具。 他是 GNU 授權模式,所以,任何人均可取得原始碼與可執行這個核心程式,並且可以修改。 此外,因為 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 ) 與可運行的軟體整合起來,加上自己具有創意的工具程式, 這個工具程式可以讓使用者以光碟或者透過網路直接安裝/管理 Linux 系統。 這個 Kernel + Softwares + Tools 的可完整安裝的咚咚,我們稱之為 Linux distribution , 一般中文翻譯成 可完整安裝套件,或者安裝套件等等。
    Tips 鳥哥 由於 Linux 核心是由駭客工程師寫的,要由原始碼安裝到 x86 電腦上面成為可以執行的 binary 檔案, 這個過程可不是人人都會的~所以早期確實只有工程師對 Linux 有興趣。 一直到一些社群與商業公司將 Linux 核心配合自由軟體,並提供完整的安裝程序, 且製成光碟後,對於一般使用者來說, Linux 才越來越具有吸引力! 因為只要一直『下一步』就可以將 Linux 安裝完成啊! ^_^
    我們前面說過, GNU 的 GPL 授權並非不能從事商業行為,於是很多商業公司便成立來販售 Linux distribution。而由於 Linux 的 GPL 版權宣告,因此,商業公司所販售的 Linux distributions 通常也都可以從 Internet 上面來下載的!此外,如果您想要其他商業公司的服務, 那麼直接向該公司購買光碟來安裝,也是一個很不錯的方式的!

    不過,由於發展 Linux distributions 的公司實在太多了,例如有名的 Red Hat, Mandriva, Debian, SuSE 等等,所以很多人都很擔心,如此一來每個 distribution 是否都不相同呢?這就不需要擔心了,因為每個 Linux distributions 使用的 kernel 都是 http://www.kernel.org 所釋出的,而他們所選擇的軟體,幾乎都是目前很知名的軟體,重複性相當的高, 例如 WWW 伺服器的 Apache , Mail 伺服器的 Postfix/sendmail ,File 伺服器的 Samba 等等。

    此外,為了讓所有的 Linux distributions 開發不致於差異太大,還有 Linux Standard Base (LSB) 來規範開發者,以及目錄架構的 File system Hierarchy Standard (FHS) 規範! 唯一差別的,可能就是該開發者自家所開發出來的管理工具,以及套件管理的模式吧! 所以說,基本上,每個 Linux distributions 除了架構的嚴謹度與選擇的套件內容外, 其實差異並不太大啦! ^_^ 。大家可以選擇自己喜好的 distribution 來安裝即可!

    底下列出幾個主要的 Linux distributions 發行者網址: 當然發行套件者不僅於此,您可以查閱其他的 Linux 新聞來發現喔! 但是值得大書特書的,是中文 Linux 的延伸計畫: CLE 這個套件! 早期的 Linux 因為是工程師發展的,而這些工程師大多以英文語系的國家為主, 所以, Linux 對於國人的學習是比較困擾一點。後來由國人發起的 CLE 計畫: http://cle.linux.org.tw/ 開發很多的中文套件級翻譯了很多的英文文件,使得我們目前得以使用中文的 Linux 呢! 另外,目前正在開發中的還有台南縣臥龍小三等老師們發起的眾多自由軟體計畫, 真是造福很多的朋友啊! 此外,如果只想看看 Linux 的話,還可以選擇所謂的可光碟開機進入 Linux 的 Live CD 版本, 亦即是 KNOPPIX 這個 Linux distributions 呢!台灣也有阿里巴巴兄維護的中文 Live CD 喔!
    Tips 鳥哥 對於沒有額外的硬碟或者是沒有額外的主機的朋友來說, KNOPPIX 這個可以利用光碟開機而進入 Linux 作業系統的 Live CD 真的是一個不錯的選擇!您只要下載了 KNOPPIX 的映象檔,然後將他燒錄成為 CD, 放入您主機的光碟機,並設定光碟為第一個開機選項, 就可以使用 Linux 系統了呢!
    如果您還想要知道更多的 Linux distributions 的下載與使用資訊,可以參考: 那我到底應該要選擇哪一個 distributions ?就如同我們上面提到的,其實每個 distributions 差異性並不大! 不過,由於套件管理的方式主要分為 Debian 的 pkg 及 Red Hat 系統的 RPM 方式, 目前鳥哥的建議是,先學習以 RPM 套件管理為主的 Fedora/SuSE/Mandriva 等台灣使用者較多的版本, 這樣一來,發生問題時,可以提供解決的管道比較多。如果您已經接觸過 Linux 了, 還想要更嚴謹的 Linux 版本,那可以考慮使用 Debian ,如果您是以效能至上來考量, 那麼或許 Gentoo 是不錯的建議! 總之,版本很多,但是各版本差異其實不大,建議您一定要先選定一個版本後, 先徹頭徹尾的瞭解他,那再繼續玩其他的版本時,就可以很快的進入狀況。 鳥哥的書/網站僅提供一個版本,不過是以比較基礎的方式來介紹的, 因此,如果能夠熟練這本書/網站的話,呵呵!哪一個 distributions 對您來說,都不成問題啦!

    Linux 的特色

    Linux 是 Torvalds 先生所開發出來的,基於 GPL 的版權宣告之下, 可以在 x86 的架構下運作,也可以被移植到其他的大型主機上面。 由於開發的相關理念與相容的問題,因此,我們也可以稱 Linux 為 Unix Like 作業系統的一種。
    Tips 鳥哥 其實 Unix-Like 可以說是目前伺服器類型的作業系統的統稱啦! 因為,不論是 FreeBSD, BSD, Sun Unix, HP Unix, Red Hat Linux, Mandrake Linux 等等,都是由同一個祖先 Thompson 所寫的『Unix』來的, 因此,這些咚咚都被統稱為 Unix-Like 的作業系統囉!

    Linux 的特色

    那麼這個系統有什麼特異功能呢?簡單的說:
    • 自由與開放:由於 Linux 是基於 GPL ( General Public License ) 的架構之下,因此他是自由軟體, 也就是任何人都可以自由的使用或者是修改其中的原始碼的意思! 這就是所謂的『開放性架構』, 這對科學界來說是相當重要的!因為很多的工程師由於特殊的需求,常常需要修改系統的原始碼, 使該系統可以符合自己的需求!而這個開放性的架構將可以滿足各不同需求的工程師! 因此當然就有可能越來越流行囉!以鳥哥來說,目前環境工程界的空氣品質模式最新版 Models-3/CMAQ 就是以 Linux 為基準平台設計的呢!

    • 配備需求低廉:而 Linux 可以支援個人電腦的 x86 架構, 系統資源不必像早先的 Unix 系統那般,僅適合於單一公司 ( 例如 Sun ) 設備! 單就這一點來看,就可以造成很大的流行囉!不過,如果您想要在 Linux 下執行 X Window 系統, 那麼硬體的等級就不能太低了!

    • 功能強大而穩定:而且由於 Linux 功能並不會輸給一些大型的 Unix 工作站,因此,近年來越來越多的公司或者是團體、 個人投入這一個作業系統的開發與整合工作!

    • 獨立作業:另外, 由於很多的軟體套件逐漸被這套作業系統拿來使用,而很多套件軟體也都在 Linux 這個作業系統上面進行發展與測試,因此, Linux 近來已經可以獨力完成幾乎所有的工作站或伺服器的服務了,例如 Web, Mail, Proxy, FTP.....。
    所以,目前 Linux 已經是相當成熟的一套作業系統囉!而且不耗資源又可以自由取得!呵呵, 可以說造成微軟相當大的壓力呀!此外,由於他的系統硬體要求很低, 加上目前很多的人由於『Intel 的陰謀』( 呵呵!開玩笑的,因為 Tom 的硬體評論 (http://www.big5.tomshardware.com/) 網站常常這樣取笑 Intel 的說!呵!很好笑!) 而造成手邊有相當多的淘汰掉的硬體配備, Linux 在這些被淘汰的硬體中就可以執行的相當的順暢與穩定! 因此也造成相當多朋友的關注囉!

    這也是造成 Linux 成為最近幾年來最受矚目的作業系統之一,如前所述, 他會受到矚目的原因主要是因為他是『free』的,就是可以自由取得的作業系統啦! 然後他是開放性的系統,也就是你可以隨時的取得程式的原始碼,這對於程式開發工程師是很重要的! 而且,雖然他是 Free 的自由軟體,不過功能卻很強大!另外, Linux 對於硬體的需求是很低的,這一點更造成它流行的主因,因為硬體的汰換率太快了, 所以很多人手邊都有一些很少在用的零件,這些零件組一組就可以用來跑 Linux 了,反正做一個工作站又不用使用到螢幕 ( 只要主機就可以囉 ) ,因此 Linux 就越來越流行囉!(插個嘴,也就是因為 Linux 具有 1.硬體需求低、 2.架構開放、 3.系統穩定性及保密性功能夠強、 4.完全免費,所以造成一些所謂『反微軟聯盟』的程式設計高手不斷的開發新軟體!以與 Microsoft 進行抗衡!)

    Linux 的優缺點

    那幹嘛要使用 Linux 做為我們的主機系統呢?這是因為 Linux 有底下這些優點:
    • 穩定的系統
      Linux 本來就是基於 Unix 概念而發展出來的作業系統,因此, Linux 具有與 Unix 系統相似的的程式介面跟操作方式,當然也繼承了 Unix 穩定並且有效率的特點。常聽到安裝 Linux 的主機連續運做一年以上而不曾當機、不必關機是稀鬆平常的事;

    • 免費或少許費用
      由於 Linux 是基於 GPL 的基礎下的產物,因此任何人皆可以自由取得 Linux , 至於一些『安裝套件』的發行者, 他們發行的安裝光碟也僅需要些許費用即可獲得!不同於 Unix 需要負擔龐大的版權費用,當然也不同於微軟需要一而再、 再而三的更新你的系統,並且繳納大量費用囉!

    • 安全性、漏洞的快速修補
      如果你常玩網路的話,那麼你最常聽到的應該是 『沒有絕對安全的主機』!沒錯!不過 Linux 由於支援者日眾,有相當多的熱心團體、個人參與其中的開發, 因此可以隨時獲得最新的安全資訊,並給予隨時的更新,亦即是具有相對的較安全!

    • 多工、多使用者
      與 Windows 系統不同的, Linux 主機上可以同時允許多人上線來工作, 並且資源的分配較為公平,比起 Windows 的單人假多工系統要穩定的多囉! 這個多人多工可是 Unix-Like 上面相當好的一個功能,怎麼說呢?你可以在一部 Linux 主機上面規劃出不同等級的使用者,而且每個使用者登入系統時的工作環境都可以不相同, 此外,還可以允許不同的使用者在同一個時間登入主機,以同時使用主機的資源。

    • 使用者與群組的規劃
      在 Linux 的機器中,檔案的屬性可以分為『可讀、可寫、可執行』 等參數來定義一個檔案的適用性,此外,這些屬性還可以分為三個種類, 分別是『檔案擁有者、檔案所屬群組、其他非擁有者與群組者』。 這對於專案計畫或者其他計畫開發者具有相當良好的系統保密性。

    • 相對比較不耗資源的系統
      Linux 只要一部 p-100 以上等級的電腦就可以安裝並且使用愉快囉!還不需要到 P-4 或 AMD K8 等級的電腦呢!不過,如果你要架設的是屬於大型的主機(服務上百人以上的主機系統), 那麼就需要比較好一點的機器了。不過,目前市面上任何一款個人電腦均可以達到這一個要求囉!

    • 適合需要小核心程式的嵌入式系統
      由於 Linux 只要幾百 K 不到的程式碼就可以完成一個完整的作業系統, 因此相當適合於目前家電或者是小電子用品的作業系統呢!那就是當紅炸子雞『嵌入式』系統啦! Linux 真的是很適合例如手機、數位相機、PDA、家電用品等等的微電腦作業系統呢! ^_^
    反正 Linux 好處說不完啦!不過雖然 Linux 具有這樣多的好處, 但是他先天上有一個足以致命的地方,使他的普及率受到很大的限制,就是 Linux 需要使用『指令列』 的終端機模式進行系統的管理!雖然近年來有很多的圖形介面開發使用在 Linux 上面,但畢竟要熟悉 Linux 還是以指令列來使用是比較好的,因此要接受 Linux的玩家必須比較要能熟悉對電腦下指令的行為,而不是用滑鼠點一點 icon 就行了!不過如果只是要架一些簡單的小站呢?是不是大家都可以做的到?沒錯!其實只要對 Linux 做一些小小的設定就可以架站了!Linux 還可以改進的地方:
    • 沒有特定的支援廠商:因為在 Linux 上面的所有套件幾乎都是自由軟體, 而每個自由軟體的開發者可能並不是公司團體,而是非營利性質的團體。如此一來, 在您 Linux 主機上面的軟體若發生問題,該如何是好? 好在由於目前 Linux 商業界的整合還不錯,目前在台灣比較具名的 Red Hat 與 SuSE 均有設立了服務點。您可以經由這個服務點來直接向他們購買/諮詢相關的軟硬體問題呢! 不過,如果您並非選擇有專門商業公司的 Linux distributions 時?怎麼辦? 沒有專人到府服務呢~這點倒是還不需要太擔心, 因為拜網路風行之賜,你要問的問題幾乎在網路上都可以找到答案喔!看你有沒有用心去找就是了!

      圖形介面作的還不夠好:雖然早在 1994 年 Linux 1.0 版釋出時, 就已經含有 XFree86 的 X Window 架構了。不過, X Window 畢竟是 Linux 上的一個軟體, 他並不是 Linux 最核心的部分,有沒有他對 Linux 的伺服器執行都沒有影響的! 所以鳥哥通常是不玩 X Window 的啦! 但其實有更多人對於 Linux 並非是著眼在網路伺服器,而是一般桌上型電腦的使用, 這一點對於 Linux 來說,還是不夠好!即使目前已有 KDE (http://www.kde.org/)GNOME (http://www.gnome.org/) 等優秀的視窗管理程式, 不過,畢竟整合度還是需要加強,希望未來可以看到整合度超高的 Linux 桌上型電腦呢!

    其他 Linux 相關

    還有一些資料需要提醒大家的呢!

  • 依循標準:

    Linux 有個優良的傳統,那就是支援比較公認而正式的標準, 例如開發時就使用的 POSIX 規範。此外, 由於 Linux 是一個沒有『規格品』樣式的新鮮玩意兒, 如果大家都自己玩自己的,那麼可想而知的是,未來想要在 Linux 這個作業系統上面發展軟體與硬體的廠商一定會無所適從的! 為了讓軟體開發商、與硬體發展者有一個依循的方向,因此而有 Linux Standard Base (LSB) 及 File system Hierarchy Standard (FHS) 這些個玩意兒的誕生!所以,各個 distribution 也都要遵循 LSB 上面的規範,軟硬體發展者也都會依循 LSB ,所以囉,我們才會常常說,各大 distribution 雖然在提供的工具與創意上面有所不同,但是基本上,他們的 Linux 架構都是很類似的!因此,你只要玩一套 Linux distribution 也就夠了!其他的 distribution 應該就難不倒你囉!
  • 伺服器、工作站、終端機...

    由於網路的盛行,我們或許常常會聽到一些名詞ㄋㄟ~所以,底下先來介紹幾個簡單的網路名詞吧! ^_^,來認識一下什麼是 伺服器 ( Server )、工作站 ( Workstation ) 與終端機 ( Ternianl )?簡單的來說,你可以這樣認為:

    • 伺服器 ( Server ):提供 Internet 一種以上的網路服務的主機,例如 yahoo 提供的是 WWW 的服務,那麼 yahoo 就可以稱之為 伺服器 了!那麼,你自己架設一台 mail server 呢?呵呵!那也是一個小型的伺服器囉!所以,你必須要清楚的知道, 伺服器是有規模大小之分的!目前一部 Linux 上面就可以架設多個伺服器軟體囉!例如 WWW 伺服器的 Apache 軟體、 FTP 伺服器的 Wu-ftp 軟體等等的;

    • 工作站 ( Workstation ) :基本上, 工作站可以視為僅提供一群特定人士,作為數值分析、科學用途的機器。例如鳥哥的研究室有一部 Sun 的機器,他僅提供我們研究室內部幾部電腦的連線,當我們有需要使用到 Fortran 這個程式語言時,就連線進入 Sun 這部機器,並在上面進行我們所需要的計算工作! 這個就是工作站啦。而工作站與伺服器的差別,大概就在於有沒有提供 internet 上面的服務而已,例如,如果我將 Sun 上面的 mail server 開啟之後, 那麼這部機器就可以稱之為伺服器了!同時也是我們的工作站喔! 當然,更廣義的定義是,只要是沒有對 Internet 上面提供網路服務的,那就是工作站了!這當然也就包含所謂的終端機!

    • 終端機 ( Terminal ) :簡單的說,就是 end-user ( 就是你啦 ) 前面的那部電腦!呵呵,例如鳥哥都是使用我的工作機 ( Windows ) 連上我們的主機來工作,那麼這一部 Windows 的電腦,就可以稱為 terminal 機器囉!不過,更狹義的來說,『終端機』本身應該是不具備任何可以作業的軟體的, 在終端機上面一定要連上 Server 之後,才能進行各項作業! 那才是最狹義的終端機囉!例如我們前面說過的 早期的大型主機連線模式

    大致上的分別可以用上面的觀點來看!

  • 幾個常見的授權模式與定義

    現在市面上有好多的軟體,有的是自由軟體,有的是專利軟體。 有的專利軟體免費,有的自由軟體要錢~啊!好煩啊!怎麼分辨這些東西? 其實,鳥哥並不是律師,對於法律也不十分懂,不過, 還是有幾個授權模式可以來談一談~

    • Open Source :Open source 表示軟體釋出時, 一定伴隨著原始碼的釋出喔!通常他有幾個好處:

      1. 程式設計師通常會等到程式成熟之後才會釋出 ( 免得被笑, ^_^ ), 所以通常程式在雛形的時候,就已經具有相當的優良體質;
      2. Open Source 的精神,相信當程式原設計人將程式原始碼釋出之後, 其他的程式設計師接受這份原始碼之後,由於需要將程式改成自己所需的樣式, 所以會經由本身的所學來加以改良,並從中加以改良與除蟲,所以程式的 debug 功能會比傳統的 close source 來的快!
      3. 由於程式是伴隨原始碼的,因此,系統將會不易存在鮮為人知的木馬程式或一些安全漏洞, 相對而言,會比較更加的安全!

      Open source 的代表授權為 GNU 的 GPL 及 BSD 等等:

      • GNU General Public License : 這個可以由剛剛的說明瞭解,他主要定義在『自由軟體』上面,任何掛上 GPL 授權的軟體,需要公布其原始碼 ( Open Source ),GPL 有幾個主要的大方向:
        1. 任何個人或公司均可釋出自由軟體 ( free software );
        2. 任何釋出自由軟體的個人或公司,均可由自己的服務來收取適當的費用;
        3. 該軟體的原始碼 ( Source Code ) 需要隨軟體附上,並且是可公開發表的;
        4. 任何人均可透過任何正常管道取得此一自由軟體,且均可取得此一授權模式。
        更多的 GPL 可參考附錄 A 的中文化條文!

      • Berkeley Software Distribution (BSD) :使用 BSD source code 最常接觸到的就是 BSD 授權模式了!這個授權模式其實與 GPL 很類似,而其精神也與 Open Source 相呼應呢!

      此外,近期以來還有 Apache 的授權、 Sun 的授權,好多好多~

    • Close Source : 程式的核心是封閉的,優點是有專人維護,您不需要去更動他;缺點則是靈活度大打折扣, 使用者無法變更該程式成為自己想要的樣式,此外,若有木馬程式或者安全漏洞, 將會花上相當長的一段時間來除錯!這也是所謂專利軟體 (copyright) 常見的軟體出售方式。 代表的授權模式有:

      • Freeware :不同於 Free software , Freeware 為『免費軟體』而非『自由軟體!』雖然它是免費的軟體,但是不見得要公布其原始碼, 端看釋出者的意見囉!這個東西與 Open Source 畢竟是不太相同的東西喔! 此外,目前很多標榜 免費軟體 的程式很多都有小問題!例如假借免費軟體的名義, 實施使用者資料竊取的目的!所以 『來路不明的軟體請勿安裝!』

      • Shareware :共享軟體這個名詞就有趣了! 與免費軟體有點類似的是, Shareware 在使用初期,它也是免費的,但是, 到了所謂的『試用期限』之後,您就必須要選擇『付費後繼續使用』或者『將它移除』 的宿命~通常,這些共享軟體都會自行撰寫失效程式,讓你在試用期限之後就無法使用該軟體。
  • 重點回顧

    • 電腦主要以二進位作為單位,而目前常用的磁碟容量單位為 bytes,其單位換算為 1Byte = 8bits, 其他的以1024為其倍數,如 1GByte=1024MBytes等等。
    • 作業系統(Operation System)主要在管理與驅動硬體,因此必須要能夠管理記憶體、管理裝置、 負責行程管理以及系統呼叫等等。因此,只要能夠讓硬體準備妥當 (Ready) 的情況, 就是一個陽春的作業系統了。
    • 最陽春的作業系統僅在驅動與管理硬體,而要使用硬體時,就得需要透過應用軟體或者是殼程式(shell) 的功能,來呼叫作業系統操縱硬體工作。因此,目前稱為作業系統的, 除了上述功能外,通常已經包含了日常工作所需要的應用軟體在內了。
    • Unix 的前身是由貝爾實驗室(Bell lab.)的 Ken Thompson 利用組譯語言寫成的, 後來在 1971-1973 年間由 Dennis Ritchie 以 C 程式語言進行改寫,才稱為 Unix。
    • 1977 年由 Bill Joy 釋出 BSD (Berkeley Software Distribution),這些稱為 Unix-like 的作業系統。
    • 1984年由 Andrew Tannenbaum 製作出 Minix 作業系統,該系統可以提供原始碼以及軟體;
    • 1984年由 Richard Stallman 提倡 GNU 計畫,倡導自由軟體(Free software), 強調其軟體可以『自由的取得、複製、修改與再發行』,並規範出 GPL 授權模式, 任何 GPL (General Public License) 軟體均不可單純僅販賣其軟體,也不可修改軟體授權。
    • 1991年由芬蘭人 Linus Torvalds 開發出 Linux 作業系統。簡而言之,Linux 成功的地方主要在於: Minix(Unix), GNU, Internet, POSIX 及虛擬團隊的產生。
    • Linux 本身就是個最陽春的作業系統,其開發網站設立在 http://www.kernel.org,我們亦稱 Linux 作業系統最底層的資料為『核心, Kernel』。
    • 目前 Linux 的發展分為兩種版本,分別是穩定版本的偶數版,如 2.6.X,適合於商業與家用環境使用; 一種是發展中版本如 2.5.X 版,適合開發特殊功能的環境。
    • Linux distributions 為 Linux 的 Kernel + Tools + Free Software + Documentations + 可完整安裝的程序所製成的一套完整的系統。

    習題練習

    ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看)
    • 一個完整的作業系統至少要能夠完整的控制整個硬體,請問,作業系統應該要控制硬體的哪些單元?
      至少要能夠控制:(1)input/output crontrol, (2)device control, (3)process management, (4)file management. 等等!
    • 核心的功能在於管控整個系統的硬體,這包括了 CPU 運算單元的管理,輸入/輸出的管理,記憶體的管理等等。 那麼請問一個較為完整的作業系統,應該包含哪些部分?
    • 應包含 Kernel + Kernel Tools + Applications 等等
    • 一個 GBytes 的硬碟空間,等於幾個 KBytes ?
    • 1GBytes = 1024 MBytes * 1024 KBytes/MBytes = 1048576 KBytes
    • 你在你的主機上面安裝了一張網路卡,但是開機之後,系統卻無法使用,您確定網路卡是好的, 那麼可能的問題出在哪裡?該如何解決?
    • 因為所有的硬體都沒有問題,所以,可能出問題的地方在於系統的核心(kernel) 不支援這張網路卡。解決的方法,到網路卡的開發商網站,下載支援您主機作業系統的驅動程式, 安裝網路卡驅動程式後,就可以使用了。
    • 我在一部主機上面安裝 Windows 作業系統時,並且安裝了顯示卡的驅動程式,他是沒有問題的。 但是安裝 Linux 時,卻無法完整的顯示整個 X Window 。請問,我可不可以將 Windows 上面的 顯示卡驅動程式拿來安裝在 Linux 上?
    • 不行!因為核心不同,針對硬體所寫的驅動程式也會不相同, 編譯器也不同,當然,驅動程式也無法在兩個作業系統間相容。 這也是為何開發商在他們的網站上面,都會同時提供許多不同作業系統的驅動程式之故。
    • 我在 Windows 上面玩的遊戲,可不可以拿到 Linux 去玩?
    • 當然不行!跟上一題相似的,因為遊戲也是一個應用程式 (application), 他必須要使用到核心所提供的工具來開發他的遊戲, 所以這個遊戲是不可在不同的平台間運作的。除非這個遊戲已經進行了移植。
    • 什麼是軟體的移植?
    • 程式是由程式碼(通成為ASCII格式)經過編譯器編譯成為 binary file 之後, 才能夠在該作業系統上面執行。因此,您可以將您的程式的程式碼修改成可以適應 其他作業系統的環境,並且加以編譯,使程式可以在其他平台上運作, 這個修改的動作即為移植。
    • Linux 本身僅是一個核心與相關的核心工具而已,不過,他已經可以驅動所有的硬體, 所以,可以算是一個很陽春的作業系統了。經過其他應用程式的開發之後,被整合成為 Linux distribitions。請問眾多的 distributions 之間,有何異同?
    • 相同:利用同樣的 Linux kernel (http://www.kernel.org),幾乎相同的自由軟體套件 (例如 GNU 裡面的 gcc/glibc/vi/apache/bind/sendmail... ),幾乎相同的操作介面 (例如均使用 bash/KDE/GNOME 等等)。
      不同:使用的 kernel 與各軟體的版本可能會不同;各開發商加入的應用工具不同, 使用的套件管理模式不同(debian 與 RPM)
    • Unix 是誰寫出來的? GNU 計畫是誰發起的?
    • Unix 是 Ken Thompson 寫的,1973 年再由 Dennis Ritchie 以 C 語言改寫成功。 至於 GNU 與 FSF 則是 Richard Stallman 發起的。
    • GNU 的全名為何?他主要由那個基金會支持?
    • GNU 是 GNU is Not Unix 的簡寫,是個無窮迴圈! 另外,這個計畫是由自由軟體基金會 (Free Software Foundation, FSF) 所支持的! 兩者都是由 Stallman 先生所發起的!
    • 我要如何取得 Linux distribution 的可安裝光碟?
    • 目前各大版本的 Linux distribution 大致上仍然依附在 GPL 這個版權宣告上, 因此在網路上面都可以輕易的下載,若有興趣的話可以到各發展的廠商主網頁去下載。 然而為了頻寬的節省起見,建議在台灣以映像站台來下載速度上會快上很多, 特別建議南台灣朋友可以到義守大學的 FTP 站 ( http://ftp.isu.edu.tw/ )下載資料!
    • 簡單的說明一下什麼是 GNU 的 GPL ?
    • 1. 任何個人或公司均可釋出自由軟體 ( free software );
      2. 任何釋出自由軟體的個人或公司,均可由自己的服務來收取適當的費用;
      3. 該軟體的原始碼 ( Source Code ) 需要隨軟體附上,並且是可公開發表的;
      4. 任何人均可透過任何正常管道取得此一自由軟體,且均可取得此一授權模式。
    • 何謂多人 ( Multi-user ) 多工 ( Multitask )?
    • Multiuser 指的是 Linux 允許多人同時連上主機之外, 每個使用者皆有其各人的使用環境,並且可以同時使用系統的資源!
      Multitask 指的是多工環境,在 Linux 系統下, CPU 與其他例如網路資源可以同時進行多項工作, Linux 最大的特色之一即在於其多工時,資源分配較為平均!
    • 簡單說明 GNU General Public License ( GPL ) 與 Open Source 的精神:
    • 1. GPL 的授權之軟體,乃為自由軟體(Free software),任何人皆可擁有他; 2. 開發 GPL 的團體(或商業企業)可以經由該軟體的服務來取得服務的費用; 3. 經過 GPL 授權的軟體,其屬於 Open source 的情況,所以應該公布其原始碼; 4. 任何人皆可修改經由 GPL 授權過的軟體,使符合自己的需求; 5. 經過修改過後 Open source 應該回饋給 Linux 社群。
    • 有個朋友問我說『 Linux 是什麼?』我該如何回答比較好?
    • 簡單的說, Linux 就是一個作業系統,或者說, Linux 是作業系統最底層的核心。 這個核心可以管理整個電腦硬體,讓電腦硬體可以完整的運作起來,並等待使用者輸入指令。 最早 Linux 是由 Torvalds 在 1991 年寫出來的,後來由於他承接了 Unix 的良好傳統:穩定性高、 多人多工的環境設計優良、要求配備較低等優點,所以很多軟體開發商在這個核心上面開發, 而某些廠商將這些軟體與核心整合成為可以完整安裝的光碟,而成為目前大家常常聽到的 Linux 作業系統了。
    • 什麼是 POSIX ?為何說 Linux 使用 POSIX 對於發展有很好的影響?
    • POSIX 是一種標準規範,主要針對在 Unix 作業系統上面跑的程式來進行規範。 若您的作業系統符合 POSIX ,則符合 POSIX 的程式就可以在您的作業系統上面運作。 Linux 由於支援 POSIX ,因此很多 Unix 上的程式可以直接在 Linux 上運作, 因此程式的移植相當簡易!也讓大家容易轉換平台,提升 Linux 的使用率。
    • Linux 的發展主要分為哪兩種核心版本?
    • 主要分為奇數的發展中版本(develop),如 2.5 ,及偶數的穩定版本,如 2.6 。
    • 簡單說明自由軟體 (free software) 與開放源碼 (open source) 的差異?
    • 自由軟體意指:你可以擁有自由的取得、複製、修改、再發行該軟體的權利, 由於具有這些權利,因此自由軟體通常是 Open source 的。
      開放源碼意指:軟體釋出時,同時釋出原始碼,但使用者取得原始碼後,能否修改該原始碼, 則依據該軟體的授權而定。
      意思就是說,自由軟體是 Open source 的,但是 Open source 的軟體則不見得是自由軟體!
    • 什麼是 Linux 的 Live CD ?
    • 所謂的 Live CD 就是將完整的 Linux distribution 放置到一片光碟 (目前也有 DVD 版本了) 當中, 然後透過重新開機以『光碟開機』,就能夠不使用硬碟直接進入 Linux 系統的環境。
    • 簡單說明 Linux 成功的因素?
    • 1. 藉由 Minix 作業系統開發的 Unix like ,沒有版權的糾紛;
      2. 藉助於 GNU 計畫所提供的各項工具軟體, gcc/bash 等;
      3. 藉由 Internet 廣為流傳;
      4. 藉由支持 POSIX 標準,讓核心能夠適合所有軟體的開發;
      5. 托瓦茲強調務實,虛擬團隊的自然形成!

    參考資料

    修改歷史:
    • 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 是可能可以在上面安裝的!
    伺服器篇文件
    各版本彙整說明
    CentOS 6.x