だれがLinuxを開発している?

Linuxカーネル開発

誰が開発に携わり、どんな企業が支援しているのか、そして、その開発スピードは?

Greg Kroah-Hartman (ノベル社、SuSE Labs), gregkh@novell.com

Jonathan Corbet (LWN.net), corbet@lwn.net

Amanda McPherson (The Linux Foundation), amanda@linux-foundation.org

[日本語訳]The Linux Foundation Japan

Linuxシステムの中核を構成するLinuxカーネルは、ソフトウェア開発の歴史の中でも特記すべき大規模な共同作業の成果です。2-3ヶ月毎にLinuxユーザに出荷される安定した公開版には、それぞれに顕著な新機能、新たな装置サポート、性能改善が入っています。カーネル修正の数は大変な数に上り、その数はさらに増え続けています。最近のカーネル公開版には10,000におよぶパッチが含まれています。それぞれのカーネル版の開発には、100以上の企業の1000人近くの技術者が参加しています。  2005年以来、200を超える企業に属する3700人以上の技術者がカーネル開発に貢献しました。Linuxカーネルは、Linux開発以外の領域では激しく競争しあっている多くの企業が、一緒になって開発した共通の資産なのです。

序論

Linuxカーネルは、Linuxシステムの基底で動作するソフトウェアです。その役割は、ハードウェアの管理、ユーザプログラムの起動、システムのセキュリティや統合性の確保などです。1991年Linus Torvaldsが最初に公開して以来、飛躍的に開発が進んだLinuxとはこのカーネルのことなのです。カーネルはLinuxシステム全体から見れば、相対的に小さな部分と言えるでしょう。他の大きなコンポーネントの例としては、GNUプロジェクト、GNOMEあるいはKDEのようなデスクトッププロジェクト、X.orgプロジェクトなどがあります。しかし、カーネルはシステムをまともに動作させるという点に関しては重要な責任があり、また、Linuxシステムの中で他に代わるべきものはありません。  Linuxカーネルというのは、いろいろな点で、研究するに値する興味深いプロジェクトです。カーネルはLinuxシステムの中で大きなコンポーネントの一つです。また、カーネルプロジェクトは、変化に素早く対応できる開発プロセスを特徴としており、オープンソースプロジェクトの中でも最大の開発者を擁しています。本稿は、ここ3年のカーネルの歴史を振り返り(カーネル2.6.11から2.6.24)、カーネル開発のプロセスがどのように機能しているかを見てみます。

開発モデル

カーネル2.6.xになってからは、Linuxカーネルは、どちらかというと時間厳守の公開モデルに変わりました。オタワで開催された2005年のカーネル開発者サミットで、カーネルは2-3ヶ月毎に公開して行くことが決定されました。それぞれのカーネルを主要公開版(major release)と呼び、新規機能を作りこみ、また、カーネル内部のAPI(Application Program Interface)の変更があるものとされました。  このような頻繁な公開サイクルは、ユーザに対して、最小の遅れで安定した新規機能を届けるのに必要だと考えました。結果として、新規コード(機能、デバイスドライバ、その他)は、その開発完了から数ヶ月で公開カーネルに取り込まれ、ディストリビュータが開発コードを彼等のディストリビューションにバックポートする手間を最小にすることができるのようになりました。さらに、ディストリビュータのカーネルでは、ディストリビューション固有のカーネル変更をより少なくすることができ、ディストリビューションの安定とディストリビューション間の違いを少なくすることができました。  カーネル2.6.xのそれぞれの版は、残存バグが非常に少なくなってから公開したという意味で、安定版ということができます。カーネル公開後に検出された問題に対処するためには、より早くその修正をコミュニティに渡すために「安定ブランチ」というものをを用意しています。図1はこのような状況を説明しています。

図1 Linuxカーネルの公開サイクル

カーネルチームは安定版としてカーネル2.6.19を公開しました。その後、カーネル開発者は、新規機能の開発にとりかかり、公開候補版(releae candidate)の公開をはじめました。カーネル開発者たちは、修正部分のテストやデバグをこの公開候補版で実施しました。そして、全ての開発者が十分に安定したと合意した後、カーネル2.6.20として公開されました。  一方、その間にも、バグ修正やセキュリティ修正を集積した安定版は、2.6.19.1、2.6.19.2などとして公開されました。  本稿は、主流の2.6.xの方に焦点を当て、安定版への修正については除外して議論を進めて行きます。というのは、これらはいずれも小修正であり、かつ、安定版に入った小修正は、次の主要公開版に取り込まれるからです。

