---
# System prepended metadata

title: GNU Project 及計算機發展史
tags: [Linux, GNU]

---

# 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` 