# GNU Project 及計算機發展史 :::info We can't live, work, or learn in freedom unless the software we use is free. -- GNU Project :computer: ::: ## 話說從頭 計算機的發展總是離不開人類的需求。 最初計算機目的在提供計算功能,這也是為什麼計算機的英文是 Computer。當然這跟我們的想像上差很多,上面也沒有作業系統,人們需要帶著打孔紙帶去操作機器。機器讀入程式後就會開始工作直到程式停止。 後來為了便利使用者,軟體工程師將一些 library 移植到計算機上來幫助輸入輸出,這也就是 **作業系統** 最初的使命 -- ==「提供更方便的介面讓使用者操作計算機」==。 說到底作業系統就是一個 *Abstraction*,他向下跟硬體打交道,向上則提供系統呼叫(System Call)等介面方便使用者使用,讓上層工程師開發軟體時不用考慮到底層的東西。 ```graphviz digraph graphname{ "使用者" -> "作業系統"; "作業系統" -> "硬體"; } ``` --- ## UNIX 作業系統 從二戰以來,計算機與作業系統的發展持續進行著。硬體方面大致就跟著摩爾定律,積體電路上可容納的電晶體數目越來越多,使得計算機的算力越來越強大;軟體方面則是持續 *Abstraction* 的工作,包括開發相關 library、cmd 與 debugger 等工具讓使用者能更方便的操作計算機。 然而沒過幾十年,這個 "Single-User, Single-Task" 的計算機越來越不符合人們的期待。人們開始希望這台計算機能夠同時多人使用、可以共享運算硬體資源給多個程式等。也正是因為這個需求,緊接而來的就是作業系統蓬勃發展的時代。 ```graphviz digraph graphname{ "Single-User / Single-Task OS (~1960)" -> "Multi-Task / Multi-User OS (1960~)"; } ``` 1964 年,MIT、通用電信(Generic) 以及 AT&T 貝爾實驗室(Bell Lab) 合作發開分時作業系統 Multics,不過因為野心太大而在 1969 年以失敗收場。不過貝爾實驗室中的 Ken Thompson 以及 Dennis Ritchie 則在工作之餘承接 Multics 繼續開發,到 1970 年完成了初版 UNIX。 ![](https://upload.wikimedia.org/wikipedia/commons/8/8f/Ken_Thompson_%28sitting%29_and_Dennis_Ritchie_at_PDP-11_%282876612463%29.jpg) - 圖為 Ken Thompson & Dennis Ritchie 工作的照片 - Credit : By <a rel="nofollow" class="external text" href="https://www.flickr.com/people/30188295@N07">Peter Hamer</a> - <a rel="nofollow" class="external text" href="https://web.archive.org/web/20111214202040/http://www.flickr.com/photos/peter-hamer/2876612463/">Ken Thompson (sitting) and Dennis Ritchie at PDP-11 </a> Uploaded by <a href="//commons.wikimedia.org/wiki/User:Magnus_Manske" title="User:Magnus Manske">Magnus Manske</a>, <a href="https://creativecommons.org/licenses/by-sa/2.0" title="Creative Commons Attribution-Share Alike 2.0">CC BY-SA 2.0</a>, <a href="https://commons.wikimedia.org/w/index.php?curid=24512134">Link</a> 直到 1971 年,這個看似沒有用的東西終於派上了用場,貝爾實驗室智財部門正巧需要一台用於文書處理的電腦,因此他們便將初版 UNIX 移植到 PDP-11/20 上,並在後續的兩年發明了 C 語言並重寫 UNIX 作業系統 (本來是用組合語言),並在 1974 年釋出第二版 UNIX 作業系統。 也因為是用 C 語言開發,UNIX 作業系統在當時有著易讀、易改、易移植 (反觀其他以組合語言開發的作業系統改 ISA 就要整套重寫) 等優勢。正是因為上述的優點,使得每個人都很容易的根據 UNIX 原始碼繼續開發。UNIX 系統也在傳入各大學後便被發揚光大,演化成各式不同的作業系統,像是 Berkley 主導的 BSD。 ![](https://upload.wikimedia.org/wikipedia/commons/7/77/Unix_history-simple.svg) - 圖為 UNIX 演化圖 - Credit : By <a href="//commons.wikimedia.org/wiki/User:Eraserhead1" title="User:Eraserhead1">Eraserhead1</a>, <a href="//commons.wikimedia.org/wiki/User:Infinity0" title="User:Infinity0">Infinity0</a>, <a href="//commons.wikimedia.org/wiki/User:Sav_vas" title="User:Sav vas">Sav_vas</a> - <a rel="nofollow" class="external text" href="http://www.levenez.com/unix/history.html">Levenez Unix History Diagram</a>, <a rel="nofollow" class="external text" href="http://www.ibm.com/developerworks/library/it-schenk1/schenk3.html">Information on the history of IBM's AIX on ibm.com</a>, <a href="https://creativecommons.org/licenses/by-sa/3.0" title="Creative Commons Attribution-Share Alike 3.0">CC BY-SA 3.0</a>, <a href="https://commons.wikimedia.org/w/index.php?curid=1801948">Link</a> --- ## GNU Project 可惜好景不常,到了 1980 年左右,美國上下都開始注意到 "CopyRight" 的重要性,除了 Bill Gates 在 1976 年提出軟體私有化公開信以外,UNIX 以及 UNIX 上的許多軟體商也開始走向閉源、專有軟體,拒絕提供原始碼供使用者修改。 正是因為這股趨勢,在 1983 年 Richard Matthew Stallman 決定挺身而出發起了 GNU 計畫,以抵擋這波私有化趨勢。 GNU 最終目標是成立一個完全自由的作業系統,希望每位使用者都能夠「自由使用」整台電腦的程式碼。所謂「自由使用」還包含自由修改、自由學習原始碼、自由分享給他人等。 GNU Project 在軟體開發上獲得空前的成功,當中仍有現在還在使用的軟體,例如 `gcc`、`gdb`、`emacs` 等軟體。更重要的是 GNU 發表了 [GNU通用公眾授權條款(GPL)](https://www.gnu.org/licenses/quick-guide-gplv3.en.html)。GPL 是個 "Copyleft" 的授權,雖然這將讓程式開發者被迫放棄其部分權利,卻也同時使得大眾都能自由的使用、修改這些程式碼,自然使開發的速度更快、Bug 更少。 --- ## GNU/Linux ![](https://upload.wikimedia.org/wikipedia/commons/3/3a/Linux_kernel_ubiquity.svg) - Linux 作業系統與我們的生活 - Credit : By Shmuel Csaba Otto Traian, <a href="https://creativecommons.org/licenses/by-sa/3.0" title="Creative Commons Attribution-Share Alike 3.0">CC BY-SA 3.0</a>, <a href="https://commons.wikimedia.org/w/index.php?curid=28506087">Link</a> 1980 年末期,BSD 系統成為 UNIX 分支中的主流,原因除了 BSD 開源外,更重要的是 BSD4.3 是最初開發出有 TCP/IP 功能的作業系統核心。也正因為如此,使用者紛紛投入 BSD 的懷抱,並促成了 1990 年代網路的蓬勃發展。 BSD 的成功引來了 AT&T 公司的注意,他們很快地發現 BSD4.3 作業系統核心中有部分程式碼仍使用 UNIX 的程式碼,因此就向 BSD 提出了智財權訴訟。 先不論訴訟的結果如何,AT&T 對 BSD 提出訴訟這件事情對當時軟體開發者社群造成很大的影響,許多人開始害怕使用 BSD 系統,深怕哪天就被 AT&T 大公司提出智財訴訟。 而正在此時,一位在赫爾辛基大學的大學生 Linus Torvalds 就開始寫一個他自己的作業系統 -- ==也就是後來的 Linux 核心==。這位天才 Linus 只花了大概一年就完成了這個作業系統,並在 1991 年以 GNU GPL 授權發布,這時候 AT&T 與 BSD 的訴訟仍持續在進行,而這個自由且沒有法律疑慮的作業系統,變成了開發者的新寵。 就從那時候開始,我們又擁有了一套全自由的作業系統核心,許多軟體開發者也將 GNU 的許多元素融合進 Linux 核心中,成為了一個完整而強大的作業系統。 也就是這樣,GNU/Linux 誕生了,並演化出了許多 Linux 發行版,像是 CentOS, Fedora, Debian, Ubuntu, ArchLinux 等作業系統,常用於大型伺服器及個人電腦。而除此之外,手機的 Android 系統也是基於 Linux 作業系統開發而來;嵌入式系統更是不用說,大多數都是由 Linux 演化而來,其中較為著名的像是 TESLA MODEL S 就是由 Ubuntu 改寫而成。 --- ## What's Next ? 在暸解 GNU Project 以及計算機、作業系統歷史後,就來學習 GNU 開發工具吧!:rocket::rocket::rocket: ### Reference :bookmark_tabs: - Wikipedia - [GNU 頁面](https://zh.wikipedia.org/wiki/GNU) - [UNIX 頁面](https://zh.wikipedia.org/wiki/UNIX) - [Linux 頁面](https://zh.wikipedia.org/wiki/Linux) - [作業系統歷史](https://en.wikipedia.org/wiki/History_of_operating_systems) - [GNU 官網](https://gnu.org) - [Jserv 從 Revolution OS 看作業系統生態變化](https://hackmd.io/@sysprog/revolution-os-note#Bill-Gates-在-1976-年倡軟體私有化的公開信) ###### tags: `GNU` `Linux`