Linux内核

**Linux 核心**（英語：Linux kernel）是一種開源的類 Unix 作業系統單核心。整個 Linux 作業系統家族基於該核心部署在傳統電腦平台（如個人電腦和伺服器，以 Linux 發行版的形式）和各種嵌入式平台，如路由器、無線存取點、專用小交換機、機上盒、FTA 接收器、智慧型電視、數位影片錄影機、網路附加儲存（NAS）等。工作於平板電腦、智慧型手機及智慧型手錶的 Android 作業系統同樣通過 Linux 核心提供的服務完成自身功能。儘管於桌面電腦的占用率較低，基於 Linux 的作業系統統治了幾乎從行動裝置到主機的其他全部領域。截至 2017 年 11 月，世界前 500 台最強的超級電腦全部使用 Linux。

Linux 核心最早是於 1991 年由芬蘭駭客林納斯・托瓦茲為自己的個人電腦開發的，他當時在 Usenet 新聞群組 `comp.os.minix` 登載貼文，這份著名的貼文標誌著 Linux 核心計劃的正式開始。如今，該計劃已經拓展到支援大量的電腦體系架構，遠超其他作業系統和核心。它迅速吸引了一批開發者和使用者，利用它作為其他自由軟體專案的核心，如著名的 GNU 作業系統。而今天，Linux 核心已接受了超過 1200 家公司的近 12000 名程式設計師的貢獻，其中包括一些知名的軟硬體發行商。

從技術上說，Linux 只是一個符合 POSIX 標準的核心。它提供了一套應用程式介面（API），通過介面使用者程式能與核心及硬體互動。僅僅一個核心並不是一套完整的作業系統。有一套基於 Linux 核心的完整作業系統叫作 Linux 作業系統，或是 GNU/Linux（在該系統中包含了很多 GNU 計劃的系統組件）。

Linux 核心是在 GNU 通用公眾授權條款第 2 版之下釋出的（加上一些非自由韌體、blob 與各種非自由授權條款），是一個開源專案協同運作的突出例子。它的版本支援根據版本最長可達 6 年，貢獻者遍佈世界各地，日常開發相關的討論在 Linux 核心郵寄清單上。

## 歷史

1991 年，林納斯・托瓦茲，一名 21 歲的就讀於芬蘭赫爾辛基大學的電腦科學專業學生，基於一些簡單的想法，打算編寫一個作業系統核心。他通過英特爾 80386 組合語言的工作切換器和一個終端驅動程式開始工作。8 月 25 號，他在 `comp.os.minix` 新聞群組里發了一封貼文：

