2021-09-13 《鸟叔Linux私房菜》阅读纪录 第一章-Linux是什么如何学习-Linux 是什么Torvalds的Linux 发展
List
文章目錄
- List
- Linux 是什么
- Linux和Unix 的歷史
- 早期計算機
- 1969年:ken Thompason的小型 file server system(Unix原型)
- 1973年:Unix的正式誕生,Ritchie等人以C語言寫出了第一個正式的Unix核心
- 1977:重要的Unix分支-BSD的誕生
- 1979:重要的System V架構與版權宣告
- 1984:X86架構的Minix操作系統開始撰寫并于兩年后誕生
- 1984年之二:GNU計劃和FSF基金會成立
- 1988年:圖形接口XFree86計劃
- 1991年:芬蘭大學生Linus Torvalds的一則簡訊
- GNU、自由軟件與開發原始碼
- 自由軟件的運動
- 自由軟件的GNU GPL
- 自由軟件如何獲利
- GPL的優點
- 開放原始碼(Open Source)的要求
- 專利軟件(Close Source)
- Torvalds的Linux發展
- Linux 的誕生
- Linux與Minix
- 多任務的處理
- 初次釋出Linux 0.02
- Linux的發展
- 單人維護階段
- 廣大黑客志工加入階段
- 核心功能細部分發展階段
- Linux的核心版本
- 奇數、偶數版本分類
- 主線版本、長期維護版本(longterm version)
- Linux distributions、
Linux 是什么
在我的理解中Linux就是Kernel+shell,也就是核心層加系統呼叫層
Linux和Unix 的歷史
早期計算機
早期的計算機輸入設備只有卡片閱讀機、輸出設備只有打印機,用戶也無法與操作系統互動,改良后可以使用鍵盤來進行輸入,但當時,比如在學校里
只有一臺主機,無法滿足多人同時使用的需求,于是為了解決這個問題,就發明了**【兼容分時系統(Compatible Time-Sharing System, CTSS)】**,它可以讓大型主機透過提供數個終端機(terminal)以聯機進入主機,從而利用主機的資源進行運算工作,大致如下圖
其中每個terminal只有輸入/輸出功能,并沒有相關軟件與運算功能,而主機有運算功能,運算完畢就會將結果輸出到terminal,這個架構是不是有點像現在的前后端分離的架構呢
這個兼容分時系統可以說的上是現代操作系統的鼻祖,在當時也算是跨時代的技術,他可以讓多個使用者在某一段時間內分別使用CPU的資源,感覺上你會覺得大家是同時使用該主機的資源
1969年:ken Thompason的小型 file server system(Unix原型)
當時為了更加強化大型主機的功能,讓主機資源可以提供給更多使用者來使用,于是發起了一個叫【Multics的計劃】,這個計劃的目的是想讓主機達成提供300個以上的終端機聯機使用的目標
不過由于種種原因失敗了,但是也培養了一大批的人才,其中有一個人叫Ken Thomopson,他從這個計劃中獲得一些點子,且出于個人需要,希望開發出一個小小的操作系統來提供自己的需求
當時天時地利人和,有主機(當時DEC公司推出的一般PDP-7剛好沒人使用),有時間(妻子和孩子去探親去了,剛好有一個月的時間對系統進行開發),于是他進行四個星期的奮斗,他終于以匯編寫出了
一組核心程序,同時包括一些核心工具程序,以及一個小小的文件系統,這個系統就是Unix 的原型。
Thompson這個文件系統有兩個重要的概念,分別是
- 所有的程序或者系統裝置都是文件
- 不管建構編輯器還是附屬文件,所寫的程序只有一個目的,且要有效的完成目標
這也是后來對Linux影響比較大的部分
1973年:Unix的正式誕生,Ritchie等人以C語言寫出了第一個正式的Unix核心
這里其實有趣的事,Thompson會寫這套Unix核心程序,卻是想要移植一套名為【太空旅游】的游戲,而B語言-------->C語言的發明,也是為了實現一個游戲
由于Thompson寫的那個操作系統的實用性很高,而由于Unics是以匯編程序寫的,導致了每次安裝到不同的機器需要重新編寫匯編語言,極大的影響了可移植性,
與是當時就有將Unics這個操作系統改變成以高級語言寫的系統,當時的B語言編譯出來的效能不是很好,于是Dennis Ritchie就將B語言重新改寫成C語言,再以C語言重新改寫bianyiUnics核心
最后正名與發行出Unix的正式版本
到這里大家應該就能總結出這Unix 的誕生了吧
大致就是:
- Thompson 為了玩游戲,天時地利人和寫了一套操作系統
- 貝爾實驗室的人覺得這個操作系統很好用,就想把它移植,并發明了C語言
1977:重要的Unix分支-BSD的誕生
雖說貝爾屬于AT&T,但是AT&T此時對于Unix 采取開放式態度,Unix是以高階的C語言寫成的,理論上具有可移植型
只要取得源碼,并根據對應的主機進行一個修訂就能移植到另一部不同的主機上頭了
所以在1973年以后,Unix便得以與學術界合作開發,其中,最重要的接觸就是與加州伯克萊大學的合作了。
伯克萊大學的Bill Joy
https://baike.baidu.com/item/%E5%A8%81%E5%BB%89%C2%B7%E7%BA%B3%E5%B0%94%E9%80%8A%C2%B7%E4%B9%94%E4%BC%8A/10735666?fromtitle=Bill%20Joy&fromid=9148331&fr=aladdin
Bill Joy
在取得Unix源碼后,著手修改成適合自己機器的版本,并且增加了很多的工具和編譯軟件,最終將其命名為
Berkeley Software Distribution(BSD)
這個BSD是Unix很重要的一個分支,后來的可以安裝在x86硬件架構上的FreeBSD就是BSD改版而來
1979:重要的System V架構與版權宣告
由于Unix的高度可移植性與強大的性能,且沒有版權的糾紛,很多的商業公司開始了自己的Unix系統的發展
但是,由于操作系統的核心(Kernel)必須和硬件配合,且每一家生產計算機硬件的公司并沒有什么協議得到概念
各自都有各自的模式,所以,每個硬件的廠商需要為他們自己的計算機硬件開發合適的Unix系統,另外,由于沒有廠商對個人計算機設計Unix系統
于是,早期并沒有支持個人計算機的Unix計算機出現。
而且即使每家廠商出的Unix在架構上大同小異,但是且真的僅能支持自身的硬件,但是到了1979年System V出版到第七版后,情況才有改善
但是AT&T出于商業的考慮,和當時現實環境的思考,想將Unix的版權收回,因此,AT&T在1979年發行的第七版Unix中,提別提到了【不可對學生提供源代碼】,也造成Unix業界之間的緊張氣氛,也引爆了很多商業糾紛
1984:X86架構的Minix操作系統開始撰寫并于兩年后誕生
版權聲明影響最大的當然屬于教授,沒有核心代碼,也就無法讓學生們認識到Unix,又注意到Unix第七版可以移植到X86架構上,于是乎,Andrew Tanenbaum教授以改寫Unix并移植到X86的想法,且為避免版權糾紛,在撰寫時完全不看源碼且完全兼容Unix,手動寫了一個叫Minix的Unix like的核心程序,并以磁帶進行販賣和傳遞
1984年之二:GNU計劃和FSF基金會成立
Richard Mathew Stallman 屬于當時黑客圈相當出名的人工智能實驗室
當時的黑客圈對于軟件的著眼點幾乎都是在「分享」,黑客們都認為互相學習對方的程序代碼,這樣才是產生更優秀的程序代碼的最佳方式!
所以AI實驗室的黑客們通常會將自己的程序代碼公布出來跟大家討論,這個特色對于史托曼的影響很大!
1984年,史托曼開始GNU計劃,這個計劃的目的是:建立一個自由、開放的Unix操作系統(FreeUnix)。
但是建立一個操作系統談何容易,而且在當時的GNU是僅有自己一個人單打獨斗的史
托曼,這實在太麻煩,但又不想放棄這個計劃,那可怎么辦啊?
聰明的史托曼干脆反其道而,「既然操作系統太復雜,我就先寫可以在Unix上面運行的小程序,
這總可以了吧?」在這個想法上,史托曼開始參考Unix上面現有的軟件,并依據這些軟件的作
用開發出功能相同的軟件,且開發期間史托曼絕不看其他軟件的原始碼,以避免吃上官司。后來
一堆人知道免費的GNU軟件,并且實際使用后發現與原有的專利軟件也差不了太多,于是便轉而
使用GNU軟件,于 是GNU計劃逐漸打開知名度。
雖然GNU計劃漸漸打開知名度,但是能見度還是不夠。這時史托曼又想:不論是什么軟件,都
得要進行編譯成為二進制文件(binary program)后才能夠執行,如果能夠寫出一個不錯的編譯程序,
那不就是大家都需要的軟件了嗎?因此他便開始撰寫C語言的編譯程序,那就是現在相當有名的
GNUCCompiler(gcc)!這個點相當的重要!這是因為C語言編譯程序版本眾多,但都是專利軟件,
如果他寫的C編譯程序夠棒,效能夠佳,那么將會大大的讓GNU計劃出現在眾人眼前!
到了1985年,為了避免GNU所開發的自由軟件被其他人所利用而成為專利軟件,所以他與律師
草擬了有名的通用公共許可證(General Public License, GPL),并且稱呼他為copylef(相對于專利軟
件的copyright!)。
由GNU所開發的幾個重要軟件,如:
- Emacs
- GNU C (GCC)
- GNU C Library (glibc)
- Bash shell
1988年:圖形接口XFree86計劃
1991年:芬蘭大學生Linus Torvalds的一則簡訊
到了1991 年,芬蘭的赫爾辛基大學的Linus Torvalds在BBS上面貼了一則消息,宣稱他以 bash, gcc
等GNU的工具寫了一個小小的核心程序,該核心程序單純是個玩具,不像GNU那么專業。不過
該核心程序可以在Intel 的386機器上面運作就是了。這讓很多人很感興趣!從此開始了Linux不平
凡的路程!
GNU、自由軟件與開發原始碼
自由軟件的運動
將原始碼連同軟件程序釋出的舉動,在GNU計劃的范疇之內就成為自由軟件運動
自由軟件的GNU GPL
GPL(GNU General Public License, GPL)自由軟件的重點并不是指「免費」的,而是指具有「自由度。freedom」的軟件,
自由度的意義是:使用者可以自由的執行、復制、再發行、學習、修改與強化自由軟件
總之,一 個軟件掛上了GPL版權宣告之后,他自然就成了自由軟件!這個軟件就具有底下的特色
- 取得軟件與原始碼:你可以根據自己的需求來執行這個自由軟件
- 復制:你可以自由的復制該軟件
- 修改:你可以將取得的原始碼進行程序修改工作,使之適合你的工作
- 再發行:你可以將你修改過的程序,再度的自由發行,而不會與原先的撰寫者沖突
- 回饋:你應該將你修改過的程序代碼回饋于社群
你所修改的任何一個自由軟件都不應該進行以下的行為:
- 修改授權:你不能將任何一個GPL的自由軟件,在你修改后取消他的GPL授權
- 單純販賣:你不能單純的販賣自由軟件
這里的單純是指,不可只販賣該軟件,還得搭配售后服務以及相關手冊等。
自由軟件如何獲利
其實這里自由軟件的獲利大部分都是通過販賣服務來進行的
GPL的優點
由于自由軟件提供原始碼,所以就會有很多人幫你檢查,這樣一來程序漏洞和優化就有很快的進展
自由軟件也慢慢的具有了以下的優點
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 軟件安全性較佳
- 軟件執行效能較佳
- 軟件除錯時間較短
- 貢獻的原始碼水遠都存在
開放原始碼(Open Source)的要求
所謂的開源并不僅僅只可以讀取原始碼,就可以被成為開源軟件,軟件的授權須符合地下的基本需求
- 公布原始碼且用戶具有修改權:用戶可以任意的修改與編譯程序代碼,這點與自由軟件差異不大:
- 任意的再散布:該程序代碼全部或部份可以被販賣,且程序代碼可成為其他軟件的組件之一,作者不該宣
稱具有擁有權或收取其他額外費用。 - 必須允許修改或衍生的作品,且可讓再發布的軟件使用相似的授權來發表即可。
- 承上,用戶可使用與原本軟件不同的名稱或編號來散布。
- 不可限制某些個人或團體的使用權
- 不可限制某些領域的應用:例如不可限制不能用于商業行為或者是學術行為等特殊領域等等
- 不可限制在某些產品當中,亦即程序代碼可以應用于多種不同產品中。
- 不可具有排他條款,例如不可限制本程序代碼不能用于教育類的研究中,諸如此類。
專利軟件(Close Source)
專利軟件和開放軟件區別最大的就是是否釋出原始碼
開放軟件會釋出原始碼,而專利軟件僅推出可執行的二進制程序(binary program)
專利軟件的優點和缺點
優點是有人維護
缺點是靈活度比較低,且要錢(▽)
當然也不是所有的專利軟件都是需要錢的,也有免費的
免費的專利軟件代表的授權模式有
- Freeware
- Shareware
Torvalds的Linux發展
Linux 的誕生
Linux與Minix
Torvalds從小就接觸到了計算機,學習了匯編的知識,上了大學的他并不滿足于terminal的Input/Output的功能,想要去寫一個自己的Unix
剛好當時的Andrew Tanenbaum教授寫了一個Minix系統,他在購買了最新的Intel 386后,便立即安裝了Minix系統,且Minix 這個系統是附有源代碼的
所以Torvalds也經由這個原始碼學到了很多的核心程序的設計概念。為Linux的出現奠定了基礎
多任務的處理
早期的x86架構計算機不是很受重視的原因就是因為x86芯片對多任務的處理不佳,直到386計算機推出后,有了很大的改善
而且計算機的效能并不是很好,所以當時的工程師們養成了對計算機性能的壓榨癖好,Torvalds也不例外,Torvalds當時花了不少
的時間來測試386的性能。
他 的重要測試就是在測試
386的多功性能。首先,他寫了三個小程序,一個程序會持續輸出A、一個會持續輸出B,最后一
個會將兩個程序進行切換。他將三個程序同時執行,結果,他看到屏幕上很順利的一直出現
ABABAB…他知道,他成功了!
初次釋出Linux 0.02
撰寫程序需要什么呢?首先需要的是能夠進行工作的環境,再來則是可以將原始碼編譯成為可執行文
件的編譯程序。好在有GNU計劃提供的bash工作環境軟件以及gcc編譯程序等自由軟件,讓托瓦
茲得以順利的撰寫核心程序。他參考Minix的設計理念與書上的程序代碼,然后仔細研究出386個人
計算機的效能優化,然后使用GNU的自由軟件將核心程序代碼與386緊緊的結合在一起,最終寫
出他所需要的核心程序。而這個小玩意竟然真的可以在386上面順利的跑起來~還可以讀取Minix
的文件系統。他希望這個程序可以獲得大家的一些修改建議,于是他便
將這個核心放置在網絡上提供大家下載,同時在BBS上面貼了一則消息:
這條消息引起了很多人的注意,他們也去Torvalds提供的網站上下載了這個核心來安裝,當時Torvalds放置核心的那個FTP網站的目錄名叫:Linux
于是,大家便稱這個核心為Linux了,此時的Linux就是那個Kernel,另外Torvalds丟到該目錄下的第一個核心版本為0.02
此時便出現了一個問題,就是Linux并不兼容Unix,也就是很多在Unix上運作的軟件放到Linux上跑,發現很多的軟件是無法運行的
于是為了兼容Unix,他選擇了修改Linux,讓Linux能夠符合運作的規范,為了讓所有的軟件都可以在Linux上執行,于是Torvalds便開始參照標準的POSIX規范
POSIX(Portable Operating System Interface)
- POSIX是可攜式操作系統接口(Portable Operating System Interface)的縮寫,重點在規范核心與應用程序之間的接口
這個決定,賦予了Linux優良的血統,為以后Linux的流通和使用率保駕護航。
Linux的發展
Linux的發展,除了個人的力量和理念之外,還有著一個最重要的團隊,下面介紹一下Linux的發展史
單人維護階段
剛開始的Linux全部是由Torvalds來維護的,如果用戶使用是發生了問題,或者有特殊的需求,用戶就會進行反饋,Torvalds能夠解決的問題范圍內,它都能很快速的進行Linux核心的更新和除錯
廣大黑客志工加入階段
但是,,維護一個系統,單單靠一個人的力量是遠遠不夠的,比如有些硬件Torvalds是無法獲得的,他也就無法進行驅動的撰寫和相關軟件的改良。
這個時候就有有志人士來幫忙,因為Linux 是Open Source的,所以很多的工程師很容易就能夠跟隨Linux 原本的設計架構開發出兼容的驅動或者軟件,Torvalds
也很樂意去把他們寫的程序/軟件帶入內核中,前提是測試能滿足需求且沒什么問題,而且Torvalds比較務實,對于Linux所欠缺的項目,先要求有且能跑,后面才會進行進一步的改良(有點像迭代模型?),這樣的心態使得使用者和開發者都得到了極大的滿足和鼓勵 ,也使得Linux飛速發展。
另外,為因應這種隨時都有程序代碼加入的狀況,于是Linux便逐漸發展成具有模塊的功能!亦即是將某些功能獨立出于核心外,在需要的時候才加載到核心中。如此一來,如 果有新的硬件驅動程序或者其他協議的程序代碼進來時,就可以模塊化,大大的增加 了Linux核心的可維護能力!
核心功能細部分發展階段
到后來,Linux發展的太快,加入了太多的功能,Torvalds一個人維護就顯得力不從心
這時就有很多來自世界各地的朋友來幫忙對核心進行測試并加入核心原始程序,他們會將志工們的修補程序或者新功能的程序代碼進行測試,并將結果上傳給Torvalds看,讓Torvalds做最后核心加入的原始碼的選擇與整并,這種分層的模式也使得Linux 的發展變得迅速。
之后,這個從未謀面的虛擬團隊為了方便數據的傳輸,建立了一個知名的網站:Http://www.kernel.org
Linux的核心版本
奇數、偶數版本分類
在2.6.x 版本以前,托瓦茲將核心的發展趨勢分為兩股,并根據這兩股核心的發展分別給子不同的核
心編號,那就是:
- 主、次版本為奇數:發展中版本(development)
如2.5.xx,這種核心版本主要用在測試與發展新功能,所以通常這種版本僅有核心開發工程師會使用。如
果有新增的核心程序代碼,會加到這種版本當中,等到眾多工程師測試沒問題后,才加入下一-版的穩定核
心中: - 主、次版本為偶數:穩定版本(stable)
如2.6.xx,等到核心功能發展成熟后會加到這類的版本中,主要用在一-般家庭計算機以及 企業版本中。
重點在于提供使用者一個相對穩定的Linux作業環境平臺。
至于釋出版本則是在主、次版本架構不變的情況下,新增的功能累積到一定的程度后所新釋出的核心
版本。而由 于Linux核心是使用GPL的授權,因此大家都能夠進行核心程序代碼的修改。因此,如
果你有針對某個版本的核心修改過部分的程序代碼,那么 那個被修改過的新的核心版本就可以加上
所謂的修改版本了。
主線版本、長期維護版本(longterm version)
不過,這種奇數、偶數的編號格式在3.0推出之后就失效了。從3.0版開始,核心主要依據主線版
本(MainLine)來開發,開發完畢后會往下一個主線版本進行。 例如3.10 就是在3.9 的架構下繼
續開發出來的新的主線版本。通常新一版的主線版本大約在 2~3個月會被提出。之所以會有新的
主線版本,是因為有加入新功能之故。
而舊的版本在新的主線版本出現之后,會有兩種機制來處理,一種機制為結束開發(End of Live, EOL),
亦即該程序代碼已經結束,不會有繼續維護的狀態。另 外一種機制為保持該版本的持續維護,亦即
為長期維護版本(Longterm)! 例如3.10即為一個長期維護版本,這個版本的程序代碼會被持續維護,
若程序代碼有bug 或其他問題,核心維護者會持續進行程序代碼的更新維護
所以噦,如果你想要使用Linux 核心來開發你的系統,那么當然要選擇長期支持的版本才行!要判
斷你的Linux 核心是否為長期支持的版本,可以使用 「uname -r」來查閱核心版本,然后對照下
列連結來了解其對應值
https://www.kernel.org/releases.html
比如我的
對應網站上
Linux distributions、
為了使使用者能夠接觸到Linux,于是很多的商業公司或非營利團體,就將Linux Kernel(含tools)與可運行的軟件整合起來,加上自己有創意的工具程序,這個工具程序能夠讓用戶已光盤/DVD或透過網絡直接安裝/管理Linux系統。
這個[Kernel + Software + Tools + 可完全安裝程序]就叫Linux distribution,中文叫可完全安裝套件,或Linux發布商套件
可完全安裝套件
所以我們說Linux不同,其實是Distributions不同,也就是內核發行版本不同
總結
以上是生活随笔為你收集整理的2021-09-13 《鸟叔Linux私房菜》阅读纪录 第一章-Linux是什么如何学习-Linux 是什么Torvalds的Linux 发展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 待机、休眠、睡眠的区别和优缺点
- 下一篇: (待解)静态构造器和静态字段调用的相互嵌