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

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

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

25周年を記念するつもりで始めた「Linuxの成長過程をふりかえる」シリーズは前回までで一段落したものの,少し積み残した話題があったので,今回はそれを紹介してみようと思います。

Linuxの特徴を示す言葉のひとつに,Eric Reymond氏が伽藍とバザールの中で指摘した早めの公開,しばしば公開(release early, release often)⁠があります。

Linux以前にも,X Window SystemやGNUプロジェクトの「フリーソフトウェア」のように,ソースコードを公開してユーザーからのフィードバックを受けつけるソフトウェアはあったものの,それらのバージョンアップは多くても年に数回程度でした。

もっとも当時は,インターネットが未整備でソフトウェアの配布手段が限られていたため,頻繁なバージョンアップは物理的に不可能だった,という事情もあります。

それに対しLinuxでは,利用者からのフィードバックを積極的にソースコードに反映し,最初期のころから頻繁なバージョンアップを繰り返していました。その結果,雪ダルマ式に利用者や開発者が増えていき,前代未聞の成長が実現することになった,というのが彼の指摘です。

さて,それでは実際にどれくらいの頻度と規模でLinuxはバージョンアップしてきたのでしょう? 前回までに紹介したlinux-1.1シリーズから2.5シリーズの公開日とファイルサイズを元に調べてみました。

バージョンアップに要した日数

linux-1.0が公開された1994年3月13日を起源とすると,linux-1.1.13が公開された1994年5月23日はその71日後,2.3.0が公開された1999年5月11日は1885日後となります。

このように公開日を1.0からの経過日数に換算して,バージョンが一つ上がるまでに要した日数を数えてみたところ,バージョンアップが95回行われたlinux-1.1シリーズでは,最短が1日⁠1.1.63と64の間,1.1.79と80,80と81の間等,計5回)⁠最長が8日⁠1.1.73と74の間,1.1.94と95の間の計2回)⁠平均が3.4日という結果になりました。

linux-1.1シリーズの前半部分はwww.kernel.orgにもまばらにしかソースコードが残っていないため,抜けている部分は前後から補完する形で計算しています。たとえば,71日後に公開されたlinux-1.1.13の次は106日後に公開された1.1.23になっているので,両者の間の経過日数の差は35日,その間にバージョンが10上がっているので,1バージョン当たりでは3.5日,と換算しています。

同様の分析を114回バージョンアップしたlinux-1.3シリーズで行ったところ,バージョンアップに要した最短日数は,その日のうちに次のバージョンが出た0日が3回(linux-1.3.65と66,linux-pre2.0.1と2.0.2,pre2.0.13と2.0.14)⁠最長日数は15日⁠linux-1.3.59と60)⁠平均は3.2日となりました。

同様に140回のバージョンアップが行われたlinux-2.1シリーズでは,最短日数は1日で10回,最長日数は21日で2回(2.1.43と44,2.1.36と37)⁠平均は6.0日でした。

以下同様に,59回バージョンアップが行われたlinux-2.3シリーズでは,最短は0日で2回(2.3.27と28,2.3.32と33)⁠最長は24日⁠2.3.18と19)で平均は6.2日」⁠75回バージョンアップが行われたlinux-2.5シリーズでは,最短は1日で3回(2.5.23と24,2.5.55と56,2.5.57と58)⁠最長は29日⁠2.5.1と2)⁠平均は6.0日という結果になりました。

以上の結果を表にまとめると下表のようになります。

バージョンアップ回数バージョン間の最短日数最長日数平均日数
linux-1.1.x95183.4
linux-1.3.x1140153.2
linux-2.1.x1401216.0
linux-2.3.x590246.2
linux-2.5.x751296.0

1.x世代のlinuxでは週に二度より規模が大きくなった2.x世代でも週に一度ずつのバージョンアップが,各シリーズごとに100回近く繰り返される,これがEric Reymond氏が指摘した「早めの公開,しばしば公開」の具体的な中身と言えそうです。

バージョンアップごとのサイズ変遷

前節同様の分析を公開されたtar.xzのファイルサイズに対して行い,バージョンアップごとにどれくらいファイルサイズが増加するかも整理してみました。

linux-1.1シリーズではバージョン間の差分の最大値は1.1.75と76の間の33760バイト2番目に大きいのは1.1.81と82の間の31176バイト,逆に一番小さいのは1.1.89と90の間の904バイトその次は1.1.86と87の間の1360バイト,平均は9900バイトという結果になりました。

ここで示すバイト数はtar.xz形式で固めた状態のサイズ差なので,展開した状態で比べると5倍以上の差になるでしょう。また,前節でも触れたように1.1シリーズは抜けが多いので,前後のバージョンからデータを補完しています。

同様の分析をlinux-1.3シリーズで行うと,最大は1.3.93と94の間の459988バイト次は1.3.68と69の間の108868バイト,最小はpre2.0.10と11の間の-2924バイト,次は1.3.11と12の間の-1916バイト,平均は19344バイトとなりました。

以下同様に,2.1シリーズでは,最大は2.1.131と132の間の255320バイト次点は2.1.26と27の間の140400バイト,最小は2.1.114と115の間の-16860バイト次点は2.1.20と21の間の-7756バイト,平均は31997バイト2.3シリーズでは最大358100バイト(2.3.14と15)⁠最小-33160バイト(2.3.41と42)⁠平均は75114バイト2.5シリーズでは最大1071676バイト(2.5.4と5)⁠最小は-119788バイト(2.5.72と73)⁠平均は94939バイトとなりました。

これらの結果も表に整理してみましょう。

バージョン間の差分の
最大値最小値平均値
linux-1.1.x337609049900
linux-1.3.x459988-292419344
linux-2.1.x255320-16860 31997
linux-2.3.x358100-331675114
linux-2.5.x1071676-11978894939

この結果を見ると,カーネルが成長していくにつれて,バージョンアップごとに追加されるコードの量が増えていることがうかがえます。特にlinux-2.3シリーズでは,1世代前の2.1シリーズと比較して,1つのバージョンアップで追加されるコードの規模が倍以上に増加しているのが目に付きます。

以後の議論の大勢には影響しないのでこのままにしておきますが,厳密に考えると「差分」は前バージョンからの「違い」なので,ファイルサイズが減った場合も負の値にはせず,絶対値として扱うべきだったかも知れません。

この結果を見たとき,最初は「2.1シリーズと2.3シリーズではバージョンアップの間隔が異なってるのかな?」と思ったものの,前節で見たようにバージョンアップの間隔が異なるのは1.3シリーズと2.1シリーズの間で,2.1シリーズと2.3シリーズでは大きな違いは見られません。そこでバージョン間のサイズ差をより詳しく見てみることにしました。

著者プロフィール

こじまみつひろ

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

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

コメント

コメントの記入