鳥哥的Linux私房菜2018簡體化 第一章(1)、Linux是什么與如何學(xué)習(xí)

眾所周知的,Linux的核心原型是1991年由托瓦茲(Linus Torvalds)寫出來的,但是托瓦茲為何可以寫出Linux這個操作系統(tǒng)?為什么他要選擇386的電腦來開發(fā)?為什么Linux的發(fā)展可以這么迅速?又為什么Linux是免費(fèi)且可以自由學(xué)習(xí)的?以及目前為何有這么多的Linux發(fā)行版本(distribution)呢?了解這些東西后,才能夠知道為何Linux可以免除專利軟件之爭,并且了解到Linux為何可以同時在個人電腦與大型主機(jī)上面大放異彩!所以,在實際進(jìn)入Linux的世界前,就讓我們來談一談這些有趣的歷史故事吧!^_^

1.1 Linux是什么

我們知道Linux這玩意是在電腦上運(yùn)行的,所以說Linux就是一組軟件。問題是這個軟件是操作系統(tǒng)還是應(yīng)用軟件?以及Linux可以在哪些種類的電腦硬件上運(yùn)行?而Linux源自哪里?為什么Linux還不要錢?這些我們都得來談一談!免得下次人家問你,為什么復(fù)制軟件不會違法時,你會答不出來啊!^_^


1.1.1? Linux是什么?操作系統(tǒng)/應(yīng)用程序?

我們在第零章、計算機(jī)概論里面有提到過整個電腦系統(tǒng)的概念,電腦主機(jī)是由一堆硬件所組成的,為了有效率的控制這些硬件資源,于是乎就有操作系統(tǒng)的產(chǎn)生了。操作系統(tǒng)除了有效率的控制這些硬件資源的分配,并提供電腦運(yùn)行所需要的功能(如網(wǎng)絡(luò)功能)之外,為了要提供程序設(shè)計師更容易開放軟件的環(huán)境,所以操作系統(tǒng)也會提供一整組系統(tǒng)調(diào)用接口來給軟件設(shè)計師開發(fā)用喔!

知道為什么要講這些了嗎?嘿嘿!沒錯,因為Linux就是一套操作系統(tǒng)!如同下圖所示,Linux就算核心與系統(tǒng)調(diào)用接口那兩層。至于應(yīng)用程序算不算Linux呢?當(dāng)然不算啦!這點要特別注意喔!


圖1.1.1、操作系統(tǒng)的角色

由上圖中我們可以看到其實核心與硬件的關(guān)系非常的緊密。早起的Linux是針對386來開發(fā)的,由于Linux只是一套操作系統(tǒng),并不含有其他的應(yīng)用程序,因此很多工程師在下載了Linux核心并且實際安裝之后,就只能看著電腦開始運(yùn)行了!接下來這些高級工程師為了自己的需求,再在Linux上面安裝他們所需要的軟件就是了。

Tips

Torvalds先生在1991年寫出Linux核心的時候,其實該核心僅能“驅(qū)動386所有的硬件”而已,所謂的“讓386電腦開始運(yùn)行,并且等待使用者輸入命令”而已,事實上,當(dāng)時能夠在Linux上面跑的軟件還很少呢!

由于不同的硬件他的功能函數(shù)并不相同,例如IBM的Power CPU與Intel的x86架構(gòu)就是不一樣!所以同一套操作系統(tǒng)是無法在不同的硬件平臺上面運(yùn)行的!舉例來說,如果你想要讓x86上面跑的那套操作系統(tǒng)也能夠在Power CPU上運(yùn)行,就得要將該操作系統(tǒng)進(jìn)行修改才行。如果能夠參考硬件的功能函數(shù)并據(jù)此修改你的操作系統(tǒng)源代碼,那經(jīng)過改版后的操作系統(tǒng)就能夠在另一個硬件平臺上面運(yùn)行了。這個動作我們通常就稱為“軟件移植”了!

例題:

請問Windows操作系統(tǒng)能否在蘋果公司的麥金塔電腦(MAC)上面安裝與運(yùn)行?

答:

由上面的說明中,我們知道硬件是由“核心”來控制的,而每種操作系統(tǒng)都有它自己的核心。在2006年以前的蘋果電腦公司是請IBM公司幫忙開發(fā)硬件的(所謂的Power CPU),而蘋果電腦公司則在該硬件架構(gòu)上面開發(fā)自家的操作系統(tǒng)(就是俗稱的麥金塔,MAC是也)。Windows則是開發(fā)在x86架構(gòu)上的操作系統(tǒng)之一,因此Windows是沒有辦法安裝到麥金塔電腦硬件上面的。

不過,在2006年以后,蘋果電腦轉(zhuǎn)而請Intel設(shè)計其硬件架構(gòu),亦即其硬件架構(gòu)已經(jīng)轉(zhuǎn)為x86系統(tǒng),因此在2006年以后的蘋果電腦若使用x86架構(gòu)時,其硬件則“可能”可以安裝Windows操作系統(tǒng)了。不過,你可能需要自己想些辦法來處理該硬件的兼容性啰!

Tips

Windows操作系統(tǒng)本來就是針對個人電腦x86架構(gòu)的硬件去設(shè)計的,所以它當(dāng)然只能在x86的個人電腦上面運(yùn)行,在不同的硬件平臺當(dāng)然就無法運(yùn)行了。也就是說,每種操作系統(tǒng)都是在它專門的硬件機(jī)器上面運(yùn)行的喔!這點得要先了解。不過,Linux由于是Open Source的操作系統(tǒng),所以它的源代碼可以被修改成適合在各種機(jī)器上面運(yùn)行的,也就是說,Linux是具有“可移植性”,這可是很重要的一個功能喔!^_^

