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

第88回 Linuxの成長過程をふりかえる[その6]

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

前回に引き続き,今回はlinux-2.4linux-2.5の成長過程を検討します。

linux-2.4.0は21世紀の最初,2001年1月4日に公開されました。次の開発版であるlinux-2.5.0は,linux-2.4.15から分岐する形で2001年11月23日に公開されています。

前回も触れたように,linux-2.4シリーズは「安定版」という位置づけではあるものの,リリース直前まで新しいCPU用のコードが追加されるなど,開発版的な機能も背負わされていました。その傾向はリリース後も変らず,次の開発版が分岐するlinux-2.4.15までは,後述するcriss390xといった新しいCPUやReiserFSのような新しいファイルシステムの機能が追加されています。

もっとも,linux-2.5シリーズが分岐した後も,linux-2.4シリーズは2.5シリーズと並進する形でサイズが増加し続け,サイズ増加が収束するのは2.6シリーズがリリースされた後になります。

linux-2.4シリーズと2.5シリーズ,併せて参考のために2.6シリーズの初期のバージョンについて,カーネルサイズの変遷グラフを描くと図1のようになります。グラフを見ると2.5シリーズと2.6シリーズの間にしばらくの断絶がありますが,この期間は2.6.0-test1からtest11というバージョンがリリースされていました。これらのソースコードも保存されてはいるものの,圧縮形式がtar.gzのみで直接比較できないためグラフからは省いています。

図1 linux-2.4.xとlinux-2.5.xのサイズの変遷

図1 linux-2.4.xとlinux-2.5.xのサイズの変遷

このグラフを見ると,linux-2.4シリーズと2.5シリーズでは,⁠開発版」「安定版」という関係が曖昧になり,2.5シリーズで開発された新機能が続々と2.4シリーズにフィードバックされ,2.4シリーズのサイズも増加し続けていったことが見てとれます。

かっての1.x世代のように開発版と安定版を厳密に分けてしまうと,開発版の新機能が安定版で利用できるようになるには,次の安定版のリリースまで待つ必要があります。一方,Linuxがより広く利用されるようになってきた2.x世代では,開発版の新機能を安定版に求める人々も増加し,その結果,このように両バージョンが並進する形になったのでしょう。

このような形になると安定版と開発版を区別する必然性も乏しくなります。それに応じて,次の2.6シリーズでは安定版と開発版を一つのバージョンに収め,2.6.xが開発版,それを引き取った2.6.x.yが安定版,というナンバリング形式に変更したようです。

ディレクトリサイズの変遷

それではlinux-2.4/2.5シリーズでどのような機能が追加されてきたのか,ディレクトリサイズの変化から検討してみることにします。上述のように,linux-2.4/2.5シリーズでは2.4.15までは2.4系で開発が進んでいたので,チェック対象には2.4.0,2.5.0(2.4.15と同じ),2.5.25,2.5.50,2.5.75の5つのバージョンを選びました。これらのバージョンについてサイズの大きい7つのディレクトリの変化を比較したのが図2です。

図2 linux-2.4/2.5シリーズのディレクトリサイズの変遷1

図2 linux-2.4/2.5シリーズのディレクトリサイズの変遷1

図2を見ると,linux-2.4/2.5シリーズでもarchやdriversディレクトリが急速に増大しており,新しいCPUや周辺機器への対応が積極的に続いていたことが見てとれます。

この時期のlinuxがどのようなCPUに対応してきたのかを,archディレクトリのサイズから調べると以下のような結果になりました。表中の数字の単位はKB(キロバイト)です。

2.4.02.5.02.5.252.5.502.5.75
alpha12291331143414341536
arm 16382560307231743277
arm26----928
cris-932992976896
h8300----260
i38614341536174122532560
ia6423552560348235842970
m68k43014301430143014198
m68knommu---1012896
mips15362662266226624301
mips64864143414341434852
parisc75274076017411638
ppc27653072491550184710
ppc64--184318431741
s390584508512488764
s390x-620664640-
sh3966887127041229
sparc13311331133113311331
sparc6417411946204820481946
um---12291536
v850---400416
x86_64--122912291126

前回も触れたように,linux-2.3シリーズの終了時(2.3.51)と比較すると,2.4.0の時点でpariscs390のディレクトリが増えています。

その後,2.4.0から2.5.0の間にcriss390xというディレクトリが増え,2.5.25の時点でppc64x86_642.5.50の時点でumv850m68knommu2.5.75の時点でarm26h8300というディレクトリがそれぞれ増えています。

crisはAXIS Communications社が開発していた組み込み向けのCPUで,主にネットワーク機器に使われていたそうです。s390xはIBM S390シリーズの新しい64ビット版ハードウェア用のコードで,2.5.0の時点では独立したディレクトリとしてソースコードにマージされたものの,後にはs390用のコードと統合され,s390ディレクトリへ移されました。

