開発物語
Linuxカーネルの開発 世界最大のオープンソースプロジェクトでの経験
1.はじめに
Linuxは,最も使用されているオペレーティングシステムカーネルであり,世界最大のオープンソースソフトウェア(OSS)プロジェクトだろう.世界中の技術者のコラボレーションによる大規模なプロジェクトは,ほかのOSSプロジェクトや標準化団体などもあるが,Linuxカーネルプロジェクトは,新しい機能の提案,意思決定の方法など,ユニークな開発プロセスを採用している.本稿では,2005年から2010年頃まで,Linuxカーネルプロジェクトの一員として,筆者が直接関与したI/O機能の開発について振り返ってみたい.
2.開発プロセス
Linuxカーネルプロジェクトの開発プロセスで,新しい機能を提案し,標準機能としてソースコードに追加されること(メインライン化)を目指すプロセスについて述べる.筆者が開発に関わっていた時期と現在で,開発プロセスに大きな変化はない.
最初に,Linuxカーネルプロジェクトに参加する必要がある.所属や名前などの参加者情報をWebサイトに登録する必要があるOSSプロジェクトもあるが,Linuxカーネルプロジェクトでは必要ない.開発に関する議論はメーリングリストで行われ,ここにメールを投稿すればよい.メーリングリストには,誰でも自由にメールを投稿することができる.Linuxカーネルのソースコードの変更に関わった開発者をプロジェクトのメンバーとするなら,2010年で3,000人弱であった(1).
次に,プロジェクトに新しい機能を提案する.ソースコードを開発する前に,提案者が新機能を説明したドキュメントを用意し,議論するOSSプロジェクトもある.Linuxカーネルプロジェクトでは,カーネルのソースコードを入手し,新しい機能を実装したソースコードの変更をメーリングリストに投稿するのが一般的なやり方である.Linuxは,図1に示すサブシステムと呼ばれる,機能単位でメーリングリストが用意されており,提案する機能によって適切なメーリングリストに投稿する必要がある.例えば,新しいイーサネットカードのドライバは,ネットワークサブシステムのメーリングリストに投稿される.
その後,提案された機能をメインライン化すべきかが判断される.バグ修正など,メインライン化後のメンテナンスコストに見合うメリットがあるかどうかが評価される.意思決定を開発者の投票で決定するOSSプロジェクトもあるが,Linuxカーネルプロジェクトでは,サブシステムの責任者であるメンテナが決定する.メインライン化すると判断された場合でも,提案されたコードの変更がそのまま受け入れられることはほとんどなく,提案者は,議論を重ね,設計について合意を取り付け,コードを修正する必要がある.OSSプロジェクトの中には,提案された機能について必ず審議するルールがあるプロジェクトもあるが,Linuxカーネルプロジェクトでは,メーリングリストへの提案が単純に無視されるというケースが非常に多い.現在,Linuxカー

図1 Linuxカーネルサブシステム(一部)