Linux提供了一個完整的操作系統(tǒng)當(dāng)中最底層的硬件控制與資源管理的完整架構(gòu),這個架構(gòu)是沿襲Unix良好的傳統(tǒng)來的,所以相當(dāng)?shù)姆€(wěn)定且功能強(qiáng)大!此外,由于這個優(yōu)良的架構(gòu)可以在目前的個人電腦(x86系統(tǒng))上面跑,所以很多的軟件開發(fā)者漸漸的將他們的工作心血轉(zhuǎn)移到這個架構(gòu)上面,所以Linux操作系統(tǒng)也也很多的應(yīng)用軟件啦!

雖然Linux僅是其核心與核心提供的工具,不過由于核心、核心工具與這些軟件開發(fā)者提供的軟件整合,使得Linux稱為一個更完整的、功能強(qiáng)大的操作系統(tǒng)啰!大概了解Linux是何物之后,接下來,我們要談一談,為什么說Linux是很穩(wěn)定的操作系統(tǒng)呢?它是如何來的?


1.1.2? Linux之前,Unix的歷史

早在Linux出現(xiàn)之前的二十年(大約在1970年代),就有一個相當(dāng)穩(wěn)定而成熟的操作系統(tǒng)存在了!那就是Linux的老大哥“Unix”是也!怎么這么說呢?它們這兩個家伙有什么關(guān)系呀?這里就給它說一說啰!

眾所皆知的,Linux的核心是由Linus Torvalds在1991年的時候給它開發(fā)出來的,并且丟到網(wǎng)絡(luò)上提供大家下載,后來大家覺得這個小東西(LinuxKernel)相當(dāng)?shù)男《?,所以慢慢的就有相?dāng)多的朋友投入這個小東西的研究領(lǐng)域里面去了!但是為什么這個小東西這么棒呢?又為什么大家都可以免費(fèi)的下載這個東西呢?嗯!等鳥哥慢慢的唬xx……喔不!聽我慢慢的道來!

[if !supportLists]l? [endif]1969年以前:一個偉大的夢想 –Bell,MIT與 GE的“Multics”系統(tǒng)

早期的計算機(jī)并不像現(xiàn)在的個人計算機(jī)一樣普遍,它可不是一般人碰的起的呢~除非是軍事或者是高科技用途,或者是學(xué)術(shù)單位的前瞻性研究,否則真的很難接觸到。非但如此,早期的計算機(jī)架構(gòu)還很難使用,除了運(yùn)算速度并不快之外,操作界面也很麻煩的!因為那個時候的輸入設(shè)備只有讀卡機(jī)、輸出設(shè)備只有打印機(jī),使用者也無法與操作系統(tǒng)互動(批處理型操作系統(tǒng))。

在那個時候,寫程序是件很可憐的事情,因為程序設(shè)計者,必須要將程序相關(guān)的信息在讀卡紙上面打洞,然后再將讀卡紙插入讀卡機(jī)來將信息讀入主機(jī)中運(yùn)算。光是這樣就很麻煩了,如果程序有個小地方寫錯,哈哈!光是重新打卡就很慘,加上主機(jī)少,使用者眾多,光是等待,就耗去很多的時間了!

在那之后,由于硬件與操作系統(tǒng)的改良,使得后來可以使用鍵盤來進(jìn)行信息的輸入。不過,在一間學(xué)校里面,主機(jī)畢竟可能只有一部,如果多人等待使用,那怎么辦?大家還是得要等待?。『迷?960年代初期麻省理工學(xué)院(MIT)發(fā)展了所謂的“分時共用系統(tǒng)(CompatibleTime-Sharing System,CTSS)”, 它可以讓大型主機(jī)通過提供數(shù)個終端機(jī)(terminal)以連線進(jìn)入主機(jī),來利用主機(jī)的資源進(jìn)行運(yùn)算工作。 架構(gòu)有點像這樣:


圖1.1.2、早期主機(jī)與終端的關(guān)系圖示

Tips

這個分時共用系統(tǒng)可以說是近代操作系統(tǒng)的始祖呢!它可以讓多個使用者在某一段時間內(nèi)分別使用CPU的資源, 感覺上你會覺得大家是同時使用該主機(jī)的資源!事實上,是CPU在每個使用者的工作之間進(jìn)行切換,在當(dāng)時,這可是個劃時代的技術(shù)喔!

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

為了更加強(qiáng)化大型主機(jī)的功能,以讓主機(jī)的資源可以提供給更多使用者來利用,所以在1965年前后,由貝爾實驗室(Bell)、麻省理工學(xué)院(MIT)及奇異公司(GE,或稱為通用電器)共同發(fā)起了Multics的計劃(注1), Multics計劃的目的是想要讓大型主機(jī)可以達(dá)到提供300個以上的終端機(jī)連線使用的目標(biāo)。不過,到了1969年前后,計劃進(jìn)度落后,資金也短缺,所以該計劃雖然繼續(xù)在研究,但貝爾實驗室還是退出了該計劃的研究工作。(Multics有復(fù)雜、多數(shù)的意思存在。)

Tips

最終Multics還是有成功的發(fā)展出他們的系統(tǒng),完整的歷史說明可以參考: http://www.multicians.org/網(wǎng)站內(nèi)容。Multics計劃雖然后來沒有受到很大的重視,但是它培養(yǎng)出來的人材是相當(dāng)優(yōu)秀的!^_^

[if !supportLists]l?[endif]1969年:Ken Thompson的小型file server system

在認(rèn)為Multics計劃不可能成功之后,貝爾研究室就退出該計劃。不過,原本參與Multics計劃的人員,已經(jīng)從該計劃當(dāng)中獲得一些點子,Ken Thompson(注2)就是其中一位!

Thompson因為自己的需要,希望開發(fā)一個小小的操作系統(tǒng)以供自己的需求。在開發(fā)時,有一部DEC(Digital Equipment Corporation)公司推出的PDP-7剛好沒人使用,于是他就準(zhǔn)備針對這部主機(jī)進(jìn)行操作系統(tǒng)核心程序的撰寫。本來Thompson應(yīng)該是沒時間的(有家有小孩的宿命?),無巧不巧的是,在1969年八月份左右,剛好Thompson的妻兒去了美西探親,于是他有了額外的一個月的時間好好的待在家將一些構(gòu)想實現(xiàn)出來!

