無料のUnixライクなオペレーティングシステムカーネル
Linux カーネルは、世界中の多くの コンピュータシステム で使用されている 、フリーでオープンソースの [14] :4 Unixライクな カーネル です。このカーネルは1991年に Linus Torvalds によって作成され、すぐに Unixの 無料の 代替 として作成された GNU オペレーティングシステム (OS)のカーネルとして採用されました。1990年代後半以降、多くの オペレーティングシステムディストリビューション に組み込まれており 、その多くは Linux と呼ばれています。そのようなLinuxカーネルオペレーティングシステムの1つが Android で、多くのモバイルデバイスや組み込みデバイスで使用されています。
カーネルコードの大部分は、標準C言語を超える拡張を持つ GNUコンパイラコレクション (GCC) がサポートする C言語で記述されています 。[14] : 18 [15] また、 メモリ使用やタスク実行の最適化など、アーキテクチャ固有のロジックのためのアセンブリコードも 含まれています。 [14] : 379–380 カーネルは モジュール設計を採用しており、モジュールは ソフトウェアコンポーネント として統合可能であり、動的ロードも含まれています。OS カーネル全体が カーネル空間 で実行されるため、カーネルはアーキテクチャ的に モノリシック です。
Linuxは GNU General Public Licenseバージョン2に基づいて提供されていますが、他の 互換性のあるライセンス に基づくファイルも含まれています 。 [13]
歴史
LinuxCon Europe 2014での Linus Torvalds氏
1991年、リーナス・トーバルズは ヘルシンキ大学 で コンピュータサイエンスを 学ぶ学生でした。在学中、彼はUNIXにヒントを得て、パーソナルコンピュータ用のオペレーティングシステムの開発をサイドプロジェクトとして始めました。 [16]彼は Intel 80386アセンブリ言語 で タスクスイッチャー と 端末ドライバ を開発することから始めました 。 [16] 1991年8月25日、トーバルズは Usenet の ニュース グループ comp.os.minix に次のような投稿をしました。 [17]
386(486) AT クローン用の (フリーの) オペレーティングシステム (単なる趣味で、GNU のように大規模でプロフェッショナルなものにはならない) を製作中です 。4 月から構想を練り、いよいよ完成に近づいています。私の OS は minix に多少似ている (ファイルシステムの物理的なレイアウトが同じ (実用的な理由から) など) ので、minix の良い点や悪い点についてフィードバックをいただければ幸いです。現在、 bash (1.08) と gcc (1.40)を移植しており 、問題なく動作しているようです。つまり、数ヶ月以内に実用的なものが完成するということです [...] そうです。minix のコードは一切使用しておらず、マルチスレッドファイルシステムを採用しています。プロテクタブルではありません (386 のタスクスイッチングなどを使用します)。また、AT ハードディスク以外のものはサポートされない可能性が高いです。 というのも 、私の OS は AT ハードディスクしか持っていないからです :-(。
1991年9月17日、トーバルズはLinuxバージョン0.01を準備し、フィンランド大学研究ネットワーク( FUNET )のFTPサーバー「ftp.funet.fi」に公開した。コードのコンパイルとテストにはMinixが必要だったため、実行ファイルすら存在しなかった。 [18]
1991年10月5日、トーバルズはLinuxの最初の「公式」バージョンであるバージョン0.02を発表しました。 [19] [18]
1ヶ月前にお話しした通り、AT-386コンピュータ用のMinix風フリー版を開発中です。ようやく使える段階に到達しました(ただし、目的によっては使えないかもしれません)。ソースコードを公開し、広く配布できるようにしたいと考えています。まだバージョン0.02ですが、bash、gcc、gnu-make、gnu-sed、compressなどが正常に動作しています。
Linuxは、 MINIX コミュニティを含む多くの開発者がプロジェクトに貢献したことで急速に成長しました。 [ 要出典 ] 当時、 GNUプロジェクトは、フリーのUNIX代替である GNU の多くのコンポーネントを完成させていました が、カーネルである GNU Hurdは まだ未完成でした。プロジェクトは、OSとしてLinuxカーネルを採用しました。 [20]
トルバルズは、このカーネルがまだ一般利用を意図していないことを示すために、このカーネルにメジャーバージョン0というラベルを付けました。 [21] 1991年12月にリリースされたバージョン0.11は、 Linuxカーネルを実行するコンピュータ上でコンパイルされ、
自己ホストされ た最初のバージョンでした。
トーバルズが1992年1月にバージョン0.12をリリースした際、彼は商用再配布を許可していなかった以前の独自に作成したライセンスに代えて、 GNU一般公衆利用許諾書 バージョン2(GPLv2)を採用しました。GPLは1992年2月1日に発効しました。 [22] Unix とは対照的に 、Linuxのすべての ソースファイルは デバイスドライバ を含め、自由に利用できます 。 [23]
Linuxの初期の成功は、 世界中のプログラマーとテスターによって推進されました。POSIX APIのサポートと、必要に応じてカーネルアドレス空間へのエントリポイントとして機能するlibCを通じて、LinuxはUnix用に開発されたソフトウェアやアプリケーションを実行できました。 [24]
Linux カーネルはさまざまなハードウェア アーキテクチャをサポートし、 独自のソフトウェア を含むソフトウェアに共通のプラットフォームを提供します。
1992年1月19日、新しいニュースグループ alt.os.linux に最初の投稿が提出されました。 [25] 1992年3月31日、ニュースグループは comp.os.linux に改名されました。 [26]
Linuxがマイクロ カーネルではなく モノリシックカーネル であるという事実は、 MINIXの作者である アンドリュー・S・タネンバウム とトーバルズの間で議論されたテーマであった。 [27] タネンバウム とトーバルズの議論は、 1992年に Usenet グループ comp.os.minix で カーネルアーキテクチャに関する一般的な議論として始まった。 [28] [29]
1992年5月にリリースされたバージョン0.96は、 X Window Systemを 実行できる最初のバージョンでした 。 [30] [31] 1994年3月、176,250行のコードを含むLinux 1.0.0がリリースされました。 [32] バージョン番号が示すように、これは 実稼働環境 に適していると見なされた最初のバージョンでした。 [21] 1996年6月、リリース1.3の後、TorvaldsはLinuxが新しいメジャー番号を必要とするほど進化したと判断し、次のリリースをバージョン2.0.0と名付けました。 [33] [34] 2.0の重要な機能には、対称 型マルチプロセッシング (SMP)、より多くのプロセッサタイプへのサポート、特定のハードウェアターゲットの選択とアーキテクチャ固有の機能と最適化の有効化のサポートが含まれていました。 [24] kbuild のmake *config コマンドファミリーは、 アドホックカーネル実行可能ファイル( vmlinux )とロード可能なモジュールを構築するためのオプションを有効にし、構成します。 [35] [36]
1999年1月20日にリリースされたバージョン2.2では、 [37] ロックの粒度とSMP管理が改善され、 m68k 、 PowerPC 、 Sparc64 、 Alpha などの64ビットプラットフォームのサポートが追加されました。 [38] さらに、 Microsoft の NTFS 読み取り専用機能 を含む新しい ファイルシステムが追加されました。[38 ] 1999年にIBMは S/390 アーキテクチャのサポートのためにLinux 2.2.13コードへのパッチを公開しました 。 [39]
2001年1月4日にリリースされたバージョン2.4.0 [40]には、 ISA プラグアンドプレイ 、 USB 、 PCカード のサポートが含まれていました 。Linux 2.4では、 Pentium 4 と Itanium (後者は、古い PA-RISC に取って代わるためにIntelとHewlett-Packardが共同開発した ia64 ISAを導入しました)、および新しい 64ビットMIPS プロセッサのサポートが追加されました。 [41] 2.4.xの開発では、 Bluetooth 、 論理ボリュームマネージャ (LVM)バージョン1、 RAID サポート、 InterMezzo および ext3 ファイルシステム
のサポートを含む、シリーズ全体でより多くの機能が利用できるようになった点で少し変わりました 。
バージョン2.6.0は2003年12月17日にリリースされました。 [42] 2.6.x の開発は、 シリーズ全体にわたって新機能を追加する方向にさらに進みました。 2.6 シリーズで行われた変更には、 μClinux のメインライン カーネル ソースへの統合、 PAE サポート、いくつかの新しい CPU ラインのサポート、Advanced Linux Sound Architecture (ALSA) のメインライン カーネル ソースへの統合、最大 2 32ユーザーのサポート (2 16 から増加 )、最大 2 29 プロセス ID のサポート (64 ビットのみ、32 ビット アーキテクチャは依然として 2 15 に制限されています)、 [43] デバイス タイプの数と各タイプのデバイス数が大幅に増加、 64 ビット サポートの改善、 最大 16 テラバイトのファイル サイズをサポートする ファイル システム のサポート、カーネル内 プリエンプション、 ネイティブ POSIX スレッド ライブラリ (NPTL) のサポート、 ユーザー モード Linux の メインライン カーネル ソースへの統合、 SELinux の メインライン カーネル ソースへの統合、 InfiniBand の サポートなどがあります。
2.6.xリリース以降、カーネルは多数のファイルシステムをサポートするようになりました。その中には、 ext3 、 ext4 、 FUSE 、 Btrfs などLinux用に設計されたものもあれば、 [44] 、 JFS 、 XFS 、Minix、 Xenix 、 Irix 、 Solaris 、 System V 、 Windows 、 MS-DOS など他のオペレーティングシステムにネイティブなものもありました 。 [45]
これまで開発段階では バージョン管理システムは 使用されていなかったが、2002年にLinux開発者は BitKeeperを採用した。これは フリーソフトウェア ではなかったものの、開発者に無料で提供されていた。2005年、 リバースエンジニアリング の試みがあったため 、このソフトウェアを所有していた企業はLinuxコミュニティへのサポートを撤回した。これを受けて、トーバルズらは Git を開発した。この新しいシステムは数週間で開発され、2ヶ月後にはそれを用いた最初の公式カーネルがリリースされた。 [46]
2005年に、 バグ修正 に取り組み、 安定 版を継続的に更新できるカーネルツリーが不足していることを受けて、 安定チームが 結成されました。 [47] 2008年2月には 、次の開発サイクルでマージすることを目的としたパッチを集める場所として機能する linux-nextツリーが作成されました。 [48] [49] いくつかのサブシステムメンテナーは、次のリリースサイクルに含めるために提出するコードを含むツリーにサフィックス -next を採用しました。 2014年1月現在 、Linuxの開発バージョンは linux-next という不安定なブランチに保持されています。 [50] [アップデート]
Linuxの20周年は、2011年7月にバージョン3.0.0のリリースでトーバルズによって祝われました。 [33] 2.6が8年間バージョン番号として使用されていたため、古いプログラムが動作するように、3.xを2.6.40+xとして報告する新しい uname26 パーソナリティをカーネルに追加する必要がありました。 [51]
バージョン3.0は2011年7月22日にリリースされました。 [52] 2011年5月30日、トーバルズは大きな変更は「何もない。本当に何もない」と発表し、「次のリリースでは、まったく新しい輝かしい数字にするだけでなく、優れたカーネルにしましょう」と求めました。 [53] 予想されていた6〜7週間の開発プロセスの後、Linuxの20周年近くにリリースされる予定でした。
2012年12月11日、トーバルズは i386 プロセッサのサポートを削除することでカーネルの複雑さを軽減することを決定しました。具体的には、信頼性の 高い ミューテックス を実現するために i486 で導入されたアトミックCMPXCHG命令 を エミュ レートする必要がなくなったため [ 54] 、3.7カーネルシリーズが元のプロセッサをサポートする最後のカーネルとなりました [55] 。 [56] 同じシリーズで ARM プロセッサのサポートが統合されました。 [57]
2.6.39から3.0、および3.19から4.0への番号変更には、意味のある技術的な差異は含まれず、メジャーバージョン番号が増加したのは、マイナー番号の増大を避けるためだけであった。 [52] [58] 安定した3.xyカーネルは、2015年2月に3.19までリリースされた。2013年9月2日にリリースされたバージョン3.11では、 [59] 一時ファイルの脆弱性を軽減するための新しい O_TMPFILE フラグ open(2)、実験的なAMD Radeonの 動的電力管理、低遅延ネットワークポーリング、 zswap (圧縮スワップキャッシュ)など、多くの新機能が追加された。 [60]
2015年4月、トーバルズはカーネルバージョン4.0をリリースしました。 [33] 2015年2月までに、Linuxは世界最大のソフトウェアおよびハードウェアベンダーを含む1,200社以上の企業から12,000人近くのプログラマーから貢献を受けていました。 [61] 2015年6月にリリースされたLinuxバージョン4.1には、約14,000人のプログラマーによって貢献された1,950万行以上のコードが含まれています。 [62]
リーナス・トーバルズは2019年3月、カーネルバージョン4.22を5.0とすることを発表し、「『5.0』は4.xの番号が大きくなりすぎて指が足りなくなったという以上の意味はありません」と述べた。 [63] AMD Radeon FreeSync と NVIDIA Xavierディスプレイのサポート、 F2FS 、 EXT4 、 XFS の修正、 Btrfs ファイルシステム 上のスワップファイルのサポートの復元、 Intel Icelake Gen11グラフィックスと NXP i.MX8 SoCの継続的な作業など、多くの主要な追加機能が含まれていた 。 [64] [65] このリリースは他のリリースよりも明らかに大きく、トーバルズは「5.0リリース全体の全体的な変更ははるかに大きい」と述べた。 [63]
合計1,991人の開発者(うち334人が初めての共同作業者)がバージョン5.8に553,000行以上のコードを追加し、バージョン4.9が保持していた記録を破りました。 [66]
人気
Stack Overflowの2019年の年次開発者調査によると、回答者の53%以上が Linux 向けのソフトウェアを開発しており、約27%が Android 向けのソフトウェアを開発しています。 [67] ただし、Linuxベースのオペレーティングシステムで開発しているのは約25%にすぎません。 [68]
ほとんどのウェブサイトはLinuxベースのオペレーティングシステム で動作しており 、 [69] [70] 、 世界で最も強力なスーパーコンピュータ500台は すべて Linuxで動作しています。 [71]
Linux ディストリビューションには、 カーネルと システム ソフトウェア ( GNU C ライブラリ 、 systemd 、その他の Unix ユーティリティ および デーモン など) およびさまざまな アプリケーション ソフトウェア がバンドルされていますが、デスクトップでの 使用シェア は他のオペレーティング システムと比較して低いです。
改良されたLinuxカーネル上で動作するAndroidは 、モバイルデバイスのオペレーティングシステムの大部分を占めており、 [72] [73] [74] 、 組み込みデバイス での使用も増えており 、Linuxの採用を促進する大きな要因となっています。 [24]
価値
Linuxカーネルの再開発コスト
従来の独自開発環境でLinuxカーネルのバージョン2.6.0を再開発するコストは、 COCOMO 人月推定モデルを用いた2004年の価格で6億1,200万米ドル(4億6,700万ユーロ、3億9,400万ポンド)と推定されている。 [75] 2006年に欧州連合が資金提供した調査では、カーネルバージョン2.6.8の再開発コストは8億8,200万ユーロ(11億4,000万ドル、7億4,400万ポンド)とさらに高くなった。 [76]
この問題は2008年10月にアマンダ・マクファーソン、ブライアン・プロフィット、ロン・ヘイル=エヴァンスによって再検討された。彼らはデイビッド・A・ウィーラーの手法を用いて、2.6.25カーネルの再開発に現在13億ドル(Fedora 9の再開発費用総額108億ドルの一部)かかると推定した。 [77] また、スペインのオビエド大学のガルシア=ガルシアとアロンソ・デ・マグダレーノは、カーネルに追加された年間価値は2005年から2007年の間に約1億ユーロ、2008年には2億2500万ユーロだったと推定しており、欧州連合(EU)での開発には10億ユーロ以上(2010年2月時点で約14億ドル)の費用がかかるとしている。 [78]
2011年3月7日時点で [アップデート] 、当時の Linuxカーネル2.6.xのコード行数(LOC)と賃金、そしてDavid A. Wheelerの計算に基づくと、Linuxカーネルが拡大し続けるにつれて、再開発には約30億ドル(約22億ユーロ)の費用がかかると予測されています。2018年9月26日時点の最新の計算では 、 [アップデート] 当時のLinuxカーネル4.14.14のコード行数20,088,609行と、現在の米国プログラマーの全国平均給与75,506ドルを用いて、既存コードの書き換えには約14,725,449,000ドル(11,191,341,000ポンド)の費用がかかると予測されています。 [79]
分布
Linuxを使用する人のほとんどは、Linuxディストリビューション を介しています 。一部のディストリビューションは、バニラカーネルまたは安定版カーネルを出荷しています。しかし、 Red Hat や Debian などのベンダーは、カスタマイズされたソースツリーを維持しています。これらのソースツリーは通常、バニラブランチよりも遅いペースで更新され、関連する安定版ブランチのすべての修正が含まれていますが、同時に、ディストリビューションベンダーがブランチのベースとしたバニラバージョンではリリースされていなかったドライバや機能のサポートも追加されることがあります。
開発者
Million lines of code Kernel Version 0 10 20 30 40 50 1.0.0 2.2.0 2.5.0 4.0 6.17.1 Million lines of code Growth of the Linux kernel by number of lines of code Linuxカーネルバージョンのコードサイズを百万行単位で表したグラフ [80] 。 ソースデータを表示。
Linuxカーネル開発者コミュニティは約5,000~6,000人のメンバーで構成されています。Linux Foundationがリリース4.8から4.13までのコミットを対象とした調査「2017年Linuxカーネル開発の現状」によると、平均で約200~250社から約1,500人の開発者が貢献しています。上位30社の開発者がコードの16%強を貢献しています。企業別では、Intel(13.1%)、Red Hat(7.2%)、Linaro(5.6%)、IBM(4.1%)が上位を占め、2位と5位は「なし」(8.2%)と「不明」(4.1%)となっています。 [81]
ロードマップの代わりに、技術ガイドラインがあります。中央集権的なリソース配分の代わりに、Linuxカーネルの更なる開発にそれぞれが利害関係を持つ個人や企業が存在します。彼らは互いに全く独立しています。Linus Torvaldsや私のような人間がカーネルの進化を計画するわけではありません。私たちはただ座って今後2年間のロードマップを考え、それから様々な新機能にリソースを割り当てるようなことはしません。なぜなら、私たちにはリソースがないからです。リソースはすべて、Linuxを使用し、貢献する様々な企業、そして様々な独立した貢献者によって所有されています。決定権を持つのは、リソースを所有する人々です…」
Linuxカーネル4.8~4.13への貢献における企業所属 [81]
対立
Linux カーネル開発者間の注目すべき対立:
著名なLinuxカーネル開発者たちは、開発者間の衝突を避けることの重要性を認識してきました。 [94] 長い間、トーバルズの反対により、カーネル開発者向けの行動規範は存在しませんでした。 [95] しかし、2015年3月8日にLinuxカーネル 衝突規範 が導入されました。 [96 ] これは、2018年9月16日に、 貢献者契約 に基づく新しい 行動規範 に置き換えられました 。これは、トーバルズによる公式謝罪と、カーネル開発からの一時的な休止と一致していました。 [97] [98] 2018年11月30日、 行動規範 に従い 、IntelのJarkko Sakkinenは、ソースコードコメントに現れる「fuck」を「hug」という単語に焦点を当てた適切なバージョンに置き換えるパッチを配布しました。 [99]
不当な扱いを受けたと感じた開発者は、 Linux Foundation 技術諮問委員会 に報告することができます。 [100] 2013年7月、USB 3.0ドライバのメンテナーである Sage Sharpは、 Torvaldsに対し、カーネル開発コミュニティにおける中傷的な発言に対処するよう依頼しました。2014年、Sharpは「技術的卓越性へのこだわり、過重労働のメンテナー、そして異なる文化的・社会的規範を持つ人々との相まって、Linuxカーネルメンテナーは仕事を遂行するために、しばしば無愛想で、失礼で、残酷な態度を取る」として、Linuxカーネル開発から撤退しました。 [101] 2018年のlinux.conf.au (LCA) カンファレンスでは、開発者たちはここ数年でコミュニティの文化が大幅に改善されたとの見解を示しました。Intel drm/i915グラフィックスカーネルドライバーのメンテナーであるDaniel Vetterは、カーネルコミュニティにおける「かなり暴力的な言葉遣いと議論」が減少、あるいは消滅したとコメントしました。 [102]
ローラン・ピンチャートは、2017年のEmbedded Linux Conference Europeにおいて、開発者に対しカーネルコミュニティでの経験に関するフィードバックを求めた。提起された問題は、数日後のメンテナーサミットで議論された。開発者が提出したパッチに対するメンテナーの対応に一貫性がないという懸念は、カーネルセルフテストフレームワークのメンテナーである シュア・カーン氏 からも表明された。トーバルズ氏は、異なるカーネルサブシステムが時間の経過とともに異なる開発プロセスを採用してきたため、パッチの取り扱いに一貫性はあり得ないと主張した。そのため、各カーネルサブシステムのメンテナーがパッチ受け入れのルールを文書化することで合意された。 [103]
発達
Linux は進化であり、 インテリジェントな設計 ではありません。
— ライナス・トーバルズ、2005 [104] [105] [106]
コードベース
カーネルのソースコード(ソースツリーとも呼ばれる)は、同じくトルバルズによって作成された Git バージョン管理システム で管理されています。 [107]
2021年現在 [アップデート] 、Linuxカーネル5.11リリースには約3,034万行のコードが含まれています。コードの約14%は「コア」部分であり、アーキテクチャ固有のコード、カーネルコード、メモリ管理コードなどが含まれます。残りの60%はドライバです。
貢献
貢献は、 Linuxカーネルメーリングリスト (LKML)(および多くの場合、特定のサブシステム専用のメーリングリスト)にテキストメッセージの形でパッチとして提出されます 。パッチは、一連のルールと形式言語に準拠する必要があります。形式言語とは、指定されたファイルからどのコード行を削除し、どの行を追加するかを記述するものです。これらのパッチは自動的に処理されるため、システム管理者はコードにわずかな変更を加えたり、段階的に次のバージョンにアップグレードしたりするためにパッチを適用できます。 [108] Linuxは GNU zip (gzip)および bzip2 形式でも配布されています 。
Linux カーネルを変更したい開発者は、コード変更を記述してテストします。変更の重大性と変更されるサブシステムの数に応じて、変更は単一のパッチとして送信されるか、 ソース コード の複数のパッチに分割されます。単一のサブシステムが 1 人のメンテナーによって保守されている場合、これらのパッチは、適切なメーリング リストを Cc に含めて、サブシステムのメンテナーに電子メールで送信されます。メンテナーとメーリング リストの読者はパッチをレビューしてフィードバックを提供します。レビュー プロセスが終了すると、サブシステムのメンテナーは、関連する Git カーネル ツリーにパッチを受け入れます。Linux カーネルへの変更が十分に重要と見なされるバグ修正である場合、パッチのプル リクエストが数日以内に Torvalds に送信されます。そうでない場合、プル リクエストは次のマージ ウィンドウで Torvalds に送信されます。マージ ウィンドウは通常 2 週間続き、前のカーネル バージョンのリリース直後に開始されます。 [109] Gitカーネルソースツリーでは、Linuxカーネルに貢献したすべての開発者の名前が Credits ディレクトリに記載されており、すべてのサブシステムのメンテナーの名前が Maintainers にリストされています。 [110]
多くの大規模オープンソースソフトウェアプロジェクトと同様に、開発者は少数派の貢献者への嫌がらせに対処することを目的とした 行動規範 である 貢献者規約 を遵守する必要があります。 [111] [112] さらに、不快感を与えるのを防ぐために、ソースコード内では 包括的な用語 を使用することが義務付けられています。 [113]
プログラミング言語
Linux は、 ターゲット アーキテクチャ のアセンブリ言語 (GCC の「AT&T スタイル」構文)で記述された コードのインライン セクションを 使用するなど、さまざまな方法で C 標準を拡張するコンパイラである GCC によってサポートされている特殊な C プログラミング言語で記述されています。
2021年9月、Linuxカーネルのコンパイルとビルドに必要なGCCのバージョンがGCC 4.9から5.1に引き上げられ、カーネルを C89標準に基づくCコードから C11 標準 で記述されたコードに移行する可能性が出てきた。 [114] 標準への移行は2022年3月にLinux 5.18のリリースとともに行われる。 [115]
Rust プログラミング言語の初期サポートは、 2022年12月にリリースされたLinux 6.1 [116] で追加され、 [117] Linux 6.2やLinux 6.3などの後続のカーネルバージョンでは、サポートがさらに改善されました。 [118] [119]
コーディングスタイル
2002年以降、コードはLinuxカーネルコーディングスタイルの21のルールに準拠する必要があります 。 [120] [121]
バージョン管理
ほとんどのソフトウェアと同様に、カーネルはドットで区切られた一連の数字としてバージョン管理されます。
初期のバージョンでは、バージョンは メジャーリリース 、 マイナーリリース 、 リビジョンと呼ばれる、ドットで区切られた3つまたは4つの数字で構成されていました。 [14] : 9 当時、奇数番号のマイナーリリースは開発およびテスト用、偶数番号のマイナーリリースは本番用でした。オプションの4桁目はパッチレベルを示していました。 [21]開発リリースにはリリース候補サフィックス( -rc )が付きました 。
現在のバージョン管理の慣習は異なります。dev/prod を暗示する奇数/偶数という表記は廃止され、メジャーバージョンは最初の2つの数字で示されます。次のメジャーバージョンの開発期間が未定の間は、-rcN サフィックスは次期バージョンの n 番目のリリース候補を識別するために使用されます。 [122] 例えば、バージョン 4.16 のリリースの前には、7 つの 4.16-rcN (-rc1 から -rc7 まで) がリリースされていました。安定バージョンがリリースされると、そのメンテナンスは 安定チーム に引き継がれます。安定リリースへのアップデートは、3 つの数字の組み合わせ (例: 4.16.1、4.16.2、...) で識別されます。 [122]
カーネルは通常、 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コンパイラで もコンパイルできるようになったと主張しました。 [123] 2009年にも、改良版2.6.22で同様の成功が報告されました。 [124] [125] Intelコンパイラのサポートは2023年に終了しました。 [126]
2010年以来、 C言語の代替コンパイラである Clang を使用してLinuxを構築する取り組みが進められており、 [127] 2014年4月12日時点で、公式カーネルはほぼClangでコンパイル可能となっている。 [128] [129] この取り組み専用のプロジェクトは、 Clangが構築されている LLVM コンパイラインフラストラクチャにちなんで LLVMLinux と名付けられている。 [130] LLVMLinuxはLinuxまたはLLVMのいずれかをフォークすることを目的としていないため、最終的には上流プロジェクトに提出されるパッチで構成されるメタプロジェクトである。LinuxをClangでコンパイルできるようにすることで、開発者はコンパイル時間の短縮というメリットを享受できる。 [131]
2017年、開発者は4.15リリースで Clang を使ったLinuxカーネルのビルドをサポートするためのアップストリームパッチを完了し、 安定版カーネルツリーの4.4、4.9、4.14ブランチに X86-64 と AArch64 のサポートを バックポートしました。Googleの Pixel 2 は、最初の Clangビルド Linux カーネルを搭載して出荷されましたが 、 [132] Pixel(第1世代) 用のパッチは 存在していました。 [133] 2018年には ChromeOSが デフォルトで Clang を使用してカーネルをビルドするように なり、 [134] Androidは 2019年にカーネルビルドに Clang [135] と LLVM のリンカーLLD [136] を必須にしました。Google は 2020年にデータセンター全体で使用されている製品版カーネルを Clang でビルドするように移行しました。 [137] ClangBuiltLinux グループは、互換性を確保するために Linux と LLVM の両方の修正を調整しており、両方とも LLVMLinux のメンバーで構成され、 LLVMLinux からアップストリームパッチを受け取っています 。
デバッグ
Linuxカーネルパニック出力
他のソフトウェアと同様に、Linuxカーネルの問題のトラブルシューティング は困難です 。よくある課題としては、ユーザー空間とカーネル空間へのアクセス、同期プリミティブの誤用、不適切なハードウェア管理などが挙げられます。 [14] : 364
oops は カーネルにおける致命的ではないエラーです。このようなエラーが発生すると、信頼性に疑問を抱いたまま操作が続行されます。 [138]
パニック( panic() によって生成される)は致命的なエラーです。このようなエラーが発生すると、カーネルはメッセージを出力し、コンピュータを停止させます。 [14] : 371
カーネルは、 printk () による 出力によってデバッグ機能 を提供します。printk()はメッセージを循環バッファに格納し(古いエントリを新しいエントリで上書きします)、 syslog(2) システムコールはメッセージバッファの読み取りとクリア、および コンソールに送信されるメッセージの最大 ログレベルの設定を行います。 [139]カーネルメッセージは、 /dev/kmsg インターフェースを介してユーザーランドにもエクスポートされます 。 [140]
ftraceメカニズム は トレースによるデバッグを可能にします。これは実行時のLinuxの監視とデバッグに使用され、カーネルの誤動作によるユーザー空間の遅延を分析できます。 [141] [142] [143] [144] さらに、 ftraceを 使用すると、ユーザーは起動時にLinuxをトレースできます。 [145]
kprobes と kretprobesは カーネルの実行に割り込んで(ユーザー空間のデバッガーのように)、中断なく情報を収集することができます。 [146] kprobesは (ほぼ)任意のアドレスにコードに挿入できますが、kretprobesは関数の戻り値で動作します。uprobes は 同様の目的を持っていますが、使用方法と実装にはいくつかの違いもあります。 [147]
KGDB を使えば 、Linuxはユーザー空間プログラムとほぼ同じ方法でデバッグできます。KGDBを使用するには、 GDBを実行し、 シリアルケーブル または イーサネットを 介してデバッグ対象に接続された追加のマシンが必要です 。 [148]
変更プロセス
Linuxカーネルプロジェクトは、新しいコードをローリングベースで統合しています。標準的な運用手順として、プロジェクトにチェックインされたソフトウェアは、エラーなく動作し、 コンパイルされ なければなりません。
各カーネル サブシステムには、カーネル コード標準に照らしてパッチを確認し、通常数週間のマージ ウィンドウ内に Torvalds に送信できるパッチのキューを維持する責任を負うメンテナーが割り当てられます。
パッチはトーバルズによって以前の安定版Linuxカーネルのソースコードにマージされ、次期安定版リリースのリリース候補(-rc)が作成されます。マージ期間が終了すると、開発リリースの新しいコードに対する修正のみが受け入れられます。カーネルの-rc開発リリースは 回帰テスト を受け、トーバルズとサブシステムのメンテナーによって安定していると判断されると、新しいバージョンがリリースされ、開発プロセスが再び開始されます。 [149]
メインラインLinux
Linuxカーネルのソースコードを含むGitツリーは、メインラインLinux と呼ばれます 。すべての安定したカーネルリリースはメインラインツリーから派生しており、 [150] kernel.org で頻繁に公開されています 。メインラインLinuxは、Linuxが動作する多くのデバイスのうち、ごく一部のデバイスに対してのみしっかりとしたサポートを提供しています。メインライン以外のサポートは、 Yocto や Linaro などの独立したプロジェクトによって提供されていますが、多くの場合、デバイスベンダーのカーネルが必要になります。 [151] ベンダーカーネルを使用する場合は、 ボードサポートパッケージ が必要になる可能性があります。
メインラインLinuxの外でカーネルツリーを維持することは困難であることが判明しました。 [152]
メインライン化 とは、デバイスのサポートをメインラインカーネルに追加する作業を指します [153]。 以前はフォークでのサポートのみ、あるいは全くサポートがなかったのです。これには通常、ドライバや デバイスツリー ファイルの追加が含まれます。これが完了すると、機能またはセキュリティ修正は メインライン化されたとみなされます [154] 。
Linuxライクなカーネル
安定ブランチのメンテナーである グレッグ・クロア=ハートマンは 、メインラインカーネルに何百万行ものコードを追加するベンダーによる ダウンストリーム カーネルフォークに 「Linuxライク」 という用語を適用した。 [155] 2019年に、 Googleは Android でメインラインLinuxカーネルを使用すること でカーネルフォークの数を減らしたいと述べた。 [156] Linuxライクという用語は、完全なメインラインLinuxカーネルではなく、コードの小さな修正されたサブセットを含む 組み込みLinuxカーネルサブセット にも適用されている 。 [157]
Linuxフォーク
iPodLinux を 起動した iPod
公式Linuxをベースにカーネルを開発しているコミュニティも存在します。Linux -libre 、 Compute Node Linux 、 INK 、 L4Linux 、 RTLinux 、 User-Mode Linux (UML)といった フォーク から興味深いコードがいくつかメインラインにマージされています。 [158] 携帯電話向けに開発されたオペレーティングシステムの中には、Google Android 、 Firefox OS 、HP webOS 、Nokia Maemo 、Jolla Sailfish OS など、当初はLinuxを大幅に改変したバージョンを使用していたものもあります。2010年、LinuxコミュニティはGoogleが事実上独自のカーネルツリーを開始したことを批判しました。 [159] [160]
これは、Androidハードウェアプラットフォーム向けに作成されたドライバは、Googleのカーネルツリーにのみ存在するコードに依存しているため、メインカーネルツリーにマージできないことを意味します。そのため、kernel.orgツリーではビルドに失敗することになります。そのため、Googleはハードウェアドライバとプラットフォームコードの大部分がメインカーネルツリーにマージされることを阻止しました。事実上、多くのベンダーが依存するカーネルブランチが誕生したのです。 [161]
現在、AndroidはカスタマイズされたLinux [162] を採用しており、デバイスドライバに大きな変更が加えられていますが、コアカーネルコードにも一部変更が必要です。Android開発者は公式Linuxにもパッチを提出し、最終的にAndroidオペレーティングシステムを起動できるようにしています。例えば、 Nexus 7 はメインラインLinuxを起動して動作させることができます。 [162]
2001 年にコンピュータ歴史博物館 で行われたプレゼンテーションで 、Torvalds 氏は、Linux ディストリビューションがまったく同じカーネル ソースを使用しているかどうかについての質問に答えて、次のように述べました。
違います…いや、違いますし、違います。単一のカーネルというものはありません。ディストリビューションごとに独自の変更が加えられています。これはほぼ最初から続いています。Yggdrasilが カーネル にかなり極端な変更を加えることで知られていたことを覚えているでしょうか。そして今日でも、主要ベンダーはそれぞれ独自の調整を加えています。なぜなら、彼らは関心のある市場の一部を持っているからです。率直に言って、そうあるべきです。もし皆が、私という一人の人間がすべてを追跡できることを期待しているなら、それはGPLの趣旨ではありません。オープンシステムの趣旨ではありません。ですから、ディストリビューションが何かを非常に重要だと判断して、標準カーネルに含まれていなくてもパッチを追加するという事実は、私にとって非常に良い兆候です。例えば、 ReiserFSのようなものが追加されたのも、そういう理由からです。そして、ReiserFSが標準カーネルに統合された最初のジャーナリングファイルシステムである理由は、私が Hans Reiserを 愛しているからではありません 。 SUSEが ReiserFSを標準カーネルとして出荷し始めたので 、「OK」と返事が来ました。これは実際に本番環境で使われています。普通の人たちもこれをやっています。彼らは私が知らない何かを知っているに違いありません。つまり、多くのディストリビューション会社が実際にやっていることと全く同じで、「自分たちのブランチを作ろう」「これに自分たちの変更を加えよう」という流れに加わっているのです。そしてGPLのおかげで、私は彼らの最良の部分を利用することができます。 [163]
長期サポート
Linuxカーネル2.6.25.17のブートメッセージ
最新バージョンと旧バージョンは別々にメンテナンスされています。最新のカーネルリリースのほとんどは、トーバルズ氏によって監督されました。 [164]
Linuxカーネル開発者コミュニティは、後続の安定カーネルの開発中に発見された ソフトウェアバグ の修正を適用することで、安定したカーネルを維持しています。そのため、www.kernel.orgでは常に2つの安定カーネルがリストされています。次の安定Linuxカーネルは約8~12週間後にリリースされます。
一部のリリースは、 2 年以上のバグ修正リリースを含む 長期 サポート として 指定されています。 [165]
サイズ
Linuxカーネルのサイズを縮小しようと試みたプロジェクトはいくつかあります。その一つが TinyLinux です。2014年、Josh Triplett氏が縮小版の-tinyソースツリーを開始しました。 [166] [167] [168] [169]
アーキテクチャと機能
Linuxカーネルのマップ
Linuxカーネルのソースコード行の サンキーダイアグラム
一見矛盾しているように見えるものの、Linuxカーネルはモノリシックでありながらモジュール化されています。OS全体がカーネル空間で実行されるため、アーキテクチャ的には モノリシックカーネル に分類されます。また、実行時にロード/アンロードされる モジュール から構成できるため、設計はモジュール化されています。 [14] : 338 [170] かつては非フリーオペレーティングシステムのクローズドソースカーネルでしか利用できなかった機能をサポートしています。
この記事の残りの部分では、UNIXおよびUnix系オペレーティングシステムの マニュアルページ の表記規則に従います。コマンド、インターフェース、その他の機能の名前の後に続く数字は、それが属するセクション(つまり、OSのコンポーネントまたは機能の種類)を示します。例えば、 execve(2) はシステムコールを指し、 exec(3) はユーザー空間ライブラリラッパーを指します。
以下は、建築設計と注目すべき特徴の概要です。
同時コンピューティング 、および (実行可能なタスクに十分な CPU コアが利用できる場合) SMP および NUMA アーキテクチャ上での多数の プロセスの 同時実行 (各プロセスには 1 つ以上 の実行スレッド があります)も可能 。
数百のカーネル機能とドライバの選択と設定(ビルド前にmake *config コマンドファミリーの いずれかを使用) [171] [36] [35] ブート 前のカーネルパラメータの変更(通常は GRUB2 メニューの行に命令を挿入することによって )、および実行時のカーネル動作の微調整( /proc/sys/への sysctl(8) インターフェースを使用 )。 [172] [173] [174]
プリエンプティブマルチタスク(ユーザーモードと、2.6シリーズ以降はカーネルモードの両方で)を可能にするタスクスケジューラのポリシーの設定(これもmake *configコマンドを使用 )と実行時の変更[175](nice(2)、setpriority(2) 、 および sched_*(2)システムコールファミリ経由) [ 176 ] [ 177 ] 。 最も 早期 に 有効 な 仮想 期限 優先 スケジューリング (EEVDF)スケジューラ [178] は、2023年以降 のLinuxのデフォルトスケジューラであり、プロセス情報( タスク構造体 )を O(log n)の 時間計算量 で検索、挿入、削除できる 赤黒木 を使用しています。ここで、 n は実行可能なタスクの数です。 [179] [180]
ページ化された仮想メモリ による 高度な メモリ管理 。
プロセス間通信 および 同期 メカニズム。
いくつかの具体的なファイルシステム ( ext4 、 Btrfs 、 XFS 、 JFS 、 FAT32 など) の上にある 仮想 ファイルシステム。
設定可能なI/Oスケジューラ、 特殊ファイルの基になるデバイスパラメータを操作する ioctl(2) [181]システムコール(引数、戻り値、セマンティクスはデバイスドライバに依存するため、非標準のシステムコールです)、POSIX非同期I/O [182] のサポート(ただし、マルチスレッドアプリケーションでは拡張性が低いため、並行処理に適した非同期I/Oコンテキストの管理のために、Linux固有のI/Oシステムコール( io_*(2) [183] )ファミリを作成する必要がありました)。
OSレベルの仮想化 ( Linux-VServer を使用)、 準仮想化 、 ハードウェア支援仮想化 ( KVM または Xen を使用、ハードウェアエミュレーションには QEMU を使用) [184] [185] [186] [ 187] [188] [189] Xen ハイパーバイザーでは、Linuxカーネルは、ユーザーの仮想マシン( DomU )の管理環境を提供する仮想マシンホストサーバーである Dom0 として機能するLinuxディストリビューション(openSUSE Leapなど )の構築をサポートしています。 [190]
VFIO と SR-IOV によるI/O仮想化 。仮想機能I/O(VFIO)は、セキュアメモリ(IOMMU)で保護された環境において、ユーザー空間への直接デバイスアクセスを可能にします。VFIOにより、VMゲストはVMホストサーバー上のハードウェアデバイスに直接アクセスできます。この技術は、完全仮想化と準仮想化の両方と比較してパフォーマンスを向上させます。しかし、VFIOでは、複数のVMゲストでデバイスを共有することはできません。シングルルートI/O仮想化(SR-IOV)は、VFIOのパフォーマンス向上と、複数のVMゲストでデバイスを共有する機能を兼ね備えています(ただし、2つ以上のVMゲストに対して異なるデバイスとして認識される特別なハードウェアが必要です)。 [191]
任意 アクセス制御および 強制アクセス制御 のためのセキュリティメカニズム (SELinux、AppArmor、POSIX ACL など)。 [192] [193]
いくつかの種類の階層化 通信プロトコル ( インターネット プロトコル スイート を含む)。
RPMsg サブシステムを介した 非対称マルチプロセッシング 。
ほとんどの デバイスドライバ とカーネル拡張は カーネル空間 ( 多くの CPU アーキテクチャでは リング0 )で実行され、ハードウェアへのフルアクセスが可能です。一部の例外は ユーザー空間で実行されます。注目すべき例としては、 FUSE /CUSEベースのファイルシステム やUIOの一部が挙げられます。 [194] [195] さらに、 Linuxで多くの人が使用しているウィンドウシステムおよびディスプレイサーバープロトコルである X Window System と Waylandは 、カーネル内では動作しません。一方、 グラフィックスカード の GPUとの実際のインターフェースは、 Direct Rendering Manager (DRM)
と呼ばれるカーネル内サブシステムによって行われます。
標準的なモノリシックカーネルとは異なり、デバイスドライバはモジュール として簡単に構成でき 、システムの実行中にロードまたはアンロードできます。また、 ハードウェア割り込みを正しく処理し、 対称型マルチプロセッシング をより適切にサポートするために、特定の条件下でプリエンプトすることもできます 。 [177] Linuxには、意図的に安定したデバイスドライバ アプリケーションバイナリインターフェース がありません 。 [196]
Linuxは一般的にメモリ保護 と 仮想メモリ を利用し、 非均一メモリアクセス も処理できますが 、 [197] プロジェクトは μClinuxを吸収し、仮想メモリのない マイクロコントローラ 上でLinuxを実行することも可能にしました 。 [198]
ハードウェアはファイル階層で表現されます。ユーザーアプリケーションは、 /dev または /sys ディレクトリ内のエントリを介してデバイスドライバと対話します。 [199]プロセス情報は /proc ディレクトリにマッピングされます 。 [199]
インターフェース
4 つのインターフェースが区別されます。2 つはカーネル内部のインターフェース、2 つはカーネルとユーザー空間のインターフェースです。
LinuxはUNIXのクローンとして始まり、 POSIX および Single UNIX仕様 への準拠を目指しています。 [201] カーネルはLinux固有のシステムコールやその他のインターフェースを提供しています。公式カーネルに組み込むには、コードは一連のライセンス規則に準拠する必要があります。 [8] [13]
カーネルとユーザー空間間の Linux アプリケーションバイナリインターフェース(ABI)には、4つの安定性レベル(安定、テスト、廃止、削除)があります。 [202] システム コールは、それに依存する ユーザー空間 プログラムの 互換性を 維持するために、決して変更されないことが期待されています 。 [203]
ローダブルカーネルモジュール (LKM)は、設計上、安定したABIに依存できません。 [196]そのため、新しいカーネル実行ファイルがシステムにインストールされるたびに、LKMは必ず再コンパイルする必要があります。そうしないと、LKMはロードされません。カーネル実行ファイル( vmlinux )の不可欠な部分となるように設定されたインツリードライバは、 ビルドプロセスによって静的にリンクされます。
ソースレベルのカーネル内API [196] の安定性は保証されておらず、そのため、 デバイスドライバの コードだけでなく、他のカーネルサブシステムのコードもカーネルの進化に合わせて更新し続ける必要があります。APIの変更を行った開発者は、変更の結果として不具合が発生したコードを修正する必要があります。 [204]
カーネルからユーザー空間へのAPI
ユーザーアプリケーションに公開されるインターフェースに関する LinuxカーネルAPI のセットは、基本的にUNIXおよびLinux固有の システムコール で構成されています。 [205] システムコールはLinuxカーネルへのエントリポイントです。 [206] 例えば、Linux固有のシステムコールには clone(2) システムコールのファミリーがあります。 [207]ほとんどの拡張機能は、 ヘッダーファイル で マクロを 定義するか、ユーザーランドコードをコンパイルするときに 有効にする必要があります。 [208] _GNU_SOURCE
システムコールは、非特権ユーザー空間からリング0 の特権カーネル空間への移行を可能にするアセンブリ命令を介してのみ呼び出すことができます 。このため、 C標準ライブラリ (libC)は、必要に応じて [209] 呼び出しプロセスに代わって実行されるC関数を公開することで、ほとんどのLinuxシステムコールのラッパーとして機能します。 [205] 高速ユーザー空間ミューテックス など、libCによって公開されていないシステムコールについては 、 [210]ライブラリはそれらを明示的に呼び出すために使用できる syscall(2) と呼ばれる関数を提供します 。 [211]
疑似ファイルシステム (例: sysfs ファイルシステムや procfs ファイルシステム)と 特殊ファイル (例: /dev/random、、、 その他多数)は、ハードウェアまたは論理(ソフトウェア)デバイスを表すカーネルデータ構造へのインターフェースの別の層を構成します。 /dev/sda[ 212] [213] /dev/tty
カーネルからユーザー空間へのABI
Linux OSには数百種類もの実装が存在し、それぞれに差異があるため、実行可能オブジェクトは、特定のハードウェアアーキテクチャ(つまり、ターゲットハードウェアの ISA )上で実行できるようにコンパイル、アセンブル、リンクされているにもかかわらず、異なるLinuxディストリビューションでは実行できないことがよくあります。この問題は主に、ディストリビューション固有の設定やLinuxカーネルのコードに適用されたパッチセット、システムライブラリ、サービス(デーモン)、ファイルシステム階層、環境変数の差異に起因します。
Linuxディストリビューションのアプリケーションおよびバイナリ互換性に関する主要な標準は、 Linux Standard Base (LSB)です。 [214] [215] しかし、LSBはLinuxカーネルに関する範囲を超えており、デスクトップ仕様、Xライブラリ、Qtなど、Linuxカーネルとはほとんど関係のないものも定義しています。 [216] LSBバージョン5は、いくつかの標準とドラフト(POSIX、SUS、X/Open、 ファイルシステム階層 (FHS)など) に基づいて構築されています。 [217]
LSBのうちカーネルに関係する部分は、 汎用ABI (gABI) [218] 、特に System V ABI [219] [220] と 実行可能ファイルおよびリンク形式 (ELF) [221] [222] 、および プロセッサ固有ABI (psABI)(例えば X86-64のコア仕様) [223] [224]である。
x86_64ユーザープログラムがシステムコールを呼び出すための標準ABIは、システムコール番号を rax レジスタにロードし、その他のパラメータを rdi 、 rsi 、 rdx 、 r10 、 r8 、 r9 にロードし、最後に システムコール アセンブリ命令をコードに配置することです。 [225] [226] [227]
カーネル内API
XDC2014において、AMDのアレックス・デューチャー氏は統合カーネルモードドライバを発表しました。 Linuxのプロプライエタリグラフィックドライバである libGL-fglrx-glx は、 Mesa 3D と 同じ DRMインフラストラクチャを共有します。安定したカーネル内 ABIが 存在しないため、AMDは Catalystで使用されていた以前の バイナリBLOBを 常に適応させる必要がありました。
カーネルサブシステム間には、複数のカーネル内部APIが存在します。カーネルサブシステム内でのみ利用可能なAPIもあれば、カーネル内シンボル(変数、データ構造、関数など)の一部は、EXPORT_SYMBOL () および EXPORT_SYMBOL_GPL() マクロ [229] [230] (後者はGPL互換ライセンスでリリースされるモジュール専用)[231 ] でエクスポートされているかどうかに関わらず、動的ロード可能なモジュール(例えば、オンデマンドでロードされるデバイスドライバ)に公開されます。
Linuxは、データ構造( リンクリスト 、 基数木 、 [232] 赤黒木 、 [233] キュー など)を操作したり、共通ルーチン(ユーザー空間からのデータのコピー、メモリの割り当て、システムログへの行の出力など)を実行したりするカーネル内APIを提供しており、少なくともLinuxバージョン2.6以降は安定している。 [234] [235] [236]
カーネル内 API には、デバイス ドライバーが使用する低レベルの共通サービスのライブラリが含まれています。
カーネル内ABI
Linux開発者は、安定したカーネル内ABIを維持しないことを選択しました。特定のカーネルバージョン用にコンパイルされたモジュールは、再コンパイルしなければ別のバージョンにロードできません。 [196]
プロセス管理
Linuxは、他の カーネル と同様に、プロセスの作成、中断、再開、終了などの管理機能を備えています。他のオペレーティングシステムとは異なり、Linuxカーネルはプロセスをタスクと呼ばれるスレッドのグループとして実装します。2つのタスクが同じ TGIDを 共有する場合、カーネル用語ではタスクグループと呼ばれます。各タスクは task_struct データ構造体によって表されます。プロセスが作成されると、 PID と呼ばれるグローバルに一意な識別子が割り当てられ 、共有することはできません [246] [247]。
新しいプロセスは、 clone [248] ファミリーのシステムコールまたは fork システムコール を呼び出すことで作成できます 。プロセスは、カーネルによって SIGSTOP や SIGCONTなどのシグナルが送られることで中断および再開されます。プロセスは exit システムコールを呼び出すことで自身を終了させることができ、また、 SIGKILL 、 SIGABRT 、 SIGINT などのシグナルが送られることで別のプロセスによって終了させられることもあります 。
実行ファイルが共有ライブラリに動的にリンクされている場合、 動的リンカーを 使用して必要なオブジェクトを検索して読み込み、プログラムの実行準備をしてから実行します。 [249]
ネイティブ POSIXスレッドライブラリ (NPTL) [250] は、POSIX標準スレッドインターフェース( pthreads )をユーザー空間に提供します。カーネルはプロセスやスレッドを認識しませんが、 タスクは認識するため、スレッドはユーザー空間に実装されます。Linuxにおけるスレッドは、 リソース を共有するタスクとして実装されます 。リソースを共有しない場合は、独立したプロセスとして呼び出されます。
カーネルは、ユーザー空間のロックと同期のために futex(7) (高速ユーザー空間ミューテックス)メカニズムを提供します。 [251]操作の大部分はユーザー空間で実行されますが、 futex(2) システムコールを使用してカーネルと通信する必要がある場合があります 。 [210]
上で説明したユーザー空間スレッドとは対照的に、 カーネルスレッドは カーネル空間で実行されます。 [252] カーネルスレッドは、特殊なタスクのためにカーネル自体によって作成されたスレッドであり、カーネルと同様に特権を持ち、どのプロセスやアプリケーションにもバインドされていません。
スケジュール
Linux プロセススケジューラは 、異なるスケジューリングクラスとポリシーを可能にするという意味でモジュール化されています。 [253] [254] スケジューラクラスは、ベーススケジューラコードに登録できるプラグイン可能なスケジューラアルゴリズムです。各クラスは異なるタイプのプロセスをスケジュールします。スケジューラのコアコードは、優先度順に各クラスを反復処理し、実行可能なstruct sched_entity型のスケジュール可能なエンティティを持つ、最も優先度の高いスケジューラを選択します。 [14] : 46–47 エンティティは、スレッド、スレッドのグループ、さらには特定のユーザーのすべてのプロセスである可能性があります。
Linuxは、ユーザープリエンプション と完全な カーネルプリエンプションの 両方を提供します 。 [14] :62〜63 プリエンプションは レイテンシを 削減し、応答性を向上させ、 [255] Linuxをデスクトップアプリケーションや リアルタイム アプリケーションにより適したものにします 。
通常のタスクの場合、カーネルはデフォルトで、 バージョン 2.6.23 で導入された Completely Fair Scheduler (CFS) クラス [ 更新が必要 ]を使用します。 [179] スケジューラは、C ヘッダーで というマクロとして定義されています SCHED_NORMAL。他の POSIX カーネルでは、 と呼ばれる同様のポリシーが SCHED_OTHERCPU タイムスライスを割り当てます (つまり、各プロセスの事前定義済みまたは動的に計算された優先度に応じて、プロセッサ時間の絶対スライスを割り当てます)。Linux CFS は絶対タイムスライスを廃止し、実行可能なプロセスの総数やそれらの実行時間などのパラメータの関数として、CPU 時間の公平な割合を割り当てます。この機能は、相対的な優先度 (nice 値) に依存する一種の重みも考慮に入れます。 [14] : 46–50
ユーザープリエンプションにより、カーネルスケジューラは現在のプロセスを別のプロセスへの コンテキストスイッチ の実行に置き換え、実行に必要なコンピューティングリソース(CPU、メモリなど)を獲得することができます。これはCFSアルゴリズム(特に、 vruntime と呼ばれる変数を用いてエンティティをソートし、vruntimeが小さいもの、つまりCPU時間の割り当てが最も少ないスケジュール可能なエンティティを選択する)に従って行われます。また、アクティブなスケジューラポリシーと相対的な優先度にも従います。 [256] カーネルプリエンプションにより、カーネルは割り込みハンドラが復帰したとき、カーネルタスクがブロックしたとき、そしてサブシステムが明示的にschedule()関数を呼び出したとき、自身をプリエンプトすることができます。
カーネルには、POSIX準拠の [257] リアルタイムスケジューリングクラス SCHED_FIFO (リアルタイム 先入先出 )と SCHED_RR (リアルタイム ラウンドロビン )も含まれており、どちらもデフォルトクラスよりも優先されます。 [253] として知られている追加のスケジューリングポリシーは SCHED DEADLINE 、 最も早い期限優先アルゴリズム (EDF)を実装しており、2014年3月30日にリリースされたカーネルバージョン3.14で追加されました。 [258] [259] SCHED_DEADLINEは他のすべてのスケジューリングクラスよりも優先されます。
PREEMPT_RT バージョン2.6以降のLinux本体に組み込まれている リアルタイムパッチは、 決定論的スケジューラ 、プリエンプションの削除と割り込み無効化(可能な場合)、PIミューテックス(優先度の逆転を防ぐためのロックプリミティブ)、 [260] [261] 高精度イベントタイマー (HPET)、プリエンプティブ リードコピーアップデート (RCU)、(強制)IRQスレッド、およびその他のマイナー機能 のサポートを提供します。 [262] [263] [264]
2023年、ピーター・ジールストラはCFSを EEVDF( earliest qualified virtual deadline first scheduling )スケジューラに置き換えることを提案した。 [265] [266] これはCFSの「レイテンシナイス」パッチの必要性を回避するためである。 [267] EEVDFスケジューラはLinuxカーネルのバージョン6.6でCFSに取って代わった。 [178]
同期
カーネルには並行性を生み出す様々な要因(割り込み、ボトムハーフ、カーネルとユーザータスクのプリエンプション、対称型マルチプロセッシングなど)がある。 [14] : 167
Linux は、クリティカル領域 (アトミックに実行する必要があるコードセクション)、共有メモリの場所 ( グローバル変数 やグローバルスコープの他のデータ構造など)、ハードウェアによって非同期に変更可能なメモリ領域 (C の 型修飾子 を持つなど) を保護するために、さまざまなツールを提供しています。これらは、 アトミック型 (特定の演算子のセットによってのみ操作可能)、 スピンロック 、 セマフォ 、 ミューテックス 、 [268] [14] : 176–198 [269] 、 ロックレスアルゴリズム ( RCU など)で構成されています 。 [270] [271] [272] ほとんどのロックレスアルゴリズムは、 メモリ順序付けを強制し、 コンパイラの最適化 による望ましくない副作用を防ぐ ために、 メモリバリア の上に構築されています。 [273] [274] [275] [276] volatile
PREEMPT_RT メインラインLinuxに含まれるコードは、 プリエンプションを無効にせず、優先度継承をサポートする特殊な種類のミューテックスである RTミューテックスを提供しています。 [277] [278] リアルタイム操作用の設定を使用すると、ほとんどすべてのロックがスリープロックに変更されます。 [279] [264] [278] 優先度継承は、 競合したロックを保持している低優先度タスクに、そのロックが解放されるまで、より優先度の高い待機者の優先度を与えることで、優先度の逆転を回避します。 [280] [281]
LinuxにはLockdep と呼ばれるカーネルロック検証ツールが含まれています 。 [282] [283]
割り込み
割り込み 管理は 単一のジョブと見なすこともできますが、実際には2つに分割されています。この2つに分割されているのは、管理対象となるタスク間の時間制約の違いと同期の必要性によるものです。最初の部分は、 Linuxでは トップハーフと呼ばれる非同期 割り込みサービスルーチン (ISR)で構成され、2番目の部分は、いわゆる ボトムハーフ ( ソフトIRQ 、 タスクレット、 ワークキュー )の3種類のいずれかによって実行されます 。 [14] : 133–137
Linux の割り込みサービスルーチンはネスト可能です。新しい IRQ が、他の優先度の低い ISR をプリエンプトする優先度の高い ISR にトラップされる可能性があります。
メモリ
Linuxカーネルは物理メモリと仮想メモリの両方を管理します。物理メモリはゾーン [284] に分割され、各ゾーンには特定の目的があります。
ZONE_DMA : このゾーンは DMA に適しています。
ZONE_NORMAL : 通常のメモリ操作用。
ZONE_HIGHMEM : 一時マッピングを使用してカーネルのみがアクセスできる物理メモリの一部。
これらのゾーンは最も一般的ですが、他にも存在します。 [284]
Linuxは 4または5レベルの ページテーブルを使用して 仮想メモリ を実装しています。 [285] カーネルは ページング可能 ではありません(つまり、常に物理メモリに常駐し、ディスクにスワップすることはできません)。また、メモリ保護はありません(ユーザー空間とは異なり、 SIGSEGV シグナルはありません)。そのため、メモリ違反が発生すると、システムが不安定になり、クラッシュします。 [14] :20 ユーザーメモリはデフォルトでページング可能ですが、システムコール ファミリーを使用して特定のメモリ領域のページングを無効にすることができます 。
mlock()
ページフレーム情報は、適切なデータ構造体( struct page 型 )に保持されます。これらの構造体は、仮想ページに関連付けられているかどうかにかかわらず、起動直後に生成され、シャットダウンまで保持されます。物理アドレス空間は、アーキテクチャ上の制約と用途に応じて、複数のゾーンに分割されます。複数のメモリバンクを備えたNUMAシステムもサポートされています。 [286]
小さなメモリ チャンクは、 kmalloc()API ファミリを介してカーネル空間に動的に割り当てられ、適切な のバリアントを使用して解放され kfree()、 大きな仮想的に連続したチャンクに使用されます。 vmalloc()必要 な数のページ全体を割り当てます。
kvfree()alloc_pages()
Linuxストレージスタック図 [287]
カーネルには、SLAB、SLUB、SLOBアロケータが設定可能な代替として含まれていました。 [288] [289] SLOBアロケータはLinux 6.4で削除され、[ 290 ] SLABアロケータはLinux 6.8で削除されました。 [291] 唯一残っているアロケータはSLUBで、シンプルさと効率性を目指しており、 [289] PREEMPT_RT 互換性 があり [292] 、Linux 2.6で導入されました。
仮想ファイルシステム
Linuxは、機能や特徴の異なる多数のファイルシステムをサポートしているため、基盤となるファイルシステムから独立した汎用的なファイルシステムを実装する必要があります。 仮想ファイルシステムは 、他のLinuxサブシステム、ユーザー空間、または API とのインターフェースを提供し、基盤となるファイルシステムの異なる実装を抽象化します。VFSは create、、、、 など のシステムコールを実装します。VFSは open、 基盤となるファイルシステムが持つものから独立した
汎用的な スーパーブロック [293] と inodeブロックを実装します。 readwriteclose
このサブシステムでは、ディレクトリとファイルは struct file データ構造 によって表現されます。 ユーザー空間が ファイルへのアクセスを要求すると、 ファイル記述子 (非負の整数値)が返されますが、 カーネル空間 では struct file構造体として返されます。この構造体には、カーネルがファイルまたはディレクトリについて認識しているすべての情報が格納されます。
sysfs と procfsは 、ハードウェア情報と ユーザー空間 プログラムの実行時情報を公開する仮想ファイルシステムです。これらのファイルシステムはディスク上には存在せず、カーネルは コールバック またはルーチンとして実装し、ユーザー空間からアクセスされた際に呼び出されます。
サポートされているアーキテクチャ
Linux を実行する消費者向けデバイス TiVo DVR
もともと 移植性 を考慮して設計されていなかったものの、 [17] [294] Linuxは現在、最も広く移植されているオペレーティングシステムカーネルの1つであり、 ARMアーキテクチャ からIBM z/Architecture メインフレームコンピュータ まで、様々なシステムで動作しています。最初の移植は Motorola 68000 プラットフォームで行われました。カーネルへの変更は非常に根本的なものであったため、TorvaldsはMotorola版を フォーク であり「Linuxライクなオペレーティングシステム」と見なしていました。 [294] しかし、これがきっかけでTorvaldsはより多くのコンピューティングアーキテクチャへの移植を容易にするために、コードの大幅な再構築を主導することになりました。単一のソースツリーでi386だけでなく複数のコードを持つ最初のLinuxは、 DEC Alpha AXP 64ビットプラットフォームをサポートしました。 [295] [296] [294]
LinuxはIBM の Summit のメインオペレーティングシステムとして動作しています 。2019年10月現在 [アップデート] 、世界 最速のスーパーコンピュータ500台 すべてがLinuxカーネルに基づくオペレーティングシステムを実行しています。 [71] これは、最初のLinuxスーパーコンピュータがリストに追加された1998年から大きな変化です。 [297]
Linuxは、 Appleの iPhone 3Gや iPod などのさまざまな携帯機器にも移植されています 。 [298]
サポートされているデバイス
2007年には、Linuxカーネルが認識するハードウェアとプロトコルの包括的なデータベースを構築するLKDDbプロジェクトが開始されました。 [299] このデータベースは、カーネルソースの静的解析によって自動的に構築されます。2014年後半には、様々なLinuxディストリビューションのユーザーの協力を得て、テスト済みのすべてのハードウェア構成のデータベースを自動的に収集するLinuxハードウェアプロジェクトが開始されました。 [300]
ライブパッチ
Ksplice 、 kpatch 、 kGraft などの ライブパッチ 技術を使用することで、カーネルに再起動不要の更新を適用することもできます。ライブカーネルパッチの最小限の基盤は、2015年4月12日にリリースされた カーネル バージョン4.0でLinuxカーネルメインラインに統合されました。livepatchと呼ばれ 、主にカーネルの ftrace機能に基づくこれらの基盤は、ホットパッチを含むカーネルモジュール用の アプリケーションプログラミングインタフェース (API) と、ユーザー空間管理ユーティリティ用のアプリケーションバイナリインタフェース(ABI)を提供することで、kGraftとkpatchの両方によるホットパッチをサポートできる 共通コアを形成します。ただし、Linuxカーネル4.0に含まれる共通コアは x86 アーキテクチャのみをサポートしており、ホットパッチの適用中に 関数 レベルの一貫性を保証するメカニズムは提供していません 。
安全
カーネルのバグは潜在的なセキュリティ問題を引き起こします。例えば、 権限昇格 や サービス拒否攻撃の 経路となる可能性があります。長年にわたり、システムセキュリティに影響を与える数多くのバグが発見され、修正されてきました。 [301] カーネルのセキュリティを向上させるための新機能が頻繁に実装されています。 [302] [303]
Capabilities(7)は、プロセスとスレッドに関するセクションで既に紹介されています。AndroidはCapabilitiesを活用しており、 systemdは 管理者にプロセスのCapabilitiesを詳細に制御する機能を提供します。 [304]
Linuxは、カーネルの攻撃対象領域を減らし、セキュリティを向上させるための豊富なメカニズムを提供しており、これらは総称して Linuxセキュリティモジュール (LSM)と呼ばれています。 [305] これらは Security-Enhanced Linux (SELinux)モジュールで構成されており、そのコードはもともと NSA によって開発され 、その後一般に公開されました。 [306] また、 AppArmor [193]などもあります。SELinuxは現在 GitHub で積極的に開発・保守されています 。 [192] SELinuxとAppArmorは、 強制アクセス制御 (MAC)を含むアクセス制御セキュリティポリシーのサポートを提供します が、複雑さと範囲は大きく異なります。
もう一つのセキュリティ機能はSeccomp BPF(SECure COMPuting with Berkeley Packet Filters)であり、これはパラメータをフィルタリングし、ユーザーランドアプリケーションで利用可能なシステムコールのセットを減らすことで機能します。 [307]
批評家はカーネル開発者がセキュリティ上の欠陥を隠蔽、あるいは少なくとも公表していないと非難しているが、2008年にトーバルズはこれに対して次のように反論した。 [308] [309]
個人的には、セキュリティバグは「普通のバグ」だと考えています。隠蔽はしませんが、追跡して特別なものとして公表することが良い考えだとは全く思っていません。セキュリティ関連の騒ぎに関わりたくない理由の一つは、それが間違った行動を美化し、ひいては助長すると考えているからです。セキュリティ担当者を「英雄」扱いし、まるで普通のバグを修正するだけの人ではないかのように振る舞います。実際、つまらない普通のバグの方がはるかに 重要 です。なぜなら、それらのバグの方がはるかに多いからです。ロックの不具合によるランダムなクラッシュよりも、何か大きなセキュリティホールが「特別」であるかのように美化され、注目されるべきではないと思います。
Linuxディストリビューションは通常、Linuxカーネルの脆弱性を修正するためのセキュリティアップデートをリリースします。多くのディストリビューションでは 、特定のLinuxカーネルバージョンに対して長期間にわたってセキュリティアップデートが提供される
長期サポートリリースを提供しています。
2024年、研究者らはLinuxカーネルのAF_VSOCKサブシステムに深刻な脆弱性(CVE-2024-50264)が存在することを明らかにしました。このバグはメモリ解放後使用(use-after-free)の脆弱性であり、プログラムがメモリを解放した後も使用し続けることで発生するメモリ破損の問題です。 [310] [311] このような脆弱性はカーネルにおいて特に危険であり、攻撃者が権限を昇格させる可能性があります。このバグは2025年5月に修正されました。 [312]
法律上の
ライセンス条件
当初、トーバルズはLinuxを商用利用を禁じるライセンスでリリースしました。 [313] これはバージョン0.12で GNU一般公衆利用許諾書 バージョン2(GPLv2)に変更されました。 [22] このライセンスでは、Linuxの改変版および未改変版の配布と販売が許可されていますが、すべての複製が同じライセンスの下でリリースされ、対応するソースコード全体が添付されているか、または要求に応じて無料でアクセスできることが求められます。 [314] トーバルズはLinuxのライセンスをGPLv2で取得したことを「これまでで最高のこと」と表現しています。 [313]
Linuxカーネルは、 明示的なシステムコール例外(Linux-syscall-note)を伴う GNU General Public Licenseバージョン2(GPL-2.0-only)のみでライセンスされています。 [8] [11] [12] ライセンス所有者に、GPLの一般的な拡張である後継バージョンを選択するオプションは提供されていません。貢献コードは GPL互換ライセンス の下で利用可能でなければなりません。 [13] [204]
ライセンスをGPLの最新バージョン(バージョン3を含む)に変更することがいかに容易か、そしてこの変更がそもそも望ましいことなのかについては、かなりの議論がありました。 [315] トーバルズ自身もバージョン2.4.0のリリース時に、自身のコードはバージョン2でのみリリースされることを明言しました。 [316] しかし、GPLの規約ではバージョンが指定されていない場合はどのバージョンでも使用できると規定されており、 [317] アラン ・コックス は、他のLinux貢献者でGPLの特定のバージョンを指定している人はほとんどいないと指摘しました。 [318]
2006年9月、主要なカーネルプログラマー29人を対象とした調査では、28人が当時のGPLv3草案よりもGPLv2を好んでいることが示されました。トーバルズ氏は、「私はGPLv3の大ファンではないと公言してきたため、部外者の中には私が単に浮いているだけだと思われた人もいると思います」と述べています。 [319]トーバルズ氏、 グレッグ・クロア=ハートマン氏 、 アンドリュー・モートン氏 を含む著名なカーネル開発者グループは 、GPLv3への反対意見をマスコミに表明しました。 [320] 彼らは DRM / tivoization 、特許、そして「追加の制限」に関する条項に言及し、 GPLv3によって「オープンソース・ユニバース」が バルカン化されると警告しました。 [320] [321] LinuxカーネルにGPLv3を採用しないことを決定したトーバルズ氏は、数年後もこの批判を繰り返しました。 [322]
ロード可能なカーネルモジュール
一部のロード可能カーネル モジュール(LKM) が著作権法の下で 派生作品 とみなされるかどうか 、またそれによって GPL の条件に該当するかどうかが
議論されています。
ライセンス規則によれば、カーネルインターフェースのパブリックサブセットのみを使用するLKM [229] [230] は非派生作品であるため、Linuxはシステム管理者にツリー外のバイナリオブジェクトをカーネルアドレス空間にロードするメカニズムを提供しています。 [13]
dma_buf カーネル機能を正当に利用する、ツリー外ロード可能なモジュールがいくつかあります 。 [323] GPL準拠のコードは確かにこれを使用できます。しかし、別の使用例としては、 高速GPUとIntel統合GPUを組み合わせた Nvidia Optimusが挙げられます。この場合、Nvidia GPUはアクティブな Intel フレームバッファに書き込みます。しかし、Nvidiaはこのインフラストラクチャを使用できません。なぜなら、このインフラストラクチャはGPL準拠のLKMでのみ使用できるルールを回避する必要があるからです。 [231] Alan Coxは LKML で 、Nvidiaのエンジニアからのこの技術的強制をAPIから削除するという要請を拒否しました。 [324] TorvaldsはLKMLで、「バイナリのみのカーネルモジュールは『デフォルトで』派生的であると主張する」と明確に述べています。 [325]
一方、トーバルズ氏は、「特にグレーゾーンとなるのは、元々別のオペレーティングシステム用に書かれたドライバ(つまり、明らかにLinuxの派生作品ではないもの)です。これはグレーゾーンであり、Linux用に設計されておらず、Linuxの特別な動作に依存していないという理由だけで、一部のモジュールは派生作品ではないと個人的に考えることができる領域です」とも述べています。 [326]特に プロプライエタリな グラフィックドライバについては、激しい議論が交わされています。
Linuxにプロプライエタリモジュールがロードされるたびに、カーネルは自身を「汚染されている」とマークし、 [327] そのため、汚染されたカーネルからのバグレポートは開発者によって無視されることが多い。
ファームウェアバイナリBLOB
公式カーネル、つまりkernel.orgリポジトリのTorvaldsのgitブランチには、 GNU GPLv2ライセンスの条件に基づいてリリースされた バイナリブロブが含まれています。 [8] [13] Linuxは、バイナリブロブ、独自のファームウェア、ドライバー、またはその他の実行可能モジュールをファイルシステムから読み込み、カーネル空間にリンクすることもできます。 [328]
必要に応じて(例えば、ブートデバイスへのアクセスや速度向上のため)、ファームウェアをカーネルに組み込むことができます。つまり、ファームウェアを vmlinux に組み込むということです。しかし、これは技術的または法的な問題で常に実行可能な選択肢ではありません(例えば、GPLと互換性のないファームウェアではこれを行うことは許可されていませんが、それでもかなり一般的です)。 [329]
商標
Linuxは、アメリカ合衆国、欧州連合、およびその他のいくつかの国において、Linus Torvaldsの 登録 商標です。 [330] [331] この商標をめぐる法廷闘争は、Linuxの開発には一切関与していない弁護士のWilliam Della Croceが、 Linux という語の使用に対してライセンス料を請求し始めた1996年に始まりました。Della Croceが主張する最初の使用よりもずっと前から、この語は一般的に使用されていたことが証明された後、商標はTorvaldsに与えられました。 [332] [333] [334]
ロシアの保守担当者の排除
2024年10月、ロシアのウクライナ侵攻の 最中 、カーネル開発者の グレッグ・クロア=ハートマンは、 ロシアとのつながりを示唆するメールアドレスを持つカーネル開発者の一部をメンテナーから外した。 [335] [336] リーナス・トーバルズは 、ロシアの侵攻を支持しておらず、パッチを元に戻さないと応じ、パッチに反対するのは ロシアの荒らし だとほのめかした。 [337] カーネル開発者のジェームズ・ボトムリーは、この事態の処理について謝罪し、この措置は 米国の対ロシア制裁 の結果であると明らかにした。 [338]
参照
注記
^ Linuxソースコードは全体として、 明示的なシステムコール例外を伴う GPL-2.0のみのライセンスの下で提供されています。 [11] [12] また、個々のファイルはGPL-2.0のみのライセンス(GNU General Public Licenseバージョン2)と互換性のある別のライセンスの下で提供される場合もあれば、GPLバージョン2またはGPLv2互換ライセンスのいずれかを選択できるデュアルライセンスの下で提供される場合もあります。 [13]
参考文献
^ 「Linuxのロゴとマスコット」Linux Online、2008年。2010年8月15日時点のオリジナルよりアーカイブ 。 2024年 9月19日 閲覧。
^ Greg Kroah-Hartman (2025年11月13日). “Linux 6.17.8” . 2025年 11月13日 閲覧 。
^ Greg Kroah-Hartman (2025年11月13日). “Linux 6.12.58” . 2025年 11月13日 閲覧 。
^ Linus Torvalds (2025年11月9日). “Linux 6.18-rc5” . 2025年 11月9日 閲覧 。
^ Russell, Paul Rusty . 「GNU拡張機能」. Linuxカーネルをハッキングするための信頼性の低いガイド. 2025年 8月4日 閲覧 。
^ MaskRay (2024 年 5 月 12 日)。 「Linux カーネルにおける GNU 拡張機能の探索」。 マスクレイ 。 2025 年 8 月 4 日 に取得 。
^ Bergmann, Arnd (2022年3月3日). 「Kbuild: -std=gnu11への移行」. Linuxカーネルメーリングリスト (メーリングリスト). 2023年7月16日時点のオリジナルよりアーカイブ。 2025年 10月19日 閲覧 。
^ abcd "COPYING". git.kernel.org . 2021年9月2日時点のオリジナルよりアーカイブ 。 2021年 9月2日 閲覧。
^ “GNU General Public License v2.0 only”. spdx.org . 2022年7月16日時点のオリジナルよりアーカイブ 。 2021年 9月2日 閲覧。
^ “Linux Syscall Note”. spdx.org . 2023年1月30日時点のオリジナルよりアーカイブ 。 2021年 9月2日 閲覧。
^ ab "GPL-2.0". git.kernel.org . 2023年7月16日時点のオリジナルよりアーカイブ 。 2021年 9月2日 閲覧。
^ ab "Linux-syscall-note". git.kernel.org . 2023年1月18日時点のオリジナルよりアーカイブ 。 2021年 9月2日 閲覧。
^ abcdef 「Linuxカーネルのライセンスルール」。Linux カーネルドキュメント 。2020年3月7日時点のオリジナルよりアーカイブ。 2020年 1月6日 閲覧 。
^ abcdefghijklmn ロバート・ラブ (2010). Linuxカーネル開発 (第3版). アッパーサドルリバー, ニュージャージー州: アディソン・ウェズリー . ISBN 978-0-672-32946-3 。 LCCN 2010018961. OCLC 268788260. OL 25534863M.
^ “C言語ファミリーへの拡張”. 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日). "What would you like to see most in minix?". ニュースグループ : comp.os.minix. Usenet: [email protected] . 2013年5月9日時点のオリジナルよりアーカイブ。 2016年 9月14日 閲覧 。
^ ab ウェルシュ, マット; ダルハイマー, マティアス・カッレ; カウフマン, ラー (1999). 「1: Linux入門」. 『 Running Linux』 (第3版). セバストポル, カリフォルニア州: オライリー・メディア社. p. 5. ISBN 1-56592-976-4 . OCLC 50638246。
^ “Free minix-like kernel sources 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 認定試験 学習ガイド: 試験201および試験202. John Wiley & Sons. p. 107. ISBN 9781119150794 。
^ ab Torvalds, Linus . 「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: [email protected] . 2013年6月2日時点のオリジナルよりアーカイブ。 2007年 1月7日 閲覧 。
^ Clegg, Alan B. (1992年3月31日). "It's here!". ニュースグループ : comp.os.linux. Usenet: [email protected] . 2013年6月2日時点のオリジナルよりアーカイブ。 2007年 1月7日 閲覧 。
^ 「付録A:タネンバウムとトーバルズ論争」 『オープンソース:オープンソース革命の声 』 オライリー社 、1999年、 ISBN 1-56592-582-3 . 2006年 11月22日 閲覧 。
^ Tanenbaum, Andy (1992年1月29日). 「LINUXは時代遅れ」. ニュースグループ : comp.os.minix. Usenet: [email protected] . 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日 閲覧 。
^ 「0.96は来週リリース予定」 www.krsaborio.net 。
^ “refs/tags/v0.96a - pub/scm/linux/kernel/git/nico/archive - Git at Google”. kernel.googlesource.com . 2025年7月27日時点のオリジナルよりアーカイブ。 2025年 5月3日 閲覧 。
^ Hayward, David (2012年11月22日). 「Linuxの歴史:時の流れがペンギンをどう形作ったか」 TechRadar . 2020年3月19日時点のオリジナルよりアーカイブ。 2020年 3月26日 閲覧 。
^ abc Christine Bresnahan & Richard Blum (2016). LPIC-2: Linux Professional Institute 認定試験 学習ガイド: 試験201および試験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 “The Wonderful World of 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日 閲覧 。
^ “The Wonderful World of 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日). 「アナウンス:Linux-next(あるいはアンドリューの夢:-))」 LKML (メーリングリスト). 2010年11月24日時点のオリジナルよりアーカイブ。 2010年 10月30日 閲覧 。
^ Corbet, Jonathan (2010年10月21日). 「linux-nextとパッチ管理プロセス」. LWN.net . Eklektix, Inc. 2010年6月21日時点のオリジナルよりアーカイブ 。 2010年 10月30日 閲覧。
^ “The Linux Kernel Archives”. 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日. 2021年11月14日時点のオリジナルよりアーカイブ。 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日時点のオリジナルよりアーカイブ。 2024年 8月25日 閲覧 。
^ Larabel, Micheal (2019年1月6日). 「Linux 5.0カーネルの多くの新機能と改善点」 www.phoronix.com . 2024年10月16日時点のオリジナルよりアーカイブ。 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日 閲覧 。
^ “Usage Statistics and Market Share of Unix for Websites, March 2020”. w3techs.com . 2021年9月25日時点のオリジナルよりアーカイブ 。 2020年 3月17日 閲覧。
^ ab “TOP500 スーパーコンピュータサイト: オペレーティングシステムファミリー / Linux”. Top500.org. 2012年11月19日時点のオリジナルよりアーカイブ。 2025年 8月10日 閲覧 。
^ 「ガートナー、2014年のタブレット販売台数は全デバイス数の10%未満と発表」(プレスリリース)。 英国エガム : ガートナー 。2014年10月15日。2014年10月17日時点のオリジナルよりアーカイブ。 2014年 10月19日 閲覧 。
^ Lunden, Ingrid (2014年10月15日). 「Androidスマートフォンの急成長を受け、2014年のタブレット売上高は急落:ガートナー」 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日 閲覧 。
^ 「EUのICTセクターにおけるFLOSSのイノベーションと競争力への経済的影響」 (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日 閲覧。
^ “The Linux Kernel Archives”. www.kernel.org . 2011年2月21日時点のオリジナルよりアーカイブ 。 2023年 2月28日 閲覧。
^ ab “2017 State of Linux Kernel Development”. The Linux Foundation . 2017年10月25日. 2020年5月27日時点のオリジナルよりアーカイブ 。 2020年 5月27日 閲覧。
^ 「私が辞めた理由:カーネル開発者コン・コリバス」 APC Magazine 、ACP Magazines、2007年7月24日。2011年7月7日時点のオリジナルよりアーカイブ。 2011年 8月15日 閲覧 。
^ Corbet, Jonathan (2007年7月25日). 「Re: -mm merge plans 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日). 「A tale of two SCSI targets」. 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日). 「世界中の人々を怒らせたリーナス・トーバルズ、自身の弁護士を『厄介な化膿性疾患』と呼ぶ」 The Register . 2018年2月15日時点のオリジナルよりアーカイブ。 2018年 2月14日 閲覧 。
^ Kroah-Hartman, Greg. 「[PATCH 000/190] umn.edu のすべてのコミットの取り消し」 Linux Kernel Mailing List Archive . 2022年1月13日時点のオリジナルよりアーカイブ。 2022年 1月13日 閲覧 。
^ Chin, Monica (2021年4月30日). 「ある大学がLinuxカーネルから追放された経緯」The Verge. 2022年1月13日時点のオリジナルよりアーカイブ。 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日). 「規範、紛争、そして行動」. LWN.net . 2018年9月19日時点のオリジナルよりアーカイブ 。 2018年 9月19日 閲覧。
^ Cohen, Noam (2018年9月19日). 「長年の悪質なメールの後、Linuxの創始者が退任」 ニューヨーカー誌 . 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カーネル開発 . ピアソン・エデュケーション. p. 11. ISBN 9780768696790 。
^ Robert Love (2010). Linuxカーネル開発: Linuxカーネル開発 . ピアソン・エデュケーション. p. 12. ISBN 9780768696790 。
^ “開発プロセスの仕組み”. 2017年12月9日時点のオリジナルよりアーカイブ 。 2018年 2月4日 閲覧。
^ Robert Love (2010). Linuxカーネル開発: Linuxカーネル開発 . ピアソン・エデュケーション. p. 13. ISBN 9780768696790 。
^ 「貢献者行動規範」 Linuxカーネルドキュメント 。2021年10月6日時点のオリジナルよりアーカイブ。 2021年 10月6日 閲覧 。
^ 「Linuxカーネル貢献者契約行動規範の解釈」 Linuxカーネルドキュメント 。2021年10月6日時点のオリジナルよりアーカイブ。 2021年 10月6日 閲覧 。
^ Williams, Dan. "[PATCH] CodingStyle: Inclusive Terminology". Linuxカーネルメーリングリスト . 2021年10月22日時点のオリジナルよりアーカイブ。 2021年 10月22日 閲覧 。
^ 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日時点のオリジナルよりアーカイブ。 2023年 5月12日 閲覧 。
^ Proven, Liam. 「Linux 6.1: Rustがメインラインカーネルに採用」 The Register . 2022年10月12日時点のオリジナルよりアーカイブ。 2023年 5月12日 閲覧 。
^ Sharwood, Simon (2022年12月11日). 「Linus TorvaldsがLinuxカーネル6.1を公開」 The Register . 2023年5月12日時点のオリジナルよりアーカイブ 。 2023年 5月12日 閲覧。
^ Corbet, Jonathan. 「6.2カーネルにおけるRust」 LWN.net . 2023年6月3日時点のオリジナルよりアーカイブ。 2023年 5月12日 閲覧 。
^ Larabel, Michael. 「Linux 6.3向けにRustコードがさらに充実 - Rustドライバーのアップストリーム化も間近」 Phoronix . 2023年5月12日時点のオリジナルよりアーカイブ。 2023年 5月12日 閲覧 。
^ “HOWTO do Linux kernel development — The Linux Kernel documentation”. 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日時点のオリジナルよりアーカイブ。 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 (2014年8月22日). 「Patch By Patch, LLVM Clang Gets Better At Building The Linux Kernel」. Phoronix . 2020年8月13日時点のオリジナルよりアーカイブ。 2025年 8月10日 閲覧 。
^ 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.com . llvm.org. 2020年12月31日時点のオリジナルよりアーカイブ。 2025年 8月10日 閲覧 。
^ 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 . 2021年4月14日時点のオリジナルよりアーカイブ 。 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日 閲覧。
^ “Kernel Probes (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年4月23日時点のオリジナルよりアーカイブ。 2021年 3月15日 閲覧 。
^ Amadeo, Ron (2019年11月20日). 「Google、AndroidにおけるメインラインLinuxカーネルのサポート計画を概説」 Ars Technica . 2021年4月9日時点のオリジナルよりアーカイブ。 2021年 3月31日 閲覧 。
^ Bruchon, Jody (2021年4月24日), jbruchon/elks、2021年5月2日時点のオリジナルよりアーカイブ。 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日 閲覧。
^ ab ロジャー・イェ (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 . 2025年7月27日時点のオリジナルよりアーカイブ 。 2024年 11月22日 閲覧。
^ “Kernel tinification [LWN.net]”. lwn.net . 2024年11月12日時点のオリジナルよりアーカイブ 。 2024年 11月22日 閲覧。
^ Brown, Eric (2017年4月13日). 「IoT向けLinuxカーネルとファイルシステムの縮小」. Linux.com . 2024年10月6日時点のオリジナルよりアーカイブ 。 2024年 11月22日 閲覧。
^ 雫石卓也、松原克也 (2020年3月30日). 「リソース消費を最小化するLinuxカーネルの効率的なTin化」. 第35回ACM応用コンピューティングシンポジウム論文集 . pp. 1228– 1237. doi :10.1145/3341105.3373913. ISBN 978-1-4503-6866-7 . 2025年1月20日時点のオリジナルよりアーカイブ 。 2024年 11月22日 閲覧。
^ “README”. git.kernel.org. 2012年7月24日時点のオリジナルよりアーカイブ 。 2021年 3月24日 閲覧。
^ “KernelBuild - Linux Kernel Newbies”. kernelnewbies.org . 2020年10月19日時点のオリジナルよりアーカイブ 。 2020年 9月13日 閲覧。
^ “The Sysctl Interface”. 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日 閲覧。
^ ab “EEVDFスケジューラがLinux 6.6に統合され、Intelハイブリッドクラスタースケジューリングが再導入”. Phoronix . 2023年9月11日時点のオリジナルよりアーカイブ 。 2023年 9月10日 閲覧。
^ ab Molnár, Ingo (2007年4月13日). 「[patch] Modular Scheduler Core and Completely Fair Scheduler [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、Linux 3.0でDom0とDomUの完全サポートを発表 – 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日時点のオリジナルよりアーカイブ。 2021年 9月30日 閲覧 。
^ ab "SELinux Project". GitHub . 2019年12月12日時点のオリジナルよりアーカイブ 。 2020年 1月10日 閲覧。
^ ab "AppArmor". Linuxカーネルドキュメント . 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 発表」。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 source code (v5.8) - Bootlin”. elixir.bootlin.com . 2021年4月14日時点のオリジナルよりアーカイブ 。 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 Specification, 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. | Developers | Gabi | 2003年12月17日 | System V Application Binary Interface - DRAFT”. 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 。
^ Drysdale, David (2014年7月9日). 「システムコールの解剖学 パート1 [LWN.net]」. lwn.net . 2020年8月18日時点のオリジナルよりアーカイブ 。 2020年 7月16日 閲覧。
^ “システムコールの解剖学、パート2 [LWN.net]”. lwn.net . 2020年8月6日時点のオリジナルよりアーカイブ。 2020年 7月16日 閲覧 。
^ 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 documentation」 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 documentation」 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日時点のオリジナルよりアーカイブ。 2021年 11月19日 閲覧 。
^ “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日 閲覧 。
^ "[PATCH v3 1/2] fork: clone3を追加 [LWN.net]". lwn.net . 2020年7月16日時点のオリジナルよりアーカイブ。 2020年 7月16日 閲覧 。
^ “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スケジューラ」. Linux Journal . Belltown Media, Inc. 2021年2月2日時点のオリジナルよりアーカイブ 。 2012年 4月14日 閲覧。
^ BKK19-TR03 - Linuxカーネルスケジューラ - 概要、2019年4月23日、2021年12月15日時点のオリジナルよりアーカイブ。 2021年 5月17日 閲覧。
^ “Lowering Latency in Linux: Introducing a Preemptible Kernel | Linux Journal”. Linuxjournal.com . 2020年8月9日時点のオリジナルよりアーカイブ。 2020年 8月17日 閲覧 。
^ “CFS Scheduler — Linux Kernel ドキュメント”. Kernel.org . 2021年5月1日時点のオリジナルよりアーカイブ 。 2021年 5月1日 閲覧。
^ 「IEEE Standard for Information Technology – Portable Operating System Interface, POSIX.1b, Real-time extensions (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年11月26日時点のオリジナルよりアーカイブ。 2021年 12月17日 閲覧 。
^ “RT-mutex サブシステムとPIサポート — Linuxカーネルドキュメント”. Kernel.org . 2021年11月26日時点のオリジナルよりアーカイブ。 2021年 12月17日 閲覧 。
^ McKenney, Paul (2005年8月10日). 「リアルタイムプリエンプションの概要」 LWN.net . 2020年8月10日時点のオリジナルよりアーカイブ 。 2012年 2月5日 閲覧。
^ “OSADLプロジェクト: Realtime Linux”. OSADL . 2021年2月4日時点のオリジナルよりアーカイブ 。 2012年 2月5日 閲覧。
^ ab Rostedt, Steven (2018年10月24日). 「リアルタイムがLinuxにやってくる。それはあなたにとって何を意味するのか?」 (PDF) . 2025年7月27日時点のオリジナルより アーカイブ (PDF) . 2025年 8月10日 閲覧 。
^ “EEVDFスケジューラはLinux 6.6に搭載される予定”. Phoronix . 2023年8月29日時点のオリジナルよりアーカイブ 。 2023年 8月31日 閲覧。
^ "[PATCH 00/10] sched: EEVDF using latency-nice [LWN.net]". LWN.net . 2023年9月2日時点のオリジナルよりアーカイブ。 2023年 9月10日 閲覧 。
^ “An EEVDF CPU scheduler for Linux [LWN.net]”. LWN.net . 2023年9月1日時点のオリジナルよりアーカイブ 。 2023年 8月31日 閲覧。
^ “locking — The Linux Kernel documentation”. Kernel.org . 2022年1月23日時点のオリジナルよりアーカイブ 。 2021年 12月17日 閲覧。
^ “locking.rst - Documentation/kernel-hacking/locking.rst - Linux source code (v5.11.10) - Bootlin”. elixir.bootlin.com . 2021年4月14日時点のオリジナルよりアーカイブ。 2021年 3月29日 閲覧 。
^ “RCUとは、根本的に何なのか? [LWN.net]”. lwn.net . 2021年5月4日時点のオリジナルよりアーカイブ 。 2021年 3月29日 閲覧。
^ “RCUとは?パート2:使用方法 [LWN.net]”. lwn.net . 2021年3月8日時点のオリジナルよりアーカイブ 。 2021年 3月29日 閲覧。
^ “RCU パート3: RCU API [LWN.net]”. lwn.net . 2021年3月22日時点のオリジナルよりアーカイブ 。 2021年 3月29日 閲覧。
^ 「Linuxカーネルメモリモデル」. open-std.org . 2021年 3月29日 閲覧 。
^ “A formal kernel memory-ordering model (part 1) [LWN.net]”. lwn.net . 2021年4月14日時点のオリジナルよりアーカイブ。 2021年 3月29日 閲覧 。
^ “A formal kernel memory-ordering model (part 2) [LWN.net]”. lwn.net . 2021年4月14日時点のオリジナルよりアーカイブ。 2021年 3月29日 閲覧 。
^ Stern, Alan. 「Linuxカーネルメモリ一貫性モデルの説明」。2021年4月14日時点のオリジナルよりアーカイブ。 2021年 3月29日 閲覧 。
^ “kernel/git/torvalds/linux.git - Linuxカーネルソースツリー”. git.kernel.org . 2021年11月10日時点のオリジナルよりアーカイブ。 2021年 12月17日 閲覧 。
^ ab 「ロックの種類とそのルール — Linuxカーネルドキュメント」 Kernel.org . 2021年11月4日時点のオリジナルよりアーカイブ。 2021年 12月17日 閲覧 。
^ “Short subject: Realtime, Futexes, and ntfs3”. Lwn.net . 2022年12月8日時点のオリジナルよりアーカイブ 。 2022年 2月20日 閲覧。
^ “RT-mutex サブシステム(PI サポート付き)— Linux カーネルドキュメント”. Kernel.org . 2022年3月18日時点のオリジナルよりアーカイブ 。 2022年 2月20日 閲覧。
^ “RT-mutexの実装設計 — Linuxカーネルドキュメント”. 2020年6月16日時点のオリジナルよりアーカイブ 。 2021年 11月27日 閲覧。
^ “Runtime locking correctness validator — The Linux Kernel documentation”. Kernel.org . 2021年12月15日時点のオリジナルよりアーカイブ。 2021年 12月17日 閲覧 。
^ “割り込み、スレッド、lockdep [LWN.net]”. lwn.net . 2021年11月27日時点のオリジナルよりアーカイブ。 2021年 12月17日 閲覧 。
^ ab 「物理メモリ — Linuxカーネルドキュメント」. docs.kernel.org . 2025年1月29日時点のオリジナルよりアーカイブ 。 2025年 1月26日 閲覧。
^ 「ページテーブル — Linuxカーネルドキュメント」 www.kernel.org . 2024年 7月21日 閲覧 。
^ “物理メモリ — Linuxカーネルドキュメント”. www.kernel.org . 2024年7月22日時点のオリジナルよりアーカイブ。 2024年 7月21日 閲覧 。
^ “Linuxストレージスタック図”. Thomas-krenn.com . 2020年8月3日時点のオリジナルよりアーカイブ。 2020年 3月19日 閲覧 。
^ “The SLUB allocator”. Lwn.net . 2007年4月11日. 2022年3月9日時点のオリジナルよりアーカイブ 。 2022年 2月20日 閲覧。
^ ab 「Linuxカーネルのスラブアロケータ:SLAB、SLOB、SLUB」 (PDF) . Events.static.linuxfound.org . 2022年 2月20日 閲覧 。
^ Corbet, Jonathan (2023年4月28日). “6.4 Merge window, part 1 [LWN.net]”. LWN.net . 2023年5月12日時点のオリジナルよりアーカイブ。 2023年 5月12日 閲覧 。
^ “6.8マージウィンドウの前半 [LWN.net]”. lwn.net . 2024年9月15日時点のオリジナルよりアーカイブ 。 2024年 7月21日 閲覧。
^ “Kernel/Git/Torvalds/Linux.git - Linuxカーネルソースツリー”. Git.kernel.org . 2021年11月10日時点のオリジナルよりアーカイブ。 2021年 11月10日 閲覧 。
^ 「スーパーブロック(システム管理ガイド:基本管理)」. docs.oracle.com . 2025年1月29日時点のオリジナルよりアーカイブ。 2025年 1月26日 閲覧 。
^ abc トーバルズ, Linus (1999年1月). 「Linuxのエッジ」. オープンソース:オープンソース革命の声 . O'Reilly . ISBN 1-56592-582-3 . 2013年 10月13日 閲覧 。
^ 「DEC AlphaへのLinuxの移植:カーネルとシェル」。2019年9月5日時点のオリジナルよりアーカイブ。 2019年 10月5日 閲覧 。
^ “Linux on Alpha: A Strategic Choice”. 2019年9月4日時点のオリジナルよりアーカイブ。 2019年 10月5日 閲覧 。
^ “Avalon Cluster | TOP500 Supercomputer Sites”. 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日 閲覧 。
^ Mookhey, KK; Burghate, Nilesh (2005年7月1日). Linux: セキュリティ、監査、および制御機能. 米国: ISACA . p. 14. ISBN 1-893209-78-4 . LCCN 2005284667. OCLC 69327696. OL 12217098M. 2013年6月2日時点のオリジナルよりアーカイブ。 2010年 12月31日 閲覧 。
^ ハッチ、ブライアン(2008年7月15日)『Linuxのハッキング:Linuxのセキュリティの秘密と解決策』 マグロウヒル・オズボーン・メディア 、524ページ、 ISBN 978-0-07-226257-5 . OCLC 234073834. OL 9585473M. 2013年6月2日時点のオリジナルよりアーカイブ 。 2010年 12月31日 閲覧。
^ イェーガー、トレント(2008年10月7日)『オペレーティングシステムのセキュリティ』Morgan and Claypool Publishers、122ページ 。ISBN 978-1-59829-212-1 . OCLC 141384425. OL 12496480M. 2013年6月2日時点のオリジナルよりアーカイブ 。 2010年 12月31日 閲覧。
^ Corbet, Jonathan. 「CAP_PERFMON — および新機能全般」 lwn.net . 2020年8月4日時点のオリジナルよりアーカイブ。 2020年 8月2日 閲覧 。
^ 「Linuxセキュリティモジュールの使用法」 Linuxカーネルドキュメント 。2020年5月2日時点のオリジナルよりアーカイブ。 2020年 1月10日 閲覧 。
^ 「SELinux よくある質問(FAQ)」. 国家安全保障局 . 2019年9月18日時点のオリジナルよりアーカイブ 。 2020年 1月10日 閲覧。
^ “Seccomp BPF (SECure COMPuting with filters)”. Linuxカーネルドキュメント . 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日 閲覧 。
^ “NVD – CVE-2024-50264”. nvd.nist.gov . 2024年11月18日. 2025年 9月11日 閲覧 。
^ "CVE-2024-50264". Ubuntu . 2024年11月19日. 2025年 9月11日 閲覧 。
^ "CVE-2024-50264". cve.org . 2024年11月19日. 2025年 9月11日 閲覧 。
^ ab ヤマガタヒロオ (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日 閲覧。
^ 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日). “Kernel developers' position on GPLv3: The Dangers and Problems with 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 Conference. 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 documentation”. 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日 閲覧。
^ “Linux TM の EU における登録”. 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日 閲覧 。
^ Kroah-Hartman, Greg . 「[PATCH] MAINTAINERS: さまざまなコンプライアンス要件により、一部のエントリを削除」 Linuxカーネルメーリングリスト (メーリングリスト) . 2025年 8月11日 閲覧 。
^ ケビン・パーディ(2024年10月24日)「ロシア人コーダーの排除がLinuxカーネルの政治的側面をめぐる議論を刺激」 Ars Technica . 2024年 11月18日 閲覧 。
^ Torvalds, Linus (2024年10月23日). 「Re: [PATCH] Revert "MAINTAINERS: Remove some entries due to various compliance requirements."」 Linuxカーネルメーリングリスト (メーリングリスト) . 2025年 8月11日 閲覧 。
^ Bottomley, James (2024年10月24日). 「Re: linux: Goodbye from a Linux community volunteer」. Linuxカーネルメーリングリスト (メーリングリスト) . 2025年 8月11日 閲覧 。
さらに読む
トーバルズ、ライナス、ダイアモンド、デイヴィッド(2001年)『 Just for Fun: The Story of an Accidental Revolutionary(偶然の革命家の物語 )』 ハーパービジネス社 、 ISBN 978-0066620732 。
ニコライ・ベズロウコフ著「第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日 閲覧。
Rosen, Rami (2014). Linuxカーネルネットワーク (PDF) . バークレー, CA: Apress. doi : 10.1007/978-1-4302-6197-1 . ISBN 978-1-4302-6196-4 . 2025年 8月10日 閲覧 。
「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。
外部リンク
Wikimedia Commons には、Linux カーネルに関連するメディアがあります。
WikibooksにはLinuxカーネル に関する詳細があります
公式サイト
Linuxカーネルドキュメントインデックス
Linuxカーネルのマニュアルページ
カーネル Bugzilla、および最近のカーネル バージョンごとのリグレッション
カーネル関連のさまざまな情報源であるKernel Newbies
カーネル関連情報の信頼できる情報源であるLWN.netのカーネルカバレッジ
Bootlin の Elixir Cross Referencer、Linux カーネル ソースコードの相互参照ツール
Greg Kroah Hartman がYouTube で Linux カーネルについて語る
仮想ファイルシステム、Linux汎用ファイルシステム実装