> 我在做個（自由的）作業系統（就是個興趣愛好，我不會搞得像 GNU 那麼大那麼專業），打算讓它工作在 386 AT 平台上。它從四月就開始醞釀了，馬上就快好了。我想要那些喜歡或不喜歡 minix 的人的意見，因為我的系統和它有點類似（同樣的檔案系統的物理布局 —— 由於實際原因 —— 還有些其他的東西）。
> 
> 我現在已經移植了 bash (1.08) 和 gcc (1.40)， 而且看起來奏效了。這意味著我會在幾個月內得到一些實用的東西。「……」是的 —— 它沒有任何 minix 代碼，並且它有一個多執行緒的 fs。它**不**可移植（使用 386 工作切換等），而且它可能永遠不會支援除 AT 硬碟之外的其他東西，因為我只有這些:-(。
> 
> 「……」它基本上是用 C 語言寫的，但是大多數人可能不會把我寫的東西叫做 C 語言。它使用我能找到的 386 的每個可以想像的特性，因為它也是一個教我關於 386 的功能的專案。我前面提到過，它使用記憶體管理單元來進行分頁（還沒實現到對硬碟的功能）和分段。這個分段功能使得它真正的依賴於 386（每個任務都有 64Mb 的代碼和資料段 ——4Gb 中最多 64 個任務。如果有人需要超過每個任務 64Mb 的限制，那將是個麻煩事）。「……」我的一些 C 語言檔案（特別是 mm.c）幾乎用了和 C 一樣多的組譯。「……」不像 minix，我也碰巧喜歡中斷，所以中斷將在不試圖隱藏背後的原因的情形下被處理。
> 
> 

之後，許多人為這個專案貢獻了代碼。在早期，MINIX 社群向 Linux 核心貢獻了代碼和想法。當時，GNU 專案已經建立了許多自由作業系統所需的組件，但是它自己的核心 GNU Hurd 尚不完整且無法使用；而 BSD 作業系統還沒有擺脫合法的阻礙。因此，儘管早期版本的 Linux 功能有限，但它迅速獲得了開發人員和使用者。

到 1991 年 9 月，Linux 核心版本 0.01 在芬蘭大學和研究網路（FUNET）的 FTP 伺服器（ftp.funet.fi）上釋出。它有 10,239 行代碼。在 1991 年 10 月，0.02 版本的核心釋出了。

1991 年 12 月，0.11 版本的核心釋出。由於它可以由執行相同核心版本的電腦編譯，因此該版本是第一個自代管的 Linux 核心。當托瓦茲於 1992 年 2 月釋出 0.12 版本時，他採用了 GNU 通用公眾授權條款（GPL），而不是以前的自行起草的授權條款，原先的授權條款不允許商業再分發。

1992 年 1 月 19 日，第一篇文章提交給新的新聞群組 `alt.os.linux` 出現。1992 年 3 月 31 日，該新聞群組更名為 `comp.os.linux`。

X Window 系統隨後被移植到 Linux 上，所以在 1992 年 3 月，Linux 0.95 是第一個能夠執行 X 的版本。從 0.1x 到 0.9x 的版本號大幅跨越是因為期望沒有大的缺失部分的版本 1.0 的即將出現。然而，這被證明是錯誤的。從 1993 年到 1994 年初，出現了 0.99 版本的 15 個開發版本。

1994 年 3 月 14 日，Linux 核心 1.0.0 釋出，共 176,250 行代碼。隨後的 1995 年 3 月，有 310,950 行代碼的 Linux 核心 1.2.0 釋出。

在 1996 年 6 月 9 日釋出的 Linux 核心 2.0 版本之後，以 2.0 為大版本的主要更新有如下這些：

* 1999 年 1 月 25 日 - 釋出 Linux 核心 2.2.0（1,800,847 行代碼）
* 1999 年 12 月 18 日 - 針對 2.2.13 的 IBM 大型電腦修補程式釋出，允許 Linux 核心用於企業級機器
* 2001 年 1 月 4 日 - 釋出 Linux 核心 2.4.0（3,377,902 行代碼）
* 2003 年 12 月 17 日 - 釋出 Linux 核心 2.6.0（5,929,913 行代碼）

從 2004 年開始，釋出過程發生了變化，新的核心每隔 2-3 個月定期釋出，編號為 2.6.0、2.6.1，直到 2.6.39。

2011 年 7 月 21 日，Torvalds 宣布釋出 Linux 核心 3.0：「2.6.<大版本> 的日子過去了」。與 Linux 2.6.39 相比，大的技術變化同版本躍升沒有關係；它標誌著核心的 20 周年紀念。基於時間的釋出過程保持不變。

2013 年 6 月釋出的 Linux 核心版本 3.10 包含 15,803,499 行代碼，而 2015 年 6 月釋出的 4.1 版本已發展到超過 1950 萬行代碼，由近 14000 名程式設計師貢獻。

#### 塔能鮑姆 - 林納斯辯論

Linux 不是微核心架構的事實曾經引起了林納斯・托瓦茲與安德魯・史都華・塔能鮑姆之間一場著名的爭論。1992 年在 Usenet 討論群組 comp.os.minix 開始了一場網路論戰，討論的主題在於作業系統架構的選擇。稍後一些著名的駭客也加入討論，如大衛・穆勒、曹子德。這場辯論影響了 Linux 核心的設計走向。塔能鮑姆認為 Linux 核心採用的單核心已經過時了，應該採取比較先進的微核心架構，引起了林納斯的反擊。

在 2006 年 5 月 9 日，這個主題被重新審視，並且在 2006 年 5 月 12 日塔能鮑姆寫了一份立場聲明。

## 架構

Linux 是一個單體核心，支援真正的搶占式多工處理（於使用者態，和版本 2.6 系列之後的核心態）、虛擬記憶體、共享庫、請求分頁、共享寫時複製可執行體（通過核心同頁合併）、記憶體管理、Internet 協定族和執行緒等功能。

裝置驅動程式和核心擴充執行於核心空間（在很多 CPU 架構中是 ring 0），可以完全存取硬體，但也有執行於使用者空間的一些例外，例如基於 FUSE/CUSE 的檔案系統，和部分 UIO。多數人與 Linux 一起使用的圖形系統不執行在核心中。與標準單體核心不同，Linux 的裝置驅動程式可以輕易的組態為核心模組，並在系統執行期間可直接裝載或解除安裝。也不同於標準單體核心，裝置驅動程式可以在特定條件下被搶占；增加這個特徵用於正確處理硬體中斷並更好的支援對稱多處理。出於自願選擇，Linux 核心沒有二進位核心介面。

硬體也被整合入檔案層級中。使用者應用到裝置驅動的介面是在 /dev 或 /sys 目錄下的入口檔案。行程資訊也通過 /proc 目錄對映到檔案系統。

### 程式語言

Linux 是用 C 語言中的 GCC 版（這種 C 語言有對標準 C 進行擴展）寫的，還有幾個用組合語言（用的是 GCC 的 "AT&T 風格"）寫的目標架構短段。因為要支援擴展的 C 語言，GCC 在很長的時間里是唯一一個能正確編譯 Linux 的編譯器。有許多其他的語言用在一些方面上，主要集中在核心構建過程中（這裡指從原始碼建立可啟動鏡像）。包括 Perl、Python 和多種手稿語言。有一些驅動可能是用 C++、Fortran 或其他語言寫的，但是這樣是強烈不建議的。

### 編譯器相容性

GCC 是 Linux 核心原始碼的預設編譯器。在 2004 年，Intel 主張通過修改核心，以便 Intel C++ 編譯器能正確編譯核心。在 2009 年，有通過修改核心 2.6.22 版而成功編譯的報告（並帶來平均 8-9% 效能增長）。

自從 2010 年，已經開始進行使用 Clang 建造 Linux 核心的努力，Clang 是一個可作為替代的 C 語言編譯器；截止 2014 年 4 月 12 日，官方核心幾乎可以完全用 Clang 編譯。致力於這個目標的計劃叫做「LLVMLinux」，得名於 Clang 所基於的 LLVM 編譯器下部構造。LLVMLinux 不意圖複製 Linux 核心或 LLVM，因此它是由最終提交給上游計劃的修補程式構成的一個元計劃。使 Linux 核心可以用 Clang 編譯最大的好處是比 GCC 有更快的編譯速度，核心開發者可以得益於由此而來的更快的工作流程。

### 介面

符合標準是 Linux 核心內部的普遍策略。另一個規則是 Linux 核心主線不接受只由專有使用者空間軟體使用的核心模組。

#### 核心至使用者空間 API

原始碼可移植性確保符合標準的 C 程式可以在符合同樣標準的任何系統上編譯和執行。Linux 核心開發、GNU C 函式庫和相關的實用工具致力於追隨 POSIX 和單一 UNIX 規範。Linux 核心 API 是核心的系統呼叫介面。

#### 核心至使用者空間 API

二進位可移植性將保證任何程式在符合標準的給定硬體平台上一旦編譯通過，可以在符合同樣標準的任何其他硬體平台上以編譯後的形式執行。二進位可移植性是在基於 Linux 核心的作業系統上建造獨立軟體供應商（ISV）應用有商業可行性的本質要求。現有唯一的二進位相容標準是 Linux 標準規範（LSB）。

#### 核心內 API

在不同子系統間使用了數個核心內部 API。其中一些是跨越多個發行版保持穩定的，另一些則不然。對於核心內 API 不作擔保。維護者和貢獻者可以在任何時候增加或變更它們。

核心內 API 的例子包括針對下列類別裝置驅動程式的軟體框架 / API：

* Video4Linux – 用於影片捕捉硬體。
* 進階 Linux 聲音體系（ALSA） – 用於音效卡。
* New API– 用於網路介面控制器。
* 直接彩現管理器– 用於圖形加速器。
* KMS 驅動器– 用於影片顯示控制器。
* mac80211 – 用於無線網路介面控制器。

#### 核心內 ABI

Linux 核心開發者選擇不維護穩定的核心內 ABI。

### 技術特性

#### 搶占式排程系統

Linux 核心提供在特定條件下的搶先式排程。直到核心版本 2.4，只有使用者行程是搶先式的，就是說除了時間片用盡，在使用者模式下執行的當前行程，如果有更高態優先級的行程進入 `TASK_RUNNING` 狀態，它就會被中斷。自從 2.6 系列 Linux 核心，增加了中斷執行核心代碼的任務的能力，但不是對於核心代碼的所有段落。

Linux 核心含有不同的排程器類。核心預設使用的排程機制叫做完全公平排程器，它介入於核心版本 2.6.23。這個預設排程器類在內部也叫做 `SCHED_OTHER`，而核心還含有兩個遵循 POSIX 的即時排程類，分別叫做 `SCHED_FIFO`（即時先進先出）和 `SCHED_RR`（即時輪串流），二者都優先於預設類。

通過使用即時 Linux 核心修補程式 `PREEMPT_RT`，可以支援對關鍵段落、中斷處理器和「中斷禁用」代碼序列的完全搶先。 即時 Linux 核心修補程式部分地整合入主線核心已經帶給它一些功能。搶先機制改善延遲、增進回應性，並使得 Linux 更加適合桌面和即時應用。老版本核心有所謂的巨鎖，用於鎖定粒度為整個核心的同步，它最終由 Arnd Bergmann 在 2011 年移除了。

還有叫做 `SCHED\_DEADLINE` 的排程策略，實現了最近截止期限最先（EDF）演算法，它增加於 2014 年 3 月 30 日發行的核心版本 3.14。

#### 可移植性

儘管林納斯・托瓦茲的初衷不是使 Linux 成為一個可移植的作業系統，今天的 Linux 卻是全球被最廣泛移植的作業系統核心。從行動電話到超級電腦，甚至於有人成功的將 Linux 核心在索尼出品的遊戲機 PS2 及 PS3 和微軟出品的遊戲機 Xbox 上使用。Linux 也是 IBM 超級電腦 Blue Gene 的作業系統。直至 2011 年 11 月，全球前五百大超級電腦（TOP500）有高達 91.4% 的比例採用 Linux 為它們的作業系統。一些為手機開發的作業系統，使用 Linux 核心的修改後的版本，其中包括 GoogleAndroid、Firefox OS、HP WebOS 和諾基亞 Maemo。

#### 核心錯誤和 oops

在 Linux 中，核心錯誤（Kernel panic）是指作業系統在監測到核心系統內部無法恢復的錯誤，相對於在使用者空間代碼類似的錯誤。作業系統試圖讀寫無效或不允許的記憶體位址是導致核心錯誤的一個常見原因。核心錯誤也有可能在遇到硬體錯誤或作業系統 BUG 時發生。在許多情況中，作業系統可以在記憶體存取違例發生時繼續執行。然而，系統處於不穩定狀態時，作業系統通常會停止工作以避免造成破壞安全和資料損壞的風險，並提供錯誤的診斷資訊。

在 Linux 上，oops 即 Linux 核心的行為不正確，並產生了一份相關的錯誤紀錄檔。許多類型的 oops 會導致核心錯誤，即令系統立即停止工作，但部分 oops 也允許繼續操作，作為與穩定性的妥協。這個概念只代表一個簡單的錯誤。當核心檢測到問題時，它會列印一個 oops 資訊然後殺死全部相關行程。oops 資訊可以幫助 Linux 核心工程師除錯，檢測 oops 出現的條件，並修復導致 oops 的程式錯誤。

### 安全

電腦安全是一個非常公眾化的主題，關係到 Linux 核心，因為大量在核心中的錯誤可能成為潛在的安全漏洞，是否允許提升權限漏洞或阻斷服務攻擊源漏洞。在過去的幾年中，許多這樣的缺陷被發現，並在 Linux 核心中被修補好。新的安全功能被繼續實現，以解決在 Linux 核心中的電腦不安全問題。

批評者指責核心開發人員，稱他們掩蓋（至少並未公佈）安全漏洞。2008 年，作為回應，Torvalds 稱：「個人認為，安全漏洞只是『正常的漏洞』。這些漏洞我並不去掩蓋，不過我不認為應當把它們特殊化，更不認為應該追蹤並公示它們…… 我不理會整個安全團隊，原因之一就是，我認為這些漏洞不僅美化還鼓勵了錯誤的行為。這令安全人員成了『英雄』，就猶如不修補正常漏洞的人就不值一提似的。而事實上，所有無聊的正常漏洞極為重要，僅僅因為它們實在太多了。我不認為該美化和關心那些嚴重的安全漏洞 —— 它們並不及那些由死鎖造成的隨機嚴重崩潰來得更特殊。」

如 2012 年五月，SYSRET 指令被發現在 AMD 和英特爾處理器間在實現方面有差異，這個差異在 Windows、FreeBSD、XenServer 和 Solaris 這些主流作業系統會導致漏洞。2012 年六月，Linux 核心中該問題已被修復。

2021 年，來自明尼蘇達大學的研究人員，曾藉由貢獻修補程式至 Linux 核心的名義，利用修補程式匯入臭蟲或漏洞，以觀察 Linux 核心社群的反應，再度故技重施時，被發現後封鎖了所有來自該大學的貢獻，與移除過去該大學曾經貢獻的程式碼。

## 開發

### 開發者社群

截止 2007 年，核心開發已經從 20 位最活躍開發者寫 80% 的代碼轉變為頂端 30 人寫 30% 的代碼，而頂端開發者花費更多的時間稽核變更。 開發者還可以按從屬關係來歸類；在 2007 年，頂端類屬是「不知名」而頂端公司是 Red Hat，它占有 12% 的貢獻，而知名業餘愛好者占 3.9%。 在 2007 年中所做核心變更已經由超過 1900 位開發者提交。一般假定 Linux 核心開發者社群由 5000 或 6000 名成員組成。

Linux 基金會發表的 2016 年 Linux 核心開發報告的更新表明，從版本 3.18（2014 年 12 月）至 4.7（2016 年 7 月）期間：平均每次發行有來自 200-250 個公司的大約 1500 位開發者作出貢獻。頂端 30 位開發者貢獻了稍大於 16% 的代碼。在公司中，頂端貢獻者是 Intel（12.9%）和 Red Hat（8.0%），第三和第四位為「none」（7.7%）和「unknown」（6.8%）類屬。

### 開發過程與模式

一個想要對 Linux 核心進行修改的開發者一般就從對那個修改的開發和測試開始著手。接下來的過程取決於變化的重要程度，及修改該變更的子系統數量是由單個還是多個修補程式組成。如果僅僅是修改了由單個維護人員維護的單個子系統，那麼這些修改的修補程式代碼就直接通過 Cc 中某個郵寄清單傳送給相關的維護人員。郵寄清單的閱讀者和子系統的維護人員將檢查修補程式代碼並提供回饋。一旦審查過程完成，維護者接受他核心代碼樹中的修補程式。如果這些更改被認為是夠重要的錯誤修復，那麼包含這些修補程式的拉取請求（pull request）將在幾天內傳送給 Linus。否則，將在下一個合併窗口時向 Linus 傳送拉取請求。合併窗口通常會持續兩周，並在之前的核心版本釋出後立即啟動。

Linus Torvalds 擁有對 Linux 核心能夠接受哪些更改和誰可以成為維護者的最終決定權。核心維護者在他們自願放棄之前將維持他們的角色。目前，沒有任何已知的核心維護者被要求登出。此外，還沒有一個核心維護者因與其他維護者的互動風格的因素而受到 Linus 批評的例子。這為維護者提供了寬鬆的社群空間。雖然核心開發社群的文化多年來有所改善，但曾有一段時間它的聲譽很糟糕。認為自己遭受了不公正對待的開發者可以向 Linux 基金會的技術專家委員會報告。儘管如此，一些社群成員仍然不認同現在的討論氛圍。

#### 同 Linux 發行版的關係

大多數 Linux 使用者執行一個由他們 Linux 發行版提供的核心。一些發行版搭載的是 Linux 的通用核心（也就是 「vanilla」或「stable」）版本。不過，一些 Linux 核心發行商（如 Red Hat 和 SUSE）會維護他們自己的核心分支。這些發行商分支的核心版本通常相對於穩定版本（vanilla）而言更新的速度更慢一些，但是同樣會包括所有相關的穩定版本分支的修補程式。此外，他們同時也會增添一些新特性和對新硬體的支援，而這些支援是這些發行商分支基於的穩定分支所不包括的。

### 重新開發的估價

按照傳統商業軟體開發的方式，重新開發 Linux 2.6.0 核心的估計代價將是 6.12 億美元（4.67 億歐元、3.94 億英鎊），以 2004 年的 COCOMO 人月估計模型。在 2006 年，歐盟資助的一項研究表明，重新開發 Linux 2.6.8 以後的核心，代價是 8.82 億歐元（11.4 億美元、7.44 億英鎊）。

截至 2011 年 1 月 4 日，使用當前的代碼行（LOC）和大衛・惠勒的計算工資數，這將花費約 30 億美元（約 22 億歐元），才能夠重新開發 Linux 的核心。

### 版本命名

Linux 核心有三個不同的命名方案。早期版本：第一個版本的核心是 0.01，其次是 0.02,0.03,0.10,0.11,0.12（第一 GPL 版本),0.95,0.96,0.97,0.98,0.99 及 1.0。，從 0.95 版有許多的修補程式釋出於主要版本版本之間。

