Linuxのマスコット、ペンギンのタックス[1] | |
Linuxカーネル3.0.0の起動 | |
| 原作者 | リーナス・トーバルズ |
|---|---|
| 開発者 | コミュニティ貢献者 Linus Torvalds |
| 初回リリース | 0.02 (1991年10月5日) |
| 安定リリース | 6.12.5 [2]
/ 2024年12月14日 |
| プレビューリリース | 6.13-rc3 [3]
/ 2024年12月15日 |
| リポジトリ |
|
| 書かれた | C(C11 5.18以降、C89以前)、[4] Rust(6.1以降)、[5] アセンブリ言語 |
| 利用可能 | 英語 |
| ライセンス | GPL-2.0のみ、 Linux-syscall-note付き[6] [7] [8] [a] |
| Webサイト | カーネル |
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月現在[アップデート]、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]また、スペインの Oviedo 大学の Garcia-Garcia と Alonso de Magdaleno は、カーネルに追加された価値は 2005 年から 2007 年の間に約 1 億ユーロ、2008 年には 2 億 2500 万ユーロで、欧州連合での開発には 10 億ユーロ以上 (2010 年 2 月時点で約 14 億ドル) かかると推定しています。[75]
2011年3月7日時点で[アップデート]、当時の2.6.x LinuxカーネルのLOC(コード行数)と賃金数値をDavid A. Wheelerの計算で[アップデート]使用すると、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]長い間、Torvaldsの反対によりカーネル開発者向けの行動規範はありませんでした。[92]しかし、 2015年3月8日にLinuxカーネル衝突規範が導入されました。[93]これは、2018年9月16日に、貢献者契約に基づく新しい行動規範に置き換えられました。これは、Torvaldsによる公式謝罪とカーネル開発からの短い休止と一致していました。[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 年現在[アップデート]、Linux カーネルの 5.11 リリースには約 3,034 万行のコードが含まれています。コードの約 14% は、アーキテクチャ固有のコード、カーネル コード、メモリ管理コードなどの「コア」の一部であり、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 ()を介して出力することでデバッグを行う。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カーネルのサイズを縮小しようとしたプロジェクトはいくつかある。その1つがTinyLinuxだ。2014年にJosh Triplettが縮小版の-tinyソースツリーを開始した。[162] [163] [164] [165]
アーキテクチャと機能


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

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

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

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

もともと移植性を考慮して設計されていなかったものの、[15] [289] Linuxは現在最も広く移植されているオペレーティングシステムカーネルの1つであり、ARMアーキテクチャからIBM z/Architecture メインフレームコンピュータまで、さまざまなシステムで実行されています。最初の移植はモトローラ68000プラットフォームで行われました。カーネルへの変更は非常に基本的なものであったため、トーバルズはモトローラバージョンをフォークであり「Linuxのようなオペレーティングシステム」と見なしていました。[289]しかし、それがきっかけで、トーバルズはより多くのコンピューティングアーキテクチャへの移植を容易にするためにコードの大幅な再構築を主導するようになりました。単一のソースツリーでi386だけでなく複数のコードを持つ最初のLinuxは、DEC Alpha AXP 64ビットプラットフォームをサポートしました。[290] [291] [289]
LinuxはIBMのSummitのメインオペレーティングシステムとして動作しており、2019年10月現在、世界最速のスーパーコンピュータ500台[アップデート]すべてがLinuxカーネルに基づく何らかのオペレーティングシステムを実行しています。[292]これは、最初のLinuxスーパーコンピュータがリストに追加された1998年から大きな変化です。[293]
LinuxはAppleの iPhone 3GやiPodなどのさまざまな携帯機器にも移植されている。[294]
サポートされているデバイス
2007年、Linuxカーネルで知られているハードウェアとプロトコルの包括的なデータベースを構築するLKDDbプロジェクトが開始されました。[295]データベースはカーネルソースの静的解析によって自動的に構築されます。2014年後半には、さまざまなLinuxディストリビューションのユーザーの協力を得て、テスト済みのすべてのハードウェア構成のデータベースを自動的に収集するLinuxハードウェアプロジェクトが開始されました。[296]
ライブパッチ
Ksplice、kpatch、kGraftなどのライブパッチ技術を使用することで、カーネルに再起動なしの更新を適用することもできます。ライブカーネルパッチの最小限の基盤は、2015年4月12日にリリースされたカーネルバージョン4.0でLinuxカーネルメインラインに統合されました。livepatchと呼ばれ、主にカーネルのftrace機能に基づくこれらの基盤は、ホットパッチを含むカーネルモジュール用のアプリケーションプログラミングインターフェース(API) と、ユーザー空間管理ユーティリティ用のアプリケーションバイナリインターフェース(ABI)を提供することで、kGraft と kpatch の両方によるホットパッチをサポートできる共通コアを形成します。ただし、Linuxカーネル4.0に含まれる共通コアはx86アーキテクチャのみをサポートしており、ホットパッチの適用中に関数レベルの一貫性を保証するメカニズムは提供していません。2015年4月現在、kpatchとkGraftをLinuxカーネルメインラインによって提供される共通ライブパッチコアに移植する作業が進行中です。[297] [298] [299][update]
安全
カーネルのバグは潜在的なセキュリティ問題を引き起こす可能性があります。たとえば、権限昇格を可能にしたり、サービス拒否攻撃ベクトルを作成したりする可能性があります。長年にわたり、システムセキュリティに影響を与える多数のバグが発見され、修正されました。[300]カーネルのセキュリティを向上させるために、新しい機能が頻繁に実装されています。[301] [302]
機能(7)については、プロセスとスレッドのセクションですでに紹介しました。Androidは機能を活用し、systemdは管理者にプロセスの機能を詳細に制御する機能を提供します。[303]
Linuxは、カーネルの攻撃対象領域を減らし、セキュリティを向上させるための豊富なメカニズムを提供しており、これらは総称してLinuxセキュリティモジュール(LSM)と呼ばれています。[304]これらは、Security-Enhanced Linux (SELinux)モジュールで構成されており、そのコードはもともとNSAによって開発され、その後一般に公開されました。[305]およびAppArmor [189]など。SELinuxは現在、GitHubで積極的に開発および保守されています。[188] SELinuxとAppArmorは、強制アクセス制御(MAC)を含むアクセス制御セキュリティポリシーをサポートしていますが、複雑さと範囲は大きく異なります。
もう一つのセキュリティ機能は、パラメータをフィルタリングし、ユーザーランドアプリケーションで利用可能なシステムコールのセットを減らすことで機能するSeccomp BPF(SECure COMPuting with Berkeley Packet Filters)です。[306]
批評家はカーネル開発者がセキュリティ上の欠陥を隠蔽している、あるいは少なくとも公表していないと非難しているが、2008年にトーバルズはこれに対して次のように反応した。[307] [308]
個人的には、セキュリティ バグは「普通のバグ」だと考えています。隠蔽はしませんが、それを追跡して特別なものとして発表することが良い考えだと考える理由はまったくありません...セキュリティ サーカス全体に煩わされることを拒否する理由の 1 つは、それが間違った行動を称賛し、したがって奨励すると思うからです。セキュリティ サーカスは、セキュリティ担当者を「英雄」に仕立て上げます。まるで、普通のバグを修正しない人はそれほど重要ではないかのように。実際、つまらない普通のバグの方がはるかに重要です。なぜなら、それらのバグがはるかに多いからです。私は、ひどいセキュリティ ホールが、不適切なロックによるランダムな大クラッシュよりも「特別」であるとして称賛されたり、気にかけられたりすべきだとは思いません。
Linux ディストリビューションでは通常、Linux カーネルの脆弱性を修正するためのセキュリティ アップデートがリリースされます。多くのディストリビューションでは、特定の Linux カーネル バージョンに対するセキュリティ アップデートを長期間にわたって受け取る 長期サポートリリースが提供されています。
法律上の
ライセンス条件
当初、トーバルズはLinuxを商用利用を禁じるライセンスでリリースした。[309]これはバージョン0.12でGNU一般公衆利用許諾書バージョン2(GPLv2)に変更された。[20]このライセンスでは、Linuxの改変版と非改変版の配布と販売が許可されているが、それらのコピーはすべて同じライセンスでリリースされ、対応するソースコード全体を添付するか、または要求に応じて無料でアクセスできるようにする必要がある。[310]トーバルズはLinuxをGPLv2でライセンスしたことを「これまでで最高のこと」と表現している。[309]
Linuxカーネルは、明示的なシステムコール例外(Linux-syscall-note)付きで、 GNU General Public Licenseバージョン2のみ(GPL-2.0のみ)で明示的にライセンスされており、[6] [9] [10]ライセンス所有者に後のバージョンを選択するオプションは提供されていないが、これは一般的なGPL拡張である。寄贈されたコードはGPL互換ライセンスの下で利用可能でなければならない。[11] [200]
ライセンスをGPLの最新バージョン(バージョン3を含む)に変更することがどれだけ容易か、またこの変更が望ましいのかどうかについては、かなりの議論がありました。[311] Torvalds自身はバージョン2.4.0のリリース時に、自身のコードはバージョン2でのみリリースされることを明示的に示しました。[312]しかし、GPLの規約では、バージョンが指定されていない場合はどのバージョンでも使用できると規定されており、[313] Alan Coxは、他のLinux貢献者でGPLの特定のバージョンを指定している人はほとんどいないと指摘しました。[314]
2006 年 9 月、29 人の主要なカーネル プログラマーを対象にした調査では、28 人が当時の GPLv3 草案よりも GPLv2 を好んでいることが示されました。トーバルズは、「私は公に GPLv3 の大ファンではないと述べてきたため、部外者の多くは私だけが浮いた存在だと思っていたと思います」とコメントしました。[ 315]トーバルズ、グレッグ クロア ハートマン、アンドリュー モートンを含むこの著名なカーネル開発者グループは、GPLv3 に対する反対意見をマスメディアに語りました。[316]彼らはDRM / tivoization、特許、「追加の制限」に関する条項に言及し、 GPLv3 によって「オープン ソース ユニバース」が分断されると警告しました。 [316] [317] Linux カーネルに GPLv3 を採用しないことを決定したトーバルズは、数年後も批判を繰り返しました。[318]
ロード可能なカーネルモジュール
一部のロード可能カーネル モジュール(LKM) が著作権法上の派生作品とみなされるかどうか、またそれによって GPL の条件に該当するかどうかが 議論されています。
ライセンス規則によれば、カーネルインターフェースのパブリックサブセットのみを使用するLKM [225] [226]は派生作品ではないため、Linuxはシステム管理者にツリー外のバイナリオブジェクトをカーネルアドレス空間にロードするメカニズムを提供しています。[11]
dma_bufカーネル機能を正当に利用する、ツリー外のロード可能なモジュールがいくつかあります。 [319] GPL 準拠のコードでは、もちろんこれを使用できます。ただし、別の使用例としては、高速 GPU と Intel 統合 GPU を組み合わせたNvidia Optimusがあります。この場合、Nvidia GPU は、アクティブなときにIntelフレームバッファに書き込みます。ただし、Nvidia はこのインフラストラクチャを使用できません。これは、GPL である LKM でのみ使用できるルールを回避する必要があるためです。[227] Alan Cox は、 LKMLで、Nvidia のエンジニアの 1 人からの、この技術的強制を API から削除するという要求を拒否しました。[320] Torvalds は、LKML で「バイナリのみのカーネル モジュールは、デフォルトで派生的であると主張する」と明確に述べています。[321]
一方、Torvalds 氏は次のようにも述べています。「特にグレーゾーンとなるのは、元々別のオペレーティング システム用に作成されたドライバー (つまり、明らかに Linux の派生作品ではないもの) です。これはグレーゾーンであり、_これは_、一部のモジュールは Linux 用に設計されておらず、特別な Linux の動作に依存していないという理由だけで派生作品ではないと個人的に考える領域です」。[322]特に、 プロプライエタリなグラフィック ドライバーについては盛んに議論されています。
プロプライエタリなモジュールがLinuxにロードされるたびに、カーネルは自身を「汚染されている」とマークし、[323]そのため、汚染されたカーネルからのバグレポートは開発者によって無視されることが多い。
ファームウェアバイナリブロブ
公式カーネル、つまりkernel.orgリポジトリのLinus gitブランチには、GNU GPLv2ライセンスの条件に基づいてリリースされたバイナリブロブが含まれています。[6] [11] Linuxはファイルシステムを検索してバイナリブロブ、独自のファームウェア、ドライバー、またはその他の実行可能モジュールを見つけ、それらをカーネル空間にロードしてリンクすることもできます。[324]
必要な場合(例えば、ブートデバイスへのアクセスや速度向上のため)には、ファームウェアをカーネルに組み込むことができます。これは、ファームウェアをvmlinuxに組み込むことを意味します。ただし、これは技術的または法的な問題により常に実行可能なオプションであるとは限りません(例えば、GPL非互換のファームウェアでこれを行うことは許可されていませんが、それでもかなり一般的です)。[325]
商標
Linuxは、米国、欧州連合、およびその他のいくつかの国でLinus Torvaldsの登録商標です。 [326] [327]商標をめぐる法廷闘争は、Linuxの開発に関与したことのない弁護士のWilliam Della Croceが、Linuxという単語の使用に対してライセンス料を要求し始めた1996年に始まりました。Della Croceが主張する最初の使用よりもずっと前から、この単語が一般的に使用されていたことが証明された後、商標はTorvaldsに与えられました。[328] [329] [330]
制裁遵守
2024年10月、グレッグ・クロア・ハートマンは、ファイル内のロシア人の名前を削除しましたMAINTAINERSが、上記のサブシステムのコードはそのまま残しました。この削除はトルバルズによって支持されました。[331]
参照
- マイクロカーネル – 従来のカーネルよりも少ないサービスを提供するカーネル
- Linux カーネルのバージョン履歴 – Linux カーネルのバージョン履歴
- オペレーティングシステムの比較
- オペレーティングシステムカーネルの比較
- Linux – Unix系オペレーティングシステムのファミリー
- Minix 3 – Unix ライクなオペレーティング システム
- macOS – Apple コンピュータ用のオペレーティング システム
- Microsoft Windows – コンピュータのオペレーティング システム
注記
- ^ 全体として、Linuxソースは明示的なシステムコール例外を伴うGPL-2.0のみのライセンスの条件で提供されています。 [9] [10]それとは別に、個々のファイルはGPL-2.0のみのライセンス(つまり、GNU General Public Licenseバージョン2)と互換性のある別のライセンス、またはGPLバージョン2またはGPLv2互換ライセンスのいずれかを選択できるデュアルライセンスの下で提供することができます。[11]
参考文献
- ^ 「Linux のロゴとマスコット」。Linux Online。2008 年。2010 年 8 月 15 日時点のオリジナルよりアーカイブ。2024年9 月 19 日閲覧。
{{cite web}}:値を確認する|url=(ヘルプ) - ^ Greg Kroah-Hartman (2024年12月14日). 「Linux 6.12.5」 . 2024年12月14日閲覧。
- ^ Linus Torvalds (2024年12月15日). 「Linux 6.13-rc3」 . 2024年12月16日閲覧。
- ^ Bergmann, Arnd (2022年3月3日). 「Kbuild: -std=gnu11 への移行」. git.kernel.org .
- ^ ab Proven, Liam. 「Linux 6.1: Rust がメインラインカーネルに採用」The Register . 2023年5月12日閲覧。
- ^ abcd "COPYING". git.kernel.org . 2021年9月2日時点のオリジナルよりアーカイブ。2021年9月2日閲覧。
- ^ “GPL-2.0-only”. spdx.org . 2021年9月2日閲覧。
- ^ “Linux-syscall-note”. spdx.org . 2021年9月2日閲覧。
- ^ ab "GPL-2.0". git.kernel.org .
- ^ ab "Linux-syscall-note". git.kernel.org .
- ^ abcdef 「Linuxカーネルのライセンスルール — Linuxカーネルのドキュメント」。www.kernel.org。2020年3月7日時点のオリジナルよりアーカイブ。2020年1月6日閲覧。
- ^ abcdefghijklmn Love, Robert (2010). Linuxカーネル開発(第3版). Upper Saddle River, NJ: Addison-Wesley . ISBN 978-0-672-32946-3. OCLC 268788260.
- ^ 「C拡張機能(GNUコンパイラコレクション(GCC)の使用)」gcc.gnu.org。2020年11月20日時点のオリジナルよりアーカイブ。2020年11月13日閲覧。
- ^ ab Richardson, Marjorie (1999 年 11 月 1 日). 「インタビュー: Linus Torvalds」. Linux Journal. 2011 年 5 月 14 日時点のオリジナルよりアーカイブ。2009年8 月 20 日閲覧。
- ^ ab Torvalds, Linus Benedict (1991年8月26日). 「minixで最も見たいものは何ですか?」.ニュースグループ: comp.os.minix. Usenet: 1991Aug25.205708.9541@klaava.Helsinki.FI. 2013年5月9日時点のオリジナルよりアーカイブ。2016年9月14日閲覧。
- ^ ab Welsh, Matt; Dalheimer, Matthias Kalle; Kaufman, Lar (1999). 「1: Linux 入門」. 「Running Linux (第 3 版)」. セバストポル、カリフォルニア州: O'Reilly Media, Inc. p. 5. ISBN 1-56592-976-4. OCLC 50638246.
- ^ “Free minix-like kernel source for 386-AT - Google Groups”. groups.google.com . 1991年10月5日. 2021年3月1日時点のオリジナルよりアーカイブ。2020年3月19日閲覧。
- ^ウィリアムズ、サム ( 2002年 3 月)。「第 9 章: GNU 一般公衆利用許諾書」。フリーとは自由である: リチャード・ストールマンのフリーソフトウェアへの闘い。オライリー。ISBN 0-596-00287-4. 2010年11月12日閲覧。
- ^ abc Christine Bresnahan & Richard Blum (2016). LPIC-2: Linux Professional Institute Certification 学習ガイド: 試験 201 および試験 202. John Wiley & Sons. p. 107. ISBN 9781119150794。
- ^ ab Torvalds, Linus . 「Release Notes for Linux v0.12」. Linux カーネル アーカイブ。2007 年 8 月 19 日時点のオリジナルよりアーカイブ。2007 年2 月 21 日閲覧。
- ^ Fred Hantelmann (2016). LINUXスタートアップガイド:自己完結型の入門書。Springer Science & Business Media。p. 1。ISBN 9783642607493。
- ^ abc Fred Hantelmann (2016). LINUXスタートアップガイド:自己完結型の入門書。Springer Science & Business Media。p. 16。ISBN 9783642607493。
- ^ Summers, David W. (1992 年 1 月 19 日). 「パーティションに関するトラブル」.ニュースグループ: alt.os.linux. Usenet: 1992Jan19.085628.18752@cseg01.uark.edu. 2013 年 6 月 2 日時点のオリジナルよりアーカイブ。 2007 年1 月 7 日閲覧。
- ^ Clegg, Alan B. (1992年3月31日). 「It's here!」.ニュースグループ: comp.os.linux. Usenet: 1992Mar31.131811.19832@rock.concert.net. 2013年6月2日時点のオリジナルよりアーカイブ。 2007年1月7日閲覧。
- ^ 「付録 A: Tanenbaum-Torvalds 論争」。Open Sources : オープンソース革命からの声。O'Reilly。1999年。ISBN 1-56592-582-3. 2006年11月22日閲覧。
- ^ Tanenbaum, Andy (1992 年 1 月 29 日). 「LINUX は時代遅れ」.ニュースグループ: comp.os.minix. Usenet: 12595@star.cs.vu.nl. 2011 年 10 月 17 日時点のオリジナルよりアーカイブ。2006 年5 月 10 日閲覧。
- ^ Tanenbaum, Andy (2006年5月12日). 「Tanenbaum-Torvalds Debate: Part II」. VU University Amsterdam . 2015年8月5日時点のオリジナルよりアーカイブ。 2007年1月6日閲覧。
- ^ Hayward, David (2012年11月22日). 「Linuxの歴史:時がペンギンをどう形作ったか」TechRadar . 2020年3月19日時点のオリジナルよりアーカイブ。 2020年3月19日閲覧。
- ^ Hayward, David (2012年11月22日). 「Linuxの歴史:時の流れがペンギンをどう形作ったか」TechRadar . 2020年3月19日時点のオリジナルよりアーカイブ。 2020年3月26日閲覧。
- ^ abc 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 (1996年6月9日). 「Linux 2.0は本当にリリースされた。」LKML (メーリングリスト). 2015年4月2日時点のオリジナルよりアーカイブ。 2015年3月8日閲覧。
- ^ ab 「カーネルビルドシステム — Linuxカーネルのドキュメント」Kernel.org。2020年7月22日時点のオリジナルよりアーカイブ。2020年7月17日閲覧。
- ^ ab 「Kconfig make config — Linux カーネルのドキュメント」Kernel.org . 2020年7月17日時点のオリジナルよりアーカイブ。2020年9月13日閲覧。
- ^ Torvalds, Linus (1999年1月20日). "2.2.0-final". LKML (メーリングリスト). 2015年4月2日時点のオリジナルよりアーカイブ。 2015年3月8日閲覧。
- ^ ab 「Linux 2.2の素晴らしい世界」。1999年1月26日。2014年11月6日時点のオリジナルよりアーカイブ。2008年10月27日閲覧。
- ^ “Linux/390 Observations and Notes”. linuxvm.org . 2019年2月26日時点のオリジナルよりアーカイブ。2020年3月29日閲覧。
- ^ Torvalds, Linus (2001年1月4日). 「And oh, btw.」LKML (メーリングリスト). 2016年1月26日時点のオリジナルよりアーカイブ。 2015年3月8日閲覧。
- ^ 「Linux 2.4 の素晴らしい世界」。2005 年 3 月 17 日時点のオリジナルよりアーカイブ。2008 年10 月 27 日閲覧。
- ^ Torvalds, Linus (2003年12月17日). 「Linux 2.6.0」. LKML (メーリングリスト). 2015年4月2日時点のオリジナルよりアーカイブ。 2015年2月28日閲覧。
- ^ 「proc(5) - Linuxマニュアルページ」(/proc/sys/kernel/pid_maxを参照)。2014年2月7日時点のオリジナルよりアーカイブ。2014年2月19日閲覧。
- ^ “btrfs Wiki”. btrfs.wiki.kernel.org . 2012年4月25日時点のオリジナルよりアーカイブ。2020年7月17日閲覧。
- ^ Fred Hantelmann (2016). LINUXスタートアップガイド:自己完結型の入門書。Springer Science & Business Media。pp . 1–2。ISBN 9783642607493。
- ^ Linuxカーネルメーリングリスト(2005年6月17日)。「Linux 2.6.12」。git-commits-head(メーリングリスト)。2016年1月26日時点のオリジナルよりアーカイブ。2008年1月23日閲覧。
- ^ Kroah-Hartman, Greg (2006 年 8 月 3 日). 「Adrian Bunk が 2.6.16-stable ブランチを引き継ぎました」. LKML (メーリング リスト). 2016 年 1 月 26 日時点のオリジナルよりアーカイブ。2015 年2 月 21 日閲覧。
- ^ Rothwell, Stephen (2008年2月12日). 「Announce: Linux-next (Or Andrew's dream :-))」. LKML (メーリングリスト). 2010年11月24日時点のオリジナルよりアーカイブ。 2010年10月30日閲覧。
- ^ Corbet, Jonathan (2010 年 10 月 21 日). 「linux-next とパッチ管理プロセス」. LWN.net . Eklektix, Inc. 2010 年 6 月 21 日時点のオリジナルよりアーカイブ。2010年10 月 30 日閲覧。
- ^ 「Linuxカーネルアーカイブ」Kernel.org。1998年1月30日時点のオリジナルよりアーカイブ。 2014年1月22日閲覧。
- ^ “2.6.x バージョン番号を報告するパーソナリティを追加 [LWN.net]”. lwn.net . 2020年7月16日時点のオリジナルよりアーカイブ。2020年7月15日閲覧。
- ^ ab Torvalds, Linus (2011年7月21日). 「Linux 3.0リリース」. Linuxカーネルメーリングリスト. 2019年10月18日時点のオリジナルよりアーカイブ。 2013年5月16日閲覧。
- ^ Torvalds, Linus (2011年5月30日). 「Linux 3.0-rc1」. LKML (メーリングリスト). 2011年5月31日時点のオリジナルよりアーカイブ。 2013年7月1日閲覧。
- ^ Torvalds, Linus (2001年4月10日). 「Re: [PATCH] i386 rw_semaphores fix」. yarchive.net . 2024年5月26日閲覧。
- ^ Vaughan-Nichols, Steven J. (2012年12月13日). 「さようなら386: Linux、次期メジャーリリースでi386チップのサポートを廃止」ZDNet . CBS Interactive . 2015年2月17日時点のオリジナルよりアーカイブ。 2013年2月6日閲覧。
- ^ Fingas, Jon (2012年12月15日). 「Linux、3.8カーネルでi386サポートを廃止、Doomリグのアップグレードが必要に」Engadget . AOL . 2015年4月2日時点のオリジナルよりアーカイブ。 2015年3月22日閲覧。
- ^ Vaughan-Nichols, Steven J. (2012 年 12 月 11 日). 「Linux 3.7 が到着、ARM 開発者は歓喜」ZDNet . CBS Interactive . 2014 年 11 月 5 日時点のオリジナルよりアーカイブ。2013 年2 月 6 日閲覧。
- ^ Torvalds, Linus (2015年4月12日). 「Linux 4.0 リリース」. LKML (メーリングリスト). 2015年4月13日時点のオリジナルよりアーカイブ。 2015年4月12日閲覧。
- ^ Torvalds, Linus (2013年9月2日). 「Linux 3.11」. LKML (メーリングリスト). 2014年2月26日時点のオリジナルよりアーカイブ。2013年9月3日閲覧。
- ^ 「Linux 3.11」. kernelnewbies.org. 2013年9月2日. 2014年1月21日閲覧。
- ^ 「Linux FoundationがLinux開発レポートを発表」。Linux Foundation。2015年2月18日。2016年7月19日時点のオリジナルよりアーカイブ。2015年2月20日閲覧。
- ^ Michael Larabel (2014年6月23日). 「Linuxカーネルのコード行数は1950万行に達し、増加を続けている」Phoronix。2020年11月23日時点のオリジナルよりアーカイブ。 2015年6月23日閲覧。
- ^ ab Torvalds, Linus (2019年3月3日). “Linus Torvalds: Linux 5.0”. LKML . 2024年8月25日時点のオリジナルよりアーカイブ。2024年8月25日閲覧。
- ^ Prakash, Abhishek (2023年1月11日). 「Linuxカーネル5.0がリリースされました!新機能をチェックしてください」。It 's FOSS 。 2024年8月25日閲覧。
- ^ Larabel, Micheal (2019年1月6日). 「Linux 5.0カーネルの多くの新機能と改善点」www.phoronix.com . 2024年8月25日閲覧。
- ^ Corbet, Jonathan (2020年8月3日). 「5.8カーネルサイクルからのいくつかの統計」. LWN - Linux Weekly News . 2020年9月4日時点のオリジナルよりアーカイブ。 2020年8月11日閲覧。
- ^ 「Stack Overflow 開発者アンケート 2019 - 最も人気のあるテクノロジー」。Stack Overflow。2020年10月8日時点のオリジナルよりアーカイブ。2020年3月17日閲覧。
- ^ 「Stack Overflow 開発者アンケート 2019 - 開発環境とツール」。Stack Overflow。2020年3月7日時点のオリジナルよりアーカイブ。2020年3月17日閲覧。
- ^ 「ウェブサイト向けオペレーティングシステムの使用統計と市場シェア、2020年3月」。w3techs.com 。 2020年3月17日閲覧。
- ^ 「ウェブサイトにおける Unix の使用統計と市場シェア、2020 年 3 月」。w3techs.com。2020年3 月 17 日閲覧。
- ^ 「TOP500 スーパーコンピュータサイト: オペレーティングシステムファミリー / Linux」。Top500.org。2012年11月19日時点のオリジナルよりアーカイブ。2019年10月5日閲覧。
- ^ 「ガートナー、2014年にタブレットの販売台数が全デバイスの10パーセント未満になると予測」(プレスリリース)。英国エガム:ガートナー。2014年10月15日。2014年10月17日時点のオリジナルよりアーカイブ。 2014年10月19日閲覧。
- ^ Lunden, Ingrid (2014 年 10 月 15 日)。「Android スマートフォンの急成長に伴い 、2014 年のタブレット売上は急落: Gartner」。TechCrunch。AOL。2014年10 月 23 日時点のオリジナルよりアーカイブ。2014 年10 月 23 日閲覧。
- ^ 「IDCによると、世界のPC出荷台数は消費者需要の軽度の改善により予想を上回り、Appleは5位に浮上」(プレスリリース)。マサチューセッツ州フレーミングハム:IDC。2014年10月8日。2014年10月11日時点のオリジナルよりアーカイブ。2014年10月19日閲覧。
- ^ Wheeler, David A. 「Linux Kernel 2.6: It's Worth More!」 2011年8月20日時点のオリジナルよりアーカイブ。2007年1月18日閲覧。
- ^ 「FLOSS が EU ICT 部門のイノベーションと競争力に及ぼす経済的影響」(PDF) (50 ページの表 3)。2010年 2 月 15 日時点のオリジナルよりアーカイブ(PDF) 。2011 年1 月 8 日に閲覧。
- ^ 「Linux ディストリビューションの総開発コストの見積もり」(PDF) (6 ページの表)。2010 年 7 月 11 日時点のオリジナル(PDF)からのアーカイブ。
- ^ 「The Billion Dollar Kernel」 Linux.slashdot.org. 2010年2月24日。2011年5月15日時点のオリジナルよりアーカイブ。2010年11月12日閲覧。
- ^ Wheeler, David. 「Linuxカーネル:その価値はもっとある!」。2021年2月24日時点のオリジナルよりアーカイブ。2012年9月17日閲覧。
- ^ 「Linuxカーネルアーカイブ」www.kernel.org . 2023年2月28日閲覧。
- ^ ab 「2017 State of Linux Kernel Development」。The Linux Foundation。2017年10月25日。2020年5月27日時点のオリジナルよりアーカイブ。2020年5月27日閲覧。
- ^ 「私が辞めた理由: カーネル開発者 Con Kolivas」APC Magazine . ACP Magazines. 2007 年 7 月 24 日。2011 年 7 月 7 日時点のオリジナルよりアーカイブ。2011年8 月 15 日閲覧。
- ^ Corbet, Jonathan (2007年7月25日). 「Re: -mm merge planning for 2.6.23」. LWN.net. 2018年2月11日時点のオリジナルよりアーカイブ。2018年2月10日閲覧。
- ^ Cox, Alan (2009年7月28日). “Re: [PATCH] kdesu broken”. 2018年2月11日時点のオリジナルよりアーカイブ。2018年2月10日閲覧。
- ^ Rodrigues, Goldwyn (2011年1月22日). 「2つのSCSIターゲットの物語」。2018年2月15日時点のオリジナルよりアーカイブ。2018年2月14日閲覧。
- ^ Steinmetz, Andreas (2013年1月17日). 「LIO - 壊れたiSCSIターゲット実装」。2018年2月15日時点のオリジナルよりアーカイブ。2018年2月14日閲覧。
- ^ Paul, Ryan (2012年6月19日). 「Linus Torvalds says "f–k you" to NVIDIA」。2018年2月15日時点のオリジナルよりアーカイブ。2018年2月14日閲覧。
- ^ John Gold (2014年4月3日). “Linus Torvalds suspends key Linux developer: Kernel panic as Systemd dev pokes the bear”. 2019年3月24日時点のオリジナルよりアーカイブ。 2019年3月24日閲覧。
- ^ Poettering, Lennart (2014年10月6日). 「Linuxカーネルコミュニティの病について」. Google+ . 2018年5月27日時点のオリジナルよりアーカイブ。 2018年2月10日閲覧。
- ^ Brodkin, Jon (2015年3月6日). 「VMwareは何年もの間Linuxのオープンソースライセンスに違反していたと主張」Ars Technica。 2018年2月15日時点のオリジナルよりアーカイブ。 2018年2月14日閲覧。
- ^ マッカーシー、キエレン(2016年8月26日)。「世界中の人々を怒らせたリーナス・トーバルズ、自身の弁護士を『厄介な化膿性疾患』と呼ぶ」ザ・レジスター。2018年2月15日時点のオリジナルよりアーカイブ。 2018年2月14日閲覧。
- ^ Kroah-Hartman, Greg. 「[PATCH 000/190] umn.edu のすべてのコミットを元に戻す」Linux カーネル メーリング リスト アーカイブ. 2022 年1 月 13 日閲覧。
- ^ Chin, Monica (2021年4月30日). 「いかにして大学はLinuxカーネルから追放されたのか」 The Verge . 2022年1月13日閲覧。
- ^ Corbet, Jonathan (2007年9月10日). 「KS2007: 開発者関係と開発プロセス」. LWN.net . 2018年2月12日時点のオリジナルよりアーカイブ。2018年2月11日閲覧。
- ^ Brodkin, Jon (2013年7月16日). 「Linus TorvaldsはLinuxカーネル開発者を辱める権利を擁護する」ARS Technica。 2018年2月17日時点のオリジナルよりアーカイブ。 2018年2月11日閲覧。
- ^ Corbet, Jonathan (2015年3月9日). 「カーネルの競合コード」. LWN.net . 2018年2月12日時点のオリジナルよりアーカイブ。 2018年2月11日閲覧。
- ^ Corbet, Jonathan (2018年9月18日). 「Code, conflict, and Conduct」. LWN.net . 2018年9月19日時点のオリジナルよりアーカイブ。2018年9月19日閲覧。
- ^ Cohen, Noam (2018年9月19日). 「何年もの悪質なメールのあと、Linuxの生みの親が退任」。The New Yorker。2020年2月20日時点のオリジナルよりアーカイブ。 2018年9月24日閲覧。
- ^ Larabel, Michael. 「カーネルコードコメントで不適切な表現を削除: Linux が「Hugs」を獲得」。Phoronix 。 2019年4月21日時点のオリジナルよりアーカイブ。 2019年6月15日閲覧。
- ^ 「Code of Conflict」 。 2018年2月4日閲覧。[永久リンク切れ ]
- ^ シャーウッド、サイモン(2015年10月6日)。「リナス・トーバルズに暴言をやめるよう求めたLinuxカーネル開発者が暴言が原因で辞職」The Register。2020年3月29日時点のオリジナルよりアーカイブ。 2018年2月4日閲覧。
- ^ Edge, Jake (2018年1月31日). 「領主は多すぎるが、執事は足りない」LWN.net . 2020年11月9日時点のオリジナルよりアーカイブ。 2018年2月4日閲覧。
- ^ Corbet, Jonathan (2017年11月6日). 「カーネルメンテナーを非難せよ」LWN.net . 2021年1月26日時点のオリジナルよりアーカイブ。2018年2月4日閲覧。
- ^ 「Linux Evolution」(PDF) 。2008年3月26日。 2013年12月14日時点のオリジナルよりアーカイブ(PDF) 。 2013年11月6日閲覧。
- ^ 「永続的な開発: Linux カーネルのライフサイクル モデル」(PDF)。2011 年 10 月 25 日。2013年 10 月 17 日時点のオリジナルよりアーカイブ(PDF) 。2013年11 月 6 日閲覧。
- ^ Kroah-Hartman, Greg (2008年2月12日). 「Re: Announce: Linux-next (Or Andrew's dream :-))」. Linux Kernel Mailing List (メーリングリスト). 2017年2月2日時点のオリジナルよりアーカイブ。 2017年1月30日閲覧。
- ^ Robert Love (2010). Linux カーネル開発: Linux カーネル開発. Pearson Education. p. 11. ISBN 9780768696790。
- ^ Robert Love (2010). Linux カーネル開発: Linux カーネル開発. Pearson Education. p. 12. ISBN 9780768696790。
- ^ 「開発プロセスの仕組み」。2017年12月9日時点のオリジナルよりアーカイブ。 2018年2月4日閲覧。
- ^ Robert Love (2010). Linux カーネル開発: Linux カーネル開発. Pearson Education. p. 13. ISBN 9780768696790。
- ^ 「貢献者契約行動規範」。Linuxカーネルドキュメント。 2021年10月6日閲覧。
- ^ 「Linux カーネル貢献者契約行動規範の解釈」。Linuxカーネル ドキュメント。2021年10 月 6 日閲覧。
- ^ Williams, Dan. 「[PATCH] CodingStyle: 包括的な用語」Linux カーネル メーリング リスト。
- ^ Tim Anderson. 「Linuxカーネルの最小コンパイラがGCC 5.1に引き上げられ、C11の使用が可能に」The Register . 2023年5月12日閲覧。
- ^ Larabel, Michael. 「Linux 5.18 で C89 から C11/GNU11 への切り替えが行われました」www.phoronix.com 。2023年5 月 12 日閲覧。
- ^ Sharwood, Simon (2022年12月11日). 「Linus TorvaldsがLinuxカーネル6.1を公開」. The Register . 2023年5月12日閲覧。
- ^ Corbet, Jonathan. 「6.2カーネルのRust」LWN.net 。 2023年5月12日閲覧。
- ^ Larabel, Michael. 「Linux 6.3 向けにさらに多くの Rust コードが準備完了 - Rust ドライバーのアップストリーム化が近づいています」。Phoronix。2023年5月 12 日閲覧。
- ^ 「Linuxカーネル開発のハウツー — Linuxカーネルのドキュメント」Kernel.org。2020年3月7日時点のオリジナルよりアーカイブ。2020年1月4日閲覧。
- ^ 「Linuxカーネルコーディングスタイル — Linuxカーネルドキュメント」Kernel.org。2020年1月5日時点のオリジナルよりアーカイブ。2020年1月4日閲覧。
- ^ ab 「開発プロセスの仕組み — Linux カーネルのドキュメント」Kernel.org。 2017 年 12 月 9 日時点のオリジナルよりアーカイブ。2020 年3 月 26 日閲覧。
- ^ Kubbilun, Ingo A. (2004 年 6 月 2 日). 「Linux kernel patch for Intel Compiler」(ドイツ語). Pyrillion.org. 2011 年 7 月 22 日時点のオリジナルよりアーカイブ。2010 年11 月 12 日閲覧。
- ^ timothy (2009年2月26日). 「高性能Linuxカーネルプロジェクト — LinuxDNA」. Slashdot Linux . Dice Holdings . 2019年10月18日時点のオリジナルよりアーカイブ。 2010年10月30日閲覧。
- ^ Ryan, Justin (2009年2月25日). 「LinuxDNAがIntel C/C++コンパイラでLinuxをスーパーチャージ」. Linux Journal . Belltown Media, Inc. 2020年11月9日時点のオリジナルよりアーカイブ。 2010年10月30日閲覧。
- ^ Larabel, Michael (2023年3月5日). 「Linux 6.3はIntel ICCコンパイラのサポートを終了」. Phoronix . 2023年3月6日閲覧。
- ^ Lelbach, Bryce (2010年10月25日). 「Clang が Linux カーネルをビルド (SMP、ネットワーク、X、セルフホストで RL5 を起動)」cfe-dev (メーリングリスト). 2015年9月7日時点のオリジナルよりアーカイブ。
- ^ Larabel, Michael (2014年4月12日). 「Linux 3.15はLLVMのClangでほぼコンパイル可能」Phoronix . 2020年8月13日時点のオリジナルよりアーカイブ。 2014年6月10日閲覧。
- ^ Larabel, Michael . 「Patch By Patch, LLVM Clang Gets Better At Building The Linux Kernel」. Phoronix . 2020年8月13日時点のオリジナルよりアーカイブ。 2014年11月20日閲覧。
- ^ Edge, Jake (2013年5月7日). 「LFCS: The LLVMLinux project」. LWN.net . 2020年8月10日時点のオリジナルよりアーカイブ。 2015年3月3日閲覧。
- ^ Möller, Jan-Simon (2014年2月2日). 「LLVMLinux: ドラゴンの翼を持つLinuxカーネル」(PDF) . LLVMプロジェクト. 2020年8月3日時点のオリジナルよりアーカイブ(PDF) . 2015年3月3日閲覧。
- ^ Desaulniers, Nick; Hackmann, Greg; Hines, Stephen (2017年10月18日). 「2017 LLVM Developers' Meeting: Compiling Android userspace and Linux kernel with LLVM」. YouTube . 2020年12月31日時点のオリジナルよりアーカイブ。 2020年12月7日閲覧。
- ^ Hackmann, Greg (2017年2月2日). 「marlin-nougat-mr1-clang Patch Series」。2020年12月10日時点のオリジナルよりアーカイブ。2020年12月6日閲覧。
- ^ Kaehlcke, Matthias (2018年10月22日). 「cros-kernel2: カーネルビルドのデフォルトコンパイラーとしてclangを使用する」。2020年12月10日時点のオリジナルよりアーカイブ。2020年12月6日閲覧。
- ^ Larabel, Michael (2019年2月4日). 「LLVM Clangを使用したLinuxカーネルのコンパイルがGoogleのおかげで再び注目を集めている」Phoronix。2020年11月25日時点のオリジナルよりアーカイブ。 2020年12月6日閲覧。
- ^ Desaulniers, Nick (2019年12月10日). 「vts: kernel: enforce vts_kernel_toolchain for all TARGET_ARCH for R」。2020年12月10日時点のオリジナルよりアーカイブ。2020年12月6日閲覧。
- ^ Desaulniers, Nick (2020年11月19日). 「Re: 関数ポインターシグネチャ違反」. LKML . 2020年12月6日閲覧。
- ^ Bradford, John (2003年3月8日). 「Re: what's an OOPS」. LKML (メーリングリスト). 2014年10月31日時点のオリジナルよりアーカイブ。 2010年10月30日閲覧。
- ^ 「syslog(2) - Linuxマニュアルページ」。man7.org 。 2020年10月13日時点のオリジナルよりアーカイブ。 2020年8月15日閲覧。
- ^ “kmsg: printk レコードを /dev/kmsg インターフェースにエクスポートする [LWN.net]”. lwn.net . 2015年10月2日時点のオリジナルよりアーカイブ。2020年8月16日閲覧。
- ^ Ftraceユーティリティでコンピューターの動作を確認する、2019年1月24日、2021年12月15日時点のオリジナルよりアーカイブ、 2021年5月9日閲覧
- ^ “Ftrace を使用したカーネルのデバッグ - パート 1 [LWN.net]”. lwn.net . 2020 年 11 月 9 日時点のオリジナルよりアーカイブ。2020 年9 月 15 日閲覧。
- ^ “Ftrace を使用したカーネルのデバッグ - パート 2 [LWN.net]”. lwn.net . 2020 年 3 月 31 日時点のオリジナルよりアーカイブ。 2020 年9 月 15 日閲覧。
- ^ 「ftrace - Function Tracer — Linux Kernel ドキュメント」Kernel.org。2020年9月19日時点のオリジナルよりアーカイブ。2020年9月15日閲覧。
- ^ 「ブートタイムトレース — Linuxカーネルドキュメント」Kernel.org。2020年10月31日時点のオリジナルよりアーカイブ。2020年9月19日閲覧。
- ^ 「カーネルプローブ (Kprobes) — Linux カーネルのドキュメント」Kernel.org。2020 年 10 月 11 日時点のオリジナルよりアーカイブ。2020 年10 月 6 日閲覧。
- ^ 「Uprobe-tracer: Uprobe ベースのイベント トレーシング — Linux カーネルのドキュメント」Kernel.org。2020年 12 月 4 日時点のオリジナルよりアーカイブ。2020年10 月 6 日閲覧。
- ^ “kgdb、kdb、およびカーネルデバッガー内部の使用”. mirrors.edge.kernel.org . 2021年1月26日時点のオリジナルよりアーカイブ。2020年11月3日閲覧。
- ^ ジーン・サリー (2010). Pro Linux Embedded Systems . Apress. p. 252. ISBN 9781430272267。
- ^ Billimoria, Kaiwan N. (2021). Linuxカーネルプログラミング カーネル内部、カーネルモジュールの作成、カーネル同期の包括的なガイド。バーミンガム:Packt Publishing、Limited。p. 55。ISBN 978-1-78995-592-7. OCLC 1240585605.
- ^ Vaduva, Alexandru; Gonzalez, Alex; Simmonds, Chris (2016). Linux: 組み込み開発: Linux のパワーを活用して魅力的で強力な組み込み Linux プロジェクトを開発する: 3 つのモジュールからなるコース。バーミンガム、イギリス: Packt Publishing。p . 663。ISBN 978-1-78712-445-5. OCLC 960471438.
- ^ Karim Yaghmour (2008)。『組み込み Linux システムの構築 (第 2 版)』。セバストポル [カリフォルニア州]: O'Reilly Media。p. 387。ISBN 978-0-596-52968-0. OCLC 273049576.
- ^ Yaghmour, Karim (2011). Embedded Android. セバストポル、カリフォルニア州: O'Reilly Media. p. 44. ISBN 978-1-4493-2798-9. OCLC 812180000.
- ^ “SoC (System on a Chip)”。OpenWrt Wiki。2014年11月6日。2022年8月23日時点のオリジナルよりアーカイブ。 2021年3月15日閲覧。
- ^ 「CVE番号についてどうするか [LWN.net]」lwn.net . 2021年3月15日閲覧。
- ^ Amadeo, Ron (2019年11月20日). 「Google、AndroidでのメインラインLinuxカーネルのサポート計画を説明」Ars Technica . 2021年3月31日閲覧。
- ^ Bruchon、Jody (2021年4月24日)、jbruchon/elks 、 2021年4月27日取得
- ^ 「preempt-rt の状態」。linuxplumbersconf.org。2016年 10 月 15 日時点のオリジナルよりアーカイブ。2016 年6 月 14 日閲覧。
- ^ Meyer, David (2010年2月3日). 「Linux開発者がAndroidカーネルコード削除を説明」ZDNet . CBS Interactive . 2016年10月15日時点のオリジナルよりアーカイブ。2010年2月3日閲覧。
- ^ 「第3章: maemoプラットフォームの概要」。maemoテクノロジー概要。Nokia 。2008年。2008年6月16日時点のオリジナルよりアーカイブ。2010年4月9日閲覧。
- ^ Kroah-Hartman, Greg (2010年2月2日). 「AndroidとLinuxカーネルコミュニティ」。2019年4月27日時点のオリジナルよりアーカイブ。2010年2月3日閲覧。
- ^ ロジャー・イェー (2017). Android システム プログラミング。パックト出版。 p. 14.ISBN 9781787120389。
- ^ Torvalds, Linus (2001年9月19日). 「Linuxの起源—Linus Torvalds」. YouTube . 2021年12月15日時点のオリジナルよりアーカイブ。2020年12月6日閲覧。
- ^ 「Linux MAINTAINERS ファイル」。2013年1月12日時点のオリジナルよりアーカイブ。
- ^ アレクサンドル・ヴァドゥヴァ、アレックス・ゴンザレス、クリス・シモンズ (2016)。Linux: 組み込み開発。パックト出版。 p. 663.ISBN 9781787124455。
- ^ 「Linux for little systems [LWN.net]」. lwn.net . 2024年11月22日閲覧。
- ^ 「カーネルのtinification [LWN.net]」。lwn.net 。 2024年11月22日閲覧。
- ^ Brown, Eric (2017年4月13日). 「IoT向けLinuxカーネルとファイルシステムの縮小」. Linux.com . 2024年11月22日閲覧。
- ^ 雫石 拓也、松原 勝也 (2020 年 3 月 30 日)。「リソース消費を最小化する Linux カーネルの効率的な Tin 化」。第35回 ACM 応用コンピューティングシンポジウムの議事録。pp. 1228–1237。doi :10.1145/3341105.3373913。ISBN 978-1-4503-6866-7。
- ^ “README”. git.kernel.org. 2012年7月24日時点のオリジナルよりアーカイブ。2021年3月24日閲覧。
- ^ “KernelBuild - Linux Kernel Newbies”. kernelnewbies.org . 2020年10月19日時点のオリジナルよりアーカイブ。2020年9月13日閲覧。
- ^ 「Sysctl インターフェース」Linux.it . 2020年2月17日時点のオリジナルよりアーカイブ。 2020年9月13日閲覧。
- ^ “sysctl(8) - Linuxマニュアルページ”. man7.org . 2020年9月30日時点のオリジナルよりアーカイブ。 2020年9月13日閲覧。
- ^ "procfs(5) - Linuxマニュアルページ". man7.org . 2020年9月24日時点のオリジナルよりアーカイブ。2020年9月13日閲覧。
- ^ “sched(7) - Linuxマニュアルページ”. man7.org . 2020年7月17日時点のオリジナルよりアーカイブ。2020年7月27日閲覧。
- ^ 「FAQ: Preemption」. kernelnewbies.org . 2009年8月22日. 2020年8月7日時点のオリジナルよりアーカイブ。2015年5月7日閲覧。
- ^ Jonathan Corbet (2003年2月24日). 「ドライバーの移植: プリエンプティブカーネル」. LWN.net . 2020年8月10日時点のオリジナルよりアーカイブ。2015年5月7日閲覧。
- ^ 「EEVDF スケジューラが Linux 6.6 に統合され、Intel ハイブリッド クラスター スケジューリングが再導入されました」。Phoronix。
- ^ ab Molnár, Ingo (2007年4月13日). 「[パッチ] モジュラースケジューラコアと完全に公平なスケジューラ [CFS]」. LKML (メーリングリスト). 2020年11月3日時点のオリジナルよりアーカイブ。 2020年3月30日閲覧。
- ^ 「Completely Fair Scheduler | Linux Journal」。Linuxjournal.com 。 2020年8月3日時点のオリジナルよりアーカイブ。2020年3月30日閲覧。
- ^ “ioctl(2) - Linuxマニュアルページ”. man7.org . 2020年7月20日時点のオリジナルよりアーカイブ。2020年8月11日閲覧。
- ^ 「aio(7) - Linuxマニュアルページ」。man7.org 。 2020年4月12日時点のオリジナルよりアーカイブ。 2020年8月11日閲覧。
- ^ “io_setup(2) - Linuxマニュアルページ”. man7.org . 2020年8月20日時点のオリジナルよりアーカイブ。2020年8月11日閲覧。
- ^ “KVM”. Linux-kvm.org . 2020年3月28日時点のオリジナルよりアーカイブ。2020年3月29日閲覧。
- ^ 「TechComparison - Linux Virtualization Wiki」。Virt.kernelnewbies.org 。 2020年8月3日時点のオリジナルよりアーカイブ。2020年3月29日閲覧。
- ^ “Virtualization_support_through_KVM in Linux_2_6_20 - Linux Kernel Newbies”. Kernelnewbies.org . 2019年11月29日時点のオリジナルよりアーカイブ。2020年3月29日閲覧。
- ^ Coekaerts, Wim. 「Linux メインラインには、Dom0 および DomU サポート用のすべての Xen コード ビットが含まれています」。blogs.oracle.com。2020年 8 月 3 日時点のオリジナルよりアーカイブ。2020 年3 月 29 日閲覧。
- ^ “Xen celebrates full Dom0 and DomU support in Linux 3.0 – blog.xen.org”. 2011年6月7日. 2011年6月7日時点のオリジナルよりアーカイブ。 2020年3月29日閲覧。
- ^ Wilk, Konrad Rzeszutek (2014年1月31日). 「Linux 3.14とPVH」. Xenプロジェクト. 2020年3月29日時点のオリジナルよりアーカイブ。2020年3月29日閲覧。
- ^ 「Xen 仮想化入門 | 仮想化ガイド | openSUSE Leap 15.2」。doc.opensuse.org。2020年9月28日時点のオリジナルよりアーカイブ。2020年9月29日閲覧。
- ^ 「仮想化技術 | 仮想化ガイド | openSUSE Leap 15.3」。doc.opensuse.org 。 2021年9月30日閲覧。
- ^ ab "SELinux Project". GitHub . 2019年12月12日時点のオリジナルよりアーカイブ。2020年1月10日閲覧。
- ^ ab 「AppArmor — Linux カーネルのドキュメント」Kernel.org。 2020年5月8日時点のオリジナルよりアーカイブ。2020年1月10日閲覧。
- ^ Jake Edge (2008年11月25日). 「ユーザー空間のキャラクターデバイス」. LWN.net . 2021年1月26日時点のオリジナルよりアーカイブ。2015年5月7日閲覧。
- ^ Jonathan Corbet (2007年5月2日). 「UIO: ユーザー空間ドライバー」. LWN.net . 2020年11月11日時点のオリジナルよりアーカイブ。2015年5月7日閲覧。
- ^ abcd "stable-api-nonsense - Linuxカーネルソースツリー". git.kernel.org . 2021年3月5日時点のオリジナルよりアーカイブ。2020年4月18日閲覧。
- ^ Gorman, Mel (2004 年 2 月 15 日). Linux 仮想メモリ マネージャの理解(PDF) . Prentice Hall. p. 26. ISBN 0-13-145348-3. 2019年5月3日時点のオリジナルよりアーカイブ(PDF) . 2020年1月27日閲覧。
- ^ Greg Ungerer. 「uClinux mainline Announcement」。2007 年 10 月 31 日時点のオリジナルよりアーカイブ。2008 年1 月 15 日閲覧。
- ^ ab Nguyen, Binh (2004年7月30日). 「Linux ファイルシステム階層: 第1章 Linux ファイルシステム階層」. Linux ドキュメンテーション プロジェクト. 2020年12月2日時点のオリジナルよりアーカイブ。 2012年11月28日閲覧。
- ^ 「管理者ガイド README」。Kernel.org git リポジトリ。
- ^ 「Linuxカーネルリリース5.x — Linuxカーネルドキュメント」Kernel.org。2020年3月7日時点のオリジナルよりアーカイブ。2020年1月4日閲覧。
- ^ “README\ABI\Documentation - kernel/git/torvalds/linux.git - Linuxカーネルソースツリー”. git.kernel.org . 2020年10月1日時点のオリジナルよりアーカイブ。2020年4月18日閲覧。
- ^ “syscalls\stable\ABI\Documentation - kernel/git/torvalds/linux.git - Linuxカーネルソースツリー”. git.kernel.org . 2020年10月2日時点のオリジナルよりアーカイブ。2020年4月18日閲覧。
- ^ ab "1.Intro.rst - Documentation/process/1.Intro.rst - Linux ソースコード (v5.8) - Bootlin". elixir.bootlin.com . 2020 年8 月 8 日閲覧。
- ^ ab "syscalls". man7 . 2020年1月15日時点のオリジナルよりアーカイブ。2020年1月28日閲覧。
- ^ “intro(2) - Linuxマニュアルページ”. man7.org . 2020年7月17日時点のオリジナルよりアーカイブ。 2020年7月16日閲覧。
- ^ “clone”. man7.org . 2020年1月18日時点のオリジナルよりアーカイブ。2020年1月28日閲覧。
- ^ “feature_test_macros”. man7.org . 2020年1月19日時点のオリジナルよりアーカイブ。2020年1月28日閲覧。
- ^ 「vdso(7) - Linuxマニュアルページ」。man7.org 。 2020年2月2日時点のオリジナルよりアーカイブ。2020年2月2日閲覧。
- ^ ab "futex(2) - Linuxマニュアルページ". man7.org . 2020年1月31日時点のオリジナルよりアーカイブ。2020年2月2日閲覧。
- ^ 「syscall(2) - Linuxマニュアルページ」。man7.org 。 2020年1月21日時点のオリジナルよりアーカイブ。 2020年2月2日閲覧。
- ^ 「sysfs(5) - Linuxマニュアルページ」。man7.org 。 2020年1月18日時点のオリジナルよりアーカイブ。 2020年1月6日閲覧。
- ^ 「sysfs の情報にアクセスする方法に関するルール — Linux カーネルのドキュメント」Kernel.org。 2020 年 3 月 7 日時点のオリジナルよりアーカイブ。2020 年1 月 6 日閲覧。
- ^ 「Linux Foundation Referenced Specifications」. refspecs.linuxbase.org . 2020年2月3日閲覧。
- ^ 「LSB 仕様」. refspecs.linuxbase.org . 2020 年2 月 3 日閲覧。
- ^ 「Linux Standard Base Desktop Specific、Generic Part」. refspecs.linuxbase.org . 2020年2月3日閲覧。
- ^ “Normative References”. refspecs.linuxfoundation.org . 2020年8月12日時点のオリジナルよりアーカイブ。2020年2月3日閲覧。
- ^ 「Linux Standard Base Core 仕様、汎用部分」。refspecs.linuxfoundation.org 。 2019年11月29日時点のオリジナルよりアーカイブ。2020年2月3日閲覧。
- ^ 「System V アプリケーションバイナリインタフェース - エディション 4.1」(PDF) 。Sco.com。2019年12月13日時点のオリジナルよりアーカイブ(PDF) 。2020年2月3日閲覧。
- ^ 「Xinuos Inc. | 開発者 | Gabi | 2003年12月17日 | System V アプリケーションバイナリインターフェース - ドラフト」。Sco.com。2020年2月3日時点のオリジナルよりアーカイブ。2020年2月3日閲覧。
- ^ 「実行可能ファイルとリンク形式 (ELF)」. Refspecs.linuxbase.org . 2020年2月3日閲覧。
- ^ “elf(5) - Linuxマニュアルページ”. man7.org . 2020年11月30日時点のオリジナルよりアーカイブ。2020年11月18日閲覧。
- ^ 「Linux Standard Base Core 仕様 for X86-64」. Refspecs.linuxbase.org . 2020年2月3日閲覧。
- ^ 「System V アプリケーションバイナリインターフェース - ドラフト」。Refspecs.linuxbase.org 。 2020年2月3日閲覧。
- ^ Seyfarth, Ray (2012). Linux 向け 64 ビット Intel アセンブリ言語プログラミング入門. CreateSpace Independent Publishing Platform. p. 170. ISBN 9781478119203。
- ^ “システムコールの解剖学、パート1 [LWN.net]”. lwn.net . 2020年8月18日時点のオリジナルよりアーカイブ。2020年7月16日閲覧。
- ^ “システムコールの解剖学、パート2 [LWN.net]”. lwn.net . 2020年8月6日時点のオリジナルよりアーカイブ。2020年7月16日閲覧。
- ^ Deucher, Alex (2014 年 10 月 7 日). 「AMD の新しい統合オープン ソース ドライバー」. X.Org Foundation . 2015 年 1 月 21 日時点のオリジナルよりアーカイブ。2015 年1 月 21 日閲覧。
- ^ ab 「Symbols - Linuxカーネルをハッキングするための信頼性のないガイド - Linuxカーネルのドキュメント」Kernel.org。2020年8月3日時点のオリジナルよりアーカイブ。2020年2月8日閲覧。
- ^ ab 「エクスポートされたシンボルと内部 API [LWN.net]」。Lwn.net。2020年3月31日時点のオリジナルよりアーカイブ。2020年3月15日閲覧。
- ^ ab “Unexporting kallsyms_lookup_name() [LWN.net]”. Lwn.net . 2020年4月1日時点のオリジナルよりアーカイブ。 2020年3月15日閲覧。
- ^ “Trees I: Radix trees [LWN.net]”. lwn.net . 2020年11月8日時点のオリジナルよりアーカイブ。 2020年11月13日閲覧。
- ^ “Trees II: red-black trees [LWN.net]”. lwn.net . 2020年11月13日時点のオリジナルよりアーカイブ。2020年11月13日閲覧。
- ^ 「Linuxカーネルをハッキングするための信頼性のないガイド」Kernel.org(第1版)。2005年。2020年2月16日時点のオリジナルよりアーカイブ。2020年3月15日閲覧。
- ^ 「Linux カーネルをハッキングするための信頼性のないガイド — Linux カーネルのドキュメント」Kernel.org。2020年 3 月 7 日時点のオリジナルよりアーカイブ。2020年3 月 15 日閲覧。
- ^ 「Unreliable Guide To Locking — The Linux Kernel document」Kernel.org。2020年3月7日時点のオリジナルよりアーカイブ。 2020年3月15日閲覧。
- ^ 「SCSI インターフェース ガイド — Linux カーネル ドキュメント」Kernel.org。2020 年 6 月 2 日時点のオリジナルよりアーカイブ。2020年6 月 11 日閲覧。
- ^ 「libATA 開発者ガイド — Linux カーネルのドキュメント」Kernel.org。 2020 年 5 月 30 日時点のオリジナルよりアーカイブ。2020 年6 月 11 日閲覧。
- ^ 「DRM Internals — The Linux Kernel document」Kernel.org。2020年6月1日時点のオリジナルよりアーカイブ。2020年6月11日閲覧。
- ^ 「カーネルモード設定 (KMS) — Linux カーネルのドキュメント」Kernel.org。 2020 年 6 月 11 日時点のオリジナルよりアーカイブ。 2020 年6 月 11 日閲覧。
- ^ “DMAバッファ共有メカニズムを導入する [LWN.net]”. lwn.net . 2020年6月11日時点のオリジナルよりアーカイブ。2020年6月11日閲覧。
- ^ 「Linux* での CPU バッファーと GPU バッファーの共有」。01.org 。2016年 5 月 12 日。2020 年 6 月 11 日時点のオリジナルよりアーカイブ。2020年6 月 11 日閲覧。
- ^ 「バッファ共有と同期 — Linux カーネルのドキュメント」Kernel.org。 2020 年 6 月 1 日時点のオリジナルよりアーカイブ。2020 年6 月 11 日閲覧。
- ^ “About mac80211”. Linux Kernel Organization, Inc. 2021年2月1日時点のオリジナルよりアーカイブ。2014年6月8日閲覧。
- ^ 「Linux 802.11 ドライバー開発者ガイド — Linux カーネルドキュメント」Kernel.org 。2021年11 月 19 日閲覧。
- ^ "[PATCH v3 1/2] fork: clone3を追加 [LWN.net]". lwn.net . 2020年7月16日時点のオリジナルよりアーカイブ。2020年7月16日閲覧。
- ^ 「clone(2) - Linuxマニュアルページ」。man7.org 。 2020年7月15日時点のオリジナルよりアーカイブ。 2020年7月15日閲覧。
- ^ “clone3(), fchmodat4(), and fsinfo() [LWN.net]”. lwn.net . 2020年6月15日時点のオリジナルよりアーカイブ。2020年7月15日閲覧。
- ^ 「ld-linux.so(8) - Linuxマニュアルページ」。man7.org 。 2020年11月26日時点のオリジナルよりアーカイブ。2020年11月18日閲覧。
- ^ “nptl(7) - Linuxマニュアルページ”. man7.org . 2020年7月25日時点のオリジナルよりアーカイブ。2020年7月25日閲覧。
- ^ “futex(7) - Linuxマニュアルページ”. man7.org . 2020年7月15日時点のオリジナルよりアーカイブ。2020年7月25日閲覧。
- ^ “Kernel threads made easy [LWN.net]”. lwn.net . 2020年3月31日時点のオリジナルよりアーカイブ。 2020年8月15日閲覧。
- ^ ab Bar, Moshe (2000年4月1日). 「Linux Scheduler」. Linux Journal . Belltown Media, Inc. 2021年2月2日時点のオリジナルよりアーカイブ。 2012年4月14日閲覧。
- ^ BKK19-TR03 - Linuxカーネルスケジューラ - 概要、2019年4月23日、2021年12月15日時点のオリジナルよりアーカイブ、 2021年5月17日閲覧。
- ^ 「Linux のレイテンシを短縮: プリエンプティブカーネルの導入 | Linux Journal」。Linuxjournal.com。2020年8 月 9 日時点のオリジナルよりアーカイブ。2020年8 月 17 日閲覧。
- ^ 「CFS スケジューラ — Linux カーネルのドキュメント」Kernel.org 。2021年5 月 1 日閲覧。
- ^ 「IEEE 情報技術標準 - ポータブル オペレーティング システム インターフェイス、POSIX.1b、リアルタイム拡張 (IEEE Std 1003.1b-1993)」。2010 年 11 月 16 日時点のオリジナルよりアーカイブ。2016 年3 月 17 日閲覧。
- ^ Larabel, Michael (2014年1月24日). 「Linux 3.14カーネルにはすでに多くの魅力的な機能があります」. Phoronix . 2020年8月13日時点のオリジナルよりアーカイブ。 2014年2月3日閲覧。
- ^ 「Linuxカーネル3.14、セクション1.1。より優れたリアルタイムスケジューリングのためのデッドラインスケジューリングクラス」。kernelnewbies.org 。 2014年3月30日。2021年1月15日時点のオリジナルよりアーカイブ。 2014年4月2日閲覧。
- ^ 「RT-mutex 実装設計 — Linux カーネルドキュメント」Kernel.org . 2021 年12 月 17 日閲覧。
- ^ 「PI サポート付き RT-mutex サブシステム — Linux カーネル ドキュメント」Kernel.org 。2021年12 月 17 日閲覧。
- ^ McKenney, Paul (2005年8月10日). 「リアルタイムプリエンプションの概要」. LWN.net . 2020年8月10日時点のオリジナルよりアーカイブ。2012年2月5日閲覧。
- ^ “OSADL Project: Realtime Linux”. OSADL . 2021年2月4日時点のオリジナルよりアーカイブ。2012年2月5日閲覧。
- ^ ab 「スティーブン・ロステット_on_PREEMPT_RT」(PDF)。
- ^ 「EEVDF スケジューラは Linux 6.6 に搭載される予定」。Phoronix 。2023年8 月 31 日閲覧。
- ^ 「[PATCH 00/10] sched: EEVDF でlatency-nice を使用 [LWN.net]」. LWN.net .
- ^ 「Linux用のEEVDF CPUスケジューラ[LWN.net]」。LWN.net 。 2023年8月31日閲覧。
- ^ 「EEVDF スケジューラが Linux 6.6 に統合され、Intel ハイブリッド クラスター スケジューリングが再導入されました」。Phoronix。
- ^ 「locking — Linux Kernel ドキュメント」Kernel.org . 2021 年12 月 17 日閲覧。
- ^ 「locking.rst - Documentation/kernel-hacking/locking.rst - Linux ソースコード (v5.11.10) - Bootlin」。elixir.bootlin.com 。 2021年3月29日閲覧。
- ^ 「RCU とは、根本的に何ですか? [LWN.net]」。lwn.net 。2021 年3 月 29 日閲覧。
- ^ 「RCU とは? パート 2: 使用方法 [LWN.net]」。lwn.net。2021年3 月 29 日閲覧。
- ^ 「RCU パート 3: RCU API [LWN.net]」。lwn.net 。2021 年3 月 29 日閲覧。
- ^ 「Linux-Kernel Memory Model」. open-std.org . 2021年3月29日閲覧。
- ^ 「正式なカーネルメモリ順序モデル(パート1)[LWN.net]」。lwn.net 。 2021年3月29日閲覧。
- ^ 「正式なカーネルメモリ順序モデル(パート2)[LWN.net]」。lwn.net 。 2021年3月29日閲覧。
- ^ Stern, Alan. 「Linux カーネル メモリ一貫性モデルの説明」
- ^ 「kernel/git/torvalds/linux.git - Linuxカーネルソースツリー」. git.kernel.org . 2021年12月17日閲覧。
- ^ ab 「ロックの種類とそのルール — Linux カーネルのドキュメント」。Kernel.org 。2021年12 月 17 日閲覧。
- ^ 「短い主題: リアルタイム、Futexes、および ntfs3」。Lwn.net 。2022年2月20日閲覧。
- ^ 「PI サポート付き RT-mutex サブシステム — Linux カーネル ドキュメント」Kernel.org 。2022年2 月 20 日閲覧。
- ^ 「RT-mutex 実装設計 — Linux カーネルのドキュメント」。
- ^ 「ランタイムロックの正確性検証 — Linux カーネルのドキュメント」Kernel.org . 2021 年12 月 17 日閲覧。
- ^ 「割り込み、スレッド、lockdep [LWN.net]」。lwn.net 。 2021年12月17日閲覧。
- ^ 「ページテーブル — Linux カーネルのドキュメント」www.kernel.org 。 2024 年7 月 21 日閲覧。
- ^ 「物理メモリ — Linux カーネルのドキュメント」www.kernel.org 。2024年7 月 21 日閲覧。
- ^ 「Linux ストレージ スタック ダイアグラム」。Thomas -krenn.com。2020年 8 月 3 日時点のオリジナルよりアーカイブ。2020 年3 月 19 日閲覧。
- ^ 「SLUBアロケータ」Lwn.net 2007年4月11日. 2022年2月20日閲覧。
- ^ ab 「Linux カーネルのスラブアロケータ: SLAB、SLOB、SLUB」(PDF)。Events.static.linuxfound.org 。2022年2 月 20 日閲覧。
- ^ Corbet, Jonathan (2023年4月28日). 「6.4 マージウィンドウ、パート1 [LWN.net]」. LWN.net . 2023年5月12日閲覧。
- ^ 「6.8 マージウィンドウの前半 [LWN.net]」。lwn.net。2024年7 月 21 日閲覧。
- ^ 「Kernel/Git/Torvalds/Linux.git - Linuxカーネルソースツリー」。Git.kernel.org。
- ^ abc Torvalds, Linus (1999 年 1 月)。「Linux のエッジ」。オープンソース:オープンソース革命からの声。O'Reilly。ISBN 1-56592-582-3. 2013年10月13日閲覧。
- ^ 「Linux を DEC Alpha に移植する: カーネルとシェル」。2019 年 9 月 5 日時点のオリジナルよりアーカイブ。2019年10 月 5 日閲覧。
- ^ 「Linux on Alpha: 戦略的選択」。2019年9月4日時点のオリジナルよりアーカイブ。2019年10月5日閲覧。
- ^ 「TOP500 スーパーコンピュータサイト: オペレーティングシステムファミリー / Linux」。Top500.org。2012年11月19日時点のオリジナルよりアーカイブ。2019年10月5日閲覧。
- ^ 「Avalon Cluster | TOP500 スーパーコンピュータサイト」。Top500.org。2019年10月5日時点のオリジナルよりアーカイブ。2019年10月5日閲覧。
- ^ Wang, David (2010 年 5 月 6 日). 「Android が iPhone 3G で実行可能に」. TechHive . IDG . 2010 年 7 月 22 日時点のオリジナルよりアーカイブ。2010 年7 月 11 日閲覧。
- ^ “LKDDb”. LKDDbプロジェクト. 2021年2月25日時点のオリジナルよりアーカイブ。2021年1月26日閲覧。
- ^ “Linux Hardware”. Linux Hardware Project. 2021年1月26日時点のオリジナルよりアーカイブ。2021年1月26日閲覧。
- ^ 「Linuxカーネル4.0、セクション1.2。ライブパッチ」。kernelnewbies.org 。 2015年4月26日。2015年5月4日時点のオリジナルよりアーカイブ。2015年4月27日閲覧。
- ^ Jonathan Corbet (2015年2月25日). 「ライブパッチの粗雑なパッチ」LWN.net。 2015年4月27日時点のオリジナルよりアーカイブ。 2015年4月27日閲覧。
- ^ 「kernel/git/torvalds/linux.git: Jiri Kosina からライブパッチインフラストラクチャを取得 (Linux カーネルソースツリー)」。kernel.org。2015年 2 月 11 日。2015 年 6 月 11 日時点のオリジナルよりアーカイブ。2015 年4 月 27 日閲覧。
- ^ Mookhey, KK; Burghate, Nilesh (2005 年 7 月 1 日)。Linux: セキュリティ、監査、および制御機能。米国: ISACA。p . 14。ISBN 1-893209-78-4. 2013年6月2日時点のオリジナルよりアーカイブ。2010年12月31日閲覧。
- ^ ハッチ、ブライアン(2008年7月15日)。『Linuxのハッキング:Linuxのセキュリティの秘密と解決策』McGraw-Hill Osborne Media、524ページ。ISBN 978-0-07-226257-5. 2013年6月2日時点のオリジナルよりアーカイブ。2010年12月31日閲覧。
- ^ Jaeger, Trent (2008 年 10 月 7 日)。オペレーティングシステムのセキュリティ。Morgan and Claypool Publishers。p. 122。ISBN 978-1-59829-212-1. 2013年6月2日時点のオリジナルよりアーカイブ。2010年12月31日閲覧。
- ^ 「CAP_PERFMON — および一般的な新機能 [LWN.net]」。lwn.net。2020年8月4日時点のオリジナルよりアーカイブ。2020年8月2日閲覧。
- ^ 「Linux セキュリティ モジュールの使用法 — Linux カーネルのドキュメント」Kernel.org。2020年 5 月 2 日時点のオリジナルよりアーカイブ。2020年1 月 10 日閲覧。
- ^ 「国家安全保障局 | 中央安全保障局 > 業務内容 > 研究 > SE Linux > SE Linux FAQ」。Nsa.gov。2019年9月18日時点のオリジナルよりアーカイブ。 2020年1月10日閲覧。
- ^ 「Seccomp BPF (フィルターを使用したSECure COMPuting) — Linuxカーネルのドキュメント」Kernel.org。2020年3月7日時点のオリジナルよりアーカイブ。2020年1月10日閲覧。
- ^ Andrews, Jeremy (2008 年 7 月 16 日). 「セキュリティ バグと完全開示」. KernelTrap . 2008 年 7 月 19 日時点のオリジナルよりアーカイブ。2010年12 月 31 日閲覧。
- ^ Spengler, Brad (2008年7月16日). 「Linuxの非公式なセキュリティ・スルー・カバーアップ・ポリシー」。Full Disclosure (メーリングリスト). 2020年8月7日時点のオリジナルよりアーカイブ。 2010年12月31日閲覧。
- ^ ab Yamagata, Hiroo (1997年8月3日). 「フリーソフトウェアのプラグマティスト」. HotWired . 2007年2月10日時点のオリジナルよりアーカイブ。2007年2月21日閲覧。
- ^ “GPL-v2”. gnu.org . 2019年12月25日時点のオリジナルよりアーカイブ。2020年1月28日閲覧。
- ^ Corbet, Jonathan (2006年1月31日). 「GPLv3とカーネル」. LWN.net . 2020年8月10日時点のオリジナルよりアーカイブ。 2007年2月21日閲覧。
- ^ Torvalds, Linus (2000年9月8日). 「Linux-2.4.0-test8」. LKML (メーリングリスト). 2020年5月15日時点のオリジナルよりアーカイブ。 2007年2月21日閲覧。
- ^ “gnu.org”. Gnu.org . 2021年2月2日時点のオリジナルよりアーカイブ。2017年10月18日閲覧。
- ^ Cox, Alan (2006年1月20日). 「Re: GPL V3 and Linux」. LKML (メーリングリスト). 2021年1月26日時点のオリジナルよりアーカイブ。 2007年2月21日閲覧。
- ^ Shankland, Stephen (2006年9月25日). 「トップLinuxプログラマーがGPL 3を批判」. News.com . CNET . 2013年9月14日時点のオリジナルよりアーカイブ。 2007年2月21日閲覧。
- ^ ab James EJ Bottomley; Mauro Carvalho Chehab; Thomas Gleixner; Christoph Hellwig; Dave Jones; Greg Kroah-Hartman; Tony Luck; Andrew Morton; Trond Myklebust; David Woodhouse (2006年9月15日). 「GPLv3に関するカーネル開発者の立場:GPLv3の危険性と問題」LWN.net。2021年1月18日時点のオリジナルよりアーカイブ。 2015年3月11日閲覧。
- ^ Petreley, Nicholas (2006年9月27日). 「悪との戦いか、注目を集めるための戦いか?」 linuxjournal.com. 2018年3月2日時点のオリジナルよりアーカイブ。 2015年3月11日閲覧。
- ^ 「Linus Torvalds 氏、GPL v3 は GPLv2 が主張するすべての点に違反していると主張」Debconf 2014. 2014 年。2018 年 5 月 8 日時点のオリジナルよりアーカイブ。2018年3 月 21 日閲覧。
- ^ Clark, Rob; Semwal, Sumit (2012 年 11 月 1 日)。「DMA バッファー共有フレームワーク: 概要」(PDF)。Embedded Linux カンファレンス。2014年 8 月 8 日時点のオリジナルよりアーカイブ(PDF) 。2014 年8 月 2 日に取得。
- ^ Cox, Alan (2012 年 10 月 10 日). 「[PATCH] dma-buf: EXPORT_SYMBOL を使用する」. Direct Rendering Infrastructure (メーリング リスト). 2013 年 1 月 22 日時点のオリジナルよりアーカイブ。2013 年9 月 3 日閲覧。
- ^ Torvalds, Linus (2003 年 12 月 10 日). 「RE: Linux GPL とバイナリ モジュールの例外条項?」. LKML (メーリング リスト). 2011 年 6 月 15 日時点のオリジナルよりアーカイブ。2010年12 月 31 日閲覧。
- ^ Torvalds, Linus (2003年12月3日). 「Re: Linux GPLとバイナリモジュール例外条項?」LKML (メーリングリスト). 2020年4月28日時点のオリジナルよりアーカイブ。 2010年11月12日閲覧。
- ^ 「Tainted kernels — The Linux Kernel document」Kernel.org。2020年3月7日時点のオリジナルよりアーカイブ。 2020年1月13日閲覧。
- ^ 「Linux Firmware API — Linux カーネルのドキュメント」Kernel.org。2020年1月13日時点のオリジナルよりアーカイブ。2020年1月13日閲覧。
- ^ 「組み込みファームウェア — Linux カーネルのドキュメント」Kernel.org。2020 年 6 月 10 日時点のオリジナルよりアーカイブ。2020年6 月 10 日閲覧。
- ^ 「米国におけるLinux TMの登録」uspto.gov。2021年2月24日時点のオリジナルよりアーカイブ。 2019年9月6日閲覧。
- ^ 「EUにおけるLinux TM登録」euipo.europa.eu . 2016年6月9日時点のオリジナルよりアーカイブ。 2020年11月28日閲覧。
- ^ Hughes, Phil (1997 年 8 月 1 日)。「Linux 商標紛争」。Linux Journal。Belltown Media, Inc. 2010 年 4 月 30 日時点のオリジナルよりアーカイブ。2010年12 月 8 日閲覧。
- ^ Hughes, Phil (1997 年 3 月 1 日)。「Linux 商標に対する措置」。Linux Journal。Belltown Media, Inc. 2010 年 3 月 3 日時点のオリジナルよりアーカイブ。2010年12 月 8 日閲覧。
- ^ Gisselberg, Tonya (2010). 「オペレーティングシステム Linux の商標履歴」(PDF) 。Gisselberg Law Firm, Inc. 2011 年 7 月 11 日時点のオリジナル(PDF)からアーカイブ。2010 年12 月 8 日に閲覧。
- ^ Purdy, Kevin (2024年10月24日). 「ロシア人コーダーの排除がLinuxカーネルの政治に関する議論を刺激」Ars Technica . 2024年10月24日閲覧。
さらに読む
- トーバルズ、ライナス、ダイアモンド、デイヴィッド(2001年)。『Just for Fun: The Story of an Accidental Revolutionary 』。HarperBusiness。ISBN 978-0066620732。
- Bezroukov, Nikolai. 「第 4 章: 慈悲深い独裁者」。オープン ソース パイオニアのポートレート(電子書籍)。Softpanorama。2005 年 10 月 13 日時点のオリジナルからアーカイブ。2005年10 月 3 日に取得。
- 「LinkSys とバイナリ モジュール」。LWN.net Weekly Edition。2003 年 10 月 16 日。2016 年 8 月 1 日時点のオリジナルよりアーカイブ。2016 年7 月 21 日閲覧。
- 「みんなのお気に入りの Linux マスコット」。2005 年 8 月 16 日時点のオリジナルよりアーカイブ。2005年6 月 16 日閲覧。
- Pranevich, Joseph (2003 年 12 月)。「Linux 2.6 の素晴らしい世界」。2003 年 7 月 16 日時点のオリジナルよりアーカイブ。
- 「LinuxChanges」。2005 年 10 月 31 日時点のオリジナルよりアーカイブ。2005 年10 月 31 日閲覧。
- 「Linux カーネル 2.6 に関するセミナー論文」。2007 年 2 月 2 日時点のオリジナルよりアーカイブ。
- 「Linux デバイス ドライバー」(第 3 版)。2016 年 7 月 27 日時点のオリジナルよりアーカイブ。2016 年7 月 21 日閲覧。
- 「Linux カーネルを理解する」(書籍) (第 3 版)。2005 年 12 月 17 日時点のオリジナルからアーカイブ。2005年12 月 22 日に取得。
- Linux Kernel Networking、Rami Rosen 著、2014 年 (書籍)。2015 年 5 月 12 日時点のオリジナルよりアーカイブ。2015年6 月 14 日閲覧。
- 「Linux: GPL とバイナリ モジュール」。2005 年 7 月 23 日時点のオリジナルよりアーカイブ。
- 「Linuxカーネルの解剖学」。IBM。2007年6月27日時点のオリジナルよりアーカイブ。2007年6月9日閲覧。
- Tanenbaum, Andrew; Bos, Herbert (2015)。Modern Operating Systems。アメリカ合衆国: Pearson。p. 722。ISBN 9781292061429. OCLC 892574803.
外部リンク
- 公式サイト
- Linux カーネルドキュメントインデックス
- Linux カーネルのマニュアルページ
- カーネル Bugzilla と最近のカーネル バージョンごとのリグレッション
- カーネル関連のさまざまな情報源であるKernel Newbies
- カーネル関連情報の権威ある情報源である LWN.net のカーネル カバレッジ
- Bootlin の Elixir Cross Referencer、Linux カーネル ソース コードの相互参照
- Greg Kroah Hartman がYouTubeで Linux カーネルについて語る
