不同的 Linux Distribution 到底差在哪裡?

網路上有著數以百計的 Linux 發行版 (Linux Distribution),像是 Archlinux、Ubuntu、CentOS …等等。
每個人可能都有自己擁護的發行版,到底誰比較好?誰比較高級呢?
以筆者自己的經驗來看,每個發行版都有自己的優缺點和適合的地方,就以我各自用過一段時間的三個發行版:Ubuntu、Archlinux、CentOS 來說說看他們各自擅長的地方和他們的問題所在。

前言:為什麼有這麼多發行版?

這裡可以看到一張非常大的 Linux 發行版近代史圖片。

以我的感覺,Linux 的發行版其實是開源生態圈的一個現況,也就是負責人或負責團隊通常會有自己的一套核心價值觀,他們只會接受符合自己的價值觀的功能、程式碼等等,但開源的精神就是:「不爽?自己 fork 一份自己改!」
所以大量的發行版分別代表了某個派系和背後的某個核心理念,選擇發行版,其實就是在選擇不同的價值觀!

發行版之間的差異

發行版之間到底有什麼重要的差別呢?其實他們之所以都稱作 Linux ,就是因為他們全部共用一個 OS Kernel ,也就是我們平常稱 Linux 所指的本體:Linux kernel,這裡可以看到完整的程式碼: https://www.kernel.org/

因為系統的核心是一樣的,也就是說通常能在 A 發行版上面編譯、執行的程式碼什麼都不用改也可以在 B發行版上面跑。也就是說,幾乎所有的發行版理論上都能做到相同的事情。
不過,程式通常不會是一個完整可執行的個體,有學過 C 之類的編譯語言的人一定知道,系統裡通常會安裝很多已經編譯好的函式庫,這樣不同的程式在使用相同的函式庫時就不用在電腦裡存很多份,載入也只要載入一份,有很多好處。而 Linux 整個世界幾乎是建立在 C / C++ 上的,就算是其他語言很多最後也是從這裡往上延伸。
所以,整個發行版的差別,其實就在安裝的套件、函式庫、以及負責管理這些函式庫的套件管理系統。

其中最重要的,莫過於套件管理系統了!Linux 和其他作業系統如 Windows 最大的不同,就是每個發行版一定有自己的套件管理系統和套件庫,裡面包含了最基礎的系統套件,到各種應用軟體都包含在裡面,通常使用者只要下指令就可以自動搜尋安裝程式,不用向 Windows 一樣到處找安裝檔,還要怕來路不明的安裝檔等等。
而整個套件庫的管理就成了每個發行版不同的地方。

Ubuntu : 給新手的 Linux

Ubuntu 算是筆者第一個長時間當作主要工作環境的 Linux 系統。
它最大的優點,就是無腦安裝、無腦更新、支援的套件工具很多等等,甚至連 Steam 都標榜支援 Ubuntu。
友善的 GUI 界面,只下一步就可以完成的安裝界面,讓許多的 Linux 新手一改對 Linux 一定要在黑色螢幕上輸入白色指令才能操作的印象。不只新手,由於設定簡便,也成為很多企業使用的主要作業系統。

Ubuntu 使用的套件管理系統是 Debian 系列的 dpkg ,不過大家通常更熟悉他的套件庫工具 apt。對於不了解這兩者差異的人,其實這兩個東西前者是真的在系統裡管理套件的程式,後者是去套件庫上下載並用 dpkg 安裝的程式。

Ubuntu 一年一小改,兩年一大改,偶數版本為穩定版本,支援時間為 4 年。所謂的支援時間,也就是你可以持續獲得更新和 Bug 修復的時間,這段時間都可以用 apt update && apt upgrade 來更新系統上的軟體。
Ubuntu 的支援時間在我用過得 Linux 中算是中庸的,而且也提供跨版本大升級的方法,所以也不是每兩年就要重灌。

Ubuntu 的核心思想其實就是要創造一個易於使用的 Linux 系統,讓不是電腦專家的人也可輕易使用。以這點來說它真的滿成功的,連 Windows 都怕了把它加進 Win10 裡面了 XD。
這幾年它做了許多的實驗,包含開發可在平板上使用的 Unity 桌面環境(失敗了),提供自己的 App store (不太會用?),後來背後的公司就被 Windows 併購了。

Ubuntu 作為個人使用的作業系統來說可圈可點,不過後來我還是改用了 Arch,原因大概就是因為它太新手向了,所以很多的東西在跟你講之前就自己改了很多,有很多 Linux 慣例的設定檔設定方式和其他人不一樣,也沒有完整的文件來說明這些修改,畢竟他的主要客群就是不會去改這些東西的人,所以用用還行,想要改設定什麼的就會有點痛苦。
另外就是,由於它包裝的太好了,對於想要透過使用 Linux 來學習和累積使用技能的人來說,就更不適合了,你很難透過使用 Ubuntu 學習到東西,向我現在有對於 Linux 比較全面的認識也是在棄用 Ubuntu 後才得到的。
打個比方,它就像台裝了輔助輪的腳踏車,不是不能騎,但是總覺得綁手綁腳的,而且沒辦法讓你真的學會騎腳踏車。