經(jīng)過四個星期的奮斗,他終于以匯編語言(Assembler)寫出了一組核心程序,同時包括一些核心工具程序,以及一個小小的文件系統(tǒng)。那個系統(tǒng)就是Unix的原型!當(dāng)時Thompson將Multics龐大的復(fù)雜系統(tǒng)簡化了不少,于是同實驗室的朋友都戲稱這個系統(tǒng)為:Unics。(當(dāng)時尚未有Unix的名稱)

Thompson的這個文件系統(tǒng)有兩個重要的概念,分別是:

所有的程序或系統(tǒng)設(shè)備都是文件;

不管建構(gòu)編輯器還是附屬文件,所寫的程序只有一個目的,且要有效的完成目標(biāo)。

這些概念在后來對于Linux的發(fā)展有相當(dāng)重要的影響喔!

Tips

套一句常聽到的廣告詞:“科技始終來自于人性”,當(dāng)初Thompson會寫這套Unix核心程序,卻是想要移植一套名為“太空旅游”的游戲呢!^_^

[if !supportLists]l?[endif]1973年:Unix的正式誕生,Ritchie等人以C語言寫出第一個正式Unix核心

由于Thompson寫的那個操作系統(tǒng)實在太好用了,所以在貝爾實驗室內(nèi)部廣為流傳,并且數(shù)度經(jīng)過改版。但是因為Unics本來是以匯編語言寫成的,而如第零章計算機(jī)概論談到的,匯編語言具有專用性,加上當(dāng)時的計算機(jī)機(jī)器架構(gòu)都不太相同,所以每次要安裝到不同的機(jī)器都得要重新編寫匯編語言,真不方便!

后來Thompson與Ritchie合作想將Unics改以高級程序語言來撰寫。當(dāng)時現(xiàn)成的高階程序語言有B語言。但是由B語言所編譯出來的核心性能不是很好。后來DennisRitchie(注3)將B語言重新改寫成C語言,再以C語言重新改寫與編譯Unics的核心,最后正名與發(fā)行出Unix的正式版本!

Tips

這群高級黑客實在很厲害!因為自己的需求來開發(fā)出這么多好用的工具!C程序語言開發(fā)成功后,甚至一直沿用至今呢!你說厲不厲害?。∵@個故事也告訴我們,不要小看自己的潛能喔!你想做的,但是現(xiàn)實生活中沒有的,就動手自己搞一個來玩玩吧!

由于貝爾實驗室是隸屬于美國電信大廠AT&T公司的,只是AT&T當(dāng)時忙于其他商業(yè)活動,對于Unix并不支持也不排斥。此外,Unix在這個時期的發(fā)展者都是貝爾實驗室的工程師,這些工程師對于程序當(dāng)然相當(dāng)有研究,所以,Unix在此時當(dāng)然是不容易被一般人所接受的!不過對于學(xué)術(shù)界的學(xué)者來說,這個Unix真是學(xué)者們進(jìn)行研究的福音!因為源代碼可改寫并且可作為學(xué)術(shù)研究之用嘛!

需要特別強(qiáng)調(diào)的是,由于Unix是以較高級的C語言寫的,相對于匯編語言需要與硬件有密切的配合,高級的C語言與硬件的關(guān)聯(lián)性就沒有這么大了!所以,這個改變也使得Unix很容易被移植到不同的機(jī)器上面喔!

[if !supportLists]l?[endif]1977年:重要的Unix分支--BSD的誕生

雖然貝爾屬于AT&T,但是AT&T此時對于Unix是采取較開放的態(tài)度,此外,Unix是以高級的C語言寫成的,理論上是具有可移植性的!亦即只要取得Unix的源代碼,并且針對大型主機(jī)的特性加以修訂原有的源代碼(Source Code),就可能將Unix移植到另一部不同的主機(jī)上面了。所以在1973年以后,Unix便得以與學(xué)術(shù)界合作開發(fā)!最重要的接觸就是與加州伯克利(Berkeley)大學(xué)的合作了。