舊計劃（1.0 和 2.6 版之間)，版本的格式為 A.B.C，其中 A,B,C 代表：**A** 大幅度轉變的核心，這是很少發生變化，只有當發生重大變化的代碼和核心發生才會發生，在歷史上曾改變兩次的核心：1994 年的 1.0 及 1996 年的 2.0； **B** 是指一些重大修改的核心，核心使用了傳統的奇數次要版本號碼的軟體號碼系統（用偶數的次要版本號碼來表示穩定版本）；**C** 是指輕微修訂的核心，這個數字當有安全修補程式，bug 修復，新的功能或驅動程式，核心便會有變化。自 2.6.0（2003 年 12 月）釋出後，人們認識到，更短的釋出周期將是有益的。自那時起，版本的格式為 A.B.C.D，其中 A,B,C,D 代表：**A** 和 **B** 是無關緊要的，**C** 是核心的版本，**D** 是安全修補程式。

自 3.0（2011 年 7 月）釋出後，版本的格式為 3.A.B，其中 A,B 代表：**A** 是核心的版本，**B** 是安全修補程式。而 4.0（2015 年 4 月）釋出後，則延續 3.A.B 的命名格式，只是將主版號變更為 4。

## 法律層面

### 授權條款

原先托瓦茲將 Linux 置於一個禁止任何商業行為的條例之下，但 0.12 版本之後改用 GNU 通用公眾授權條款第二版。 該協定允許任何人對軟體進行修改或發行，包括商業行為，只要其遵守該協定，所有基於 Linux 的軟體也必須以該協定的形式發表，並提供原始碼。

