持続性のある構築

Corbet_jp's picture

 カーネル デベロップメント コミュニティが 2.6.12-rc2 commit と git ソース コード管理システムを使用して暫定的にスタートしてから、5年経ちました。当初は手探りでした。突然のコア ツール変更後、開発プロセスが元のスピードに戻るのにどのくらい時間がかかるのか、誰もわかりませんでした。しかし git はほとんどすぐに有効になり、その後の作業を残すだけとなりました。開発プロセスを効率化することが git の利点ですが、カーネルがどのように開発されているのかがよくわかる、というメリットもあります。つまり、変更されていないコードについてもチェックすることができます。

 
この開発プロセスのスピードは衝撃的です。近くリリースされる 2.6.33 カーネルは、約 11,000 個の変更が含まれる製品で、約 100 万行のコードがその変更の影響を受けています (2.6.33 の統計値の詳細については、こちらを参照)。この程度の数字は、3 ヶ月の開発サイクルではとるに足らないものです。あらゆるものは常に高速に動いています。
 
git に最初にコミットされた 2.6.12-rc2 カーネルのうち、残される部分はほとんどないだろうと思っている方がいらっしゃるでしょう。結局、この開発サイクルで 50 万行以上が削除されました。私は興味があったので、少々詳しく見てみることにしました。ハッカー的な Python スクリプトを作成し、1 週間ほど CPU 時間を消費して、カーネル コード ベースの年齢の統計値を出しました。
 
すると、約 1200 万行のコードと文書で 2.6.33 カーネルが形成され、約 31% が 2.6.12-rc2 commit を使用していることがわかりました。つまり現在のカーネルの 3 分の 1 は この 5 年間触られていないことになります。
 
カーネルの一部 (ネットワーク スタック、ファイルシステム レイヤー、そして、ドキュメンテーション ディレクトリ!) には、古いコードが大量に残っています。ドキュメンテーションの 40% が 5 歳以上です。ドキュメンテーションには、変わらないもの (旧来のハードウェアの設定方法や、Klingon 語のサポートなど) を説明するものもあります。しかしその他の大部分は、単に "古い" だけです......。
 
最新のコードは通常コア カーネルにあります。ここが最も積極的に改良され、更新されるためです。しかしそれでも、メモリ管理レイヤの 25% と "kernel" ディレクトリの約 13% は 2.6.12 を使用しています。
 
これは我々が古くてメンテナンスされていないコードを使い続けていることを意味するのでしょうか。確かにそういう部分もあるでしょう。この大量のコードには、クモの巣だらけの部分があるかもしれません。しかし、これらの数値は、私たちが持続性のあるカーネルを構築したことを表しているとも言えます。開発コミュニティがコード品質やメンテナンス性を重視し、数千という開発者の貢献で迅速なカーネル改良も行われたが、コードの 3 分の 1 は優れたものだったため、この 5 年間すす払いされる必要がなかったというわけです。

(オリジナルのブログはこちら)