伯克利大學(xué)的Bill Joy(注4)在取得了Unix的核心源代碼后,著手修改成適合自己機(jī)器的版本,并且同時增加了很多工具軟件與編譯程序,最終將它命名為BerkeleySoftware Distribution(BSD)。這個BSD是Unix很重要的一個分支,Bill Joy也是Unix業(yè)者“Sun(升陽)”這家公司的創(chuàng)辦者!Sun公司即是以BSD發(fā)展的核心進(jìn)行自己的商業(yè)Unix版本的發(fā)展的。(后來可以安裝在x86硬件架構(gòu)上面FreeBSD即是BSD改版而來?。?/p>

[if !supportLists]l?[endif]1979年:重要的System V架構(gòu)與版權(quán)聲明

由于Unix的高度可移植性與強(qiáng)大的性能,加上當(dāng)時并沒有版權(quán)的糾紛,所以讓很多商業(yè)公司開始了Unix操作系統(tǒng)的發(fā)展,例如AT&T自家的System V、IBM的AIX以及HP與DEC等公司,都有推出自家的主機(jī)搭配自己的Unix操作系統(tǒng)。

但是,如同我們前面提到的,操作系統(tǒng)的核心(Kernel)必須要跟硬件配合,以提供及控制硬件的資源進(jìn)行良好的工作!而在早期每一家生產(chǎn)計算機(jī)硬件的公司還沒有所謂的“協(xié)議”的概念,所以每一個計算機(jī)公司出產(chǎn)的硬件自然就不相同啰!因此他們必須要為自己的計算機(jī)硬件開發(fā)合適的Unix系統(tǒng)。例如在學(xué)術(shù)機(jī)構(gòu)相當(dāng)有名的Sun、Cray與HP就是這一種情況。他們開發(fā)出來的Unix操作系統(tǒng)以及內(nèi)含的相關(guān)軟件并沒有辦法在其他的硬件架構(gòu)下工作的!另外,由于沒有廠商針對個人計算機(jī)設(shè)計Unix系統(tǒng),因此,在早期并沒有支持個人計算機(jī)的Unix操作系統(tǒng)的出現(xiàn)。

Tips

如同分時復(fù)用系統(tǒng)的功能一樣,Unix強(qiáng)調(diào)的是多用戶多任務(wù)的環(huán)境!但早期的286個人計算機(jī)架構(gòu)下的CPU是沒有能力達(dá)到多任務(wù)的操作,因此,并沒有人對移植Unix到x86的計算機(jī)上有興趣。

每一家公司自己出的Unix雖然在架構(gòu)上面大同小異,但是卻真的僅能支持自身的硬件,所以啰,早先的Unix只能與服務(wù)器(Server)或者是大型工作站(Workstation)劃上等號!但到了1979年時,AT&T推出System V第七版Unix后,這個情況就有點改善了。這一版最重要的特色是可以支持x86架構(gòu)的個人計算機(jī)系統(tǒng),也就是說System V可以在個人計算機(jī)上面安裝與運(yùn)行了。

不過AT&T由于商業(yè)的考慮,以及在當(dāng)時現(xiàn)實環(huán)境下的思考,于是想將Unix的版權(quán)收回去。因此,AT&T在1979年發(fā)行的第七版Unix中,特別提到了“不可對學(xué)生提供源代碼”的嚴(yán)格限制!同時,也造成Unix業(yè)界之間的緊張氣氛,并且也引爆了很多的商業(yè)糾紛~

Tips

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

[if !supportLists]l?[endif]1984年之一:x86架構(gòu)的Minix操作系統(tǒng)開始撰寫并于兩年后誕生

關(guān)于1979年的版權(quán)聲明中,影響最大的當(dāng)然就是學(xué)校教Unix核心源代碼相關(guān)學(xué)問的教授了!想一想,如果沒有核心源代碼,那么如何教導(dǎo)學(xué)生認(rèn)識Unix呢?這問題對于Andrew Tanenbaum(譚寧邦,(注5))教授來說,實在是很傷腦筋的!不過,學(xué)校的課程還是得繼續(xù)啊!那怎么辦?

既然1979年的Unix第七版可以在Intel的x86架構(gòu)上面進(jìn)行移植,那么是否意味著可以將Unix改寫并移植到x86上面了呢?在這個想法上,譚寧邦教授于是乎自己動手寫了Minix這個Unix Like的核心程序!在撰寫的過程中,為了避免版權(quán)糾紛,譚寧邦完全不看Unix核心源代碼!并且強(qiáng)調(diào)他的Minix必須能夠與Unix兼容才行!譚寧邦在1984年開始撰寫核心程序,到了1986年終于完成,并于次年出版Minix相關(guān)書籍,同時與新聞群組(BBS及News)相結(jié)合~

Tips

之所以稱為Minix的原因,是因為他是個Mini(微小的)的Unix系統(tǒng)啰!^_^

這個Minix版本比較有趣的地方是,它并不是完全免費(fèi)的,無法在網(wǎng)絡(luò)上提供下載!必須要通過磁片/磁帶購買才行!雖然真的很便宜~不過,畢竟因為沒有在網(wǎng)絡(luò)上流傳,所以Minix的傳播速度并沒有很快速!此外,購買時,隨磁片還會附上Minix的源代碼!這意味著使用者可以學(xué)習(xí)Minix的核心程序設(shè)計概念喔?。ㄟ@個特色對于Linux的啟始開發(fā)階段,可是有很大的關(guān)系喔?。?/p>

此外,Minix操作系統(tǒng)的開發(fā)者僅有譚寧邦教授,因為學(xué)者很忙?。B哥當(dāng)了老師之后,才發(fā)現(xiàn),真的忙…)!加上譚寧邦始終認(rèn)為Minix主要用在教育用途上面, 所以對于Minix是點到為止!沒錯,Minix是很受歡迎,不過,使用者的要求/需求的聲音可能就比較沒有辦法上升到比較高的地方了!這樣說,你明白吧?^_^

[if !supportLists]l?[endif]1984年之二:GNU計劃與FSF基金會的成立

Richard Mathew Stallman(史托曼)在1984年發(fā)起的GNU計劃,對于現(xiàn)今的自由軟件風(fēng)潮,真有不可磨滅的地位!目前我們所使用的很多自由軟件或開源軟件,幾乎均直接或間接受益于GNU這個計劃呢!那么史托曼是何許人也?為何他會發(fā)起這個GNU計劃呢?

一個分享的環(huán)境:

Richard Mathew Stallman(生于1953年, 網(wǎng)絡(luò)上自稱的ID為RMS,(注6))從小就很聰明!他在1971年的時候,進(jìn)入黑客圈中相當(dāng)出名的人工智能實驗室(AILab.),這個時候的黑客專指計算機(jī)功力很強(qiáng)的人,而非破壞計算機(jī)的怪客 (cracker)喔!

當(dāng)時的黑客圈對于軟件的著眼點幾乎都是在“分享”,黑客們都認(rèn)為互相學(xué)習(xí)對方的源代碼,這樣才是產(chǎn)生更優(yōu)秀的源代碼的最佳方式!所以AI實驗室的駭客們通常會將自己的程序代碼公布出來跟大家討論喔!這個特色對于史托曼的影響很大!

不過,后來由于管理層以及黑客群們自己的生涯規(guī)劃等問題,導(dǎo)致實驗室的優(yōu)秀黑客離開該實驗室,并且進(jìn)入其他商業(yè)公司繼續(xù)發(fā)展優(yōu)秀的軟件。但史托曼并不服輸,仍然持續(xù)在原來的實驗室開發(fā)新的程序與軟件。后來,他發(fā)現(xiàn)到,自己一個人并無法完成所有的工作,于是想要成立一個開放的團(tuán)體來共同努力!

