Linux内核

塔能鮑姆-林納斯辯論

Linux不是微核心架構的事實曾經引起了林納斯·托瓦茲與安德魯·斯圖爾特·塔能鮑姆之間一場著名的爭論。1992年在Usenet討論群組comp.os.minix開始了一場網路論戰，討論的主題在於作業系統架構的選擇。稍後一些著名的駭客也加入討論，如大衛·米勒、曹子德。這場辯論影響了Linux核心的設計走向。塔能鮑姆認為Linux核心採用的單核心已經過時了，應該採取比較先進的微核心架構，引起了林納斯的反擊。
在2006年5月9日，這個主題被重新審視，並且在2006年5月12日塔能鮑姆寫了一份立場聲明。

程式語言

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是核心的系統呼叫介面。

核心至用戶空間ABI

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

核心內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核心中該問題已被修復。

開發

核心版本

開發者社群

截止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。

版本時間線

來源：kernel.org

授權條款

原先托瓦茲將 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公司，決定停止繼續提出訴訟。