[Linux] 認識Linux作業系統
Adrian Chen

開放原始碼、自由軟體與GNU

在講到這部分之前,我們首先需要明白幾個基本的概念:

  • 自由軟體(Free Software):根据自由软件基金会对其的定义,是一类可以不受限制地自由使用、复制、研究、修改和分发的,尊重用户自由的软件。
  • 開放原始碼(Open Source):開放原始碼是一種在電腦程式出品前和開發中提供其內部程式碼的做法。Open Source是一種行爲,而不是一個結果。
  • GNU:GNU是一個自由的作業系統,其內容軟體完全以GPL方式釋出。這個作業系統是GNU計劃的主要目標,名稱來自GNU’s Not Unix!的遞迴縮寫,因為GNU的設計類似Unix,但它不包含具著作權的Unix代碼。GNU的創始人,理查·馬修·斯托曼,將GNU視為「達成社會目的技術方法」。
  • GNU軟體:即被設計爲可以在GNU上運行的自由軟體。在GNU尚未完成的情況下,GNU軟體一般代指開源軟體或自由軟體。
  • GPL:GNU通用公共授權條款。即自由軟體的官方法律文書。任何軟體,如果採用該授權條款發佈,即代表該軟體爲自由軟體,在釋出軟體本身的同時,也必須釋出軟體的原始碼,並將原始碼的修改、發佈、獲利等一系列權限同時開放出去。

自由軟體發展簡史

  1. 在1950至1960年代,幾乎所有軟體都是由從事學術的研究人員寫作開發的,並通常公有領域軟體釋出。由於軟體需要經常性的進行修改,如:為了適配新的作業系統或硬體、修正錯誤及增加新功能,軟體的原始碼一般都會與軟體一起提供。

  2. 1960年代末,出現了一些變化,作業系統和編譯器出現的同時,軟體生產費用相對於硬體大幅增加。 正在發展的軟體產業開始和硬體製造商的捆綁軟體進行競爭;因為後者的開發費用被包含於硬體費用中,所以租借的機器在沒有支付軟體費用的時候依舊需要軟體的支援,而一些能夠更好的滿足自己需要的使用者不希望因為硬體商開發捆綁軟體導致硬體費用上升。在1969年1月17日的美利堅合眾國對 IBM 的反壟斷訴訟中,美國政府指控捆綁軟體是反競爭的。與此同時,雖然有一些軟體依舊免費提供,但越來越多的軟體只在限制性的授權條款下銷售。

  3. 1980年代,UNIX 的使用變得更加廣泛,而 AT&T 在此時停止了 UNIX 的免費分發,並且開始為系統修補程式收費。因為切換到一個新的構架相當困難,大多數研究人員只得選擇支付商業授權條款。

  4. 1983年,理察·斯托曼 發起了GNU計劃以編寫一可以不受限制使用原始碼的作業系統。標誌着自由軟體運動的正式開始。在啟動這項運動後,斯托曼使用了已經存在的術語「free software」(自由軟體)。在1986年,為了推廣《自由軟體定義》,他建立了自由軟體基金會。

image

  1. 1989 年,該基金會釋出了第一版的GNU通用公眾授權條款(GPL),並在1991年釋出了進行了少量更新的第二版。GPL的出現標誌着自由軟體運動開始擁有了法律意義上的支持。

image

自由軟體之討論

如果簡單來講,所謂自由軟體,就是“著作權屬左”(Copyleft)或“放棄著作權”的一類軟體的統稱。該類軟體在獲得軟體本身拷貝的同時,也會同時獲得軟體的原始碼的拷貝。

根據GPL的規定,對於採用GPL授權條款發佈的自由軟體,任何人均可獲得該軟體的原始碼,並有權對原始碼進行任意的修改、發佈和獲利。但是,經過修改之後重新發佈的自由軟體,也必須採用GPL授權條款釋出,即自由軟體的下游軟體必須是自由軟體,以將自由軟體的精神傳遞下去。