使用Unix開發(fā)階段:

1983年以后,因為實驗室硬件的更換,使得史托曼無法繼續(xù)以原有的硬件與操作系統(tǒng)繼續(xù)自由程序的撰寫~而且他進(jìn)一步發(fā)現(xiàn)到,過去他所使用的Lisp操作系統(tǒng),是麻省理工學(xué)院的專利軟件,是無法共享的,這對于想要成立一個開放團(tuán)體的

史托曼是個阻礙。于是他便放棄了Lisp這個系統(tǒng)。后來,他接觸到Unix這個系統(tǒng),并且發(fā)現(xiàn),Unix在理論與實際上,都可以在不同的機(jī)器間進(jìn)行移植。雖然Unix依舊是專利軟件,但至少Unix架構(gòu)上還是比較開放的!于是他開始轉(zhuǎn)而使用Unix系統(tǒng)。

因為Lisp與Unix是不同的系統(tǒng),所以,他原本已經(jīng)撰寫完畢的軟件是無法在Unix上面運(yùn)行的!為此,他就開始將軟件移植到Unix上面。并且,為了讓軟件可以在不同的平臺上運(yùn)行,因此,史托曼將他發(fā)展的軟件均撰寫成可以移植的型態(tài)!也就是他都會將程序的源代碼公布出來!

GNU計劃的推展(注7):

1984年,史托曼開始GNU計劃, 這個計劃的目的是:創(chuàng)建一個自由、開放的Unix操作系統(tǒng)(FreeUnix)。但是創(chuàng)建一個操作系統(tǒng)談何容易??!而且在當(dāng)時的GNU是僅有自己一個人單打獨(dú)斗的史托曼~這實在太麻煩,但又不想放棄這個計劃,那可怎么辦???

聰明的史托曼干脆反其道而行~“既然操作系統(tǒng)太復(fù)雜,我就先寫可以在Unix上面運(yùn)行的小程序,這總可以了吧?”在這個想法上,史托曼開始參考Unix上面現(xiàn)有的軟件,并依據(jù)這些軟件的作用開發(fā)出功能相同的軟件,且開發(fā)期間史托曼絕不看 其他軟件的源代碼,以避免吃上官司。后來一堆人知道免費(fèi)的GNU軟件,并且實際使用后發(fā)現(xiàn)與原有的專利軟件也差不了太多,于是便轉(zhuǎn)而使用GNU軟件,于是GNU計劃逐漸打開知名度。

雖然GNU計劃漸漸打開知名度,但是能見度還是不夠。這時史托曼又想:不論是什么軟件,都得要進(jìn)行編譯成為二進(jìn)制文件(binaryprogram)后才能夠執(zhí)行,如果能夠?qū)懗鲆粋€不錯的編譯器,那不就是大家都需要的軟件了嗎?因此他便開始撰寫C語言的編譯器,那就是現(xiàn)在相當(dāng)有名的GNU CCompiler(gcc)!這點相當(dāng)?shù)闹匾?!這是因為C語言編譯器版本眾多,但都是專利軟件,如果他寫的C編譯器夠棒,性能夠好,那么將會大大的讓GNU計劃出現(xiàn)在眾人眼前!如果忘記啥是編譯 器,請回到第零章去瞧瞧編譯程序吧!

但開始撰寫GCC時并不順利,為此,他先轉(zhuǎn)而將他原先就已經(jīng)寫過的Emacs編輯器寫成可以在Unix上面跑的軟件,并公布源代碼。Emacs是一種程序編輯器,它可以在使用者撰寫程序的過程中就進(jìn)行程序語法的檢驗,此一功能可以減少程序設(shè)計師除錯的時間!因為Emacs太優(yōu)秀了,因此,很多人便直接向他購買。

此時互聯(lián)網(wǎng)尚未流行,所以,史托曼便借著Emacs以磁帶(tape)出售,賺了一點錢 ,進(jìn)而開始全力撰寫其他軟件。并且成立自由軟件基金會(FSF, Free SoftwareFoundation),請更多工程師與志愿者撰寫軟件。終于還是完成了GCC,這比Emacs還更有幫助!此外,他還撰寫了更多可以被調(diào)用的C函數(shù)庫(GNU C library),以及可以被使用來操作操作系統(tǒng)的基本接口BASH shell!這些都在1990年左右完成了!

Tips

如果純粹使用文字編輯器來編寫程序的話,那么程序語法如果寫錯時,只能利用編譯時發(fā)生的錯誤訊息來修訂了,這樣實在很沒有效率。Emacs則是一個很棒的編輯器!注意!是編輯(editor)而非編譯(compiler)!它可以很快的立刻顯示出你寫入的語法可能有錯誤的地方,這對于程序設(shè)計師來說,實在是一個好到不能再好的工具了!所以才會這么的受到歡迎??!

GNU的通用公共許可證:

到了1985年,為了避免GNU所開發(fā)的自由軟件被其他人所利用而成為專利軟件, 所以他與律師草擬了有名的通用公共許可證(General PublicLicense, GPL), 并且稱呼他為copyleft(相對于專利軟件的copyright?。?。 關(guān)于GPL的相關(guān)內(nèi)容我們在下一個小節(jié)繼續(xù)談?wù)?,在這里,必須要說明的是,由于有GNU所開發(fā)的幾個重要軟件,如:

Emacs

GNU C(GCC)

GNU C Library(glibc)

Bash shell

造成后來很多的軟件開發(fā)者可以借由這些基礎(chǔ)的工具來進(jìn)行程序開發(fā)!進(jìn)一步壯大了自由軟件團(tuán)體!這是很重要的!不過,對于GNU的最初構(gòu)想“創(chuàng)建一個自由的Unix操作系統(tǒng)”來說,有這些優(yōu)秀的程序是仍無法滿足,因為,當(dāng)下并沒有“自由的Unix核心”存在…所以這些軟件仍只能在那些有專利的Unix平臺上工作~~一直到Linux的出現(xiàn)…更多的FSF開發(fā)的軟件可以參考如下網(wǎng)頁:

