第一章 初識 Linux
Linux 是一款功能強大的類 Unix 作業系統,它不僅設計精巧,而且效能穩定。如今 Linux 的身影遍佈全球,從龐大的巨型機到微型的嵌入式裝置,我們日常生活的各個方面都充斥著 Linux 的應用。
與其他作業系統不同的是,Linux 完全免費和開源,它彙集了全球頂尖軟體開發者和計算機專家的智慧,並且賦予了所有人自由使用的權利。這種自由精神與黑客思維與生俱來,以至於後來 Linux 本身就成為了開源文化的代表。它向人們闡釋了“自由”的真正含義,推動了軟體開源運動的發展。
因此,無論從哪個角度來說,Linux 都是一款偉大的作業系統。
1.1 Unix 的發展
1965 年,麻省理工學院、貝爾實驗室和美國通用電氣公司一起合作,準備研發一個多使用者、多工、多層次(multi-user、multi-processor、multi-level)的超級作業系統,取名為 Multics。但是由於目標設定過高,Multics 專案一直都進展緩慢,最終在 1969 年被迫停止。
Multics 專案停止後,貝爾實驗室中參與專案的 Ken Thompson 也閒了下來。因為沒事幹了,Ken 就跑回去玩他自己寫的一個叫做“星際旅行”的遊戲,但是由於執行遊戲的 GE-635 效能太差,所以玩起來非常不爽。這時貝爾實驗室正好有一臺效能好很多的 PDP-7 扔著沒人用,Ken 就萌生了將遊戲移植到 PDP-7 上的想法。從 1969 年起,Ken Thompson 開始為 PDP-7 開發作業系統。後來為了能早點兒玩上游戲,Dennis Ritchie 也參與了進來。
1970 年,兩人實現了一個簡單的作業系統,成功地將遊戲移植到了 PDP-7 上。因為當時這個系統只能同時支援兩個使用者使用,就有人調侃他們,說你們這個破玩意離 Multics 差遠了,就叫 Unics (UNiplexed Information and Computing Service) 吧。後來,大家取其諧音,就稱其為"UNIX"。
最初的 Unix 是用匯編語言寫的,修改起來非常麻煩。隨著對系統的不斷完善,修改程式碼的工作量也變得越來越龐大,最終兩人決定使用高階語言重寫系統。他們一開始嘗試使用 Fortran,後來又改用 BCPL,但始終覺得不夠滿意。既然現有的程式語言無法滿足需要,那就自己創造新的語言。於是兩人先改良 BCPL 創造出了 B 語言,再後來 Dennis 又進一步改進 B 語言,創造出了 C 語言,最後兩人用 C 語言重寫了第三版 Unix。
正所謂“有心栽花花不開,無心插柳柳成蔭”,一大幫專家、機構一門心思地搞 Multics 卻失敗了,而兩個人出於興趣在業餘時間的“玩耍”,卻誕生了偉大的 C 語言和 Unix。
圖 1-1 PDP-7計算機
1974 年 7 月,Ken Thompson 和 Dennis Ritchie 在 《Communication of the ACM》 上發表了一篇論文“The UNIX Time-Sharing System”,由此 Unix 第一次被公開詳盡地介紹給全世界。
在那個相互學習研究的時代,分享程式原始碼是很平常的事,Unix 原始碼也被流傳到了各個實驗室、學校和公司。當時除了 AT&T 公司的貝爾實驗室外,Unix 開發的另一條主線就在加州大學伯克利分校。1974 年,該校教授獲得了一份第 4 版的 Unix 副本,伯克利分校的學生們在拿到原始碼後,就開始細緻地研究,同時對系統進行改良。其中最傑出的一位學生名叫 Bill Joy(後來 Sun 公司的創始人),他在學習的同時獨立為 Unix 開發了大量的軟體,比如著名的 Vi 編輯器、C-Shell 等等。1977 年,Bill Joy 裝配了第一版的伯克利 Unix,稱為伯克利軟體套裝(BSD)。
漸漸地,AT&T 公司意識到了 UNIX 的巨大潛能,覺得這是一個賺大錢的機會。於是在 1979 年宣佈將 UNIX 作為商業產品進行銷售,所有的 BSD 使用者都必須購買 AT&T 公司的許可證,而且其後每年 AT&T 公司都會提高許可證的價格。這不僅引起了廣大 BSD 使用者的不滿,也意味著大學不能再繼續使用 UNIX 作為教學工具了,因為 AT&T 公司禁止公司之外的人檢視原始碼。
於是荷蘭阿姆斯特丹 Vrije 大學的 Andrew Tanenbaum 教授自己寫了一個與 Unix 極其相似、但規模非常小的作業系統用於教學,並命名為 Minix。但是由於 Tanenbaum 堅持認為 Minix 系統只用於教學,所以他拒絕接受其他程式設計師增強系統的建議,這令 Minix 的使用者非常不爽。
1985 年 Richard Stallman 成立自由軟體基金會,再一次激發起全世界程式設計師的熱情,大家都在渴望一個健壯、自由的作業系統。Stallman 計劃的第一個專案 GNU 就是一個自由且與 Unix 相容的作業系統,但是作業系統最關鍵的核心部分卻遲遲沒有完成。
一切彷彿天意,年輕的芬蘭學生 Linus Torvalds 出於興趣,決定編寫自己的核心。Linus 絕對無法想到,他的個人作業系統後來成為歷史上最重要的開源事業,吸引了全世界上百萬的程式設計師參與其中,簡直可以說改變了世界。
1.2 Linux 誕生
1991 年,當時 Linus 還是 Helsinki 大學電腦科學系的二年級學生。他在仔細地研究了 Minix 系統的原始碼後,向 Usenet 討論組(Minix 的論壇)發了一個訊息,告訴大家自己出於興趣,打算構建一個作業系統。因為自由軟體基金會已經提供了各種實用工具,所以 Linus 的主要工作是編寫核心。
1991 年 9 月,Linus 通過因特網發行了第一版的核心,稱為 Linux。接著在極短的時間裡,Linus 開始一個接一個地發行新版本的 Linux。全世界的程式設計師逐漸開始加入到 Linus 的行列,各路程式設計高手的智慧通過網際網路融合在一起,最終成千上萬的志願者參與到 Linux 核心的修改和擴充套件中來。
圖 1-2 Linus Torvalds
Linus 選擇使用單核心來設計 Linux,而 Minix 使用的是微核心。Tanenbaum 教授(Minix 編寫者)曾公開批判 Linus 的這種設計,但 Linux 最終變得非常流行,執行在各種型別的計算機上,系統的高效性得到廣泛的認可,成為歷史上最成功的類 Unix 作業系統。
最初的 0.01 版的 Linux 核心僅包含83個檔案,程式碼總共還不到 9000 行,而如今的 Linux 核心共包含 17000 多個檔案,程式碼有數百萬行。
Linux 核心以 GNU GPL (通用公共許可證,詳見 1.4 節)的名義釋出,這吸引了大量的程式設計師自願參與其中,因為他們所做的任何事情都將與全世界的其他程式設計師自由共享,而且 GPL 還確保最終使用 Linux 核心的作業系統也都自由發行。由於有大量的愛好者來測試以及閱讀新程式碼,使得 bug 很快就被發現,所以 Linus 發行新核心的速度比以往任何人都要快,使得 Linux 得以飛速地發展和完善。
Linus 的這種思想也被越來越多的人所接受:
Given enough eyeballs, all bugs are shallow
讓足夠多的人閱讀原始碼,錯誤將無所遁形
提到 Linux,很多人都會想到“自由”,但大多數人並不知道自由的真正含義。William E.Shotts,Jr 的一段話恰好做了最好的說明:
“自由”是一種權力,它決定你的計算機能做什麼,同時能夠擁有這種“自由”的唯一方式就是知道計算機正在做什麼。“自由”是指一臺沒有任何祕密的計算機,你可以從它那裡瞭解一切,只要你用心地去尋找。
1.3 FSF 自由軟體基金會
大部分的軟體公司在發行程式時,都會要求使用者接受許可證協議,嚴格限制程式的複製和修改。不過也有一些天才的程式設計師,他們鼓勵複製軟體,並且認為這種方式會讓世界向好的一面改變。Richard Stallman 便是這其中的代表人物。
Stallman 認為,專有封閉的作業系統是對他作為一名創造者的社會權利的限制。以他自己的話說,一個“專有軟體系統,在這裡面不允許對軟體進行共享或修改”不僅“反社會”,而且還是“不道德”並且“錯誤”的。他認為,這樣的系統會在程式設計師和軟體公司之間產生不健康的權利鬥爭。
而解決這種問題的方法,就是從頭開始建立大量編寫出色、實用的軟體,並且這些軟體可以自由發行。
後來,Stallman 發現自己的理想與現實情況越來越格格不入,於是毅然辭去自己在麻省理工學院實驗室的工作,和一小批程式設計師一起啟動了一個稱為自由軟體基金會(FSF)的組織。Stallman 的指導原則就是“計算機使用者應該能夠自由地修改軟體以適應自己的需求,並且自由共享軟體,因為幫助他人是基本的社會責任”。Stallman 相信程式設計師的天性是希望共享他們的工作,而且當他們這樣做時,所有人都會受益。
圖 1-3 自由軟體基金會
FSF 的第一個目標就是建立一個自由共享並且可以被任何人修改的作業系統。為了能平穩融入到已有的程式設計文化中,Stallman 決定新的作業系統應與 Unix 相容(看上去像 Unix 系統,能夠執行 Unix 程式),Stallman 將這一作業系統稱為 GNU。
到 1991 年 Linux 的第一個版本公開發行時,GNU 計劃已經完成除了作業系統核心之外的大部分軟體,其中包括了一個殼程式(shell)、C語言程式庫以及一個C語言編譯器(gcc)。Linus 及其他早期 Linux 開發人員加入了這些工具,從而完成了真正意義上的 Linux 作業系統。由於 Linux 使用了許多 GNU 程式,所以 Stallman 認為應該將其稱為“GNU/Linux”更為恰當。不過也有人認為,把 GNU 用在 Linux 名字裡,對於其他為 Linux 發展做出重大貢獻的程式設計師就太不公平了。
目前“Linux”一般是指 Linux 核心以及在其發行版中所包含的所有免費及開源軟體,也就是說,整個 Linux 生態系統,不僅僅只有 GNU 專案軟體。但 GNU 所宣揚的“自由”精神,以及對程式設計文化的變革,都對 Linux 的發展做出了重大的貢獻。
1.4 GNU 宣言與 GPL
FSF 成立後不久,Stallman 撰寫了一篇論文,他稱之為 GNU 宣言。解釋了促進自由軟體思想的原因。
隨著網際網路的興起,自由軟體(開源軟體)的開發和發行已經成為世界上一個重要的經濟和社會力量。目前差不多有數萬個程式可以自由使用,它們對世界的貢獻用金錢難以衡量,而且編寫這些程式的程式設計師也非常熱衷於這項事業。
GNU 宣言摘錄:
我認為:如果我喜歡一個程式的話,那我就應該將它分享給其他喜歡這個程式的人。這句話是我的座右銘。軟體商想各個擊破使用者,使他們同意不把軟體和他人分享。我拒絕以這種方式破壞使用者之間的團結。我的良心使我不會簽下一個不開放的合約或是軟體許可證協議。在麻省理工學院人工智慧實驗室工作的多年時間裡,我一直反對這樣的趨勢與冷漠,但是最後事情槽糕到:我無法在一個處理事情的方法與我的意願相違背的機構呆下去。
為了能繼續使用電腦而不感到羞愧,我決定將一大堆自由軟體集合在一起,從而使我不必再使用不自由的軟體。因此,我辭去了人工智慧實驗室的工作,不給麻省理工學院任何法律上的藉口來阻止我把 GNU 送給他人……
很多程式設計師對系統軟體的商業化感到不悅。這雖然可以使他們賺更多的錢,但使他們覺得自己與其他程式設計師處於對立狀態,而不是同志之間的感覺。程式設計師對友誼的最基本表現就是共享程式,而當前的市場運作基本上禁止程式設計師將其他程式設計師作為朋友看待。軟體購買者必須在友誼和守法之間做一選擇。
複製全部或部分程式對程式設計師來說就和呼吸一樣是自然有益的事。複製軟體就應該這麼自由……
Stallman 認為如果要建立一個大型的自由軟體,需要一個合適的許可證協議,並在這個協議之下發行軟體。為了這個目的,他提出了非盈利版權(copyleft)的理念,授予任何人執行程式、複製程式、修改程式以及發行修改後程式的許可權,但是不能在自己修改後的軟體上新增限制。
為了實現非盈利版權這一思想,Stallman 於 1989 年釋出了通用公共許可證(GPL)。GPL 協議要求任何重新發行軟體(包括修改後的版本)的人,都不能剝奪軟體的使用自由或新增自己的限制。
GPL 協議變得非常流行,而非盈利版權許可證協議和網際網路的結合使開源運動的規模空前繁榮。在 Unix 世界中,開源運動的影響有深遠的意義,如果沒有 FSF 和 GPL 對程式設計文化的變革,Linux 或許就不會出現。
相關文章
- 第一章 初識AndroidAndroid
- 電商專案——初識電商——第一章
- 第一章:初識3D列印3D
- 【Linux】初識程式!!!Linux
- 初識Linux教程:Linux基礎(轉)Linux
- Linux日誌服務初識Linux
- 初識Linux目錄結構Linux
- 初識Linux核心-DIY核心模組Linux
- C語言程式設計入門之--第一章初識程式C語言程式設計
- 講講我與Linux的初識Linux
- 《Redis開發與運維》第一章 初識Redis 讀書筆記Redis運維筆記
- Linux基礎入門(一)初識ShellLinux
- 《Terraform 101 從入門到實踐》 第一章 Terraform初相識ORM
- VB初級教程(第一章) (轉)
- 初識Linux核心-和CMOS打電話Linux
- 初識MybatisMyBatis
- 初識 DockerDocker
- rocketmq初識MQ
- 初識 reduxRedux
- 初識GitGit
- Express初識Express
- Kafka 初識Kafka
- 初識 “HTML”HTML
- 初識GolangGolang
- 初識dockerDocker
- 初識RedisRedis
- 初識GOGo
- 初識promisePromise
- 初識VueVue
- 初識JSJS
- 初識jQueryjQuery
- 初識JavaScriptJavaScript
- 初識WebAssemblyWeb
- 初識機器學習機器學習
- 初識JVMJVM
- 初識HaphoopOOP
- 初識JavaWEBJavaWeb
- 初識HTTPHTTP