托瓦茲曾經公開聲稱將 Linux 置於 GNU 通用公眾授權條款之下是他一生中所做的「最好的決定」。

#### GPL 第三版

Linux 核心明確地僅發表在 GNU 通用公眾授權條款（GPL）第二版下，而不向被授權方提供選擇「任何更高版本」的選項（這是常見的 GPL 擴充）。關於如何輕鬆地改變授權條款以使用後來的 GPL 版本（包括第 3 版）以及這種更改是否合乎需要，存在著相當多的爭論。 托瓦茲本人在版本 2.4.0 的釋出中明確指出，他自己的代碼僅在版本 2 下釋出。然而，GPL 的條款規定，如果沒有指定版本，那麼可以使用任何版本；並且艾倫・考克斯指出，很少有其他 Linux 貢獻者指定了特定版本的 GPL。

2006 年 9 月，對 29 位關鍵核心程式設計師的調查顯示其中的 28 位元更傾向於使用 GPL 第二版（GPLv2）而非當時的 GPL 第三版（GPLv3）草案。 托瓦茲評論說：「我認為一些外界人士...... 相信我才是那個古怪不合群的人，因為我這麼大張旗鼓地不做 GPLv3 的忠實粉絲。」這些高水平的核心開發者就大眾媒體對 GPLv3 的反對發表了評論，其中包括林納斯・托瓦茲本人、葛雷格・克羅哈曼和安德魯・莫頓。他們提到有關 DRM/TiVo 化、專利及「附加限制」的條款，並警告 GPLv3 對「開源宇宙」的巴爾幹化。決定不採用 GPLv3 作為 Linux 核心授權條款的托瓦茲在幾年後重申了他的批評。