https://www.fsf.org/resources

Tips

事實上,GNU自己開發(fā)的核心稱為hurd, 是一個架構(gòu)相當(dāng)先進(jìn)的核心。不過由于開發(fā)者在開發(fā)的過程中對于系統(tǒng)的要求太過于嚴(yán)謹(jǐn),因此推出的日程一再延后,所以才有后來Linux的開發(fā)!

[if !supportLists]l?[endif]1988年:圖形界面XFree86計劃

有鑒于圖形用戶界面(Graphical User Interface, GUI)的需求日益加重,在1984年由MIT與其他協(xié)力廠商首次發(fā)表了X Window System,并且更在1988年成立了非營利性質(zhì)的XFree86這個組織。所謂的XFree86其實是X Window System +Free + x86的整合名稱呢!而這個XFree86的GUI接口更在Linux的核心1.0版于1994年放出時,整合于Linux操作系統(tǒng)當(dāng)中!

Tips

為什么稱圖形使用者接口為X呢?因為由英文單字來看,Window的W接的就是X啦!意指Window的下一版就是了!需注意的是,X Window并不是X Windows喔!

[if !supportLists]l?[endif]1991年:芬蘭大學(xué)生Linus Torvalds的一則簡訊

到了1991年,芬蘭的赫爾辛基大學(xué)的Linus Torvalds在BBS上面貼了一則消息, 宣稱他以bash, gcc等GNU的工具寫了一個小小的核心程序,該核心程序單純是個玩具,不像GNU那么專業(yè)。不過該核心程序可以在Intel的386機(jī)器上面運(yùn)行就是了。這讓很多人很感興趣!從此開始了Linux不平凡的路程!


[if !supportLists]1.1.3? [endif]關(guān)于GNU計劃、自由軟件與開放源代碼

GNU計劃對于整個自由軟件與開放源代碼軟件來說是非常重要的角色!下面我們就來談?wù)勥@東西吧!

[if !supportLists]l?[endif]自由軟件運(yùn)動:

1984年創(chuàng)立GNU計劃與FSF基金會的Stallman先生認(rèn)為,寫程序最大的快樂就是讓自己開發(fā)的良好的軟件讓大家來使用了!另外,如果使用方撰寫程序的能力比自己強(qiáng),那么當(dāng)對方修改完自己的程序并且回傳修改后的程序碼給自己,那自己的程序撰寫功力無形中就更往上爬了!這就是最早之前AI實驗室的黑客風(fēng)格!

而既然程序是想要分享給大家使用的,不過,每個人所使用的計算機(jī)軟硬件并不相同,既然如此的話,那么該程序的源代碼(Source code)就應(yīng)該要同時放出,這樣才能方便大家修改而適用于每個人的計算機(jī)中呢!這個將源代碼連同軟件程序放出的舉動,在GNU計劃的范疇之內(nèi)就稱為自由軟件(Free Software)運(yùn)動!

此外,史托曼同時認(rèn)為,如果你將你程序的Source code分享出來時,若該程序是很優(yōu)秀的,那么將會有很多人使用,而每個人對于該程序都可以查閱sourcecode,無形之中,就會有一票人幫你除錯啰!你的這支程序?qū)絹碓綁汛螅≡絹碓絻?yōu)秀呢!

[if !supportLists]l?[endif]自由軟件的版權(quán)GNU GPL:

而為了避免自己的開發(fā)出來的Open source自由軟件被拿去做成專利軟件,于是Stallman同時將GNU與FSF發(fā)展出來的軟件,都掛上GPL的版權(quán)聲明~這個FSF的核心觀念是“版權(quán)制度是促進(jìn)社會進(jìn)步的手段,版權(quán)本身不是自然權(quán)力。”對于FSF有興趣或者對于GNU想要更深入的了解時,請參考朝陽科技大學(xué)洪朝貴教授的網(wǎng)站 http://people.ofset.org/~ckhung/a/c_83.php,或直接到GNU去:http://www.gnu.org里面有更為深入的解說!

Tips

為什么要稱為GNU呢?其實GNU是GNU'sNot Unix的縮寫,意思是說,GNU并不是Unix?。∧敲碐NU又是什么呢?就是GNU's Not Unix嘛!……如果你寫過程序就會知道,這個GNU = GNU's Not Unix可是無窮循環(huán)??!忙碌~

另外,什么是Open Source呢?所謂的source code是程序發(fā)展者寫出的原始程序碼,Open Source就是,軟件在發(fā)布時,同時將作者的源代碼一起公布的意思!

[if !supportLists]l?[endif]自由(Free)的真諦:

那么這個GPL(GNU General PublicLicense, GPL)是什么玩意兒?為什么要將自由軟件掛上GPL的“版權(quán)聲明”呢?這個版權(quán)聲明對于作者有何好處?首先,Stallman對GPL一直是強(qiáng)調(diào)Free的,這個Free的意思是這樣的:

"Free software"is a matter of liberty, not price. To understand the concept, you should thinkof "free speech", not "free beer"."Free software"refers to the users' freedom to run, copy, distribute, study, change, andimprove the software

大意是說,F(xiàn)ree Software(自由軟件)是一種自由的權(quán)力,并非是“價格”!舉例來說,你可以擁有自由呼吸的權(quán)力、你擁有自由發(fā)表言論的權(quán)力,但是,這并不代表你可以到處喝“免費(fèi)的啤酒?。╢ree beer)”,也就是說,自由軟件的重點并不是指“免費(fèi)”的,而是指具有“自由度,freedom”的軟件,史托曼進(jìn)一步說明了自由度的意義是:使用者可以自由的執(zhí)行、復(fù)制、再發(fā)行、學(xué)習(xí)、修改與強(qiáng)化自由軟件。

