Linuxのマスコット、ペンギンのタックス[1] | |
Linuxカーネル3.0.0の起動 | |
| 原作者 | リーナス・トーバルズ |
|---|---|
| 開発者 | コミュニティ貢献者 Linus Torvalds |
| 初回リリース | 0.02 (1991年10月5日) |
| 安定リリース | 6.11 [2]
/ 2024年9月15日 |
| プレビューリリース | 6.11-rc7 [3]
/ 2024年9月8日 |
| リポジトリ |
|
| 書かれた | C(C11 5.18以降、C89以前)、[4] Rust(6.1以降)、[5] アセンブリ言語 |
| 利用可能 | 英語 |
| ライセンス | GPL-2.0のみ、 Linux-syscall-note付き[6] [7] [8] [a] |
| Webサイト | カーネル.org |
Linuxカーネルは、無料でオープンソースの[12] :4 UNIXライクな カーネルで、世界中の多くのコンピュータシステムで使用されています。このカーネルは1991年にLinus Torvaldsによって作成され、すぐにUnixの無料の代替として作成されたGNU オペレーティングシステム(OS)のカーネルとして採用されました。1990年代後半から、多くのオペレーティングシステムディストリビューションに組み込まれており、その多くはLinuxと呼ばれています。そのようなLinuxカーネルオペレーティングシステムの1つがAndroidで、多くのモバイルデバイスや組み込みデバイスで使用されています。
カーネルコードのほとんどは、標準Cを超える拡張機能を持つGNUコンパイラコレクション(GCC)でサポートされているCで書かれています。 [12] : 18 [13]コードには、メモリ使用やタスク実行の最適化など、アーキテクチャ固有のロジックのアセンブリコードも含まれています。[12] : 379–380 カーネルはモジュール設計になっているため、モジュールはソフトウェアコンポーネントとして統合でき、動的にロードすることもできます。 OS全体がカーネル空間で実行されるため、カーネルはアーキテクチャ的にはモノリシックです。
LinuxはGNU General Public Licenseバージョン2に基づいて提供されていますが、他の互換性のあるライセンスに基づくファイルも含まれています。[11]
歴史
.jpg/500px-LinuxCon_Europe_Linus_Torvalds_03_(cropped).jpg)
1991年4月、ヘルシンキ大学の21歳のコンピュータサイエンスの学生、リーナス・トーバルズは、UNIXにヒントを得たパーソナルコンピュータ用のオペレーティングシステムの開発に着手した。[14]彼は、 Intel 80386アセンブリ言語のタスクスイッチャーとターミナルドライバから始めた。[14] 1991年8月25日、トーバルズはUsenetのニュースグループcomp.os.minixに次の投稿をした。[15]
私は 386(486) ATクローン用の (フリーの) オペレーティング システム (単なる趣味で、gnu のように大規模でプロフェッショナルなものではありません) を作成しています。これは 4 月から準備が進められており、準備が整い始めています。私の OS は minix に多少似ているため (ファイルシステムの物理的なレイアウトが同じ (実用的な理由による) など)、minix の好きな点や嫌いな点についてフィードバックをいただければ幸いです。現在、 bash (1.08) とgcc
(1.40)を移植しており、問題なく動作しているようです。これは、数か月以内に実用的なものを作成できることを意味します [...]はい、minix コードは含まれておらず、マルチスレッドのファイルシステムを備えています。プロテクタブルではありません(386 タスク スイッチングなどを使用)。また、AT ハードディスク以外のものをサポートすることはおそらくないでしょう。AT ハードディスクしか持っていないからです :-(。
1991年9月17日、トルバルズはLinuxのバージョン0.01を準備し、フィンランド大学研究ネットワーク( FUNET )のFTPサーバー「ftp.funet.fi」に置いた。そのコードはコンパイルとテストにMinixを必要としていたため、実行可能でもなかった。[16]
1991年10月5日、トーバルズはLinuxの最初の「公式」バージョンであるバージョン0.02を発表しました。[17] [16]
1 か月前に述べたように、私は AT-386 コンピューター用の Minix に似たフリー バージョンに取り組んでいます。ようやく使える段階にまで到達しました (ただし、目的によっては使えない場合もあります)。ソースを広く配布できるように公開するつもりです。まだバージョン 0.02 ですが、bash、gcc、gnu-make、gnu-sed、compress などを正常に実行できました。
Linuxは、 MINIXコミュニティを含む多くの開発者がプロジェクトに貢献したため、急速に成長しました。[要出典]当時、GNUプロジェクトは、無料のUNIX代替品であるGNU OSの多くのコンポーネントを完成させていましたが、カーネルであるGNU Hurdは未完成でした。プロジェクトは、OSにLinuxカーネルを採用しました。[18]
トルバルズは、このカーネルがまだ一般向けではないことを示すために、メジャーバージョン0というラベルを付けました。[19] 1991年12月にリリースされたバージョン0.11は、 Linuxカーネルが動作するコンピュータ上でコンパイルされ、 自己ホストされた最初のバージョンでした。
1992年2月にバージョン0.12をリリースしたとき、彼は商用再配布を許可していなかった以前の独自に作成したライセンスではなく、 GNU一般公衆利用許諾書バージョン2(GPLv2)を採用しました。[20] Unixとは対照的に、Linuxのすべてのソースファイルは、デバイスドライバも含めて無料で入手できます。[21]
Linuxの初期の成功は世界中のプログラマーとテスターによって推進されました。POSIX APIのサポートにより、必要に応じてカーネルアドレス空間へのエントリポイントとして機能するlibCを介して、LinuxはUnix用に開発されたソフトウェアとアプリケーションを実行できました。[22]

1992年1月19日、新しいニュースグループalt.os.linuxに最初の投稿が提出されました。[23] 1992年3月31日、ニュースグループはcomp.os.linuxに名前が変更されました。[24]
Linuxがマイクロカーネルではなくモノリシックカーネルであるという事実は、MINIXの作者であるアンドリュー・S・タネンバウムとトーバルズの間で議論されたテーマでした。 [25]タネンバウムとトーバルズの議論は、1992年にUsenetグループcomp.os.minixでカーネルアーキテクチャに関する一般的な議論として始まりました。[26] [27]
バージョン 0.95 は、 X Window System を実行できる最初のバージョンでした。[28] 1994 年 3 月、176,250 行のコードを含む Linux 1.0.0 がリリースされました。[29]バージョン番号が示すように、これは実稼働環境に適していると見なされた最初のバージョンでした。[19] 1996 年 6 月、リリース 1.3 の後、Torvalds は Linux が新しいメジャー番号に値するほど進化したと判断し、次のリリースをバージョン 2.0.0 と名付けました。[30] [31] 2.0 の重要な機能には、対称型マルチプロセッシング(SMP)、より多くのプロセッサ タイプのサポート、特定のハードウェア ターゲットの選択とアーキテクチャ固有の機能と最適化の有効化のサポートが含まれていました。 [22] kbuildのmake *config コマンドファミリは、アドホック カーネル実行可能ファイル ( vmlinux ) とロード可能なモジュールを構築するためのオプションを有効にし、構成します。[ 32] [33]
1999年1月20日にリリースされたバージョン2.2では、[34]ロックの粒度とSMP管理が改善され、m68k、PowerPC、Sparc64、Alpha、その他の64ビットプラットフォームのサポートが追加されました。 [ 35]さらに、 MicrosoftのNTFS読み取り専用機能を含む新しいファイルシステムが追加されました。[ 35] 1999年に、IBMはS/390アーキテクチャのサポートのためにLinux 2.2.13コードへのパッチを公開しました。[36]
2001年1月4日にリリースされたバージョン2.4.0 [37]には、 ISA プラグアンドプレイ、USB、PCカードのサポートが含まれていました。Linux 2.4では、Pentium 4とItanium(後者は、古いPA-RISCに取って代わるためにIntelとHewlett-Packardが共同開発したia64 ISAを導入しました)、および新しい64ビットMIPSプロセッサのサポートが追加されました。[38] 2.4.xの開発では、 Bluetooth、論理ボリュームマネージャ(LVM)バージョン1、RAIDサポート、InterMezzo、ext3ファイルシステムのサポートなど、シリーズ全体でより多くの機能が利用できるようになった点で少し変わりました。
バージョン2.6.0は2003年12月17日にリリースされました。[39] 2.6.xの開発は、シリーズ全体にわたって新機能を組み込む方向にさらに変化しました。 2.6 シリーズで行われた変更には、μClinuxのメインライン カーネル ソースへの統合、PAEサポート、いくつかの新しいCPUラインのサポート、Advanced Linux Sound Architecture (ALSA) のメインライン カーネル ソースへの統合、最大 2 32ユーザーのサポート (2 16から増加)、最大 2 29プロセス ID のサポート (64 ビットのみ、32 ビット アーキテクチャでは依然として 2 15に制限されています)、[40]デバイス タイプ数と各タイプのデバイス数の大幅な増加、64 ビットサポートの改善、最大 16テラバイトのファイル サイズをサポートするファイル システムのサポート、カーネル内プリエンプション、ネイティブ POSIX スレッド ライブラリ( NPTL ) のサポート、ユーザー モード Linux のメインラインカーネル ソースへの統合、
2.6.xリリース以降、カーネルは多数のファイルシステムをサポートするようになりました。その中には、ext3、ext4、FUSE、BtrfsなどLinux用に設計されたものもあれば、[41]、JFS 、 XFS、Minix、Xenix、Irix、Solaris、System V、Windows、MS-DOSなど他のオペレーティングシステムにネイティブなものもありました。[42]
これまで開発ではバージョン管理システムは使用されていなかったが、2002年にLinux開発者はBitKeeperを採用した。これはフリーソフトウェアではなかったが、開発者に無料で提供されていた。2005年にリバースエンジニアリングの試みがあったため、このソフトウェアを所有する会社はLinuxコミュニティへのサポートを取り消した。これに対して、トーバルズらはGitを作成した。新しいシステムは数週間で作成され、2か月後にはそれを使用して作成された最初の公式カーネルがリリースされた。[43]
2005年に安定チームは、バグ修正に取り組めるカーネルツリーが不足していることを受けて結成され、安定版を継続的に更新していくこととなった。[44] 2008年2月には、次の開発サイクルでマージされることを目的としたパッチを集める場所として機能するlinux-nextツリーが作成された。 [45] [46]いくつかのサブシステムメンテナーは、次のリリースサイクルに含めるために提出する予定のコードを含むツリーにサフィックス-nextを採用した。2014年1月現在[update]、Linuxの開発バージョンはlinux-nextという不安定なブランチに保持されている。[47]
2011年7月、Linuxの20周年を記念して、Torvaldsはバージョン3.0.0をリリースしました。[30] 2.6は8年間バージョン番号として使用されていたため、古いプログラムが動作するように、3.xを2.6.40+xとして報告する新しいuname26パーソナリティをカーネルに追加する必要がありました。[48]
バージョン3.0は2011年7月22日にリリースされた。[49] 2011年5月30日、トーバルズは大きな変更は「何もない。まったく何もない」と発表し、「次のリリースでは、まったく新しい輝かしい数字だけでなく、優れたカーネルも作るようにしましょう」と求めた。[50]予想されていた6〜7週間の開発プロセスの後、Linuxの20周年近くにリリースされる予定だった。
2012年12月11日、トルバルズはi386プロセッサのサポートを削除することでカーネルの複雑さを軽減することを決定しました。具体的には、信頼性の高いミューテックスを可能にするためにi486で導入されたアトミックCMPXCHG命令をエミュレートする必要がなくなったことで[51]、3.7カーネルシリーズが元のプロセッサをサポートする最後のカーネルとなりました。[52] [53]同シリーズではARMプロセッサのサポートが統合されました。[54]
2.6.39 から 3.0 へ、および 3.19 から 4.0 への番号変更には、意味のある技術的な差異は含まれず、メジャーバージョン番号が増加したのは、マイナー番号が大きくなるのを避けるためだけであった。[49] [55]安定した 3.xy カーネルは、2015 年 2 月の 3.19 までリリースされた。2013 年 9 月 2 日にリリースされたバージョン 3.11 [56]では、一時ファイルの脆弱性を軽減するための新しいO_TMPFILEフラグ、実験的な AMD Radeon動的電力管理、低遅延ネットワーク ポーリング、zswap (圧縮スワップ キャッシュ) など、多くの新機能が追加された。[57]
2015年4月、トーバルズはカーネルバージョン4.0をリリースした。[30] 2015年2月までに、Linuxは世界最大のソフトウェアおよびハードウェアベンダーを含む1,200社以上の企業から12,000人近くのプログラマーから貢献を受けていた。[58] 2015年6月にリリースされたLinuxバージョン4.1には、約14,000人のプログラマーによって貢献された1,950万行以上のコードが含まれている。[59]
リーナス・トーバルズは2019年3月にカーネルバージョン4.22を5.0と番号付けすることを発表し、「『5.0』は4.xの番号が大きくなりすぎて手足の指が足りなくなったということ以上の意味はない」と述べた。[60] AMD Radeon FreeSyncとNVIDIA Xavierディスプレイのサポート、 F2FS、EXT4、XFSの修正、 Btrfs ファイルシステム上のスワップファイルのサポートの復元、 Intel Icelake Gen11グラフィックスとNXP i.MX8 SoCの作業の継続など、多くの主要な追加が特徴であった。 [61] [62]このリリースは他のリリースよりも著しく大きく、トーバルズは「5.0リリース全体の全体的な変更は非常に大きい」と述べた。[60]
合計1,991人の開発者(うち334人が初めての共同作業者)がバージョン5.8に553,000行以上のコードを追加し、バージョン4.9が保持していた記録を破りました。[63]
人気
Stack Overflowの2019年の年次開発者調査によると、回答者の53%以上がLinux向けのソフトウェアを開発しており、約27%がAndroid向けのソフトウェアを開発しているが、[64] Linuxベースのオペレーティングシステムで開発しているのは約25%に過ぎない。[65]
ほとんどのウェブサイトはLinuxベースのオペレーティングシステムで動作しており、[66] [67] 、世界で最も強力なスーパーコンピュータ500台はすべて何らかの形でLinuxベースのOSを使用しています。[68]
Linux ディストリビューションには、カーネルとシステム ソフトウェア( GNU C ライブラリ、systemd、その他のUnix ユーティリティやデーモンなど)、およびさまざまなアプリケーション ソフトウェアがバンドルされていますが、デスクトップでの使用シェアは他のオペレーティング システムと比較して低いです。
LinuxであるAndroidはモバイルデバイスのオペレーティングシステムの大部分を占めており[ 69] [70] [71] 、組み込みデバイスでの使用が増加しているため、Androidは全体的なLinuxの使用の増加に大きく貢献しています。[22]
価値

従来のプロプライエタリ開発環境でLinuxカーネルのバージョン2.6.0を再開発するコストは、COCOMO人月推定モデルを使用して2004年の価格で6億1200万米ドル(4億6700万ユーロ、3億9400万ポンド)と推定されています。[72] 2006年に欧州連合が資金提供した調査では、カーネルバージョン2.6.8の再開発コストはより高く、8億8200万ユーロ(11億4000万ドル、7億4400万ポンド)とされています。[73]
このトピックは、2008 年 10 月に Amanda McPherson、Brian Proffitt、Ron Hale-Evans によって再検討されました。David A. Wheeler の方法論を使用して、彼らは 2.6.25 カーネルの再開発に現在 13 億ドルかかると推定しました (Fedora 9 の再開発にかかる総額 108 億ドルの一部)。[74]また、スペインのオビエド大学の Garcia-Garcia と Alonso de Magdaleno は、カーネルに毎年追加された価値は 2005 年から 2007 年の間に約 1 億ユーロ、2008 年には 2 億 2500 万ユーロであり、欧州連合での開発には 10 億ユーロ以上 (2010 年 2 月時点で約 14 億ドル) かかると推定しています。[75]
2011年3月7日時点で[update]、当時の2.6.x LinuxカーネルのLOC(コード行数)と賃金数値をDavid A. Wheelerの計算で[update]使用すると、Linuxカーネルが大きくなり続けるにつれて再開発にかかる費用は約30億ドル(約22億ユーロ)になる。2018年9月26日時点で更新された計算では、当時の4.14.14 Linuxカーネルの20,088,609 LOC(コード行数)と現在の米国の全国平均プログラマー給与75,506ドルを使用し、既存のコードを書き直すのに約14,725,449,000ドル(11,191,341,000ポンド)かかることがわかった。[76]
分布
Linux を使用するほとんどの人は、 Linux ディストリビューションを介して使用します。一部のディストリビューションは、標準カーネルまたは安定カーネルを出荷します。ただし、いくつかのベンダー ( Red HatやDebianなど) はカスタマイズされたソース ツリーを維持しています。これらは通常、標準ブランチよりも遅いペースで更新され、関連する安定ブランチのすべての修正が含まれますが、同時に、ディストリビューション ベンダーがブランチのベースにし始めた標準バージョンではリリースされていなかったドライバーや機能のサポートも追加されます。
開発者
コミュニティ
Linuxカーネル開発者のコミュニティは、約5000~6000人のメンバーで構成されています。Linux Foundationが発行したリリース4.8から4.13のコミットを対象とした調査「2017年Linuxカーネル開発の現状」によると、平均して約200~250社の企業から約1500人の開発者が貢献しています。上位30人の開発者がコードの16%強を貢献しています。企業別では、Intel(13.1%)、Red Hat(7.2%)、Linaro(5.6%)、IBM(4.1%)が上位で、2位と5位は「なし」(8.2%)と「不明」(4.1%)のカテゴリです。[78]
ロードマップの代わりに、技術的なガイドラインがあります。中央のリソース割り当ての代わりに、Linux カーネルのさらなる開発にそれぞれまったく独立して関与する個人や企業が存在します。Linus Torvalds や私のような人間は、カーネルの進化を計画しません。私たちは、ただ座って今後 2 年間のロードマップを考え、さまざまな新機能にリソースを割り当てることはありません。それは、私たちにリソースがないからです。リソースはすべて、Linux を使用し、貢献するさまざまな企業と、さまざまな独立した貢献者が所有しています。決定するのは、リソースを所有する人々です...
— アンドリュー・モートン、2005年
対立
Linux カーネル開発者間の注目すべき対立:
- 2007年7月、コン・コリヴァスはLinuxカーネルの開発をやめると発表した。[79] [80]
- 2009年7月、アラン・コックスはトルバルズとの意見の相違によりTTYレイヤーのメンテナーとしての役割を辞任した。[81]
- 2010年12月、Linux SCSIメンテナーのJames Bottomley氏とSCSTメンテナーのVladislav Bolkhovitin氏の間で、LinuxカーネルにどのSCSIターゲットスタックを含めるべきかについての議論がありました。[82]これにより、一部のLinuxユーザーが憤慨しました。[83]
- 2012年6月、トルバルズはNVIDIAが自社のドライバーをクローズドとしてリリースすることに同意しないことを明確に表明した。[84]
- 2014年4月、トーバルズは、systemdがカーネルと悪影響を及ぼすバグに対処できなかったとして、ケイ・シーヴァースがLinuxカーネルにパッチを提出することを禁止した。 [85]
- 2014年10月、レナート・ポエタリングは、 Linuxカーネル関連のメーリングリストでの荒っぽい議論スタイルを容認し、悪い模範となっているとしてトーバルズを非難した。[86]
- 2015年3月、クリストフ・ヘルヴィグはVMwareに対してLinuxカーネルの著作権侵害で訴訟を起こした。 [87]リーナス・トーバルズは弁護士を化膿した病気と呼んで、この訴訟や同様の訴訟には同意しないことを明らかにした。[88]
- 2021年4月、ミネソタ大学のチームが研究の一環としてカーネルに「悪意のある」パッチを提出していたことが判明した。この結果、大学のメンバーが提出したすべてのパッチが直ちに元に戻された。さらに、上級メンテナーから、大学からの今後のパッチは即座に拒否されるという警告が出された。[89] [90]
著名なLinuxカーネル開発者は、開発者間の衝突を避けることの重要性を認識している。[91]長い間、トルバルズの反対によりカーネル開発者向けの行動規範は存在しなかった。[92]しかし、2015年3月8日にLinuxカーネル衝突規範が導入された。[93]これは、2018年9月16日に、貢献者契約に基づく新しい行動規範に置き換えられた。これは、トルバルズによる公式謝罪とカーネル開発からの短い休止と一致した。[94] [95] 2018年11月30日、行動規範に従い、IntelのJarkko Sakkinenは、ソースコードコメントに現れる「fuck」の例を「hug」という単語に焦点を当てた適切なバージョンに置き換えるパッチを送った。[96]
不当な扱いを受けたと感じた開発者は、Linux Foundation技術諮問委員会に報告することができます。[97] 2013 年 7 月、USB 3.0 ドライバーのメンテナーであるSage Sharp は、カーネル開発コミュニティにおける攻撃的なコメントに対処するよう Torvalds に依頼しました。2014 年、Sharp は Linux カーネル開発から撤退し、「技術的卓越性への焦点と、過重なメンテナー、および異なる文化的および社会的規範を持つ人々との組み合わせにより、Linux カーネル メンテナーは、仕事を遂行するために、しばしば無愛想で、失礼で、残酷な態度を取る」と述べました。[98] 2018 年の linux.conf.au (LCA) カンファレンスで、開発者は、コミュニティの文化が過去数年間で大幅に改善されたという見解を示しました。Intel drm/i915 グラフィックス カーネル ドライバーのメンテナーである Daniel Vetter は、カーネル コミュニティにおける「かなり暴力的な言葉遣いと議論」が減少または消滅したとコメントしました。[99]
ローラン・ピンチャートは、2017年のEmbedded Linux Conference Europeで、カーネルコミュニティでの経験について開発者にフィードバックを求めた。提起された問題は、数日後に行われたMaintainers Summitで議論された。開発者が提出したパッチに対するメンテナーの対応に一貫性がないという懸念は、カーネルセルフテストフレームワークのメンテナーであるシュア・カーンによって繰り返された。トルバルズは、異なるカーネルサブシステムが時間の経過とともに異なる開発プロセスを採用しているため、パッチの取り扱いに一貫性が生まれることは決してないと主張した。そのため、各カーネルサブシステムのメンテナーがパッチ受け入れのルールを文書化することで合意した。[100]
発達
Linux は進化であり、インテリジェントな設計ではありません。
— ライナス・トーバルズ、2005 [101] [102] [103]
コードベース
カーネルのソースコード(ソースツリーとも呼ばれる)は、同じくTorvaldsによって作成されたGit バージョン管理システムで管理されています。[104]
2021 年現在[update]、Linux カーネルの 5.11 リリースには約 3,034 万行のコードが含まれています。コードのおよそ 14% は「コア」(arch、kernel、mm ディレクトリ) の一部であり、60% はドライバーです。
貢献
貢献は、 Linuxカーネルメーリングリスト(LKML)(および多くの場合、特定のサブシステム専用の他のメーリングリスト)上のテキストメッセージの形でパッチとして提出されます。パッチは、一連のルールと形式言語に準拠している必要があります。特に、指定されたファイルにどのコード行を削除し、他のどの行を追加するかを記述する必要があります。これらのパッチは自動的に処理されるため、システム管理者はコードにいくつかの変更を加えたり、次のバージョンに段階的にアップグレードしたりするためにパッチを適用できます。[105] Linuxは、 GNU zip(gzip)およびbzip2形式でも配布されています。
Linux カーネルを変更したい開発者は、コード変更を記述してテストします。変更の重大性と変更されるサブシステムの数に応じて、変更は単一のパッチとして送信されるか、ソース コードの複数のパッチに分割されます。単一のサブシステムが単一のメンテナーによって保守されている場合、これらのパッチは、適切なメーリング リストを Cc に含めて、サブシステムのメンテナーに電子メールで送信されます。メンテナーとメーリング リストの読者はパッチをレビューしてフィードバックを提供します。レビュー プロセスが終了すると、サブシステムのメンテナーは、関連するGitカーネル ツリーでパッチを受け入れます。Linux カーネルへの変更が十分に重要と見なされるバグ修正である場合、パッチのプル リクエストが数日以内に Torvalds に送信されます。そうでない場合、プル リクエストは次のマージ ウィンドウ中に Torvalds に送信されます。マージ ウィンドウは通常 2 週間続き、前のカーネル バージョンのリリース直後に開始されます。[106] Gitカーネルソースツリーでは、Linuxカーネルに貢献したすべての開発者の名前がCreditsディレクトリに記載されており、すべてのサブシステムのメンテナーの名前がMaintainersにリストされています。[107]
多くの大規模なオープンソースソフトウェアプロジェクトと同様に、開発者は、少数派の貢献者への嫌がらせに対処することを目的とした行動規範である貢献者規約を遵守する必要があります。 [108] [109]さらに、不快感を与えるのを防ぐために、ソースコード内で包括的な用語を使用することが義務付けられています。[110]
プログラミング言語
Linux は、ターゲットアーキテクチャのアセンブリ言語 (GCC の「AT&T スタイル」構文)で記述されたコードのインライン セクションを使用するなど、さまざまな方法で C 標準を拡張するコンパイラであるGCCによってサポートされている特殊な C プログラミング言語で記述されています。
2021年9月、Linuxカーネルのコンパイルとビルドに必要なGCCのバージョンがGCC 4.9から5.1に引き上げられ、カーネルをC89標準に基づくCコードからC11標準で記述されたコードに移行する可能性が出てきた。 [111]この標準への移行は2022年3月にLinux 5.18のリリースで行われる。[112]
Rustプログラミング言語の初期サポートは、2022年12月にリリースされたLinux 6.1 [5]で追加され、 [113] Linux 6.2やLinux 6.3などのその後のカーネルバージョンでは、サポートがさらに改善されました。[114] [115]
コーディングスタイル
2002年以降、コードはLinuxカーネルコーディングスタイルを構成する21のルールに準拠する必要があります。[116] [117]
バージョン管理
ほとんどのソフトウェアと同様に、カーネルはドットで区切られた一連の数字としてバージョン管理されます。
初期のバージョンでは、バージョンはメジャーリリース、マイナーリリース、リビジョンと呼ばれるドットで区切られた3つまたは4つの数字で構成されていました。[12] : 9 当時、奇数番号のマイナーリリースは開発とテスト用で、偶数番号のマイナーリリースは本番用でした。オプションの4桁目はパッチレベルを示していました。[19]開発リリースはリリース候補サフィックス( -rc )で示されました。
現在のバージョン付けの慣習は異なります。dev/prod を意味する奇数/偶数は廃止され、メジャーバージョンは最初の 2 つの数字で示されます。次のメジャーバージョンの開発期間が開いている間は、次のバージョンの n 番目のリリース候補を識別するために -rcN サフィックスが使用されます。[118]たとえば、バージョン 4.16 のリリースの前には、7 つの 4.16-rcN (-rc1 から -rc7) がありました。安定バージョンがリリースされると、そのメンテナンスは安定チームに引き継がれます。安定リリースへの更新は、3 つの数字のスキーム (例: 4.16.1、4.16.2、...) で識別されます。[118]
ツールチェーン
カーネルは通常、GNU ツールチェーンを使用して構築されます。GNU C コンパイラ、GNU cc は、GNU コンパイラ コレクション(GCC) の一部であり、メインライン Linux のデフォルトコンパイラです。シーケンス処理は GNU makeによって処理されます。GNUアセンブラ(GAS または GNU as と呼ばれることが多い)は、 GCC が生成したアセンブリコードからオブジェクト ファイルを出力します。最後に、GNU リンカー(GNU ld) は、 vmlinuxと呼ばれる静的にリンクされた実行可能カーネル ファイルを生成します。asとld はどちらもGNU バイナリ ユーティリティ(binutils)の一部です。
GNU ccは長い間、Linuxを正しくビルドできる唯一のコンパイラでした。2004年に、Intelはカーネルを修正し、Cコンパイラでもコンパイルできるようになったと主張しました。[119] 2009年には、修正された2.6.22バージョンで同様の成功が報告されました。[120] [121] Intelコンパイラのサポートは2023年に廃止されました。[122]
2010年以来、 C言語の代替コンパイラであるClangを使用してLinuxを構築する取り組みが進行中であり、 [123] 2014年4月12日の時点で、公式カーネルはClangでほぼコンパイルできました。[124] [125]この取り組み専用のプロジェクトは、Clangが構築されているLLVMコンパイラインフラストラクチャにちなんでLLVMLinuxと名付けられました。 [126] LLVMLinuxはLinuxまたはLLVMのどちらかをフォークすることを目的としていないため、最終的には上流プロジェクトに送信されるパッチで構成されたメタプロジェクトです。LinuxをClangでコンパイルできるようにすることで、開発者はコンパイル時間の短縮というメリットを得ることができます。[127]
2017年、開発者は4.15リリースでClangを使用したLinuxカーネルのビルドをサポートするアップストリームパッチを完了し、 X86-64とAArch64のサポートを安定カーネルツリーの4.4、4.9、4.14ブランチにバックポートしました。GoogleのPixel 2は最初のClangビルドLinuxカーネルを搭載して出荷されましたが、[128] Pixel(第1世代)用のパッチは存在していました。[129] 2018年にはChromeOSがデフォルトでClangを使用してカーネルを構築するようになり、 [130] Android(オペレーティングシステム)は2019年にカーネルのビルドにClang [131]とLLVMのリンカーLLD [132]を必須にしました。Googleは2020年に、データセンター全体で使用されているプロダクションカーネルをClangで構築するように移行しました。 [133]現在、ClangBuiltLinuxグループは、互換性を確保するためにLinuxとLLVMの両方の修正を調整しており、両方ともLLVMLinuxのメンバーで構成され、 LLVMLinuxからアップストリームパッチを持っています。
デバッグ

他のソフトウェアと同様に、Linuxカーネルの問題のトラブルシューティングは困難です。一般的な課題は、ユーザー空間とカーネル空間のアクセス、同期プリミティブの誤用、不適切なハードウェア管理に関連しています。[12] : 364
oopsはカーネル内の致命的ではないエラーです。このようなエラーが発生すると、信頼性に疑問を抱きながら操作が続行されます。[134]
パニック(panic()によって生成される)は致命的なエラーです。このようなエラーが発生すると、カーネルはメッセージを出力し、コンピュータを停止します。[12] : 371
カーネルは、printk ()を介して出力することでデバッグを可能にし、メッセージを循環バッファに格納します (古いエントリを新しいエントリで上書きします) 。syslog(2)システムコールは、メッセージバッファの読み取りとクリア、およびコンソールに送信されるメッセージの最大ログレベルの設定を提供します。 [135]カーネルメッセージは、 /dev/kmsgインターフェースを介してユーザーランドにもエクスポートされます。[136]
ftraceメカニズムはトレースによるデバッグを可能にする。これは実行時にLinuxを監視およびデバッグするために使用され、カーネルの誤動作によるユーザー空間の遅延を分析することができる。[137] [138] [139] [140]さらに、ftraceを使用すると、ユーザーは起動時にLinuxをトレースすることができる。[141]
kprobesとkretprobesはカーネルの実行に割り込んで(ユーザー空間のデバッガーのように)、中断することなく情報を収集することができます。[142] kprobesは(ほぼ)任意のアドレスにコードに挿入できますが、kretprobesは関数の戻りで動作します。uprobesは同様の目的を持っていますが、使用方法と実装にはいくつかの違いもあります。[143]
KGDBを使用すると、Linuxはユーザー空間プログラムとほぼ同じ方法でデバッグできます。KGDBには、GDBを実行し、シリアルケーブルまたはイーサネットを使用してデバッグ対象に接続された追加のマシンが必要です。 [ 144 ]
変更プロセス
Linux カーネル プロジェクトでは、新しいコードを継続的に統合しています。標準的な運用手順では、プロジェクトにチェックインされたソフトウェアはエラーなく 動作し、コンパイルされる必要があります。
各カーネル サブシステムには、カーネル コード標準に照らしてパッチをレビューし、通常数週間のマージ期間内に Torvalds に送信できるパッチのキューを保持する責任を負うメンテナーが割り当てられます。
パッチは、以前の安定した Linux カーネル リリースのソース コードに Torvalds によってマージされ、次の安定したリリースのリリース候補 (-rc) が作成されます。マージ ウィンドウが閉じられると、開発リリースの新しいコードに対する修正のみが受け入れられます。カーネルの -rc 開発リリースは回帰テストを受け、Torvalds とサブシステムの保守担当者によって安定していると判断されると、新しいバージョンがリリースされ、開発プロセスが再び開始されます。[145]
メインライン Linux
Linuxカーネルのソースコードを含むGitツリーは、メインラインLinuxと呼ばれます。すべての安定したカーネルリリースはメインラインツリーから生成され、[146] kernel.orgで頻繁に公開されています。メインラインLinuxは、Linuxを実行する多くのデバイスのごく一部に対してのみしっかりとしたサポートを提供しています。非メインラインサポートは、YoctoやLinaroなどの独立したプロジェクトによって提供されていますが、多くの場合、デバイスベンダーのカーネルが必要になります。[147]ベンダーカーネルを使用するには、ボードサポートパッケージが必要になる可能性があります。
メインラインLinuxの外でカーネルツリーを維持することは困難であることが判明しました。[148]
メインライン化とは、デバイスのサポートをメインラインカーネルに追加する作業を指します。 [149]以前はフォークでのみサポートされていたか、まったくサポートされていませんでした。これには通常、ドライバーやデバイスツリーファイルの追加が含まれます。これが完了すると、機能またはセキュリティ修正はメインライン化されたとみなされます。[150]
Linuxライクなカーネル
安定版ブランチのメンテナーであるグレッグ・クロア・ハートマンは、メインラインカーネルに何百万行ものコードを追加するベンダーによるダウンストリームカーネルフォークに「Linuxライク」という用語を適用している。 [151] 2019年に、GoogleはAndroidでメインラインLinuxカーネルを使用することでカーネルフォークの数を減らしたいと述べた。[152] Linuxライクという用語は、完全なメインラインLinuxカーネルではなく、コードの小さな修正されたサブセットを含む組み込みLinuxカーネルサブセットにも適用されている。 [153]
Linuxフォーク

公式のLinuxをベースにカーネルを開発しているコミュニティもいくつかある。Linux -libre、Compute Node Linux、INK、L4Linux、RTLinux、User-Mode Linux (UML)など、これらのフォークからの興味深いコードがいくつかメインラインにマージされている。[154]携帯電話向けに開発されたオペレーティングシステムの中には、当初はLinuxの大幅に改変されたバージョンを使用していたものもあり、Google Android、Firefox OS、HP webOS、Nokia Maemo、Jolla Sailfish OSなどがある。2010年、LinuxコミュニティはGoogleが事実上独自のカーネルツリーを開始したことを批判した。[155] [156]
これは、Androidハードウェアプラットフォーム用に書かれたドライバーは、Googleのカーネルツリーにのみ存在するコードに依存しているため、メインカーネルツリーにマージできず、kernel.orgツリーでビルドできないことを意味します。このため、Googleは、ハードウェアドライバーとプラットフォームコードの大部分がメインカーネルツリーにマージされるのを阻止しました。事実上、現在、さまざまなベンダーが依存しているカーネルブランチが作成されています。[157]
— グレッグ・クロア・ハートマン、2010年
現在、AndroidはカスタマイズされたLinux [158]を使用しています。デバイスドライバーに大きな変更が実装されていますが、コアカーネルコードにいくつかの変更が必要です。Android開発者は、最終的にAndroidオペレーティングシステムを起動できる公式Linuxにパッチも提出します。たとえば、Nexus 7はメインラインLinuxを起動して実行できます。[158]
2001 年にコンピュータ歴史博物館で行われたプレゼンテーションで、Torvalds 氏は、Linux ディストリビューションがまったく同じカーネル ソースを使用しているかどうかについての質問に答えて、次のように述べました。
違います。そうですね、違いますし、違います。単一のカーネルはありません。ディストリビューションごとに独自の変更があります。これはほぼ初日から続いています。Yggdrasil がカーネルにかなり極端な変更を加えることで知られていたことを覚えているでしょうか。今日でもすべての主要ベンダーが独自の調整を行っています。なぜなら、彼らは関心のある市場の一部を持っているからです。率直に言って、そうあるべきです。なぜなら、誰もが 1 人の人間、つまり私がすべてを追跡できることを期待しているのであれば、それは GPL の趣旨ではありません。オープン システムを持つことの趣旨ではありません。ですから、ディストリビューションが何かが自分にとって非常に重要であると判断し、標準カーネルになくてもパッチを追加するという事実は、私にとって本当に良い兆候です。たとえば、ReiserFS のようなものが追加されたのもそのためです。ReiserFS が標準カーネルに統合された最初のジャーナリング ファイルシステムである理由は、私が Hans Reiser を愛しているからではありません。 SUSE が ReiserFS を標準カーネルとして出荷し始めたため、私は「OK」と答えました。これは実際に製品で使用されています。普通の人がこれをやっています。彼らは私が知らない何かを知っているに違いありません。つまり、多くのディストリビューション ハウスが実際に行っていることは、この「独自のブランチを作成しましょう」と「これに独自の変更を加えましょう」という作業の一部であるということです。そして GPL のおかげで、私はそれらの最良の部分を取得できます。[159]
— リーナス・トーバルズ、2001年
長期サポート

最新バージョンと古いバージョンは別々にメンテナンスされています。最新のカーネルリリースのほとんどはTorvaldsによって監督されました。[160]
Linux カーネル開発者コミュニティは、次の安定したカーネルの開発中に発見されたソフトウェア バグの修正を適用することで、安定したカーネルを維持しています。そのため、www.kernel.org には常に 2 つの安定したカーネルがリストされています。次の安定した Linux カーネルは、約 8 ~ 12 週間後にリリースされます。
一部のリリースは、 2年以上のバグ修正リリースを含む長期サポートとして指定されています。[161]
アーキテクチャと機能


一見矛盾しているように見えますが、Linuxカーネルはモノリシックとモジュール化の両方を備えています。カーネルは、 OS全体がカーネル空間で実行されるため、アーキテクチャ的にはモノリシックカーネルに分類されます。設計はモジュール化されており、実行時にロードおよびアンロードされるモジュールから組み立てることができます。 [12] : 338 [162]かつては非フリーオペレーティングシステムのクローズドソースカーネルでのみ利用可能だった機能をサポートしています。
この記事の残りの部分では、UNIX および Unix 系オペレーティング システムのマニュアル ページの規則を使用します。コマンド、インターフェイス、またはその他の機能の名前に続く番号は、それが属するセクション (つまり、OS のコンポーネントまたは機能の種類) を指定します。たとえば、execve(2) はシステム コールを参照し、exec(3) はユーザー空間ライブラリ ラッパーを参照します。
以下は、建築デザインと注目すべき特徴の概要です。
- 同時コンピューティング、および(実行可能なタスクに十分な CPU コアが利用できる場合)SMPおよびNUMAアーキテクチャ上で一度に多数のプロセス(それぞれに 1 つ以上の実行スレッドがある)を実際に並列実行することもできます。
- 数百のカーネル機能とドライバの選択と設定(ビルド前にmake *configコマンドファミリーのいずれかを使用)、 [163] [33] [32]ブート前のカーネルパラメータの変更(通常はGRUB2メニューの行に命令を挿入することによって)、および実行時のカーネル動作の微調整(/proc/sys/へのsysctl (8)インターフェースを使用)。[164] [165] [166]
- プリエンプティブマルチタスク(ユーザーモードと、2.6シリーズ以降ではカーネルモードの両方で)を可能にするタスクスケジューラのポリシーの設定(これもmake *configコマンドを使用)と実行時の変更[ 167 ](nice(2)、setpriority(2)、およびsched_*(2)システムコールファミリ経由) [168] [169 ] 。最も早期に有効な仮想デッドライン優先スケジューリング(EEVDF)スケジューラ[170]は、 2023年以降のLinuxのデフォルトスケジューラであり、赤黒木を使用して、プロセス情報(タスク構造体)をO(log n)の時間計算量で検索、挿入、削除できます。ここで、nは実行可能なタスクの数です。[171] [172]
- ページ化された仮想メモリによる高度なメモリ管理。
- プロセス間通信および同期メカニズム。
- いくつかの具体的なファイルシステム ( ext4、Btrfs、XFS、JFS、FAT32など)の上にある仮想ファイルシステム。
- 設定可能なI/Oスケジューラ、特殊ファイルの基になるデバイスパラメータを操作するioctl(2) [173]システムコール(引数、戻り値、セマンティクスはデバイスドライバに依存するため、非標準のシステムコールです)、POSIX非同期I/O [174]のサポート(ただし、マルチスレッドアプリケーションでは拡張性が低いため、並行処理に適した非同期I/Oコンテキストの管理のために、Linux固有のI/Oシステムコール(io_*(2) [175])ファミリを作成する必要がありました)。
- OSレベルの仮想化(Linux-VServerを使用)、準仮想化、ハードウェア支援仮想化(KVMまたはXenを使用、ハードウェアエミュレーションにQEMUを使用)[176] [177] [178] [179] [180] [181] Xenハイパーバイザー上で、Linuxカーネルは、ユーザーの仮想マシン( DomU )の管理環境を提供する仮想マシンホストサーバーであるDom0として機能するLinuxディストリビューション(openSUSE Leapなど)の構築をサポートしています。[182]
- VFIOとSR-IOVによる I/O 仮想化。仮想機能 I/O (VFIO) は、セキュア メモリ (IOMMU) で保護された環境のユーザー空間への直接デバイス アクセスを公開します。VFIO を使用すると、VM ゲストは VM ホスト サーバー上のハードウェア デバイスに直接アクセスできます。この手法は、完全仮想化と準仮想化の両方と比較してパフォーマンスが向上します。ただし、VFIO では、デバイスを複数の VM ゲストと共有することはできません。シングル ルート I/O 仮想化 (SR-IOV) は、VFIO のパフォーマンス向上と、複数の VM ゲストでデバイスを共有する機能を組み合わせたものです (ただし、2 つ以上の VM ゲストに異なるデバイスとして表示される特別なハードウェアが必要です)。[183]
- 任意アクセス制御および強制アクセス制御のためのセキュリティメカニズム(SELinux、AppArmor、POSIX ACLなど)。[184] [185]
- いくつかの種類の階層化通信プロトコル(インターネット プロトコル スイートを含む)。
- RPMsgサブシステムを介した非対称マルチプロセッシング。
ほとんどのデバイスドライバとカーネル拡張はカーネル空間(多くのCPUアーキテクチャではリング0)で実行され、ハードウェアに完全にアクセスできます。いくつかの例外はユーザー空間で実行されます。注目すべき例としては、 FUSE /CUSEに基づくファイルシステムやUIOの一部があります。[186] [187]さらに、ほとんどの人がLinuxで使用するウィンドウシステムとディスプレイサーバープロトコルであるX Window SystemとWaylandは、カーネル内で実行されません。一方、グラフィックスカードのGPUとの実際のインターフェイスは、 Direct Rendering Manager (DRM)と呼ばれるカーネル内サブシステムです。
標準的なモノリシックカーネルとは異なり、デバイスドライバはモジュールとして簡単に構成でき、システムの実行中にロードまたはアンロードでき、また、ハードウェア割り込みを正しく処理し、対称型マルチプロセッシングをより適切にサポートするために、特定の条件下でプリエンプトすることもできます。[169] Linuxには、意図的に安定したデバイスドライバアプリケーションバイナリインターフェースがありません。[188]
Linuxは一般的にメモリ保護と仮想メモリを利用し、非均一メモリアクセスも処理できますが、[189]このプロジェクトはμClinuxを吸収し、仮想メモリのないマイクロコントローラ上でLinuxを実行することも可能にしました。[190]
ハードウェアはファイル階層で表現されます。ユーザーアプリケーションは、/devまたは/sysディレクトリのエントリを介してデバイスドライバと対話します。[191]プロセス情報は/procディレクトリにマッピングされます。[191]
インターフェース

LinuxはUNIXのクローンとして始まり、POSIXとSingle UNIX仕様への準拠を目指しています。[193]カーネルはLinux固有のシステムコールやその他のインターフェースを提供します。公式カーネルに組み込むには、コードは一連のライセンス規則に準拠している必要があります。[6] [11]
カーネルとユーザー空間間のLinuxアプリケーションバイナリインターフェース(ABI)には、4つの安定性レベル(安定、テスト、廃止、削除)があります。 [194]システムコールは、それに依存するユーザー空間プログラムの互換性を維持するために、決して変更されないことが期待されています。 [195]
ロード可能なカーネルモジュール(LKM)は、設計上、安定したABIに依存できません。[188]そのため、新しいカーネル実行ファイルがシステムにインストールされるたびに、必ず再コンパイルする必要があります。そうしないと、ロードされません。カーネル実行ファイル( vmlinux )の不可欠な部分になるように構成されたツリー内ドライバーは、ビルドプロセスによって静的にリンクされます。
ソースレベルのカーネル内APIの安定性は保証されていないため[188]、デバイスドライバのコードや他のカーネルサブシステムのコードはカーネルの進化に合わせて更新されなければならない。APIの変更を行った開発者は、変更の結果として壊れたコードを修正する必要がある。[196]
カーネルからユーザー空間への API
ユーザーアプリケーションに公開されるインターフェースに関するLinuxカーネルAPIのセットは、基本的にUNIXとLinux固有のシステムコールで構成されています。[197]システムコールは、Linuxカーネルへのエントリポイントです。[198]たとえば、Linux固有のものには、clone(2)システムコールのファミリーがあります。[199]ほとんどの拡張機能は、ヘッダーファイルでマクロを定義するか、ユーザーランドコードをコンパイルするときに有効にする必要があります。 [200]_GNU_SOURCE
システムコールは、非特権ユーザー空間からリング 0の特権カーネル空間への移行を可能にするアセンブリ命令を介してのみ呼び出すことができます。このため、C 標準ライブラリ(libC) は、必要に応じて[201]呼び出しプロセスに代わって実行されるカーネルに透過的に入る C 関数を公開することで、ほとんどの Linux システムコールのラッパーとして機能します。[197] libC によって公開されていないシステムコール、たとえば高速ユーザー空間ミューテックス[202]については、ライブラリはsyscall(2)と呼ばれる関数を提供し、これを使用して明示的に呼び出すことができます。[203]
疑似ファイルシステム(例:sysfsファイルシステムやprocfsファイルシステム)と特殊ファイル(例:/dev/random、、、その他多数)は、ハードウェアまたは論理(ソフトウェア)デバイスを表すカーネルデータ構造へのインターフェースの別の層を構成します。[204] [205]/dev/sda/dev/tty
カーネルからユーザー空間への ABI
Linux OS の何百ものさまざまな実装の間には違いがあるため、実行可能オブジェクトは、特定のハードウェア アーキテクチャ (つまり、ターゲット ハードウェアのISAを使用する) で実行するためにコンパイル、アセンブル、リンクされているにもかかわらず、異なる Linux ディストリビューションでは実行できないことがよくあります。この問題は主に、ディストリビューション固有の構成と Linux カーネルのコードに適用された一連のパッチ、システム ライブラリ、サービス (デーモン)、ファイル システム階層、および環境変数の違いが原因です。
Linuxディストリビューションのアプリケーションとバイナリ互換性に関する主な標準は、Linux Standard Base (LSB)です。[206] [207]しかし、LSBはLinuxカーネルに関する範囲を超えており、デスクトップ仕様、Xライブラリ、Qtも定義していますが、これらはLinuxカーネルとはほとんど関係がありません。[208] LSBバージョン5は、いくつかの標準とドラフト(POSIX、SUS、X/Open、File System Hierarchy (FHS)など)に基づいて構築されています。[209]
LSBのうちカーネルに関係の深い部分は、汎用ABI(gABI)[210] 、特にSystem V ABI [211] [212]、実行可能ファイルおよびリンク形式(ELF)[213] [214]、およびプロセッサ固有ABI(psABI)(例えばX86-64のコア仕様) [215] [216]である。
x86_64ユーザープログラムがシステムコールを呼び出すための標準ABIは、システムコール番号をraxレジスタにロードし、他のパラメータをrdi、rsi、rdx、r10、r8、r9にロードし、最後にシステムコールアセンブリ命令をコード内に配置するというものである。[217] [218] [219]
カーネル内API

カーネルサブシステム間には、いくつかの内部カーネルAPIがあります。いくつかはカーネルサブシステム内でのみ利用可能ですが、カーネル内のシンボル(変数、データ構造、関数など)の限られたセットは、EXPORT_SYMBOL()およびEXPORT_SYMBOL_GPL()マクロ[221] [222](後者はGPL互換ライセンスでリリースされたモジュール用に予約されています)でエクスポートされているかどうかに関係なく、動的にロード可能なモジュール(オンデマンドでロードされるデバイスドライバーなど)に公開されます。[223]
Linuxは、データ構造(リンクリスト、基数木、[224] 赤黒木、[225] キューなど)を操作したり、共通ルーチン(ユーザー空間からのデータのコピー、メモリの割り当て、システムログへの行の出力など)を実行したりするカーネル内APIを提供しており、少なくともLinuxバージョン2.6以降は安定している。[226] [227] [228]
カーネル内 API には、デバイス ドライバーが使用する低レベルの共通サービスのライブラリが含まれています。
- SCSIインターフェースとlibATAは 、それぞれUSB、SATA、SAS、ファイバーチャネル、FireWire、ATAPIデバイスに接続されたストレージデバイス用のピアツーピアのパケットベースの通信プロトコルであり、[229]、[S]ATAホストコントローラとデバイスをサポートするためのカーネル内ライブラリです。[230]
- ダイレクトレンダリングマネージャ(DRM)とカーネルモード設定(KMS) – GPUとのインターフェースと最新の3Dアクセラレーションビデオハードウェアのニーズをサポートし、[231]画面解像度、色深度、リフレッシュレートを設定します[232]
- DMAバッファ(DMA-BUF) – 複数のデバイスドライバとサブシステム間でハードウェア直接メモリアクセス用のバッファを共有するため[233] [234] [235]
- Video4Linux – ビデオキャプチャハードウェア用
- Advanced Linux Sound Architecture (ALSA) – サウンドカード用
- 新しい API –ネットワーク インターフェース コントローラー 用
- mac80211およびcfg80211 – 無線ネットワークインターフェースコントローラ用[236] [237]
カーネル内ABI
Linux開発者は安定したカーネル内ABIを維持しないことを選択しました。特定のバージョンのカーネル用にコンパイルされたモジュールは、再コンパイルせずに別のバージョンにロードすることはできません。[188]
マルチプロセッシング
Linuxはclone(2)または新しいclone3(2) [238]システムコールによってプロセスを作成します。これらのシステムコールは、新しい独立したプロセス(それぞれがカーネル空間のtask_structデータ構造内でTGIDと呼ばれる特別な識別子を持ちますが、同じ識別子はユーザー空間ではPIDと呼ばれます)から呼び出しプロセス内の新しいスレッドまで、さまざまな新しいエンティティを作成します。[239] [240]
実行ファイルが共有ライブラリに動的にリンクされている場合、動的リンカーを使用して必要なオブジェクトを検索して読み込み、プログラムの実行を準備してから実行します。[241]
ネイティブPOSIXスレッドライブラリ(NPTL)[242]は、 POSIX標準スレッドインターフェース(pthreads)をユーザー空間に提供します。
カーネルは、ユーザー空間のロックと同期のためにfutex(7) (高速ユーザー空間ミューテックス) メカニズムを提供します。[243]操作の大部分はユーザー空間で実行されますが、 futex(2)システムコールを使用してカーネルと通信する必要がある場合があります。[202]
上で説明したユーザー空間スレッドとは対照的に、カーネルスレッドはカーネル空間で実行されます。[244]
スケジュール
Linuxプロセススケジューラは、異なるスケジューリングクラスとポリシーを有効にするという意味でモジュール化されています。[245] [246]スケジューラクラスは、ベーススケジューラコードに登録できるプラグ可能なスケジューラアルゴリズムです。各クラスは異なるタイプのプロセスをスケジュールします。スケジューラのコアコードは、優先順位に従って各クラスを反復処理し、実行可能なstruct sched_entity型のスケジュール可能なエンティティを持つ、最も優先度の高いスケジューラを選択します。[12] : 46–47 エンティティは、スレッド、スレッドのグループ、さらには特定のユーザーのすべてのプロセスである可能性があります。
Linuxは、ユーザープリエンプションと完全なカーネルプリエンプションの両方を提供します。[12] :62–63 プリエンプションにより、レイテンシが短縮され、応答性が向上し、[247] Linuxはデスクトップアプリケーションやリアルタイムアプリケーションに適したものになります。
通常のタスクの場合、カーネルはデフォルトでバージョン 2.6.23 で導入されたCompletely Fair Scheduler (CFS) クラスを使用します。[171]スケジューラは C ヘッダーのマクロとして として定義されますSCHED_NORMAL。他の POSIX カーネルでは、 と呼ばれる同様のポリシーがSCHED_OTHERCPU タイムスライスを割り当てます (つまり、各プロセスの事前定義または動的に計算された優先度に応じてプロセッサ時間の絶対スライスを割り当てます)。Linux CFS は絶対タイムスライスを廃止し、実行可能なプロセスの総数やそれらの実行時間などのパラメータの関数として CPU 時間の公平な割合を割り当てます。この機能は、相対的な優先度 (nice 値) に依存する一種の重みも考慮します。[12] : 46–50
ユーザープリエンプションを使用すると、カーネルスケジューラは、現在のプロセスを別のプロセスへのコンテキストスイッチの実行に置き換え、実行に必要なコンピューティングリソース(CPU、メモリなど)を獲得することができます。これは、CFSアルゴリズム(特に、エンティティをソートするためにvruntimeと呼ばれる変数を使用し、vruntimeが小さいもの、つまりCPU時間のシェアが最も少ないスケジュール可能なエンティティを選択します)、アクティブなスケジューラポリシー、および相対的な優先順位に従って行われます。[248]カーネルプリエンプションを使用すると、割り込みハンドラが戻ったとき、カーネルタスクがブロックしたとき、およびサブシステムが明示的にschedule()関数を呼び出すときはいつでも、カーネルは自分自身をプリエンプトできます。
カーネルには、POSIX準拠の[249]リアルタイムスケジューリングクラスSCHED_FIFO(リアルタイム先入れ先出し)とSCHED_RR(リアルタイムラウンドロビン)も含まれており、どちらもデフォルトクラスよりも優先されます。[245]と呼ばれる追加のスケジューリングポリシーはSCHED DEADLINE、最も早い期限優先アルゴリズム(EDF)を実装しており、2014年3月30日にリリースされたカーネルバージョン3.14で追加されました。[250] [251] SCHED_DEADLINEは他のすべてのスケジューリングクラスよりも優先されます。
リアルタイムPREEMPT_RTパッチはバージョン2.6以降のLinux本体に組み込まれており、決定論的スケジューラ、プリエンプションの削除、割り込み無効化(可能な場合)、PIミューテックス(優先度の逆転を回避するロックプリミティブ)、[252] [253]高精度イベントタイマー(HPET)、プリエンプティブ読み取りコピー更新(RCU)、(強制)IRQスレッド、およびその他のマイナーな機能のサポートを提供します。 [254] [255] [256]
2023年、ピーター・ジールストラはCFSをEEVDF(earliest qualified virtual deadline first scheduling )スケジューラに置き換えることを提案した。 [257] [258]これはCFSの「レイテンシナイス」パッチの必要性を回避するためである。[259] EEVDFスケジューラはLinuxカーネルのバージョン6.6でCFSに取って代わった。[260]
同期
カーネルには並行性を生み出すさまざまな要因(割り込み、ボトムハーフ、カーネルとユーザータスクのプリエンプション、対称型マルチプロセッシングなど)がある。[12] : 167
Linux は、クリティカル領域 (アトミックに実行する必要があるコード セクション)、共有メモリの場所 (グローバル変数やグローバル スコープを持つその他のデータ構造など)、ハードウェアによって非同期に変更可能なメモリ領域 (C の型修飾子を持つなど) を保護するために、多数のツールを提供しています。これらは、アトミック型(特定の演算子のセットによってのみ操作可能)、スピンロック、セマフォ、ミューテックス、[261] [12] : 176–198 [262]、ロックレス アルゴリズム( RCUなど) で構成されています。[263] [264] [265]ほとんどのロックレス アルゴリズムは、メモリの順序付けを強制し、コンパイラの最適化による望ましくない副作用を防ぐ目的で、メモリ バリアの上に構築されています。[266] [267] [268] [269]volatile
PREEMPT_RTメインラインLinuxに含まれるコードは、プリエンプションを無効にせず優先度継承をサポートする特殊な種類のMutexであるRT-mutexを提供します。 [270] [271]リアルタイム操作用の設定を使用すると、ほぼすべてのロックがスリープロックに変更されます。[272] [256] [271] 優先度継承は、競合するロックを保持している低優先度のタスクに、そのロックが解放されるまで、より優先度の高い待機者の優先度を与えることで、優先度の逆転を回避します。[273] [274]
LinuxにはLockdepと呼ばれるカーネルロック検証機能が含まれています。[275] [276]
割り込み
割り込み管理は単一のジョブとして考えることができますが、2つに分かれています。この2つに分かれているのは、異なる時間制約と、管理を構成するタスクの同期の必要性によるものです。最初の部分は、 Linuxではトップハーフと呼ばれる非同期割り込みサービスルーチンで構成され、2番目の部分は、いわゆるボトムハーフ(ソフトIRQ、タスクレット、ワークキュー)の3つのタイプのいずれかによって実行されます。[12] :133–137
Linux 割り込みサービス ルーチンはネストできます。新しい IRQ は、他の優先度の低い ISR をプリエンプトする優先度の高い ISR にトラップされる可能性があります。
メモリ
Linuxは5段階のページテーブルで仮想メモリを実装している。[277]カーネルはページング可能ではなく(つまり、常に物理メモリ内に常駐し、ディスクにスワップできない)、メモリ保護もない(ユーザー空間とは異なりSIGSEGVシグナルがない)ため、メモリ違反は不安定性やシステムクラッシュにつながる。 [12] : 20 ユーザーメモリはデフォルトでページング可能であるが、システムコールファミリーを使用して特定のメモリ領域のページングを無効にすることができる。
mlock()
ページフレーム情報は、適切なデータ構造( struct page型)に保持され、仮想ページに関連付けられているかどうかに関係なく、起動直後に入力され、シャットダウンまで保持されます。物理アドレス空間は、アーキテクチャ上の制約と使用目的に応じて、さまざまなゾーンに分割されます。複数のメモリバンクを備えたNUMAシステムもサポートされています。[278]
小さなメモリ チャンクは、 APIファミリを介してカーネル空間に動的に割り当てられkmalloc()、適切な のバリアントを使用して解放され、大きな仮想的に連続したチャンクに使用されます。必要な数のページ全体を割り当てます。
kfree()vmalloc()kvfree()alloc_pages()

カーネルには、設定可能な代替としてSLAB、SLUB、SLOBアロケータが含まれていました。[280] [281] SLOBアロケータはLinux 6.4で削除され、 [282] SLABアロケータはLinux 6.8で削除されました。[283]唯一残っているアロケータはSLUBで、シンプルさと効率性を目指しており、[281]PREEMPT_RT互換性があり[284]、Linux 2.6で導入されました。
サポートされているアーキテクチャ

もともと移植性を考慮して設計されていなかったが[15] [285]、 Linuxは現在最も広く移植されているオペレーティングシステムカーネルの 1 つであり、ARM アーキテクチャからIBM z/Architecture メインフレームコンピュータまで、さまざまなシステムで実行されている。最初の移植はMotorola 68000プラットフォームで行われた。カーネルへの変更は非常に基本的なものであったため、Torvalds は Motorola バージョンをフォークであり「Linux のようなオペレーティングシステム」と見なしていた。[285]しかし、これにより Torvalds は、より多くのコンピューティングアーキテクチャへの移植を容易にするために、コードの大幅な再構築を主導することになった。単一のソースツリーで i386 だけでなく複数のコードを持つ最初の Linux は、DEC Alpha AXP 64 ビットプラットフォームをサポートしていた。[286] [287] [285]
IBMのSummitではLinuxがメインのOSとして稼働しており、2019年10月現在、世界最速のスーパーコンピューター500台[update]すべてがLinuxカーネルをベースにした何らかのOSを稼働させている。[288 ]これは、1998年に最初のLinuxスーパーコンピューターがリストに追加されたときから大きな変化である。[289]
LinuxはAppleの iPhone 3GやiPodなどのさまざまな携帯機器にも移植されている。[290]
サポートされているデバイス
2007年、Linuxカーネルで知られているハードウェアとプロトコルの包括的なデータベースを構築するLKDDbプロジェクトが開始されました。[291]データベースはカーネルソースの静的解析によって自動的に構築されます。2014年後半には、さまざまなLinuxディストリビューションのユーザーの協力を得て、テスト済みのすべてのハードウェア構成のデータベースを自動的に収集するLinuxハードウェアプロジェクトが開始されました。[292]
ライブパッチ
Ksplice、kpatch、kGraftなどのライブパッチ技術を使用することで、カーネルに再起動なしの更新を適用することもできます。ライブカーネルパッチの最小限の基盤は、2015年4月12日にリリースされたカーネルバージョン4.0でLinuxカーネルメインラインに統合されました。livepatchと呼ばれ、主にカーネルのftrace機能に基づくこれらの基盤は、ホットパッチを含むカーネルモジュール用のアプリケーションプログラミングインターフェース(API) と、ユーザー空間管理ユーティリティ用のアプリケーションバイナリインターフェース(ABI)を提供することで、kGraft と kpatch の両方によるホットパッチをサポートできる共通コアを形成します。ただし、Linuxカーネル4.0に含まれる共通コアはx86アーキテクチャのみをサポートしており、ホットパッチの適用中に関数レベルの一貫性を保証するメカニズムは提供していません。2015年4月現在、kpatchとkGraftをLinuxカーネルメインラインによって提供される共通ライブパッチコアに移植する作業が進行中です。[293] [294] [295][update]
安全
カーネルのバグは潜在的なセキュリティ問題を引き起こす可能性があります。たとえば、権限昇格を可能にしたり、サービス拒否攻撃ベクトルを作成したりする可能性があります。長年にわたり、システムセキュリティに影響を与える多数のバグが発見され、修正されました。[296]カーネルのセキュリティを向上させるために、新しい機能が頻繁に実装されています。[297] [298]
機能(7)については、プロセスとスレッドのセクションですでに紹介しました。Androidは機能を活用し、systemdは管理者にプロセスの機能を詳細に制御する機能を提供します。[299]
Linuxは、カーネルの攻撃対象領域を減らし、セキュリティを向上させるための豊富なメカニズムを提供しており、これらは総称してLinuxセキュリティモジュール(LSM)と呼ばれています。[300]これらは、Security-Enhanced Linux (SELinux)モジュールで構成されており、そのコードはもともとNSAによって開発され、その後一般に公開されました。[301]およびAppArmor [185]など。SELinuxは現在、GitHubで積極的に開発および保守されています。[184] SELinuxとAppArmorは、強制アクセス制御(MAC)を含むアクセス制御セキュリティポリシーをサポートしていますが、複雑さと範囲は大きく異なります。
もう一つのセキュリティ機能は、パラメータをフィルタリングし、ユーザーランドアプリケーションで利用可能なシステムコールのセットを減らすことで機能するSeccomp BPF(SECure COMPuting with Berkeley Packet Filters)です。[302]
批評家はカーネル開発者がセキュリティ上の欠陥を隠蔽している、あるいは少なくとも公表していないと非難しているが、2008年にトーバルズはこれに対して次のように反応した。[303] [304]
個人的には、セキュリティ バグは「普通のバグ」だと考えています。隠蔽はしませんが、それを追跡して特別なものとして発表することが良い考えだと考える理由はまったくありません...セキュリティ サーカス全体に煩わされることを拒否する理由の 1 つは、それが間違った行動を称賛し、したがって奨励すると思うからです。セキュリティ サーカスは、セキュリティ担当者を「英雄」に仕立て上げます。まるで、普通のバグを修正しない人はそれほど重要ではないかのように。実際、つまらない普通のバグの方がはるかに重要です。なぜなら、それらのバグがはるかに多いからです。私は、ひどいセキュリティ ホールが、不適切なロックによるランダムな大クラッシュよりも「特別」であるとして称賛されたり、気にかけられたりすべきだとは思いません。
Linux ディストリビューションは通常、Linux カーネルの脆弱性を修正するためのセキュリティ アップデートをリリースします。多くのディストリビューションでは、特定の Linux カーネル バージョンに対するセキュリティ アップデートを長期間にわたって受け取る 長期サポートリリースを提供しています。
法律上の
ライセンス条件
当初、トーバルズはLinuxを商用利用を禁じるライセンスでリリースした。[305]これはバージョン0.12でGNU一般公衆利用許諾書バージョン2(GPLv2)に変更された。[20]このライセンスでは、Linuxの改変版と非改変版の配布と販売が許可されているが、それらのコピーはすべて同じライセンスでリリースされ、対応するソースコード全体を添付するか、または要求に応じて無料でアクセスできるようにする必要がある。[306]トーバルズはLinuxをGPLv2でライセンスしたことを「これまでで最高のこと」と表現している。[305]
Linuxカーネルは、明示的なシステムコール例外(Linux-syscall-note)を伴うGNU General Public Licenseバージョン2のみ(GPL-2.0のみ)で明示的にライセンスされており、[6] [9] [10]ライセンス所有者に後のバージョンを選択するオプションは提供されていないが、これは一般的なGPL拡張である。寄贈されたコードはGPL互換ライセンスの下で利用可能でなければならない。[11] [196]
There was considerable debate about how easily the license could be changed to use later GPL versions (including version 3), and whether this change is even desirable.[307] Torvalds himself specifically indicated upon the release of version 2.4.0 that his own code is released only under version 2.[308] However, the terms of the GPL state that if no version is specified, then any version may be used,[309] and Alan Cox pointed out that very few other Linux contributors had specified a particular version of the GPL.[310]
In September 2006, a survey of 29 key kernel programmers indicated that 28 preferred GPLv2 to the then-current GPLv3 draft. Torvalds commented, "I think a number of outsiders... believed that I personally was just the odd man out because I've been so publicly not a huge fan of the GPLv3."[311] This group of high-profile kernel developers, including Torvalds, Greg Kroah-Hartman and Andrew Morton, commented on mass media about their objections to the GPLv3.[312] They referred to clauses regarding DRM/tivoization, patents, "additional restrictions" and warned a Balkanisation of the "Open Source Universe" by the GPLv3.[312][313] Torvalds, who decided not to adopt the GPLv3 for the Linux kernel, reiterated his criticism even years later.[314]
Loadable kernel modules
It is debated whether some loadable kernel modules (LKMs) are to be considered derivative works under copyright law, and thereby whether or not they fall under the terms of the GPL.
In accordance with the license rules, LKMs using only a public subset of the kernel interfaces[221][222] are non-derived works, thus Linux gives system administrators the mechanisms to load out-of-tree binary objects into the kernel address space.[11]
There are some out-of-tree loadable modules that make legitimate use of the dma_buf kernel feature.[315] GPL compliant code can certainly use it. However, a different possible use case would be Nvidia Optimus that pairs a fast GPU with an Intel integrated GPU, where the Nvidia GPU writes into the Intel framebuffer when it is active. But, Nvidia cannot use this infrastructure because it necessitates bypassing a rule that can only be used by LKMs that are also GPL.[223] Alan Cox replied on LKML, rejecting a request from one of Nvidia's engineers to remove this technical enforcement from the API.[316] Torvalds clearly stated on the LKML that "[I] claim that binary-only kernel modules ARE derivative "by default"'".[317]
On the other hand, Torvalds has also said that "[one] gray area in particular is something like a driver that was originally written for another operating system (i.e., clearly not a derived work of Linux in origin). THAT is a gray area, and _that_ is the area where I personally believe that some modules may be considered to not be derived works simply because they weren't designed for Linux and don't depend on any special Linux behaviour".[318] Proprietary graphics drivers, in particular, are heavily discussed.
Whenever proprietary modules are loaded into Linux, the kernel marks itself as being "tainted",[319] and therefore bug reports from tainted kernels will often be ignored by developers.
Firmware binary blobs
The official kernel, that is the Linus git branch at the kernel.org repository, contains binary blobs released under the terms of the GNU GPLv2 license.[6][11] Linux can also search filesystems to locate binary blobs, proprietary firmware, drivers, or other executable modules, then it can load and link them into kernel space.[320]
When it is needed (e.g., for accessing boot devices or for speed) firmware can be built-in to the kernel, this means building the firmware into vmlinux; however this is not always a viable option for technical or legal issues (e.g., it is not permitted to do this with firmware that is non-GPL compatible, although this is quite common nonetheless).[321]
Trademark
Linux is a registered trademark of Linus Torvalds in the United States, the European Union, and some other countries.[322][323] A legal battle over the trademark began in 1996, when William Della Croce, a lawyer who was never involved in the development of Linux, started requesting licensing fees for the use of the word Linux. After it was proven that the word was in common use long before Della Croce's claimed first use, the trademark was awarded to Torvalds.[324][325][326]
See also
- Microkernel – Kernel that provides fewer services than a traditional kernel
- Linux kernel version history – Version history of the Linux kernel
- Comparison of operating systems
- Comparison of operating system kernels
- Linux – Family of Unix-like operating systems
- Minix 3 – Unix-like operating system
- macOS – Operating system for Apple computers
- Microsoft Windows – Computer operating systems
Notes
- ^ As a whole, Linux source is provided under the terms of the GPL-2.0-only license with an explicit syscall exception.[9][10] Aside from that, individual files can be provided under a different license which is required to be compatible with the GPL-2.0-only license (i.e., the GNU General Public License version 2) or a dual license, with one of the choices being the GPL version 2 or a GPLv2 compatible license.[11]
References
- ^ "Linux Logos and Mascots". Linux Online. 2008. Archived from the original on 15 August 2010. Retrieved 11 August 2009.
- ^ Linus Torvalds (15 September 2024). "Linux 6.11". Retrieved 15 September 2024.
- ^ Linus Torvalds (8 September 2024). "Linux 6.11-rc7". Retrieved 8 September 2024.
- ^ Bergmann, Arnd (3 March 2022). "Kbuild: move to -std=gnu11". git.kernel.org.
- ^ a b Proven, Liam. "Linux 6.1: Rust to hit mainline kernel". The Register. Retrieved 12 May 2023.
- ^ a b c d "COPYING". git.kernel.org. Archived from the original on 2 September 2021. Retrieved 2 September 2021.
- ^ "GPL-2.0-only". spdx.org. Retrieved 2 September 2021.
- ^ "Linux-syscall-note". spdx.org. Retrieved 2 September 2021.
- ^ a b "GPL-2.0". git.kernel.org.
- ^ a b "Linux-syscall-note". git.kernel.org.
- ^ a b c d e f "Linux kernel licensing rules — The Linux Kernel documentation". www.kernel.org. Archived from the original on 7 March 2020. Retrieved 6 January 2020.
- ^ a b c d e f g h i j k l m n Love, Robert (2010). Linux kernel development (3rd ed.). Upper Saddle River, NJ: Addison-Wesley. ISBN 978-0-672-32946-3. OCLC 268788260.
- ^ "C Extensions (Using the GNU Compiler Collection (GCC))". gcc.gnu.org. Archived from the original on 20 November 2020. Retrieved 13 November 2020.
- ^ a b Richardson, Marjorie (1 November 1999). "Interview: Linus Torvalds". Linux Journal. Archived from the original on 14 May 2011. Retrieved 20 August 2009.
- ^ a b Torvalds, Linus Benedict (26 August 1991). "What would you like to see most in minix?". Newsgroup: comp.os.minix. Usenet: 1991Aug25.205708.9541@klaava.Helsinki.FI. Archived from the original on 9 May 2013. Retrieved 14 September 2016.
- ^ a b Welsh, Matt; Dalheimer, Matthias Kalle; Kaufman, Lar (1999). "1: Introduction to Linux". Running Linux (3rd ed.). Sebastopol, California: O'Reilly Media, Inc. p. 5. ISBN 1-56592-976-4. OCLC 50638246.
- ^ "Free minix-like kernel sources for 386-AT - Google Groups". groups.google.com. 5 October 1991. Archived from the original on 1 March 2021. Retrieved 19 March 2020.
- ^ Williams, Sam (March 2002). "Chapter 9: The GNU General Public License". Free as in Freedom: Richard Stallman's Crusade for Free Software. O'Reilly. ISBN 0-596-00287-4. Retrieved 12 November 2010.
- ^ a b c Christine Bresnahan & Richard Blum (2016). LPIC-2: Linux Professional Institute Certification Study Guide: Exam 201 and Exam 202. John Wiley & Sons. p. 107. ISBN 9781119150794.
- ^ a b Torvalds, Linus. "Release Notes for Linux v0.12". The Linux Kernel Archives. Archived from the original on 19 August 2007. Retrieved 21 February 2007.
- ^ Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. p. 1. ISBN 9783642607493.
- ^ a b c Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. p. 16. ISBN 9783642607493.
- ^ Summers, David W. (19 January 1992). "Troubles with Partitions". Newsgroup: alt.os.linux. Usenet: 1992Jan19.085628.18752@cseg01.uark.edu. Archived from the original on 2 June 2013. Retrieved 7 January 2007.
- ^ Clegg, Alan B. (31 March 1992). "It's here!". Newsgroup: comp.os.linux. Usenet: 1992Mar31.131811.19832@rock.concert.net. Archived from the original on 2 June 2013. Retrieved 7 January 2007.
- ^ "Appendix A: The Tanenbaum-Torvalds Debate". Open Sources: Voices from the Open Source Revolution. O'Reilly. 1999. ISBN 1-56592-582-3. Retrieved 22 November 2006.
- ^ Tanenbaum, Andy (29 January 1992). "LINUX is obsolete". Newsgroup: comp.os.minix. Usenet: 12595@star.cs.vu.nl. Archived from the original on 17 October 2011. Retrieved 10 May 2006.
- ^ Tanenbaum, Andy (12 May 2006). "Tanenbaum-Torvalds Debate: Part II". VU University Amsterdam. Archived from the original on 5 August 2015. Retrieved 6 January 2007.
- ^ Hayward, David (22 November 2012). "The history of Linux: how time has shaped the penguin". TechRadar. Archived from the original on 19 March 2020. Retrieved 19 March 2020.
- ^ Hayward, David (22 November 2012). "The history of Linux: how time has shaped the penguin". TechRadar. Archived from the original on 19 March 2020. Retrieved 26 March 2020.
- ^ a b c Christine Bresnahan & Richard Blum (2016). LPIC-2: Linux Professional Institute Certification Study Guide: Exam 201 and Exam 202. John Wiley & Sons. p. 108. ISBN 9781119150794.
- ^ Torvalds, Linus (9 June 1996). "Linux 2.0 really _is_ released." LKML (Mailing list). Archived from the original on 2 April 2015. Retrieved 8 March 2015.
- ^ a b "Kernel Build System — The Linux Kernel documentation". Kernel.org. Archived from the original on 22 July 2020. Retrieved 17 July 2020.
- ^ a b "Kconfig make config — The Linux Kernel documentation". Kernel.org. Archived from the original on 17 July 2020. Retrieved 13 September 2020.
- ^ Torvalds, Linus (20 January 1999). "2.2.0-final". LKML (Mailing list). Archived from the original on 2 April 2015. Retrieved 8 March 2015.
- ^ a b "The Wonderful World of Linux 2.2". 26 January 1999. Archived from the original on 6 November 2014. Retrieved 27 October 2008.
- ^ "Linux/390 Observations and Notes". linuxvm.org. Archived from the original on 26 February 2019. Retrieved 29 March 2020.
- ^ Torvalds, Linus (4 January 2001). "And oh, btw." LKML (Mailing list). Archived from the original on 26 January 2016. Retrieved 8 March 2015.
- ^ "The Wonderful World of Linux 2.4". Archived from the original on 17 March 2005. Retrieved 27 October 2008.
- ^ Torvalds, Linus (17 December 2003). "Linux 2.6.0". LKML (Mailing list). Archived from the original on 2 April 2015. Retrieved 28 February 2015.
- ^ "proc(5) - Linux manual page" (see /proc/sys/kernel/pid_max). Archived from the original on 7 February 2014. Retrieved 19 February 2014.
- ^ "btrfs Wiki". btrfs.wiki.kernel.org. Archived from the original on 25 April 2012. Retrieved 17 July 2020.
- ^ Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. pp. 1–2. ISBN 9783642607493.
- ^ Linux Kernel Mailing List (17 June 2005). "Linux 2.6.12". git-commits-head (Mailing list). Archived from the original on 26 January 2016. Retrieved 23 January 2008.
- ^ Kroah-Hartman, Greg (3 August 2006). "Adrian Bunk is now taking over the 2.6.16-stable branch". LKML (Mailing list). Archived from the original on 26 January 2016. Retrieved 21 February 2015.
- ^ Rothwell, Stephen (12 February 2008). "Announce: Linux-next (Or Andrew's dream :-))". LKML (Mailing list). Archived from the original on 24 November 2010. Retrieved 30 October 2010.
- ^ Corbet, Jonathan (21 October 2010). "linux-next and patch management process". LWN.net. Eklektix, Inc. Archived from the original on 21 June 2010. Retrieved 30 October 2010.
- ^ "The Linux Kernel Archives". Kernel.org. Archived from the original on 30 January 1998. Retrieved 22 January 2014.
- ^ "Add a personality to report 2.6.x version numbers [LWN.net]". lwn.net. Archived from the original on 16 July 2020. Retrieved 15 July 2020.
- ^ a b Torvalds, Linus (21 July 2011). "Linux 3.0 release". Linux kernel mailing list. Archived from the original on 18 October 2019. Retrieved 16 May 2013.
- ^ Torvalds, Linus (30 May 2011). "Linux 3.0-rc1". LKML (Mailing list). Archived from the original on 31 May 2011. Retrieved 1 July 2013.
- ^ Torvalds, Linus (10 April 2001). "Re: [PATCH] i386 rw_semaphores fix". yarchive.net. Retrieved 26 May 2024.
- ^ Vaughan-Nichols, Steven J. (13 December 2012). "Good-Bye 386: Linux to drop support for i386 chips with next major release". ZDNet. CBS Interactive. Archived from the original on 17 February 2015. Retrieved 6 February 2013.
- ^ Fingas, Jon (15 December 2012). "Linux to drop i386 support in the 3.8 kernel, make us upgrade our Doom rig". Engadget. AOL. Archived from the original on 2 April 2015. Retrieved 22 March 2015.
- ^ Vaughan-Nichols, Steven J. (11 December 2012). "Linux 3.7 arrives, ARM developers rejoice". ZDNet. CBS Interactive. Archived from the original on 5 November 2014. Retrieved 6 February 2013.
- ^ Torvalds, Linus (12 April 2015). "Linux 4.0 released". LKML (Mailing list). Archived from the original on 13 April 2015. Retrieved 12 April 2015.
- ^ Torvalds, Linus (2 September 2013). "Linux 3.11". LKML (Mailing list). Archived from the original on 26 February 2014. Retrieved 3 September 2013.
- ^ "Linux 3.11". kernelnewbies.org. 2 September 2013. Retrieved 21 January 2014.
- ^ "The Linux Foundation Releases Linux Development Report". Linux Foundation. 18 February 2015. Archived from the original on 19 July 2016. Retrieved 20 February 2015.
- ^ Michael Larabel (23 June 2014). "Linux Kernel At 19.5 Million Lines Of Code, Continues Rising". Phoronix. Archived from the original on 23 November 2020. Retrieved 23 June 2015.
- ^ a b Torvalds, Linus (3 March 2019). "Linus Torvalds: Linux 5.0". LKML. Archived from the original on 25 August 2024. Retrieved 25 August 2024.
- ^ Prakash, Abhishek (11 January 2023). "Linux Kernel 5.0 Released! Check Out The New Features". It's FOSS. Retrieved 25 August 2024.
{{cite news}}: CS1 maint: url-status (link) - ^ Larabel, Micheal (6 January 2019). "The Many New Features & Improvements Of The Linux 5.0 Kernel". www.phoronix.com. Retrieved 25 August 2024.
- ^ Corbet, Jonathan (3 August 2020). "Some statistics from the 5.8 kernel cycle". LWN - Linux Weekly News. Archived from the original on 4 September 2020. Retrieved 11 August 2020.
- ^ "Stack Overflow Developer Survey 2019 - most popular technologies". Stack Overflow. Archived from the original on 8 October 2020. Retrieved 17 March 2020.
- ^ "Stack Overflow Developer Survey 2019 - development environments and tools". Stack Overflow. Archived from the original on 7 March 2020. Retrieved 17 March 2020.
- ^ "Usage Statistics and Market Share of Operating Systems for Websites, March 2020". w3techs.com. Retrieved 17 March 2020.
- ^ "Usage Statistics and Market Share of Unix for Websites, March 2020". w3techs.com. Retrieved 17 March 2020.
- ^ "TOP500 Supercomputer Sites: Operating system Family / Linux". Top500.org. Archived from the original on 19 November 2012. Retrieved 5 October 2019.
- ^ "Gartner Says Sales of Tablets Will Represent Less Than 10 Percent of All Devices in 2014" (Press release). Egham, UK: Gartner. 15 October 2014. Archived from the original on 17 October 2014. Retrieved 19 October 2014.
- ^ Lunden, Ingrid (15 October 2014). "Tablet Sales Growth Plummets In 2014 As Android Smartphones Continue To Soar: Gartner". TechCrunch. AOL. Archived from the original on 23 October 2014. Retrieved 23 October 2014.
- ^ "Global PC Shipments Exceed Forecast with Mild Improvement in Consumer Demand, While Apple Moves to #5 Spot, According to IDC" (Press release). Framingham, MA: IDC. 8 October 2014. Archived from the original on 11 October 2014. Retrieved 19 October 2014.
- ^ Wheeler, David A. "Linux Kernel 2.6: It's Worth More!". Archived from the original on 20 August 2011. Retrieved 18 January 2007.
- ^ "Economic impact of FLOSS on innovation and competitiveness of the EU ICT sector" (PDF) (Table 3 on page 50). Archived (PDF) from the original on 15 February 2010. Retrieved 8 January 2011.
- ^ "Estimating Total Development Cost Of a Linux Distribution" (PDF) (Table on page 6). Archived from the original (PDF) on 11 July 2010.
- ^ "The Billion Dollar Kernel". Linux.slashdot.org. 24 February 2010. Archived from the original on 15 May 2011. Retrieved 12 November 2010.
- ^ Wheeler, David. "The Linux Kernel: It's Worth More!". Archived from the original on 24 February 2021. Retrieved 17 September 2012.
- ^ "The Linux Kernel Archives". www.kernel.org. Retrieved 28 February 2023.
- ^ a b "2017 State of Linux Kernel Development". The Linux Foundation. 25 October 2017. Archived from the original on 27 May 2020. Retrieved 27 May 2020.
- ^ "Why I quit: kernel developer Con Kolivas". APC Magazine. ACP Magazines. 24 July 2007. Archived from the original on 7 July 2011. Retrieved 15 August 2011.
- ^ Corbet, Jonathan (25 July 2007). "Re: -mm merge plans for 2.6.23". LWN.net. Archived from the original on 11 February 2018. Retrieved 10 February 2018.
- ^ Cox, Alan (28 July 2009). "Re: [PATCH] kdesu broken". Archived from the original on 11 February 2018. Retrieved 10 February 2018.
- ^ Rodrigues, Goldwyn (22 January 2011). "A tale of two SCSI targets". Archived from the original on 15 February 2018. Retrieved 14 February 2018.
- ^ Steinmetz, Andreas (17 January 2013). "LIO - the broken iSCSI target implementation". Archived from the original on 15 February 2018. Retrieved 14 February 2018.
- ^ Paul, Ryan (19 June 2012). "Linus Torvalds says "f–k you" to NVIDIA". Archived from the original on 15 February 2018. Retrieved 14 February 2018.
- ^ John Gold (3 April 2014). "Linus Torvalds suspends key Linux developer: Kernel panic as Systemd dev pokes the bear". Archived from the original on 24 March 2019. Retrieved 24 March 2019.
- ^ Poettering, Lennart (6 October 2014). "On the sickness of the Linux Kernel Community". Google+. Archived from the original on 27 May 2018. Retrieved 10 February 2018.
- ^ Brodkin, Jon (6 March 2015). "VMware alleged to have violated Linux's open source license for years". Ars Technica. Archived from the original on 15 February 2018. Retrieved 14 February 2018.
- ^ McCarthy, Kieren (26 August 2016). "Having offended everyone else in the world, Linus Torvalds calls own lawyers a 'nasty festering disease'". The Register. Archived from the original on 15 February 2018. Retrieved 14 February 2018.
- ^ Kroah-Hartman, Greg. "[PATCH 000/190] Revertion of all of the umn.edu commits". Linux Kernel Mailing List Archive. Retrieved 13 January 2022.
- ^ Chin, Monica (30 April 2021). "How a university got itself banned from the Linux kernel". The Verge. Retrieved 13 January 2022.
- ^ Corbet, Jonathan (10 September 2007). "KS2007: Developer relations and development process". LWN.net. Archived from the original on 12 February 2018. Retrieved 11 February 2018.
- ^ Brodkin, Jon (16 July 2013). "Linus Torvalds defends his right to shame Linux kernel developers". ARS Technica. Archived from the original on 17 February 2018. Retrieved 11 February 2018.
- ^ Corbet, Jonathan (9 March 2015). "The kernel's code of conflict". LWN.net. Archived from the original on 12 February 2018. Retrieved 11 February 2018.
- ^ Corbet, Jonathan (18 September 2018). "Code, conflict, and conduct". LWN.net. Archived from the original on 19 September 2018. Retrieved 19 September 2018.
- ^ Cohen, Noam (19 September 2018). "After Years of Abusive E-mails, the Creator of Linux Steps Aside". The New Yorker. Archived from the original on 20 February 2020. Retrieved 24 September 2018.
- ^ Larabel, Michael. "Dropping Profanity In Kernel Code Comments: Linux Gets "Hugs"". Phoronix. Archived from the original on 21 April 2019. Retrieved 15 June 2019.
- ^ "Code of Conflict". Retrieved 4 February 2018.[permanent dead link]
- ^ Sharwood, Simon (6 October 2015). "Linux kernel dev who asked Linus Torvalds to stop verbal abuse quits over verbal abuse". The Register. Archived from the original on 29 March 2020. Retrieved 4 February 2018.
- ^ Edge, Jake (31 January 2018). "Too many lords, not enough stewards". LWN.net. Archived from the original on 9 November 2020. Retrieved 4 February 2018.
- ^ Corbet, Jonathan (6 November 2017). "Bash the kernel maintainers". LWN.net. Archived from the original on 26 January 2021. Retrieved 4 February 2018.
- ^ "Linux Evolution" (PDF). 26 March 2008. Archived (PDF) from the original on 14 December 2013. Retrieved 6 November 2013.
- ^ "Perpetual Development: A Model of the Linux Kernel Life Cycle" (PDF). 25 October 2011. Archived (PDF) from the original on 17 October 2013. Retrieved 6 November 2013.
- ^ Kroah-Hartman, Greg (12 February 2008). "Re: Announce: Linux-next (Or Andrew's dream :-))". Linux Kernel Mailing List (Mailing list). Archived from the original on 2 February 2017. Retrieved 30 January 2017.
- ^ Robert Love (2010). Linux Kernel Development: Linux Kernel Development. Pearson Education. p. 11. ISBN 9780768696790.
- ^ Robert Love (2010). Linux Kernel Development: Linux Kernel Development. Pearson Education. p. 12. ISBN 9780768696790.
- ^ "How the development process works". Archived from the original on 9 December 2017. Retrieved 4 February 2018.
- ^ Robert Love (2010). Linux Kernel Development: Linux Kernel Development. Pearson Education. p. 13. ISBN 9780768696790.
- ^ "Contributor Covenant Code of Conduct". The Linux Kernel documentation. Retrieved 6 October 2021.
- ^ "Linux Kernel Contributor Covenant Code of Conduct Interpretation". The Linux Kernel Documentation. Retrieved 6 October 2021.
- ^ Williams, Dan. "[PATCH] CodingStyle: Inclusive Terminology". Linux Kernel Mailing List.
- ^ Tim Anderson. "Linux kernel minimum compiler raised to GCC 5.1, allowing potential C11 use". The Register. Retrieved 12 May 2023.
- ^ Larabel, Michael. "The Switch Has Been Made From C89 To C11/GNU11 With Linux 5.18". www.phoronix.com. Retrieved 12 May 2023.
- ^ Sharwood, Simon (11 December 2022). "Linus Torvalds reveals Linux kernel 6.1". The Register. Retrieved 12 May 2023.
- ^ Corbet, Jonathan. "Rust in the 6.2 kernel". LWN.net. Retrieved 12 May 2023.
- ^ Larabel, Michael. "More Rust Code Readied For Linux 6.3 - Closer To Having Rust Drivers Upstreamed". Phoronix. Retrieved 12 May 2023.
- ^ "HOWTO do Linux kernel development — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 4 January 2020.
- ^ "Linux kernel coding style — The Linux Kernel documentation". Kernel.org. Archived from the original on 5 January 2020. Retrieved 4 January 2020.
- ^ a b "How the development process works — The Linux Kernel documentation". Kernel.org. Archived from the original on 9 December 2017. Retrieved 26 March 2020.
- ^ Kubbilun, Ingo A. (2 June 2004). "Linux kernel patch for Intel Compiler" (in German). Pyrillion.org. Archived from the original on 22 July 2011. Retrieved 12 November 2010.
- ^ timothy (26 February 2009). "High Performance Linux Kernel Project — LinuxDNA". Slashdot Linux. Dice Holdings. Archived from the original on 18 October 2019. Retrieved 30 October 2010.
- ^ Ryan, Justin (25 February 2009). "LinuxDNA Supercharges Linux with the Intel C/C++ Compiler". Linux Journal. Belltown Media, Inc. Archived from the original on 9 November 2020. Retrieved 30 October 2010.
- ^ Larabel, Michael (5 March 2023). "Linux 6.3 Drops Support For The Intel ICC Compiler". Phoronix. Retrieved 6 March 2023.
- ^ Lelbach, Bryce (25 October 2010). "Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts)". cfe-dev (Mailing list). Archived from the original on 7 September 2015.
- ^ Larabel, Michael (12 April 2014). "Linux 3.15 Can Almost Be Compiled Under LLVM's Clang". Phoronix. Archived from the original on 13 August 2020. Retrieved 10 June 2014.
- ^ Larabel, Michael. "Patch By Patch, LLVM Clang Gets Better At Building The Linux Kernel". Phoronix. Archived from the original on 13 August 2020. Retrieved 20 November 2014.
- ^ Edge, Jake (7 May 2013). "LFCS: The LLVMLinux project". LWN.net. Archived from the original on 10 August 2020. Retrieved 3 March 2015.
- ^ Möller, Jan-Simon (2 February 2014). "LLVMLinux: The Linux Kernel with Dragon Wings" (PDF). LLVM Project. Archived (PDF) from the original on 3 August 2020. Retrieved 3 March 2015.
- ^ Desaulniers, Nick; Hackmann, Greg; Hines, Stephen (18 October 2017). "2017 LLVM Developers' Meeting: Compiling Android userspace and Linux kernel with LLVM". YouTube. Archived from the original on 31 December 2020. Retrieved 7 December 2020.
- ^ Hackmann, Greg (2 February 2017). "marlin-nougat-mr1-clang Patch Series". Archived from the original on 10 December 2020. Retrieved 6 December 2020.
- ^ Kaehlcke, Matthias (22 October 2018). "cros-kernel2: Make clang the default compiler for kernel builds". Archived from the original on 10 December 2020. Retrieved 6 December 2020.
- ^ Larabel, Michael (4 February 2019). "Using LLVM Clang To Compile The Linux Kernel Is Heating Up Again Thanks To Google". Phoronix. Archived from the original on 25 November 2020. Retrieved 6 December 2020.
- ^ Desaulniers, Nick (10 December 2019). "vts: kernel: enforce vts_kernel_toolchain for all TARGET_ARCH for R". Archived from the original on 10 December 2020. Retrieved 6 December 2020.
- ^ Desaulniers, Nick (19 November 2020). "Re: violating function pointer signature". LKML. Retrieved 6 December 2020.
- ^ Bradford, John (8 March 2003). "Re: what's an OOPS". LKML (Mailing list). Archived from the original on 31 October 2014. Retrieved 30 October 2010.
- ^ "syslog(2) - Linux manual page". man7.org. Archived from the original on 13 October 2020. Retrieved 15 August 2020.
- ^ "kmsg: export printk records to the /dev/kmsg interface [LWN.net]". lwn.net. Archived from the original on 2 October 2015. Retrieved 16 August 2020.
- ^ See what your computer is doing with Ftrace utilities, 24 January 2019, archived from the original on 15 December 2021, retrieved 9 May 2021
- ^ "Debugging the kernel using Ftrace - part 1 [LWN.net]". lwn.net. Archived from the original on 9 November 2020. Retrieved 15 September 2020.
- ^ "Debugging the kernel using Ftrace - part 2 [LWN.net]". lwn.net. Archived from the original on 31 March 2020. Retrieved 15 September 2020.
- ^ "ftrace - Function Tracer — The Linux Kernel documentation". Kernel.org. Archived from the original on 19 September 2020. Retrieved 15 September 2020.
- ^ "Boot-time tracing — The Linux Kernel documentation". Kernel.org. Archived from the original on 31 October 2020. Retrieved 19 September 2020.
- ^ "Kernel Probes (Kprobes) — The Linux Kernel documentation". Kernel.org. Archived from the original on 11 October 2020. Retrieved 6 October 2020.
- ^ "Uprobe-tracer: Uprobe-based Event Tracing — The Linux Kernel documentation". Kernel.org. Archived from the original on 4 December 2020. Retrieved 6 October 2020.
- ^ "Using kgdb, kdb and the kernel debugger internals". mirrors.edge.kernel.org. Archived from the original on 26 January 2021. Retrieved 3 November 2020.
- ^ Gene Sally (2010). Pro Linux Embedded Systems. Apress. p. 252. ISBN 9781430272267.
- ^ Billimoria, Kaiwan N. (2021). Linux Kernel Programming A Comprehensive Guide to Kernel Internals, Writing Kernel Modules, and Kernel Synchronization. Birmingham: Packt Publishing, Limited. p. 55. ISBN 978-1-78995-592-7. OCLC 1240585605.
- ^ Vaduva, Alexandru; Gonzalez, Alex; Simmonds, Chris (2016). Linux : embedded development : leverage the power of Linux to develop captivating and powerful embedded Linux projects : a course in three modules. Birmingham, UK: Packt Publishing. p. 663. ISBN 978-1-78712-445-5. OCLC 960471438.
- ^ Karim Yaghmour (2008). Building embedded Linux systems (2nd ed.). Sebastopol [Calif.]: O'Reilly Media. p. 387. ISBN 978-0-596-52968-0. OCLC 273049576.
- ^ Yaghmour, Karim (2011). Embedded Android. Sebastopol, CA: O'Reilly Media. p. 44. ISBN 978-1-4493-2798-9. OCLC 812180000.
- ^ "SoC (System on a Chip)". OpenWrt Wiki. 6 November 2014. Archived from the original on 23 August 2022. Retrieved 15 March 2021.
- ^ "What to do about CVE numbers [LWN.net]". lwn.net. Retrieved 15 March 2021.
- ^ Amadeo, Ron (20 November 2019). "Google outlines plans for mainline Linux kernel support in Android". Ars Technica. Retrieved 31 March 2021.
- ^ Bruchon, Jody (24 April 2021), jbruchon/elks, retrieved 27 April 2021
- ^ "The state of preempt-rt". linuxplumbersconf.org. Archived from the original on 15 October 2016. Retrieved 14 June 2016.
- ^ Meyer, David (3 February 2010). "Linux developer explains Android kernel code removal". ZDNet. CBS Interactive. Archived from the original on 15 October 2016. Retrieved 3 February 2010.
- ^ "Chapter 03: maemo Platform Overview". maemo Technology Overview. Nokia. 2008. Archived from the original on 16 June 2008. Retrieved 9 April 2010.
- ^ Kroah-Hartman, Greg (2 February 2010). "Android and the Linux kernel community". Archived from the original on 27 April 2019. Retrieved 3 February 2010.
- ^ a b Roger Ye (2017). Android System Programming. Packt Publishing. p. 14. ISBN 9781787120389.
- ^ Torvalds, Linus (19 September 2001). "The Origins of Linux—Linus Torvalds". YouTube. Archived from the original on 15 December 2021. Retrieved 6 December 2020.
- ^ "Linux MAINTAINERS file". Archived from the original on 12 January 2013.
- ^ Alexandru Vaduva, Alex Gonzalez & Chris Simmonds (2016). Linux: Embedded Development. Packt Publishing. p. 663. ISBN 9781787124455.
- ^ "README". git.kernel.org. Archived from the original on 24 July 2012. Retrieved 24 March 2021.
- ^ "KernelBuild - Linux Kernel Newbies". kernelnewbies.org. Archived from the original on 19 October 2020. Retrieved 13 September 2020.
- ^ "The Sysctl Interface". Linux.it. Archived from the original on 17 February 2020. Retrieved 13 September 2020.
- ^ "sysctl(8) - Linux manual page". man7.org. Archived from the original on 30 September 2020. Retrieved 13 September 2020.
- ^ "procfs(5) - Linux manual page". man7.org. Archived from the original on 24 September 2020. Retrieved 13 September 2020.
- ^ "sched(7) - Linux manual page". man7.org. Archived from the original on 17 July 2020. Retrieved 27 July 2020.
- ^ "FAQ: Preemption". kernelnewbies.org. 22 August 2009. Archived from the original on 7 August 2020. Retrieved 7 May 2015.
- ^ a b Jonathan Corbet (24 February 2003). "Driver porting: the preemptible kernel". LWN.net. Archived from the original on 10 August 2020. Retrieved 7 May 2015.
- ^ "EEVDF Scheduler Merged For Linux 6.6, Intel Hybrid Cluster Scheduling Re-Introduced". Phoronix.
- ^ a b Molnár, Ingo (13 April 2007). "[patch] Modular Scheduler Core and Completely Fair Scheduler [CFS]". LKML (Mailing list). Archived from the original on 3 November 2020. Retrieved 30 March 2020.
- ^ "Completely Fair Scheduler | Linux Journal". Linuxjournal.com. Archived from the original on 3 August 2020. Retrieved 30 March 2020.
- ^ "ioctl(2) - Linux manual page". man7.org. Archived from the original on 20 July 2020. Retrieved 11 August 2020.
- ^ "aio(7) - Linux manual page". man7.org. Archived from the original on 12 April 2020. Retrieved 11 August 2020.
- ^ "io_setup(2) - Linux manual page". man7.org. Archived from the original on 20 August 2020. Retrieved 11 August 2020.
- ^ "KVM". Linux-kvm.org. Archived from the original on 28 March 2020. Retrieved 29 March 2020.
- ^ "TechComparison - Linux Virtualization Wiki". Virt.kernelnewbies.org. Archived from the original on 3 August 2020. Retrieved 29 March 2020.
- ^ "Virtualization_support_through_KVM in Linux_2_6_20 - Linux Kernel Newbies". Kernelnewbies.org. Archived from the original on 29 November 2019. Retrieved 29 March 2020.
- ^ Coekaerts, Wim. "Linux mainline contains all the Xen code bits for Dom0 and DomU support". blogs.oracle.com. Archived from the original on 3 August 2020. Retrieved 29 March 2020.
- ^ "Xen celebrates full Dom0 and DomU support in Linux 3.0 – blog.xen.org". 7 June 2011. Archived from the original on 7 June 2011. Retrieved 29 March 2020.
- ^ Wilk, Konrad Rzeszutek (31 January 2014). "Linux 3.14 and PVH". Xen Project. Archived from the original on 29 March 2020. Retrieved 29 March 2020.
- ^ "Introduction to Xen Virtualization | Virtualization Guide | openSUSE Leap 15.2". doc.opensuse.org. Archived from the original on 28 September 2020. Retrieved 29 September 2020.
- ^ "Virtualization technology | Virtualization Guide | openSUSE Leap 15.3". doc.opensuse.org. Retrieved 30 September 2021.
- ^ a b "SELinux Project". GitHub. Archived from the original on 12 December 2019. Retrieved 10 January 2020.
- ^ a b "AppArmor — The Linux Kernel documentation". Kernel.org. Archived from the original on 8 May 2020. Retrieved 10 January 2020.
- ^ Jake Edge (25 November 2008). "Character devices in user space". LWN.net. Archived from the original on 26 January 2021. Retrieved 7 May 2015.
- ^ Jonathan Corbet (2 May 2007). "UIO: user-space drivers". LWN.net. Archived from the original on 11 November 2020. Retrieved 7 May 2015.
- ^ a b c d "stable-api-nonsense - Linux kernel source tree". git.kernel.org. Archived from the original on 5 March 2021. Retrieved 18 April 2020.
- ^ Gorman, Mel (15 February 2004). Understanding the Linux Virtual Memory Manager (PDF). Prentice Hall. p. 26. ISBN 0-13-145348-3. Archived (PDF) from the original on 3 May 2019. Retrieved 27 January 2020.
- ^ Greg Ungerer. "uClinux mainline Announcement". Archived from the original on 31 October 2007. Retrieved 15 January 2008.
- ^ a b Nguyen, Binh (30 July 2004). "Linux Filesystem Hierarchy: Chapter 1. Linux Filesystem Hierarchy". The Linux Documentation Project. Archived from the original on 2 December 2020. Retrieved 28 November 2012.
- ^ "Admin Guide README". Kernel.org git repositories.
- ^ "Linux kernel release 5.x — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 4 January 2020.
- ^ "README\ABI\Documentation - kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Archived from the original on 1 October 2020. Retrieved 18 April 2020.
- ^ "syscalls\stable\ABI\Documentation - kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Archived from the original on 2 October 2020. Retrieved 18 April 2020.
- ^ a b "1.Intro.rst - Documentation/process/1.Intro.rst - Linux source code (v5.8) - Bootlin". elixir.bootlin.com. Retrieved 8 August 2020.
- ^ a b "syscalls". man7. Archived from the original on 15 January 2020. Retrieved 28 January 2020.
- ^ "intro(2) - Linux manual page". man7.org. Archived from the original on 17 July 2020. Retrieved 16 July 2020.
- ^ "clone". man7.org. Archived from the original on 18 January 2020. Retrieved 28 January 2020.
- ^ "feature_test_macros". man7.org. Archived from the original on 19 January 2020. Retrieved 28 January 2020.
- ^ "vdso(7) - Linux manual page". man7.org. Archived from the original on 2 February 2020. Retrieved 2 February 2020.
- ^ a b "futex(2) - Linux manual page". man7.org. Archived from the original on 31 January 2020. Retrieved 2 February 2020.
- ^ "syscall(2) - Linux manual page". man7.org. Archived from the original on 21 January 2020. Retrieved 2 February 2020.
- ^ "sysfs(5) - Linux manual page". man7.org. Archived from the original on 18 January 2020. Retrieved 6 January 2020.
- ^ "Rules on how to access information in sysfs — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 6 January 2020.
- ^ "Linux Foundation Referenced Specifications". refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ "LSB Specifications". refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ "Linux Standard Base Desktop Specification, Generic Part". refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ "Normative References". refspecs.linuxfoundation.org. Archived from the original on 12 August 2020. Retrieved 3 February 2020.
- ^ "Linux Standard Base Core Specification, Generic Part". refspecs.linuxfoundation.org. Archived from the original on 29 November 2019. Retrieved 3 February 2020.
- ^ "System V Application Binary Interface - Edition 4.1" (PDF). Sco.com. Archived (PDF) from the original on 13 December 2019. Retrieved 3 February 2020.
- ^ "Xinuos Inc. | Developers | Gabi | 17 December 2003 | System V Application Binary Interface - DRAFT". Sco.com. Archived from the original on 3 February 2020. Retrieved 3 February 2020.
- ^ "Executable And Linking Format (ELF)". Refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ "elf(5) - Linux manual page". man7.org. Archived from the original on 30 November 2020. Retrieved 18 November 2020.
- ^ "Linux Standard Base Core Specification for X86-64". Refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ "System V Application Binary Interface - DRAFT". Refspecs.linuxbase.org. Retrieved 3 February 2020.
- ^ Seyfarth, Ray (2012). Introduction to 64 Bit Intel Assembly Language Programming for Linux. CreateSpace Independent Publishing Platform. p. 170. ISBN 9781478119203.
- ^ "Anatomy of a system call, part 1 [LWN.net]". lwn.net. Archived from the original on 18 August 2020. Retrieved 16 July 2020.
- ^ "Anatomy of a system call, part 2 [LWN.net]". lwn.net. Archived from the original on 6 August 2020. Retrieved 16 July 2020.
- ^ Deucher, Alex (7 October 2014). "AMD's New Unified Open Source Driver". X.Org Foundation. Archived from the original on 21 January 2015. Retrieved 21 January 2015.
- ^ a b "Symbols - Unreliable Guide To Hacking The Linux Kernel — The Linux Kernel documentation". Kernel.org. Archived from the original on 3 August 2020. Retrieved 8 February 2020.
- ^ a b "Exported symbols and the internal API [LWN.net]". Lwn.net. Archived from the original on 31 March 2020. Retrieved 15 March 2020.
- ^ a b "Unexporting kallsyms_lookup_name() [LWN.net]". Lwn.net. Archived from the original on 1 April 2020. Retrieved 15 March 2020.
- ^ "Trees I: Radix trees [LWN.net]". lwn.net. Archived from the original on 8 November 2020. Retrieved 13 November 2020.
- ^ "Trees II: red-black trees [LWN.net]". lwn.net. Archived from the original on 13 November 2020. Retrieved 13 November 2020.
- ^ "Unreliable Guide To Hacking The Linux Kernel". Kernel.org (1st ed.). 2005. Archived from the original on 16 February 2020. Retrieved 15 March 2020.
- ^ "Unreliable Guide To Hacking The Linux Kernel — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 15 March 2020.
- ^ "Unreliable Guide To Locking — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 15 March 2020.
- ^ "SCSI Interfaces Guide — The Linux Kernel documentation". Kernel.org. Archived from the original on 2 June 2020. Retrieved 11 June 2020.
- ^ "libATA Developer's Guide — The Linux Kernel documentation". Kernel.org. Archived from the original on 30 May 2020. Retrieved 11 June 2020.
- ^ "DRM Internals — The Linux Kernel documentation". Kernel.org. Archived from the original on 1 June 2020. Retrieved 11 June 2020.
- ^ "Kernel Mode Setting (KMS) — The Linux Kernel documentation". Kernel.org. Archived from the original on 11 June 2020. Retrieved 11 June 2020.
- ^ "Introduce DMA buffer sharing mechanism [LWN.net]". lwn.net. Archived from the original on 11 June 2020. Retrieved 11 June 2020.
- ^ "Sharing CPU and GPU buffers on Linux*". 01.org. 12 May 2016. Archived from the original on 11 June 2020. Retrieved 11 June 2020.
- ^ "Buffer Sharing and Synchronization — The Linux Kernel documentation". Kernel.org. Archived from the original on 1 June 2020. Retrieved 11 June 2020.
- ^ "About mac80211". Linux Kernel Organization, Inc. Archived from the original on 1 February 2021. Retrieved 8 June 2014.
- ^ "Linux 802.11 Driver Developer's Guide — The Linux Kernel documentation". Kernel.org. Retrieved 19 November 2021.
- ^ "[PATCH v3 1/2] fork: add clone3 [LWN.net]". lwn.net. Archived from the original on 16 July 2020. Retrieved 16 July 2020.
- ^ "clone(2) - Linux manual page". man7.org. Archived from the original on 15 July 2020. Retrieved 15 July 2020.
- ^ "clone3(), fchmodat4(), and fsinfo() [LWN.net]". lwn.net. Archived from the original on 15 June 2020. Retrieved 15 July 2020.
- ^ "ld-linux.so(8) - Linux manual page". man7.org. Archived from the original on 26 November 2020. Retrieved 18 November 2020.
- ^ "nptl(7) - Linux manual page". man7.org. Archived from the original on 25 July 2020. Retrieved 25 July 2020.
- ^ "futex(7) - Linux manual page". man7.org. Archived from the original on 15 July 2020. Retrieved 25 July 2020.
- ^ "Kernel threads made easy [LWN.net]". lwn.net. Archived from the original on 31 March 2020. Retrieved 15 August 2020.
- ^ a b Bar, Moshe (1 April 2000). "The Linux Scheduler". Linux Journal. Belltown Media, Inc. Archived from the original on 2 February 2021. Retrieved 14 April 2012.
- ^ BKK19-TR03 - The Linux Kernel Scheduler - Overview, 23 April 2019, archived from the original on 15 December 2021, retrieved 17 May 2021
- ^ "Lowering Latency in Linux: Introducing a Preemptible Kernel | Linux Journal". Linuxjournal.com. Archived from the original on 9 August 2020. Retrieved 17 August 2020.
- ^ "CFS Scheduler — The Linux Kernel documentation". Kernel.org. Retrieved 1 May 2021.
- ^ "IEEE Standard for Information Technology – Portable Operating System Interface, POSIX.1b, Real-time extensions (IEEE Std 1003.1b-1993)". Archived from the original on 16 November 2010. Retrieved 17 March 2016.
- ^ Larabel, Michael (24 January 2014). "The Linux 3.14 Kernel Already Has Many Exciting Features". Phoronix. Archived from the original on 13 August 2020. Retrieved 3 February 2014.
- ^ "Linux kernel 3.14, Section 1.1. Deadline scheduling class for better real-time scheduling". kernelnewbies.org. 30 March 2014. Archived from the original on 15 January 2021. Retrieved 2 April 2014.
- ^ "RT-mutex implementation design — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
- ^ "RT-mutex subsystem with PI support — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
- ^ McKenney, Paul (10 August 2005). "A realtime preemption overview". LWN.net. Archived from the original on 10 August 2020. Retrieved 5 February 2012.
- ^ "OSADL Project: Realtime Linux". OSADL. Archived from the original on 4 February 2021. Retrieved 5 February 2012.
- ^ a b "Steven-Rostedt_on_PREEMPT_RT" (PDF).
- ^ "EEVDF Scheduler May Be Ready For Landing With Linux 6.6". Phoronix. Retrieved 31 August 2023.
- ^ "[PATCH 00/10] sched: EEVDF using latency-nice [LWN.net]". LWN.net.
- ^ "An EEVDF CPU scheduler for Linux [LWN.net]". LWN.net. Retrieved 31 August 2023.
- ^ "EEVDF Scheduler Merged For Linux 6.6, Intel Hybrid Cluster Scheduling Re-Introduced". Phoronix.
- ^ "locking — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
- ^ "locking.rst - Documentation/kernel-hacking/locking.rst - Linux source code (v5.11.10) - Bootlin". elixir.bootlin.com. Retrieved 29 March 2021.
- ^ "What is RCU, Fundamentally? [LWN.net]". lwn.net. Retrieved 29 March 2021.
- ^ "What is RCU? Part 2: Usage [LWN.net]". lwn.net. Retrieved 29 March 2021.
- ^ "RCU part 3: the RCU API [LWN.net]". lwn.net. Retrieved 29 March 2021.
- ^ "Linux-Kernel Memory Model". open-std.org. Retrieved 29 March 2021.
- ^ "A formal kernel memory-ordering model (part 1) [LWN.net]". lwn.net. Retrieved 29 March 2021.
- ^ "A formal kernel memory-ordering model (part 2) [LWN.net]". lwn.net. Retrieved 29 March 2021.
- ^ Stern, Alan. "Explanation of the Linux-Kernel Memory Consistency Model".
- ^ "kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Retrieved 17 December 2021.
- ^ a b "Lock types and their rules — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
- ^ "Short subjects: Realtime, Futexes, and ntfs3". Lwn.net. Retrieved 20 February 2022.
- ^ "RT-mutex subsystem with PI support — The Linux Kernel documentation". Kernel.org. Retrieved 20 February 2022.
- ^ "RT-mutex implementation design — the Linux Kernel documentation".
- ^ "Runtime locking correctness validator — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
- ^ "Interrupts, threads, and lockdep [LWN.net]". lwn.net. Retrieved 17 December 2021.
- ^ "Page Tables — The Linux Kernel documentation". www.kernel.org. Retrieved 21 July 2024.
- ^ "Physical Memory — The Linux Kernel documentation". www.kernel.org. Retrieved 21 July 2024.
- ^ "The Linux Storage Stack Diagram". Thomas-krenn.com. Archived from the original on 3 August 2020. Retrieved 19 March 2020.
- ^ "The SLUB allocator". Lwn.net. 11 April 2007. Retrieved 20 February 2022.
- ^ a b "Slab allocators in the Linux Kernel: SLAB, SLOB, SLUB" (PDF). Events.static.linuxfound.org. Retrieved 20 February 2022.
- ^ Corbet, Jonathan (28 April 2023). "6.4 Merge window, part 1 [LWN.net]". LWN.net. Retrieved 12 May 2023.
- ^ "The first half of the 6.8 merge window [LWN.net]". lwn.net. Retrieved 21 July 2024.
- ^ "Kernel/Git/Torvalds/Linux.git - Linux kernel source tree". Git.kernel.org.
- ^ a b c Torvalds, Linus (January 1999). "The Linux Edge". Open Sources: Voices from the Open Source Revolution. O'Reilly. ISBN 1-56592-582-3. Retrieved 13 October 2013.
- ^ "Porting Linux to the DEC Alpha: The Kernel and Shell". Archived from the original on 5 September 2019. Retrieved 5 October 2019.
- ^ "Linux on Alpha: A Strategic Choice". Archived from the original on 4 September 2019. Retrieved 5 October 2019.
- ^ "TOP500 Supercomputer Sites: Operating system Family / Linux". Top500.org. Archived from the original on 19 November 2012. Retrieved 5 October 2019.
- ^ "Avalon Cluster | TOP500 Supercomputer Sites". Top500.org. Archived from the original on 5 October 2019. Retrieved 5 October 2019.
- ^ Wang, David (6 May 2010). "Android Now Running On iPhone 3G". TechHive. IDG. Archived from the original on 22 July 2010. Retrieved 11 July 2010.
- ^ "LKDDb". LKDDb Project. Archived from the original on 25 February 2021. Retrieved 26 January 2021.
- ^ "Linux Hardware". Linux Hardware Project. Archived from the original on 26 January 2021. Retrieved 26 January 2021.
- ^ "Linux kernel 4.0, Section 1.2. Live patching". kernelnewbies.org. 26 April 2015. Archived from the original on 4 May 2015. Retrieved 27 April 2015.
- ^ Jonathan Corbet (25 February 2015). "A rough patch for live patching". LWN.net. Archived from the original on 27 April 2015. Retrieved 27 April 2015.
- ^ "kernel/git/torvalds/linux.git: Pull live patching infrastructure from Jiri Kosina (Linux kernel source tree)". kernel.org. 11 February 2015. Archived from the original on 11 June 2015. Retrieved 27 April 2015.
- ^ Mookhey, K. K.; Burghate, Nilesh (1 July 2005). Linux: Security, Audit and Control Features. US: ISACA. p. 14. ISBN 1-893209-78-4. Archived from the original on 2 June 2013. Retrieved 31 December 2010.
- ^ Hatch, Brian (15 July 2008). Hacking Exposed Linux: Linux Security Secrets and Solutions. McGraw-Hill Osborne Media. p. 524. ISBN 978-0-07-226257-5. Archived from the original on 2 June 2013. Retrieved 31 December 2010.
- ^ Jaeger, Trent (7 October 2008). Operating System Security. Morgan and Claypool Publishers. p. 122. ISBN 978-1-59829-212-1. Archived from the original on 2 June 2013. Retrieved 31 December 2010.
- ^ "CAP_PERFMON — and new capabilities in general [LWN.net]". lwn.net. Archived from the original on 4 August 2020. Retrieved 2 August 2020.
- ^ "Linux Security Module Usage — The Linux Kernel documentation". Kernel.org. Archived from the original on 2 May 2020. Retrieved 10 January 2020.
- ^ "National Security Agency | Central Security Service > What We Do > Research > SE Linux > SE Linux FAQs". Nsa.gov. Archived from the original on 18 September 2019. Retrieved 10 January 2020.
- ^ "Seccomp BPF (SECure COMPuting with filters) — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 10 January 2020.
- ^ Andrews, Jeremy (16 July 2008). "Security Bugs and Full Disclosure". KernelTrap. Archived from the original on 19 July 2008. Retrieved 31 December 2010.
- ^ Spengler, Brad (16 July 2008). "Linux's unofficial security-through-coverup policy". Full Disclosure (Mailing list). Archived from the original on 7 August 2020. Retrieved 31 December 2010.
- ^ a b Yamagata, Hiroo (3 August 1997). "The Pragmatist of Free Software". HotWired. Archived from the original on 10 February 2007. Retrieved 21 February 2007.
- ^ "GPL-v2". gnu.org. Archived from the original on 25 December 2019. Retrieved 28 January 2020.
- ^ Corbet, Jonathan (31 January 2006). "GPLv3 and the kernel". LWN.net. Archived from the original on 10 August 2020. Retrieved 21 February 2007.
- ^ Torvalds, Linus (8 September 2000). "Linux-2.4.0-test8". LKML (Mailing list). Archived from the original on 15 May 2020. Retrieved 21 February 2007.
- ^ "gnu.org". Gnu.org. Archived from the original on 2 February 2021. Retrieved 18 October 2017.
- ^ Cox, Alan (20 January 2006). "Re: GPL V3 and Linux". LKML (Mailing list). Archived from the original on 26 January 2021. Retrieved 21 February 2007.
- ^ Shankland, Stephen (25 September 2006). "Top Linux programmers pan GPL 3". News.com. CNET. Archived from the original on 14 September 2013. Retrieved 21 February 2007.
- ^ a b James E.J. Bottomley; Mauro Carvalho Chehab; Thomas Gleixner; Christoph Hellwig; Dave Jones; Greg Kroah-Hartman; Tony Luck; Andrew Morton; Trond Myklebust; David Woodhouse (15 September 2006). "Kernel developers' position on GPLv3: The Dangers and Problems with GPLv3". LWN.net. Archived from the original on 18 January 2021. Retrieved 11 March 2015.
- ^ Petreley, Nicholas (27 September 2006). "A fight against evil or a fight for attention?". linuxjournal.com. Archived from the original on 2 March 2018. Retrieved 11 March 2015.
- ^ "Linus Torvalds says GPL v3 violates everything that GPLv2 stood for". Debconf 2014. 2014. Archived from the original on 8 May 2018. Retrieved 21 March 2018.
- ^ Clark, Rob; Semwal, Sumit (1 November 2012). "DMA Buffer Sharing Framework: An Introduction" (PDF). Embedded Linux Conference. Archived (PDF) from the original on 8 August 2014. Retrieved 2 August 2014.
- ^ Cox, Alan (10 October 2012). "[PATCH] dma-buf: Use EXPORT_SYMBOL". Direct Rendering Infrastructure (Mailing list). Archived from the original on 22 January 2013. Retrieved 3 September 2013.
- ^ Torvalds, Linus (10 December 2003). "RE: Linux GPL and binary module exception clause?". LKML (Mailing list). Archived from the original on 15 June 2011. Retrieved 31 December 2010.
- ^ Torvalds, Linus (3 December 2003). "Re: Linux GPL and binary module exception clause?". LKML (Mailing list). Archived from the original on 28 April 2020. Retrieved 12 November 2010.
- ^ "Tainted kernels — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 13 January 2020.
- ^ "Linux Firmware API — The Linux Kernel documentation". Kernel.org. Archived from the original on 13 January 2020. Retrieved 13 January 2020.
- ^ "Built-in firmware — The Linux Kernel documentation". Kernel.org. Archived from the original on 10 June 2020. Retrieved 10 June 2020.
- ^ "Linux TM registration in the US". uspto.gov. Archived from the original on 24 February 2021. Retrieved 6 September 2019.
- ^ "Linux TM registration in the EU". euipo.europa.eu. Archived from the original on 9 June 2016. Retrieved 28 November 2020.
- ^ Hughes, Phil (1 August 1997). "Linux Trademark Dispute". Linux Journal. Belltown Media, Inc. Archived from the original on 30 April 2010. Retrieved 8 December 2010.
- ^ Hughes, Phil (1 March 1997). "Action Taken on Linux Trademark". Linux Journal. Belltown Media, Inc. Archived from the original on 3 March 2010. Retrieved 8 December 2010.
- ^ Gisselberg, Tonya (2010). "The Trademark History of Linux, the Operating System" (PDF). Gisselberg Law Firm, Inc. Archived from the original (PDF) on 11 July 2011. Retrieved 8 December 2010.
Further reading
- Torvalds, Linus; Diamond, David (2001). Just for Fun: The Story of an Accidental Revolutionary. HarperBusiness. ISBN 978-0066620732.
- Bezroukov, Nikolai. "Ch 4: A benevolent dictator". Portraits of Open Source Pioneers (e-book). Softpanorama. Archived from the original on 13 October 2005. Retrieved 3 October 2005.
- "LinkSys and binary modules". LWN.net Weekly Edition. 16 October 2003. Archived from the original on 1 August 2016. Retrieved 21 July 2016.
- "Everyone's Favorite Linux Mascot". Archived from the original on 16 August 2005. Retrieved 16 June 2005.
- Pranevich, Joseph (December 2003). "The Wonderful World of Linux 2.6". Archived from the original on 16 July 2003.
- "LinuxChanges". Archived from the original on 31 October 2005. Retrieved 31 October 2005.
- "Seminar Paper on Linux Kernel 2.6". Archived from the original on 2 February 2007.
- "Linux Device Drivers" (3rd ed.). Archived from the original on 27 July 2016. Retrieved 21 July 2016.
- "Understanding the Linux Kernel" (Book) (3rd ed.). Archived from the original on 17 December 2005. Retrieved 22 December 2005.
- Linux Kernel Networking, by Rami Rosen, 2014 (Book). Archived from the original on 12 May 2015. Retrieved 14 June 2015.
- "Linux: The GPL And Binary Modules". Archived from the original on 23 July 2005.
- "Anatomy of the Linux kernel". IBM. Archived from the original on 27 June 2007. Retrieved 9 June 2007.
- Tanenbaum, Andrew; Bos, Herbert (2015). Modern Operating Systems. United States of America: Pearson. p. 722. ISBN 9781292061429. OCLC 892574803.
External links
- Official website
- Linux kernel documentation index
- Linux kernel man pages
- Kernel bugzilla, and regressions for each recent kernel version
- Kernel Newbies, a source of various kernel-related information
- Kernel coverage at LWN.net, an authoritative source of kernel-related information
- Bootlin's Elixir Cross Referencer, a Linux kernel source code cross-reference
- Greg Kroah Hartman on the Linux kernel on YouTube
