進度條

Linux是什麼?從網站開發到物聯網無所不在的OS作業系統介紹。

時勢造英雄淺談OS,自由軟體運動與Linux的誕生

作者: Vincent Ke 更新日期:

在先前的文章中,我們詳細了介紹GPL的發展史以及GNU計劃(自由軟體集體協作計畫),僅管現在GPL的無條件開放規則以及病毒性的擴散感染,仍然對軟體開發及商用發展上有著非凡的影響,但自由軟體的推廣運動,其實也默默的在軟體時代下,擔任了推波助瀾的重要角色。

 

而當中最重要的里程碑,就是在1991年,一名芬蘭大學生Linus Torvalds,就藉由GNU計劃的協助下,發展出了著名的Linux,一個讓大眾可以自由參與、集體協作的OS。當然他也就是現在我們還是時常會看到新聞的大神Linus,同時他也是在兩週內創造出Git版本管理程式的原型的作者。

 

 

但一切的回逤,都必須先從"OS"是什麼開始談起,從電子元件發明到記憶體、硬碟、記憶體甚至是CPU。爲了有效控制這些硬體,這絕對不是一個簡單的工作。就如同開車一樣,插入鑰匙啟動接上電路(start),行車前確認各部件是否正常運作(initialize),如果有問題可以選擇發出警訊(warning),或是安全裝置保護讓車發不起來(Throw Exception and hanging),一切正常才可以正常開始行駛。如果今天範圍涉及更大,比方說台北的公車網。除了公車本身需要做這些檢查外,還有各人員的安排調度,以及道路交通設施等等,越來越複雜。

 

早期的硬體控制比較單純,比方說做個計時器時鐘之類的,不太需要與其他元件溝通。但是如果今天同時間有時間功能與鬧鐘功能,就又多了一段發出聲音的功能整合,加上個蜂鳴器之類的。這時候如果又進階變成了播放音樂功能,就又要考慮到更多的工程問題,每一次整合都越來越費功,更不用說需要同時發出聲音與播放影像等。

 

不過好在人類的歷史裡面,碰到這樣的事情就是訂規矩。只要大家都照著規矩來,整合就很輕鬆。所以很多人就嘗試的把常用的功能整合起來後,拉出了一些規矩出來,説以後大家寫程式都要照著這規矩來,不然無法在我整合的"系統"裡面"運行"。而所謂的OS就是Operating(運行) System(系統)的縮寫,一般中文稱“作業系統”。當然,隨便一個路人都可以定規矩(做出自己的作業系統),只是如果沒有益處,沒人會遵守(沒人在上面寫程式)。

 

因此,作業系統是一個很容易發生壟斷現象的程式類型。像是早期的Dos或是漸漸變弱但曾今不可一世的Windows,到現在Google的Android系統,都是因為作業系統本身提供在當時相對完整的功能與開發生態系,當系統完備,願意開發的人就多,開發的人多,用戶就多。用戶多就帶來相對應的經濟活動,開發者與系統製作者(或公司)就會更有意願。

 

而在大多數的作業系統中,有一個相當重要的角色稱做「核心(Kernel,或稱內核)」,他所提供的就是所有最基本的功能,比方說鍵盤輸入、螢幕輸出,記憶體管理,同時間多工運行。當然也包含更多一般我們沒注意到卻相當重要的硬體元件的管理(沒注意到多半都是因為他並不直接接觸使用者)。內核所以叫“內”“核”,就是因為它就像是一個內部的核心,跟心臟與其他身體器官的組合一樣。提供了你活動運行的最基本功能,你的心臟並不能幫你打籃球,但是沒有心臟應該沒有人可以打籃球。

 

 

那這又跟Linux有什麼關係呢?Linux就是所謂的作業系統之一,雖然一開始他看起來像是路人般的角色(業餘的),不過隨著演進,他靠著社群逐漸的壯大,從網站伺服器一直到嵌入式機器與工業用等級電腦。可以說除了你手上的那台Windows筆電以外,你所上的網站、路邊所看的廣告牆、幾乎都是Linux系統了。當然微軟也有相對應的產品,比方說網站用的IIS與嵌入式機器的Windows CE,但從最近微軟開始開發基於Linux核心的Windows系統,就知道這場戰爭最後的結果為何。

延伸閱讀:微軟(Microsoft)裁撤Windows部門?基於Linux系統的物聯網+AI的時代將到來?

 

甚至在2009,賈伯斯為了提高蘋果電腦 Macbook的競爭力與微軟競爭,拋棄了IBM PowerPC的CPU架構,改使用當時近乎壟斷家用市場的Intel X86晶片(Wiki)。並且並在更早之前就拋棄原本的OS系統,改用同樣基於Unix相似Linux的BSD作業系統(Wiki)改出現在的MacOS。這影響一直到現在,大多數的開發者之所以使用MacOS的原因之一,就是因為MacOS與Linux的設定幾乎如出一徹,大多數的程式在MacOS上開發後,如果要移到Linux系統上面,通常都不太需要改設定。如果使用Windows的話,多半都還需要再多裝幾個跨平台程式,有點類似在Windows上跑一個小型的Linux(只有必要的函式庫)再去執行程式。效能與開發流暢度上差異滿大的,而且相對容易出現未知的系統層級錯誤。

 

下圖為Unix 家族與時間軸,可以注意BSD / GNU / Linux / MacOS 這幾個我們有提到的作業系統

 