公開頻度

カーネル開発者がこの新しい開発サイクルにを決めたとき、新規開発の停滞を避けるために、新カーネルは2-3ヶ月周期で公開することにしました。実際の公開の実績を表1に示しています。

表1 カーネルの公開頻度

これでお分かりの通り、カーネル開発者は言った通りのことを実行しています。平均の公開サイクルは2.7ヶ月となっています。

修正の速度

開発成果をLinuxカーネルに投稿する際、開発者は修正を小さな単位、パッチと呼ばれる修正提案に仕立てます。これらのパッチは、通常、単一の機能のみを実現するようになっています。それらは相互に干渉しないよう工夫して、ソースコードの行修正、行追加、行削除などを行います。各パッチが適用されたとき、当然ながら、カーネルは、ちゃんとビルドでき、また、正常に動作しなければなりません。  この原則は、カーネル開発者の修正がより小さな論理的単位となることを促し、また、コードレビューでの品質確保にも繋がっています。このような背景もあって、各公開カーネルに取り込まれる修正の数は、図2に見られるように大変大きな数になっています。

図2 各公開カーネルの修正数

各カーネルの公開までに要した時間と一緒に見てみると、1時間当たりに採用された修正の数は、図3のように計算できます。

図3 1時間当たりの修正数

カーネル2.6.11から2.6.24に到る1140日間に、1時間当たり平均2.83件のカーネルパッチが作成されています。これは、採用されたパッチだけを数えています。このような修正速度を多年に渡って維持しているソフトウェアプロジェクトは他にないでしょう。

カーネルソースコードの規模

Linuxのカーネルソースコードは、Linuxがサポートするハードウェアの数とともに、また、その機能の強化とともに、その行数を増やし続けています。以下の数字では、公開されたLinuxのソースパッケージ全体をソースコードとして数えています。ご承知の通り、これらの中には、少量のビルトスクリプトやドキュメントも含まれています。もちろん、これらもLinuxの巨大な仕事の一部でありますし、また、数えるに値する意味も持っています。  図4は、各カーネル版のソースコード行数を示しています。

図4 各公開カーネルの規模

この間、カーネルチームは年率10%という一定の成長率で拡大して行きました。これは、カーネルコードツリーの大きさを考えると驚くべき数字と言わざるをえません。しかし、カーネルはただ単に大きくなっているのではありません。カーネルソースツリーへの全ての行修正、行追加、行削除が、必要とされる機能修正を完璧に実現するためになされているのです。これらの数字は、図5に示されるように、いかに迅速にカーネル開発が行われてきたかを明らかにしています。

図5 各公開カーネルの修正行数

この数字を計算してみると、過去2年半の間、毎日3,621行が追加され、1,550行が削除され、1,425行が変更されということが分かります。

だれがこの仕事を担っているか

Linuxカーネル開発を担っている技術者の数も、また、それら開発を援助している会社(会社の数をどのように数えるかについては、次の節で説明しています)の数も増え続けています。表2を参照して下さい。

表2 開発者の数とその雇用主

実際、Linux開発コミュニティの人口はこの3年間で2倍になっています。このような多くの開発者の数にも関わらず、多くの仕事は、比較的少数の個人によってなされています。過去3年間、上位10人の開発者が、およそ15%の修正に貢献しています。また、上位30人でみると30%になります。表3に、個々の開発者のリスト、彼等が貢献した修正の数、それらが修正全体に占める割合が示されています。

表3 カーネル開発に貢献した人々

どんな企業が開発を支援しているか

Linuxカーネルというのは、たくさんの企業が利用できる共通の資産と言えるでしょう。必ずしも、これら企業の多くがカーネル開発に参加しているとは限りません。これら企業の多くはLinuxの現状に満足しているとも考えられますし、また、Linuxを特別の方向に引っ張って行こうという意図がないのかも知れません。しかし、実際には表4に見えるように、カーネルの強化に向けて協力する企業の数は増えています。  少し細かくカーネル開発者を雇用している企業を見てみましょう。個々の開発者の支援企業を判別するのに以下のようにしました。(1)企業のemailアドレスの使用、(2)投稿したソースコードにおける企業の支援の表示、(3)開発者への問い合わせ。開発者はしばしば雇用先を変えるものですし、また、中には企業のオフィス外で個人的に開発に参加しているケースなどもありますので、示された数字はおおよそのものだと思って見ていただきたいと思います。それでも、この数字からいくつかの事実を引き出すことができます。

表4 カーネル開発を支援する企業