應當明白的是,自由軟體並不反對軟體的商業化,也並不反對軟體作者透過自由軟體獲利。自由不等於免費。自由軟體運動僅反對將軟體原始碼和著作權壟斷的行爲。因爲“自由權利歸衆生”。

自由軟體運動是領域內最偉大的運動,它推動了整個行業的發展。開放原始碼的自由軟體,能夠獲得全世界龐大的程式設計師羣體的幫助,羣策羣力,以使得該軟體獲得更好的發展,達到更大的高度。這遠遠不是一個公司、一個團體的力量所能夠做到的。

同時,自由軟體運動所包含的開放、共享、合作、共贏的精神,是整個行業生生不息的重要精神內核,也是行業的魅力所在。

自由萬歲!

Linux作業系統

作爲一個作業系統,GNU的核心Hurd至今仍然未能夠被開發完成,但是圍繞Hurd的一系列GNU軟體,例如GNU編譯器等則早已經開發完成。因此,這些自由軟體早期依然只能夠運行在專有和封閉的Unix作業系統上。

但是在1991年(民國80年),林納斯·托瓦茲釋出了Linux核心,並且允許其他人自由地修改原始碼。當時的協定並非自由軟體協定,但在1992年2月,托瓦茲使用了GPL協定重新釋出了 Linux 的0.12版本。

image

Linux核心的出現,補足了GNU計劃的最後一塊拼圖,整個自由軟體世界由此變得完整且生機勃勃。

image

由於Linux核心的開放特性,使得這個核心獲得了來自全球程式設計師的青睞和鼎力相助。而其“版權屬左”的特性,則使得任何人都可以不受限制地獲得、修改、分發、銷售Linux的原始碼及其衍生產品。

透過修改Linux核心及其衍生產品而發布的作業系統,本質上也是使用Linux核心的Linux衍生產品,這嚴的作業系統就被稱之為“Linux發行版”。

例如,著名的Linux發行版Debian就是基於Linux核心修改而來的,而更加著名的發行版Ubuntu則是基於Debian修改而來。

全世界的Linux發行版有非常非常多,有的是直接基於Linux核心開發而來,有的則是基於其他發行版。但其最原始的程式碼一直都是開放原始碼的Linux核心。

一般情況下,我們習慣將直接基於Linux核心的發行版稱為“根發行版”,而根據不同的根發行版,可以將一眾發行版歸類。目前全世界比較流行的發行版大致有如下幾類:

  1. RHEL系:以Fedora為根發行版,基於Fedora的發行版有承擔企業級穩定工作的發行版RedHat Enterprise Linux和承擔測試工作的CentOS Stream。這個系列主要由RedHat公司所運營。同時民間基於Fedora的發行版亦不少見,比較知名的例如從CentOS團隊分裂而來的Rocky Linux,基於RedHat開發。該系列的主要特點是由大公司運營,穩定性、安全性都有極大保障,在服務器和專業工作領域大受青睞。

image

  1. Debian系:以Debian為根發行版,基於Debian最著名的發行版當數Ubuntu。自從CentOS轉變開發方向,Ubuntu已經成為新手入門Linux的不二之選。基於Debian和Ubuntu發行的發行版則不計其數,其中不乏甚為優秀者,例如Hackers最喜歡的Kali Linux。中國所謂的“國產作業系統”大多數其實就是Debian系的Linux發行版,例如著名的deepin/UOS和Kylin系列。該系列的特點是極致的穩定性。雖然是社區運營,但是由於其軟體測試和迭代的速度十分緩慢,因此極大保證了系統的穩定性。同時該系列發行版非常適合入門,因此有廣泛而龐大的用戶群體。

image

  1. Archlinux系:以Archlinux為根發行版,基於Archlinux的發行版比較少,比如manjaro和garuda linux等。該發行版的特點和Debian系正好相反,其策略極為激進,預設策略下所有的軟體均保持最新狀態,任何軟體的更新都將在這個系列上第一時間可用。同時,得益於其所運營的用戶導向軟體倉庫AUR,這個系列的Linux發行版可以傻瓜式開箱使用的軟體遠非其他發行版所能比擬。