而現在最多人使用包含Linux內核的系統則是Android系統(比較新,所以上圖沒有)。在前面提到Linux系統有包含內核,所以與其相對應的所謂的外層,我們一般稱之為Application layer(應用層),也就是一般開發者開發的應用程式(Application 簡稱APP)所安裝的地方。Android系統是一個在核心層取用Linux內核(Linux Kernel)但是應用層大改的一個作業系統。之所以大改就是為了符合手機滑動的使用習慣,跟傳統使用滑鼠所需要的UI介面不一樣。(Wiki)

 

 

那回到標題,Linux是怎麼誕生的呢?

 

 

早期的電腦並非像現代如此普及,不僅只有軍方和一些重要單位才有之外,運作速度也是一個很大的問題,但最讓人印象深刻的是,大家還記得模仿遊戲中的場景吧!早期的電腦因為沒有I/O介面,所以工程師只能藉由讀卡紙打洞來,並插入讀卡機讓電腦運作,而輸出也只能有像是列表機的方式做輸出,沒有螢幕,也沒有鍵盤,這是多惱人的一件事情阿。而在鍵盤跟螢幕誕生之後,由於主機當相昂貴(每個單位可能只有一台),所以大家都只能各自排隊使用電腦,而且電腦一次只能做一件事情,效率和現在也是有非常大的落差,如果你前面的人作業上耗時很久,那你也只能乖乖等待。

 

 

於是乎,爲了讓大型主機可以提供更多的資源,來達到同步多工的效果,許多單位和人材都投入了核心的開發,於是在70年代,利用C語言為基底的Unix誕生了,也歸功在C語言上,讓Unix具備了高移植性,只要你有程式碼,你就可以依照自己的主機硬體,把Unix移植到自己的主機上。但發行Unix在幾年後就讓Unix不再開源原始碼,但這樣許多教授程式語言的學校就無法對Unix進行教學和推廣,於是inix這個Unix Like的核心程式也接續誕生,除具備了Unix的相容性外,想要參考原始碼的人可以透過購買的方式來取得。但由於需販售且只有少部份人維護的狀況下,進步實在相當有限。接著在80年代,我們熟悉的GNU組織誕生了,最主要的目的是建立一個自由開放的Unix作業系統。

 

但是Unix的架構實在太龐大,所以他反而逆向操作,將Unix現有的小程式進行開發,做出一樣功能卻開源的其他小程式,來讓GNU計劃逐漸廣為人知,但因為每個小程式也不見得可以在不同的硬體上執行,所以GNU計劃發起人 Stallman就一並把原始碼釋出,讓大家可以依照自己的需求做修改,這個舉動就造就了後來的自由軟體運動。這樣的好處是一但你的程式有問題,還有免費的熱心夥伴幫你Debug呢。

 

 

 

而後在在1988年間,Linus Torvalds就讀赫爾辛基大學電腦科學系期間,因為學校只有一台最新的Unix系統,所以等待使用Unix的時間相當耗時,於是讓Torvalds興起想要自己做一套Unix的想法,於是他買了一台Intel 386電腦,並且買了Minix 原始碼磁帶(因為Unix已經不開放原始碼了...),開始了他的開發之旅。

 

一開始只是想要嘗試做硬體效能以及CPU多工上的嘗試,但最後卻越改越多,也因此完成了Linux第一版。但這當然不是他一個人的功勞,在開發過程中,他參考了許多GNU計劃裡提供的像是bash工作環境軟體以及gcc編譯器等自由軟體,爲使386電腦可多工化及效能最佳化,他也參考了許多上述GNU計劃裡的小程式,但這些畢竟都是他一個人的產物,也深怕會有甚麼Bug以及可以優化的建議,於是,他選擇把程式放在一個名為Linux的FTP上公開,並且歡迎大家下載,修改這個核新程式,因此Linux就此誕生。

 

但一開始Torvalds只是抱持著嘗試的心態去執行這個專案,卻因為GNU的幫助來讓Linux順利完成,但一開始並不是這麼順利,因為他發現很多Unix上的程式並不支援Linux,於是他亦步亦趨的修正Linux,也透過開源及自由軟體的力量讓Linux更為完善,也因為Linux是自由軟體,所以每一個人都可以依據自己的需求來進行修正,來擴充他的支援性及可移植性,而Linux的企鵝標誌,也表示著"世界共有"的意涵(因為企鵝在南極,南極是全世界共有的土地)

 


如今Linux現在除了家用電腦外,行動裝置甚至物聯網(IoT)裝置上,都可以看到Linux的蹤影,例如上圖硬體裝置 Prototype 製作神器Rasberry Pi 預設就是使用Linux系統。這也必須多歸功GNU的功勞,而當然他也是GPL的代表作品。從一個大學生的求知慾,到一個曠世鉅作的誕生,這中間的一番波折,的確也是時勢使然,但保持旺盛的求知慾,卻是不分年代,也許在嘗試的開發過程中,也是下一個鉅作誕生的關鍵要素!

 

如果你對Linux的使用以及網路架站有興趣的話,可以參考我們的課程

Linux雲端伺服器,用AWS暸解Apache與Nginx 

裡面包含Linux架站所需的所有指令以及作業系統操作,也包含網路架站中相當重要的Apache與Nginx網路伺服器的使用喔!

 

 

延伸閱讀:
Linux發行版(Distribution)與Linux核心(Kernel)是什麼?淺談Linux發行版之間的關係

學習VPS的重要性與各大Linux VPS 比較(Linode, DigitalOcean, Vultr, AWS Lightsail)

 


最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!

Medium vincent

Vincent Ke

喜歡把混亂的事情變的簡單 用嘴巴做事其實很可以 但要結合靈活的腦袋思考 就一起來拆解吧