這無疑是個好消息!因為如此一來,你所拿到的軟件可能原先只能在Unix上面跑,但是經(jīng)過源代碼的修改之后,你將可以拿他在Linux或者是Windows上面來跑!總之,一個軟件掛上了GPL版權(quán)宣告之后,它自然就成了自由軟件!這個軟件就具有下面的特色:

取得軟件與源代碼:你可以根據(jù)自己的需求來執(zhí)行這個自由軟件;

復(fù)制:你可以自由的復(fù)制該軟件;

修改:你可以將取得的源代碼進(jìn)行程序修改,使之適合你的工作;

再發(fā)行:你可以將你修改過的程序,再度的自由發(fā)行,而不會與原先的撰寫者沖突;

回饋:你應(yīng)該將你修改過的程序碼回饋于社群!

但請?zhí)貏e留意,你所修改的任何一個自由軟件都不應(yīng)該也不能這樣:

修改授權(quán):你不能將一個GPL授權(quán)的自由軟件,在你修改后而將它取消GPL授權(quán)~

單純販賣:你不能單純的販賣自由軟件。

也就是說,既然GPL是站在互助互利的角度上去開發(fā)的,你自然不應(yīng)該將大家的成果占為己有,對吧!因此你當(dāng)然不可以將一個GPL軟件的授權(quán)取消,即使你已經(jīng)對該軟件進(jìn)行大幅度的修改!那么自由軟件也不能販賣嗎?當(dāng)然不是!還記得上一個小節(jié)里面,我們提到史托曼借由販賣Emacs取得一些經(jīng)費(fèi),讓自己生活不至于匱乏吧?是的!自由軟件是可以販?zhǔn)鄣?,不過,不可僅販?zhǔn)墼撥浖瑧?yīng)同時搭配售后服務(wù)與相關(guān)手冊~這些可就需要工本費(fèi)了呢!

[if !supportLists]l?[endif]自由軟件與商業(yè)行為:

很多人還是有疑問,目前不是有很多Linux開發(fā)商嗎?為何他們可以販?zhǔn)跮inux這個GPL授權(quán)的軟件?原因很簡單,因為他們大多都是販?zhǔn)邸笆酆蠓?wù)”!所以,他們所使用的自由軟件,都可以在他們的網(wǎng)站上面下載?。ó?dāng)然,每個廠商他們自己開發(fā)的工具軟件就不是GPL的授權(quán)軟件了?。┑?,你可以購買他們的Linux光盤,如果你購買了光盤,他們會提供相關(guān)的手冊說明文檔,同時也會提供你數(shù)年不等的咨詢、售后服務(wù)、軟件升級與其他協(xié)力工作等等的附加價值!

所以說,目前自由軟件工作者,他們所賴以維生的,幾乎都是在“服務(wù)”這個領(lǐng)域呢!畢竟自由軟件并不是每個人都會撰寫,有人有需要你的自由軟件時,他就會請求你的協(xié)助,此時,你就可以通過服務(wù)來收費(fèi)了!這樣來說,自由軟件確實還是具有商業(yè)空間的喔!

Tips

很多人對于GPL授權(quán)一直很疑惑,對于GPL的商業(yè)行為更是無法接受!關(guān)于這一點,鳥哥在這里還是要再次的申明,GPL是可以從事商業(yè)行為的!而很多的作者也是借由這些商業(yè)行為來得以取得生活所需,更進(jìn)一步去發(fā)展更優(yōu)秀的自由軟件!千萬不要聽到“商業(yè)”就排斥!這對于開發(fā)優(yōu)良軟件的朋友來說,是不禮貌的!


上面提到的大多是與使用者有關(guān)的項目,那么GPL對于自由軟件的作者有何優(yōu)點呢?大致的優(yōu)點有這些:

?? 軟件安全性較佳;

? ?軟件執(zhí)行性能較佳;

?? 軟件除錯時間較短;

?? 貢獻(xiàn)的源代碼永遠(yuǎn)都存在。

這是因為既然是提供源代碼的自由軟件,那么你的程序碼將會有很多人幫你查閱,

如此一來,程序的漏洞與程序的優(yōu)化將會進(jìn)展的很快!所以,在安全性與性能上面,自由軟件一點都不輸給商業(yè)軟件喔!此外,因為GPL授權(quán)當(dāng)中,修改者并不能修改授權(quán),因此,你如果曾經(jīng)貢獻(xiàn)過程序碼,嘿嘿!你將名留青史呢!不錯吧!^_^

對于程序開發(fā)者來說,GPL實在是一個非常好的授權(quán),因為大家可以互相學(xué)習(xí)對方的程序撰寫技巧,而且自己寫的程序也有人可以幫忙除錯。那你會問啊,對于我們這些廣大的終端用戶,GPL有沒有什么好處啊?有??!當(dāng)然有!雖然終端用戶或許不會自己編譯程序碼或者是幫人家除錯,但是終端用戶使用的軟件絕大部分就是GPL的軟件,全世界有一大票的工程師在幫你維護(hù)你的系統(tǒng),這難道不是一件非常棒的事嗎?^_^

Tips

就跟人類社會的科技會進(jìn)步一樣,授權(quán)也會進(jìn)步喔!因應(yīng)源代碼分區(qū)與重組的問題,與其他開源軟件的授權(quán)包容性,以及最重要的數(shù)字版權(quán)管理(Digital Rights Management, DRM)等問題,GPL目前已經(jīng)出到第三版GPLv3。但是,目前使用最廣泛的,還是 GPLv2喔!包括Linux核心就還是使用 GPLv2的說!

[if !supportLists]l?[endif]開放源代碼:

由于自由軟件使用的英文為free software,這個“free”在英文是有兩種以上不同的意義,除了自由之外,免費(fèi)也是這個單詞!因為有這些額外的聯(lián)想,因此許多的商業(yè)公司對于投入自由軟件方面確實是有些疑慮存在的!許多人對于這個情況總是有些擔(dān)心~