#### 韌體爭議

授權條款爭議的一個重點是 Linux 使用韌體二進位包以支援某些硬體裝置。理察・馬修・斯托曼認為這些東西讓 Linux 某部份成為非自由軟體，甚至以此散佈 Linux 更會破壞 GPL，因為 GPL 需要**完全可獲取的原始碼**。

林納斯・托瓦茲及 Linux 社群中的領導者，支援較寬鬆的授權條款，不支援理察・馬修・斯托曼的立場。社群中的 Linux-libre 提供完整的自由軟體韌體。

#### 載入式核心模組授權條款

另一個爭論點，就是載入式核心模組是否算是智慧財產權下的衍生創作，意即 LKM 是否也受 GPL 約束？托瓦茲本人相信 LKM 僅用一部分「公開」的核心介面，因此不算衍生創作，因此允許一些僅有二進位包裹的驅動程式或不以 GPL 宣告的驅動程式用於核心。但也不是每個人都如此同意，且托瓦茲也同意很多 LKM 的確是純粹的衍生創作，也寫下「基本上，核心模組**是**衍生創作」這樣的句子。另一方面托瓦茲也說過：

> 有時候一些驅動程式原先並非為 Linux 設計，而是為其他作業系統而作（意即並非為 Linux 作的衍生創作），這是個灰色地帶…… 這「的確」是個灰色地帶，而我個人相信一些模組可視為非 Linux 衍生創作，是針對 Linux 設計，也因此不會遵守 Linux 訂下的行為準則。
> 
> 