所以簡短來說,如果你只是要一個能用的 Linux 系統,Ubuntu 就是你最好的選擇; 如果你想要學習 Linux ,絕對不要碰 Ubuntu。(不過如果想先適應一下也還是可以用啦)

Archlinux : 感覺很專業的 Linux

筆者棄用 Ubuntu 後使用的就是 Archlinux,到現在依然是我主要使用的 Linux 發行版。
Archlinux 相較於其他發行版,最大的特色,就是它是一個很乾淨的發行版,而且到現在還是強調要一行一行的下指令去安裝整個系統!這也是它看起很專業的原因XDD。
雖說其實也很簡單,不會因為你成功安裝就代表你很專業,但你還是可以透過這個流程學到很多。
首先,你會知道原來系統開機是什麼順序,你可以第一次選擇要用 grub 還是其他東西開機,你可以學到 MBR 或是 EFI 開機檔的安裝,你會知道原來桌面環境也只是一套軟體,有很多不同選擇可以使用,你會學到網路如何連線等等。

Arch 使用的套件管理程式是 Packman ,和一個裡面包山包海的套件庫,和其他發行版相比,你可以在裡面找到多更多的套件,如果這還不讓你滿足,你還有 Arch 最強大的武器:AUR!
Arch User Repository (AUR) 是一個特殊的套件庫,裡面的套件都是原始碼、尚未編譯的版本,使用者可以自己下載下來編譯、安裝,有很多現成的工具可以幫你作這件事情,例如 yay 。有了這些工具,你可以用的套件幾乎變成了全世界所有的軟體,啥都找的到,比如 google-chome, minecraft 之類的,任何還沒、不會、不能放進官方套件庫的套件都在這裡找得到。

至於 Arch 的支援時間,是永遠,因為它是一個 rolling update 的系統,也就是它每天都在更新版本,永遠都在最新版。這代表你不用像其他作業系統一樣,每一段時間就重灌一次或是大更新一次。

Arch 的核心思想我覺得就是一個自由自在,最新的發行版,它預設的套件很少,每個人都可以安裝出屬於自己的系統,同時它加上 AUR 提供了大量的套件,是 DIY 最佳的系統。

我非常喜歡 Arch ,因為我感到無拘無束,甚至有一段時間我什麼機器都灌 Arch,直到我有一天終於遇到問題,而開始認識了 CentOS。
Arch 有一個非常嚴重的問題,源自於他的優點:它更新太快了!
要知道更新是把雙面刃,他在提供新功能、修復漏洞的同時,可能把問題帶進你原本可以運行的系統中。你可能會時常遇到一些新的 bug,每天都在修不同的問題,甚至有些更新比較慢的套件,常常會處於跟不上 Arch 最新版本的狀況,尤其是它總是跟著最新版本的 Linux kernel ,所以有些追求穩定的大型套件是不敢標榜支援 Arch 的,因為他們甚至不敢保證它可以在今天的 Arch 上正常編譯。

總結來說,Arch 拿來當作筆電桌機的作業系統沒什麼問題,尤其你有時間而且喜歡自己客製化自己的系統。大多數情況你也不用特別處理什麼問題,他的透明單純的系統也讓人很容易看到完整的樣子,進而容易學習。
但是如果你是個一秒幾十萬上下的商業人士,或是根本就不會也沒打算學著自己修電腦的人,那你用 Arch 前可能就要三思了。
畢竟,某天更新完後電腦有功能不能用的情況偶爾會發生,而且他不像是其他的系統,它不太能夠降回以前的版本,因為它都是最新版本,除非有自己備份不然舊版本的套件幾乎在網路上找不到,同時各個套件之間又盤根錯節,很難降低一個套件的版本就解決問題,同時若你想要安裝新套件,一定要先做一次全系統更新,否則可能找不到可以在你的系統上執行的套件。通常這樣的問題在自己使用的電腦上沒什麼問題,因為你通常每天使用,不會太久沒更新,就算真的更新出事了,也只是自己暫時忍耐一下即可,通常 Bug 來的快去的也快。但是這在伺服器上就很嚴重了,畢竟伺服器是講求服務穩定的。

絕對不要拿 Arch 來架設伺服器!!否則之後的人一定會恨你的。

CentOS : 講求穩定的 Linux

