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

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

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

前回は過去25年間にリリースされたカーネルのサイズと日付を元に,Linuxの成長過程を概観してみました。最後のグラフで紹介したように,過去25年間の間,Linuxのサイズは順調に増大しているものの,その増加ペースは必ずしも一定ではなく,サイズが急増する時期とそうでない時期があるようです。今回から数回に渡って,それぞれの時期にどのような変更が行なわれてきたのかもう少し詳しく見ていくことにします。

前回のグラフはリリースされた日付やサイズが明確になっているlinux-1.0以降を対象にしました。しかし,Linuxの成長過程を考える場合,LinuxがLinuxになった時期を忘れるわけには行きません。そこで,まず最初にLinuxが公式版である1.0に到達するまでの過程を調べてみることにします。

linux-0.01とlinux-1.0

前回も紹介したように,最初に公開されたlinux-0.01は総ファイル数が88,総行数は10239でした。一方,最初の公式版であるlinux-1.0になると,総ファイル数が561,総行数は176250にまで増加しています。

linux-0.01はLinusさんが一人で自分の持っているハードウェアのみを対象に書きあげたバージョン,linux-1.0はその後2年半ほどの間に世界中の開発者から寄せられたコードを取りこんで,80386CPU用のUNIX(POSIX)用カーネルに必要な機能を整えたバージョンです。

両者の間にどれくらいの違いがあるかを見るために,まずはそれぞれのソースコードを展開したディレクトリでリストを取ってみました。

$ ls linux-0.01
Makefile  boot/  fs/  include/  init/  kernel/  lib/  mm/  tools/
$ ls linux-1.0
CHANGES  CREDITS    Makefile  boot/      drivers/  ibcs/     init/  kernel/  makever.sh*  net/    zBoot/
COPYING  Configure  README    config.in  fs/       include/  ipc/   lib/     mm/          tools/

この結果を見ると,linux-0.01ではソースコードはboot,fs,include,init,kernel,lib,mm,toolsの8つのディレクトリに収められているのに対し,linux-1.0ではdrivers,ibcs,ipc,net,zBootという5つのディレクトリが増えて13のディレクトリに収められています。それぞれのディレクトリのサイズをduで調べてみたところ,以下のような結果になりました。なお,duで得られるディレクトリのサイズはファイルシステムの種類によって多少異なることがあり,以下の例はBtrfs上で取った結果です。

linux-0.01linux-1.0
boot/16KB44KB
drivers/2800KB
fs/108KB1100KB
ibcs/8KB
include/4KB780KB
init/4KB16KB
ipc/56KB
kernel/116KB 208KB
lib/48KB64KB
mm/16KB92KB
net/496KB
tools/4KB12KB
zBoot/80KB
464KB5800KB

この結果を見ると,linux-0.01と1.0の間でもっとも差があるのは周辺機器用のドライバを収めたdriversディレクトリでしょう。ソースコードを眺めると,linux-0.01では周辺機器としてキーボードとVT102互換のコンソール,IDE HDDにしか対応していないので,それら用のコードはすべてkernelディレクトリに収められていました。

それに対し,linux-1.0ではdriversディレクトリ以下はFPU-emu,block,char,net,scsi,soundの6つのサブディレクトリに分かれ,HDDやFDDといったデータ記録用のブロックデバイスとコンソールやキーボード,マウスといったキャラクタデバイス,対応しているネットワークカードやSCSIカード,サウンドカード用のドライバがそれぞれのディレクトリに整理された結果,これだけの違いになったようです。

FPU-emuは「浮動小数点演算用プロセッサ・エミュレータ(Floating Point Unit Emulator)⁠の意で,80386CPUでは外付けのオプションだった数値演算用コプロセッサ(80387)の機能をソフトウェア的に実現するためのコードを収めています。

また,ファイルシステム回りのコードも10倍近く増えており,これも内容を見ると,linux-0.01ではMinix用のファイルシステムにしか対応していなかったのに対し,linux-1.0ではMinix FSに加えてLinux専用に開発されたext/ext2 FS,xiafs,相互運用用のmsdos,sysv(SystemV系UNIX用)⁠hpfs(OS/2用)⁠CD-ROM用のisofs,ネットワーク用のNFS,カーネルの内部情報を操作するためのproc FSが追加されています。

もうひとつ,TCP/IPネットワーク機能のコードを収めたnetディレクトリが追加されたのも目を引きます。他の多くのUNIX系OSではBSDが開発したTCP/IP用のコードを流用しているのに対し,Linuxでは0からTCP/IP用のコードを再開発し,linux-1.0の時点ではNET2D(NET2 Debugged)と呼ばれる3世代目のコードが採用されています(NET→NET2→NET2D)⁠

linux-0.01と1.0を比べると,良く言えばプロトタイプ,悪く言えば学生のおもちゃレベルだったカーネルが,まがりなりにもPOSIX互換OSのカーネルとして使えるようになるためには,10倍以上のソースコードが必要だったことが見てとれます。

著者プロフィール

こじまみつひろ

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

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

コメント

コメントの記入