ppc64は64ビット版のPowerPC用,x86_64は最近主流になっている,x86と互換性を持った64ビットCPU用のコードです。

AMD社がx86アーキテクチャと互換性を持つ64ビット命令セット(AMD64)の開発を発表したのが2000年8月,その命令セットを実装した最初のCPU(Opteron)が発売されたのが2003年4月です。一方,linux-2.5.25は2002年7月に公開されているので,実機が出る半年以上前からx86_64用のコードがカーネルに入っていたことになります。

2.5.50の時点で入っているumUser Mode Linuxと呼ばれるユーザ環境でカーネルを動かすためのコード,v850はNECが開発した組み込み環境向けCPU用のコードです。m68knommuは,MMU(Memory Management Unit)を持たない古い世代のm68k用のコードです。

2.5.75で現われたarm26は古い26ビット版ARM CPU用のコードで,元々はarmディレクトリに収められていたものの,新しい32ビット版のARM CPU用のコードとは共存しづらくなったので分離,独立されたそうです。h8300には日立が開発した組み込み向けCPU,H8/300H用のコードが収められています。

最近のカーネルではm68knommuやarm26というディレクトリは見当らないので少し調べてみたところ,m68knommuはlinux-2.6の末期にm68kディレクトリと統合され,arm26用のコードはGCCが対応しなくなったこともあり,2.6の半ばごろ(2007年)に削除されたようです。

この結果を見ると,linux-2.4/2.5シリーズでも,64ビットCPUやメインフレームのみならず,組み込み環境向けのCPUまで,さまざまな種類のCPUに積極的に対応し続けていたことがわかります。また,x86_64への対応が実機の発売前から始まっていることが示すように,IBMやAMDなどの企業がLinuxの開発に積極的に関わってきたことも見てとれます。

もうひとつ,前回までとは異なり,図2にはsoundというディレクトリが現われています。従来,soundディレクトリはOSS(Open Sound System)用のドライバを収めてdriversディレクトリ以下に配置されていたものの,linux-2.5.25以降ではALSA(Advanced Linux Sound Archtecture)のコードがマージされ,driversディレクトリから独立したディレクトリになりました。

OSSは伝統的なUNIXの枠組みの中でサウンドカードを扱うために考案された仕組みです。そのため,OSSはLinux以外のUNIX系OSにも移植され,OpenSolarisやBSD系UNIXでも利用できます。一方,ALSAはLinuxカーネルの機能に依存するものの,OSSでは対応できなかったMIDIや複数のサウンドカードを同時サポートする機能を有しています。

さて,残りの比較的小さなサイズのディレクトリのサイズの変遷をまとめた結果が図3になります。

図3 linux-2.4/2.5シリーズのディレクトリサイズの変遷2

図3 linux-2.4/2.5シリーズのディレクトリサイズの変遷2

図3を見ると,2.5シリーズの後半でいくつか新しいディレクトリが作られていることに気づきます。cryptoディレクトリにはAESやBlowfishといった暗号処理用のコードが収められ,securityディレクトリは2.5.75の時点ではまだスタブ用のコードしか入っていないものの,後にLSM(Linux Security Modules)と呼ばれる,さまざまなセキュリテイ機能を提供するためのフレームワーク用のコードが収められています。また,usrディレクトリには起動時に利用するinitrdを展開するためのコードが収められています。

ipcのようにほぼサイズの変わらないディレクトリがある一方,kernelmmはこの時期全体を通じて増加し続けており,機能強化や新機能の追加が継続して行なわれていたことがわかります。

たとえば,linux-2.4.0/kernel/とlinux-2.5.75/kenel/を比較してみると,以下のような14のファイルが追加されていて,CPUの周波数管理機能が追加されたり,プロセス管理機能が強化されたことがうかがえます。

$ diff -u <( ls 2.4/linux-2.4.0/kernel ) <( ls 2.5/linux-2.5.75/kernel) | grep "^+" 
+++ /dev/fd/62	2016-12-08 09:47:12.706054715 +0900
+compat.c
+cpu.c
+cpufreq.c
+extable.c
+futex.c
+intermodule.c
+kallsyms.c
+params.c
+pid.c
+posix-timers.c
+profile.c
+rcupdate.c
+suspend.c
+workqueue.c

scriptディレクトリが2.5シリーズの後半で急増しているのは,この時期にカーネルをビルドするためのMakefileが全面的に書き直され,現在に続くKconfigという設定メニューを採用したことによるものです。

著者プロフィール

こじまみつひろ

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

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

コメント

コメントの記入