玩式草子─ソフトウェアとたわむれる日々

第89回 Linuxの成長過程をふりかえる(おまけ)

この記事を読むのに必要な時間:およそ 4 分

1日あたりのファイルサイズの増分の変化

前節までに見てきた,⁠バージョンアップごとのファイルサイズの変化量」「かかった日数」で割ると,その間のソースコードの1日あたりの増加量が計算できます。たとえばlinux-1.1.81と82の間の増分は31176バイト,この間に3日かかっているので1日あたりの増分は10392バイトとなります。

各バージョンアップごとに計算してみると,linux-1.1シリーズでは1日あたりの増分の最大は1.1.87と88の間の18332バイト最小は1.1.89と90の間の301バイト平均は4350バイトとなりました。

以下同様に,linux-1.3シリーズでは1日あたりの増分の最大値は489988バイト(1.3.93と94⁠⁠,最小値は-1462バイト(pre2.0.10と11⁠⁠,平均は9381バイト2.1シリーズでは最大66124バイト(2.1.52と53⁠⁠,最小-5620バイト(2.1.114と115⁠⁠,平均7460バイト2.3シリーズでは最大190688バイト(2.3.99-pre7とpre8⁠⁠,最小-8240バイト(2.3.41と42⁠⁠,平均16614バイト2.5シリーズでは最大243938バイト(2.5.35と36⁠⁠,最小-31692バイト(2.5.13と14⁠⁠,平均17361バイトという結果になりました。この結果も表に整理してみましょう。

1日あたりの増分
最大値最小値平均値
linux-1.1.x183323014350
linux-1.3.x489988-14629381
linux-2.1.x661240-56207460
linux-2.3.x1906880 -824016614
linux-2.5.x24393863169217361

このように整理してみると,1日あたりのファイルサイズの増分は,1.1シリーズと1.3シリーズの間で倍程度増加するものの,2.1シリーズではやや減少し,2.3シリーズでは改めて倍以上に増加,そのペースは2.5シリーズでも維持されていることが分かります。

1日あたりのファイルサイズの増分はカーネルの開発速度と見なせます。さて,それでは何がこのような開発速度の向上をもたらしたのでしょうか?

開発速度から見た開発スタイルの変化

Linuxは最初のバージョンこそLinusさんが一人で書きあげたものの,それ以降は利用者から寄せられるコードを積極的に取り込み,いわば「インターネット上の共同プロジェクト」として開発されました。

当初は,世界中のユーザーから送られてくるソースコードへの修正差分(パッチ)をLinusさんが一人でチェックしていたものの,Linuxのユーザーが増えるにつれ送られてくるパッチも急増していき,ネットワーク回りはAlan Cox,SCSI回りはEric Youngdale,イーサネットカードはDonald Becker,ファイルシステム(ext/ext2)はRemy Card,等々,サブシステムごとに担当者を決めて,各領域の担当者が承認したパッチをLinusさんがとりまとめる,というスタイルが生まれてきました。パッチはkernel-ML等のメーリングリストでやりとりされるので,担当者だけでなく全ての参加者がコードをレビューできるオープンな仕組みです。

linux-1.xのころはこのような体制で何とか対応できたものの,Linuxが普及するにつれ開発に参加する人々が増え,ML上を流れるパッチの量も膨大になり,必要なパッチが見落されることも増えてきました。SMPやマルチアーキテクチャに対応するように全面的に書き直されたlinux-2.0がリリースされたころには,カーネルの開発体制はどうあるべきかがずいぶん議論になっていた記憶があります。

当時のカーネルMLでは「Linuxはスケーラブルになったけど,Linusはスケーラブルじゃない」とか「もしLinusがダンプに轢かれたらLinuxはどうなるか」的な議論をよく目にしました。

すでに存在していたRCS(Revision Control System)CVS(Concurrent Versions System⁠⁠,Subversionといったソースコード管理システム(SCM:Source Code Management system)を利用すべき,という意見もあったものの,Linusさんの目から見ると,これら既存のSCMはカーネルのような大規模ソフトウェアを管理するには力不足でした。

パッチファイルをMLでやりとりする方式での開発はlinux-2.1シリーズでも続くものの,2.1シリーズの開発速度が1.3シリーズに比べてやや低下しているのは,開発者が増えすぎた結果,このスタイルでの開発が限界に逹したことを示しているようです。

この限界を打破するためにLinusさんたちが選んだのがBitKeeperと呼ばれるSCMでした。BitKeeperはカーネル開発にも参加していたLarry McVoy氏がCEOを務めるBitMover社が開発したSCMで,BitMover社が管理する中央リポジトリとそれぞれの開発者が手元に置くローカルなリポジトリ間で,整合性を保ちつつ高速にソースコードのやりとりができる分散型のSCMとして設計されていました。

「Linuxの開発にBitKeeperを採用する」とLinusさんが宣言したのが2002年のことでした。当時のBitKeeperはカーネル開発者たちには無償で提供されていたものの,BitMover社が管理する商用ソフトウェアだったため,GNUプロジェクト総帥のRichard Stallman氏が危惧を表明するなど,物議をかもしました。

各バージョンの開発期間を眺めるとlinux-2.1シリーズが1996年から98年,2.3シリーズは1999年から2000年,2.5シリーズが2001年から2003年なので,BitKeeperの採用表明はlinux-2.5シリーズのころになります。

一方,BitKeeperはβバージョンを1999年に,最初の公式版を2000年に公開しています。今回の分析結果から見ると,恐らくLinusさんたちはBitKeeperの初期バージョンをlinux-2.3シリーズの開発に試用し,開発速度が倍以上に向上するという好結果を得たのでしょう。そういう具体的な結果が出ていたから,周囲の危惧にも関わらず,カーネル開発にBitKeeperを採用する,という判断を下した,このあたり,徹底した実用主義者であるLinusさんの特徴がよく表われているように感じます。

BitKeeperというツールを得て,カーネルのソースコードをより効率よく管理できるようになった結果,開発版と安定版を1つのバージョン内で運用するlinux-2.6シリーズの新しい開発スタイルが生まれた,とも言えそうです。

その後,2005年になってBitMover社はlinuxの開発者たちへのBitKeeperの無償提供を中止することになり,Linusさんは新しくGit(ギット)と呼ばれるSCMを開発することになりますが,そのあたりはまた別の機会に考えてみることにします。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html