為了解決這個困擾,1998年成立的“開放源代碼促進(jìn)會(OpenSource Initiative)”提出了開放源代碼(OpenSource,亦可簡稱開源軟件)這一名詞!另外,并非軟件可以被讀取源代碼就可以被稱為開源軟件喔!該軟件的授權(quán)必須要符合下面的基本需求,才可以算是open source的軟件哩?。ㄗ?)

公布源代碼且用戶具有修改權(quán):用戶可以任意的修改與編譯程序碼,這點與自由軟件差異不大;

任意的再傳播:該程序碼全部或部份可以被販?zhǔn)郏页绦虼a可成為其他軟件的組件之一,作者不該宣稱具有擁有權(quán)或收取其他額外費(fèi);

必須允許修改或衍生的作品,且可讓再發(fā)布的軟件使用相似的授權(quán)來發(fā)表即可;

承上,用戶可使用與原本軟件不同的名稱或編號來傳播;

不可限制某些個人或團(tuán)體的使用權(quán);

不可限制某些領(lǐng)域的應(yīng)用:例如不可限制不能用于商業(yè)行為或者是學(xué)術(shù)行為等特殊領(lǐng)域等等;

不可限制在某些產(chǎn)品當(dāng)中,亦即程序碼可以應(yīng)用于多種不同產(chǎn)品中;

不可具有排他條款,例如不可限制本程序代碼不能用于教育類的研究中,諸如此類。

根據(jù)上面的定義,GPL自由軟件也可以算是開源軟件的一個,只是對于商業(yè)應(yīng)用的限止稍微多一些而已。與GPL自由軟件相比,其他開源軟件的授權(quán)可能比較寬松喔!比較寬松的部份包括:再發(fā)布的授權(quán)可以跟原本的軟件不同;另外,開源軟件的全部或部份可作為其他軟件的一部分,且其他軟件無須使用與開源軟件相同的授權(quán)來發(fā)布!這跟GPL自由軟件差異就大了!自由軟件的GPL授權(quán)規(guī)定,任何軟件只要用了GPL的全部或部份程序碼,那么該軟件就得要使用GPL的授權(quán)!這對于自由軟件的保障相當(dāng)大!但對于想要保有商業(yè)公司自己的商業(yè)機(jī)密的專屬軟件來說,要使用GPL授權(quán)還是怕怕的!這也是后來商業(yè)公司擁抱其他 open source開源軟件授權(quán)的緣故!因為可以用于商業(yè)行為啰!更多的差異或許可以參考一下開源促進(jìn)會的說明。

另外,Open source這個名詞只是一個指引,而實際上并不是先有 opensource才有相關(guān)的授權(quán)。早在open source出來之前就有些開源軟件的授權(quán)存在了(例如GPL?。。?!不過有open source這個名詞之后,大家才更了解到開源軟件授權(quán)的意義就是了。那常見的開放源代碼授權(quán)有哪些呢?

ApacheLicense 2.0

BSD3-Clause "New" or "Revised" license

BSD2-Clause "Simplified" or "FreeBSD" license

GNUGeneral Public License (GPL)

GNULibrary or "Lesser" General Public License (LGPL) MIT license

MozillaPublic License 2.0

CommonDevelopment and Distribution License

鳥哥也不是軟件授權(quán)的高手!每個授權(quán)詳細(xì)的內(nèi)容也可以參考OSI協(xié)會的介紹啦(注9)。

Tips

如前所述,GPL也是合乎Open source所定義的授權(quán)之一,只是它更著重于保護(hù)自由軟件本身的學(xué)習(xí)與發(fā)展就是了!那如果你想要開發(fā)開源軟件時,到底使用哪種授權(quán)比較好呢?其實跟你對這個軟件的未來走向的定義有關(guān)啦!簡單的來說,如果你的軟件未來你允許它用于商業(yè)活動中,可以考慮BSD之類的授權(quán),如果你的軟件希望少一些商業(yè)色彩,GPLv2大概是不二選擇啰!那如果你的軟件允許分支開發(fā),甚至可以考慮分成兩種版本分別授權(quán)哩!^_^

[if !supportLists]l?[endif]專屬軟件/專利軟件(close source)

相對于Open Source的軟件會放出源代碼,close source的程序則僅推出可執(zhí)行的二進(jìn)制程序(binary program)而已。這種軟件的優(yōu)點是有專人維護(hù),你不需要去更動他;缺點則是靈活度大打折扣,使用者無法修改該程序成為自己想要的樣式!此外,若有木馬程序或者安全漏洞,將會花上相當(dāng)長的一段時間來除錯!這也是所謂專利軟件(copyright)常見的軟件出售方式。

雖然專利軟件常常代表就是需要花錢去購買,不過有些專利軟件還是可以“免費(fèi)”提供大眾使用的!免費(fèi)的專利軟件代表的授權(quán)模式有:

Freeware:

http://en.wikipedia.org/wiki/Freeware

不同于Free software,F(xiàn)reeware為“免費(fèi)軟件”而非“自由軟件”!雖然它是免費(fèi)的軟件,但是不見得要公布其源代碼,就看發(fā)行者的意思啰!這個東西與OpenSource畢竟是不太相同的東西喔!此外,目前很多標(biāo)榜免費(fèi)軟件的程序很多都有小問題!例如假借免費(fèi)軟件的名義,實施用戶數(shù)據(jù)竊取的目的!所以“來路不明的軟件請勿安裝!”

Shareware:

http://en.wikipedia.org/wiki/Shareware

共享軟件這個名詞就有趣了!與免費(fèi)軟件有點類似的是,Shareware在使用初期,它也是免費(fèi)的,但是,到了所謂的“試用期限”之后,你就必須要選擇“付費(fèi)后繼續(xù)使用”或者“將它移除”的宿命~通常,這些共享軟件都會自行撰寫失效程序,讓你在試用 期限之后就無法使用該軟件。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容