特別像繪圖卡驅動程式就有非常大的爭議，也許到最後得由立法機關給個答案。

### SCO 爭議

在 2003 年 3 月，SCO Group 對 IBM 提告，聲稱 IBM 將一些在 SCO 智慧財產權授權條款保護下的 Unix 原始碼植入 Linux 中，破壞了 SCO 給予 IBM 的原始碼使用許可權。另外 SCO 也發出一大堆存證函給許多公司，警告他們在沒有 SCO 許可權的情況下使用了 Linux，此舉可能導致侵犯智慧財產權，並且以起訴為手段對個別使用者施壓。SCO 也同時對 Novell、戴姆勒克萊斯勒（DaimlerChrysler，在 2004 年 7 月被部份駁回）以及 AutoZone 提出告訴，且被 Red Hat 與其他反對 SCO 論點的公司反告。2007 年 8 月 24 日，聯邦法院審理 SCO 對 Novell 案（SCO v. Novell），法院認定 Novell 才是 Unix 商標的合法擁有者，而不是 SCO。2010 年 3 月 20 日，美國聯邦第十巡迴上訴法院宣判，Novell 才是 UNIX 與 UnixWare 商標的合法擁有者。此項判決宣布後，已進入破產保護程式的 SCO 公司，決定停止繼續提出訴訟。

## 參見

* Linux
* 林納斯・托瓦茲
* 作業系統核心的比較
* Linux 核心版本歷史

## 參考文獻

## 外部連結

* （英文）Linux 核心官方下載中心 （頁面存檔備份，存於網際網路檔案館）
* （英文）日漸膨脹的 Linux 郵寄清單內容摘要
* （英文）林納斯與塔能包姆爭論微核心的筆仗
* （英文）Greg Kroah Hartman on the Linux Kernel at youtube （頁面存檔備份，存於網際網路檔案館）
* （中文）如何檢視 Linux 核心版本資訊 （頁面存檔備份，存於網際網路檔案館）