筆者在最近一年接觸了 CentOS 後,從 Arch 得來的 Linux 不穩定的概念改觀了,其實 Linux 也是可以很穩定的。
CentOS 其實是 RedHat 公司推出的 RedHat 企業發行版的免費版本,也就是說它其實跟 RedHat 企業版是一樣的,只是你沒辦法享受到 RedHat 提供的各類軟體支援等等。不過任何以在 RedHat 上實裝的功能和軟體在一段時間後通常都會被拉到 CentOS 上,所以基本上可以當作 RedHat 來看,也就是說,不但有穩定性,也有 RedHat 在背後保證各大軟體的支援性。

所謂的穩定,講白了其實也就只是更新的慢,CentOS 上基本上你要的各種新功能,你都「找不到!」
它們會把 kernel 鎖定在一個固定的版本,同時,CentOS 的支援時間長達 10年,也就是說到達支援的末期的時候 kernel 版本可能已經和現在差距很遠了。
不過這其實也不是什麼大問題,因為就算沒有原生的套件包可以安裝,還是可以透過自己編譯來享有需要的任何功能,加上背後有 RedHat 在協助,同時也因為他是被各大企業採用的發行版,任何企業會用到的功能如 Docker 等等通常都有支援,也就是保證可以編譯執行的意思。

CentOS 的套件管理系統是 RPM ,套件下載程式是 yum。因為和 Arch 相比 CentOS 就會比較有需要自己包裝套件的需求,所以筆者就接觸了如何包裝 RPM 套件。RPM 套件本身其實也算是一款很強大的管理系統,因為時間很久了相關的輔助工具也很完善。

在筆者用 CentOS 的第一個印像,其實是他的圖形化安裝界面,雖然乍看之下和 Ubuntu 一樣只是個下一步安裝的界面,但是其實差距很大的,你可以透過這個界面快速設定 Raid、LVM、BTRFS 等等進階的磁碟格式,可以對網路等等做些額外設定,同時他的預設選項都是偏向安裝伺服器的設置,和 Ubuntu 偏向個人使用有些差別。最後,你還可以把你的設置會出成自動安裝腳本,大量部屬一樣的機器。

所以 CentOS 的核心思想我認為就是保守,雖然跟 Arch 比什麼都舊了,但其實可以享有很多好處,比如你可以用較慢的步調去更新,一個編譯過得套件可以很長一段時間不用重新編譯也可以繼續跑等等。不像 Arch ,不用每次更新一定要全系統更新,因為系統套件不常更換,同時會盡量保證舊版本的系統套件會持續可下載一段時間,讓大家可以在要升級的時候再去升級。
可是同時也不是單純的放著舊的套件不更新而已,如果有重大 Bug 發生,是會同時對所有版本做修補,所有版本都可以拿到安全的更新。

CentOS 是筆者認為最適合當作伺服器使用的系統了,他的優缺點一目了然。
優點就是套件舊但穩定,新的東西可能要自己編譯,但通常不會不能用,加上使用量不小所以大部分軟體還是支援的,反而 Arch 就沒有那麼多軟體標榜支援了。
缺點也是舊,更新慢,有些 Bug 如果不是重大資安問題可能會脫很久才會修好。同時因為 kernel 版本舊,對新硬體的支援度就差了。
尤其硬體廠商若支援硬體驅動也大多只有支援 Ubuntu,要在全新的或是冷門的硬體上使用 CentOS 可能要自己去 patch kernel 了。但是反過來說,由於是常被拿來架伺服器的系統,伺服器的硬體廠商反而有時會特別提供 CentOS 的驅動,只能說 CentOS 就乖乖拿來在伺服器主機上架伺服器就好。

所以可以不要想要用 CentOS 當作桌機筆電的系統了,當年新出的電腦 8,9 成是跑不了 CentOS 的。

總結

Linux 有這麼多發行版其實是個維護版本多樣性的一個很好的方式,就像演化論一樣,最終每個發行版發展出自己的長處和短處,淘汰沒有競爭力的發行版,所以最終 Linux 才有辦法走到今天的地位。甚至很多大公司也改變以前閉源的作風,把部份自己的成果開源出來,讓大家可以共享成果,有錢出錢、有力出力、各取所需,其實開源就是個完美的共產主義社會?

Did somebody say 'communism'? - https://www.reddit.com/r/ProgrammerHumor/comments/7t3e0d/did_somebody_say_communism/

雖然如此,但宗教戰爭還是不可免,越多人使用等於越強大的社群能量,這也是為什麼工程師都在默默的推坑別人自己擅長或熟悉的系統、程式語言了,弱肉強食是基本的道理,多推坑一個人就會增加這個社群的活躍程度進而增強這個軟體的功能或是更新能量。

所以我的結論,筆電裝 Arch ,伺服器用 CentOS,有錢可以用 RedHat,然後最重要的一點,Ubuntu是垃..(誤。