image

  1. SUSE系:以OpenSUSE為根發行版,這個系列的發行版就比較少見了,由德國的SUSE公司運營。但是其一些特性確實讓其收穫了一大批擁護者。筆者對這個系列不甚熟悉,不予置評。

image

  1. 其餘Linux發行版:其餘直接基於Linux核心的Linux發行版系列。

本系列入門部落格課程使用的發行版是Ubuntu。

指令列 or XWindow?

在正式進入Linux的世界之前,我們需要明白一件基本的事情。

或許我的讀者們已經習慣了Windows或macOS下的圖形作業環境。使用滑鼠點點這裡點點那裏就可以完成一些工作。

或許讀者們從未想過,這些圖形究竟來自哪裡。的確,Windows等已經將“圖形”放到了作業系統的核心中,如果圖形介面崩潰了,它們將跟著崩潰掉。

然而Linux作業系統卻不是這樣。

Linux的核心中是沒有“圖形”這個概念的,其最本質的操作方式就是像上個世紀的電腦那樣,使用鍵盤向電腦裡輸入指令,然後電腦給到操作者反饋。也就是典型的“指令列”。黑底白字,清清楚楚。

然而,如果讀者預先對於不同的Linux發行版有所了解,你可能會發現,許多Linux發行版似乎是有圖形作業介面的,也一樣可以像Windows那樣用滑鼠點來點去。這是為什麼呢?

原來,Linux的“圖形”環境,事實上可以將其看做一個軟體,就像我們常用的WhatsApp、Line、TikTok等等一樣,只是應用軟體而已。當然不可能這樣簡單,整個圖形環境是由非常多的軟體構成的,但它們終究——只是應用軟體,而不是核心,是App,不是Kernel。

一般情況下,我們將圖形環境稱為“XWindow System”。你可以將其看做一系列的軟體。比如顯示協議X11和Wayland,窗口管理器Mutter、KWin和Hyprland等,以及更大的“桌面環境”Gnome、KDE Plasma等,它們共同構成了XWindow System。你可以使用不同的顯示協議、窗口管理器和桌面環境來組裝一套完全不同的XWindow System,運行在你的發行版上,為你的作業系統提供圖形介面。

那麼回到主線上來,Windows失掉了圖形環境能否運行?不能,因為之於Windows,圖形環境是核心的一部分。但是Linux失掉了圖形環境能否運行?可以,因為之於Linux,圖形環境只不過是一系列的應用軟體,就像你的電腦裡安裝的其他應用軟體一樣。刪除掉這些軟體,操作系統沒有理由會崩潰掉。

因此,之於Linux,我們絕不能夠透過看它“長什麼樣子”就判斷它是哪一個發行版。Linux有不同的圖形XWindow軟體,這些軟體還大多都可以客製化,因此你的圖形作業環境可以長成任何樣子。比如,一個Ubuntu和一個Archlinux都安裝Gnome桌面環境,預設情況下,看起來長得幾乎一模一樣,但仍然否認不了它們是兩個完全不同的發行版的事實。相同的,一個Ubuntu安裝Gnome和KDE Plasma兩種不同的桌面環境,預設情況下長得完全不同,但是顯然它們就是相同的發行版。

對於我們來說,我們要遵守一個基本的原則,“Give up XWindow System.”首先,我們學習使用Linux,是要學習Linux最根本的使用,而不是學習那些我們從小就爛熟於心的東西。其次,由於指令列才是Linux真正的操作核心,因此指令列可以解決任何問題,許多圖形環境沒有可能解決的問題,在指令列都可以得到解決。

因此,本課程除了在安裝的時候用到圖形環境,後續的教學都不會涉及任何圖形環境。還請讀者注意。