Linuxカーネルはほぼ25歳です。1991年(開始日)以降のLinuxカーネルの開発履歴、および1994年(1.0.0)から今日までの部分的な短いバージョンを作成する必要があった場合、私はできませんでした。カーネルリリースノートを1つ1つ読むのではなく、最善の方法は、バージョン3.11までのカーネルに追加された一般的なリリース機能である以下を提供することです(ノートとリンクは省略)。
- Linuxカーネルのバージョン1.0は1994年3月14日にリリースされました。このリリースのLinuxカーネルは、シングルプロセッサのi386ベースのコンピューターシステムのみをサポートしていました。移植性が懸念されるようになったため、 バージョン1.2(1995年3月7日リリース)は、Alpha、SPARC、およびMIPSアーキテクチャに基づくプロセッサを使用するコンピュータシステムのサポートを獲得しました。
- バージョン2.0は1996年6月9日にリリースされました。シリーズには41のリリースがありました。2.0の主な機能は、SMPサポート(つまり、単一システムでの複数のプロセッサのサポート)と、より多くの種類のプロセッサのサポートでした。
- バージョン2.2(1999年1月26日リリース)は、グローバルスピンロックを削除し、改善されたSMPサポートを提供し、m68kおよびPowerPCアーキテクチャと新しいファイルシステム(MicrosoftのNTFSの読み取り専用サポートを含む)のサポートを追加しました。
- 2001年1月4日にリリースされたバージョン2.4.0には、ISAプラグアンドプレイ、USB、およびPCカードのサポートが含まれていました。また、Hewlett-PackardのPA-RISCプロセッサのサポートも含まれていました。2.4.xの開発では、シリーズの期間を通じて、Bluetooth、Logical Volume Manager(LVM)バージョン1、RAIDサポート、InterMezzo、ext3ファイルシステムのサポートなど、より多くの機能が利用できるようになりました。
- バージョン2.6.0は2003年12月18日にリリースされました。2.6.xの開発は、シリーズの全期間を通じて新しい機能を含めるようにさらに変更されました。2.6シリーズで行われた変更には、メインラインカーネルソースへのµClinuxの統合、PAEサポート、CPUのいくつかの新しいラインのサポート、メインラインカーネルソースへのALSAの統合、最大2 32ユーザー(最大2 16)、最大2 29プロセスIDのサポート(64ビットのみ、32ビットアーチはまだ2 15に制限されています))、デバイスタイプの数と各タイプのデバイスの数を大幅に増やし、64ビットサポートを改善し、最大16テラバイトのファイルサイズをサポートするファイルシステムのサポート、カーネル内プリエンプション、ネイティブPOSIXスレッドライブラリのサポート(NPTL)、メインラインカーネルソースへのユーザーモードLinux統合、メインラインカーネルソースへのSELinux統合、InfiniBandサポートなどがあります。また、注目すべきは、FUSE、JFS、XFS、ext4など、2.6.xリリース全体でいくつかのファイルシステムが追加されていることです。2.6カーネルシリーズの歴史の詳細は、kernel.orgの2.6カーネルシリーズソースコードリリースエリアのChangeLogファイルに記載されています。
- バージョン3.0は2011年7月22日にリリースされました。トーバルズは、大きな変化は「何もありません。絶対に何もない」と発表しました。2011年5月30日、トーバルズは次のように発表しました。「...次のリリースは、まったく新しい光沢のある数字ではなく、優れたカーネルでもあることを確認しましょう。」予想される6〜7週間の開発プロセスの後、Linuxの20周年の近くにリリースされます。
- 2012年12月、Torvaldsはi386プロセッサのサポートを削除することでカーネルの複雑さを軽減することを決定し、3.7カーネルシリーズ は元のプロセッサを引き続きサポートする最後のシリーズになりました。同じシリーズは、ARMプロセッサのサポートを統合しました。
- 2013年9月2日にリリースされたバージョン3.11は、一時ファイルの脆弱性を減らすためのopen(2)の新しいO_TMPFILEフラグ、実験的なAMD Radeon動的電力管理、低遅延ネットワークポーリング、zswap(圧縮スワップキャッシュ)などの多くの新機能を追加します。
また、長年にわたってLinux Foundationがカーネル開発について報告していることも付け加えることができます。2012-2013カーネル開発のハイライトは次のとおりです。
- 536の企業(私たちが知っている)を代表する3,738人の開発者からほぼ92,000の変更セットがマージされました。
- 重要な新機能の膨大な配列がメインラインにマージされました。これらには、完全なティックレス操作、ユーザー名前空間、ARMのKVMおよびXen仮想化、スケジューラーでのエンティティごとの負荷追跡、ユーザー空間チェックポイント/再起動、64ビットARMアーキテクチャサポート、F2FSフラッシュ指向ファイルシステム、多くのネットワーク改善が含まれますレイテンシとバッファの膨張の問題では、ブロックストレージデバイスの高速キャッシングを提供する2つの独立したサブシステムなどがあります。
- Android固有のカーネル機能をめぐる長年の争いは、完全に背景に消えていきました。よく議論されている「ウェイクロック」機能は、最新のAndroidデバイスで使用されている別のメインラインソリューションに静かに置き換えられました。
- この期間中、開発カーネルのバグを見つけるための自動化ツールの使用が大幅に増加しました。「トリニティ」ファズテスターやゼロデイビルドブートシステムなどのツールは、リリース前のカーネルで多数のバグを検出し、開発サイクルを短縮し、コミュニティがより高品質のリリースを提供できるようにします。
- モバイルおよび組み込み業界からの貢献は増え続けています。たとえば、Linaro、Samsung、およびTIは、このペーパーの以前のバージョンの変更の4.4%を共同で提供しました。3.10までの期間、それらはすべての変更のほぼ11%に貢献しました。
- カーネルプロジェクトは初めて女性向けのアウトリーチプログラムに参加し、7つの職種に41のアプリケーションを提供しました。アプリケーションプロセス中に、374個のパッチがカーネルに送信され、それらのパッチの1/3以上が3.10カーネルリリースで受け入れられました。インターンプロセスは現在進行中ですが、その結果は、将来のカーネルリリースまで表示されません。
さらに、個々のコミットを超えるメトリックがあるため、カーネルに何が起こっているのかを定量化することはそれほど難しくありません。たとえば、1994年の1.0.0カーネルには176 250行のコードがありました。そして、3.10のような現代のカーネルには15 803 499行のコードがあります。かなりもっと。カーネルのリリース頻度が増加し(3.10の場合は63日間)、変更率も増加しました(私たちが話すように1時間あたり9コミット以上)。Linux Foundationを引用するには:
この変化率を何年も維持する能力は、以前のパブリックソフトウェアプロジェクトでは前例のないものです。
しかし、これはすべて私の意見ではほとんど洞察をもたらしません。したがって、私は尋ねます:
- この四半世紀の進化は、 このカーネルを構成するすべてのリストされた機能を時間の経過とともに線形的に追加することを超えて、簡単に修飾できますか?
- そして、これは、Linuxカーネルが何であるか、またはそれがどこに向かっているのかについての洞察をもたらしますか?25年の開発の後、それについていくつかの結論を確かに引き出すことができますか?
すべてを言うことなく、すべてを言う素人の言葉で抽象的な答えを探しています。