これらの開発者のかなりの数は、表4で、unknownと表示していますが、彼等の支援企業を確認できませんでした。例外もありますが、このカテゴリの開発者は、ここ3年間で、大体多くて10件くらいの修正を投稿しています。しかしながら、これら開発者の占める貢献の量はトータルとして大変大きなものです。  noneと表示されているのは、企業からの支援がないことが分かっている開発者です。  unkonwnとnoneを含めた上位10カテゴリがカーネルに対する貢献の75%を占めています。unkonwnで示される開発者が全て企業の支援がないとしても、なお、70%のカーネル開発は、企業の正規の仕事としてなされているわけです。  また、ここで見えてくることの一つは、少数の企業がカーネル修正の多くに関わっていることです。また同時に、貢献企業の数は、いわゆる、long-tailというべき様相を呈しています。このように巨大な共有資産で、このように多くのグループによる共同作業が行われた例は未だ他に類がないでしょう。

なぜ企業はカーネル開発を支援するのか

Linuxカーネル開発を支援する企業のリストは、多くの有力IT企業を含んでいます。これら企業は慈善事業のようなことを行っているわけではありません。各ケースにおいて、これら企業はカーネルの強化がその企業の市場における競争力強化に繋がると見ているわけです。いくつか例を挙げてみましょう;

  • IBM、インテル、SGI、MIPS、フリースケール、HP、その他は、皆、それら企業のハードウェア製品上でより良くLinuxが動作させることを狙っています。そうすることで、これら企業の製品がLinuxユーザにとって魅力的になり、ビジネスに寄与すると考えるわけです。
  • レッドハット、ノベル、モンタビスタのようなディストリビュータは、Linuxを強化することに明確な意思を持っています。これらディストリビュータは、対顧客では競争していますが、Linuxカーネルをよくすることに関しては相互に協力しています。
  • ソニー、ノキア、サムソンのような企業はビデオカメラ、テレビ、携帯電話などのコンポネントとしてLinuxを採用しています。Linux開発プロセスへの参加は、Linuxを将来にわたって製品の重要な部品とすることに対する保障となります。
  • IT産業でないような企業にとってもLinux開発への参加には意味があります。カーネル2.6.25には、PF_CANネットワークプロトコルという機能が実装されますが、これはフォルクスワーゲン社の貢献です。本機能は、電波干渉の強い環境で自動車部品間の高信頼通信を実現しています。Linuxは同社にこのようなネットワークを構築する機会を与えているわけですが、同社は開発したコードがLinuxカーネルの中で維持されることが重要と考えて、コードをLinuxプロジェクトに戻したわけです。詳細は、以下をご参照下さい。http://lwn.net/Articles/253425

このように、企業がLinuxカーネルの開発を支援するのにはいろいろな理由があるのです。結果として、Linuxは広範な支持基盤をもち、特定少数の企業に支配されない仕組みとなっています。たとえ、大きく貢献している開発者が明日から開発貢献を打ち切ると宣言しても、Linuxカーネルは、堅固な開発コミュニティのおかげでその歩みを止める心配はありません。

結論

Linuxカーネルは、オープンソースソフトの歴史の中でも、最も大規模で、最も大きな成功を収めたプロジェクトの一つです。その修正の速度と貢献者の数は、力強く、活発なコミュニティの存在を証明しています。Linuxが使用される環境の広がりに応じて、Linuxカーネルは、絶え間なく進化を続けています。Linuxの開発を支援する企業の数も十分に大きな数に上っており、Linuxへの貢献によって恩恵を受けている企業が、支援を打ち切ったとしても、問題ないレベルに達しています。Linuxはサーバ、デスクトップ、組み込みシステムの市場で広く利用されていますが、現在の貢献企業の数、また、貢献する開発者の数は、今後ますます多くなると考えることができます。

謝辞

本稿の著者はともどもに、何千にも及ぶカーネル貢献者の皆様に感謝の意を表します。これらの方々がいなければ、本稿のような試みは誰の興味も惹きません。

参考

本稿に出て来るいろいろな統計数字を抽出するのに、Jonathan Corbetのgitdmツールを使用いたしました。本稿の元となる情報は、kernel.orgサイトに掲載された公開カーネル、および、gitカーネルリポジトリから引き出しました。ただし、emailアドレスの変更や開発者情報の誤記を直すために、一部のgitリポジトリのログ情報に手修正を加えています。これらに使用したログ情報、スクリプト、スプレッドシートは、以下に置いています。http://www.kernel.org/pub/linux/kernel/people/gregkh/kernel_history