/ «2004-10-12 (Tue) ^ 2004-10-23 (Sat)» ?
   西田 亙の本:GNU 開発ツール -- hello.c から a.out が誕生するまで --

Categories Books | Hard | Hardware | Linux | MCU | Misc | Publish | Radio | Repository | Thoughts | Time | UNIX | Writing | プロフィール


2004-10-17 (Sun)

[Linux] Ultimate Code Viewer

Linux Kernel Graphing Project

サーバー移転も一段落したことであるし、"Goodbye, Linux" の続きを仕上げなければならないが、その前に小咄をひとつ。皆さんは Rusty Russell 氏が立ち上げた Linux Kernel Graphing Project をご存じだろうか?

これは文字通り、Linux kernel の構造をグラフ化し、人間の視覚を通してその全体像を捉えようという、何とも奇抜なプロジェクトである。その着眼点の素晴らしさと、頭の中のアイデアを直ちにコードで実現してしまう、Russell 氏の類い希なる行動力には、素直に感服してしまう。

氏のツールを介してポスター上に出力された Linux kernel の姿は、例えるならば、まさに「曼荼羅」だ。この曼荼羅は、4つのリングから構成されており、拡大していくとひとつひとつのソースファイルに含まれる関数達が現れる。思わず、「虫眼鏡を片手に、Linux 曼荼羅の世界を覗き込みたい」と考えた私は病気?

Free Code Graphing Project

この Linux Kernel Graphing Project は、多忙な Russell 氏に代わって、現在 Christian Reiniger, Michael Marineau の両氏が Free Code Graphing Project としてサポートを続けており、今年の8月下旬、待望のカーネル 2.6 対応版 が Sourceforge 上で公開されたばかりである。

「とりあえず、Linux 曼荼羅をこの目で確かめてみたい」という方は同サイト上に用意されている Linux 2.4.9 の PS ファイル(7.9MB) をチェックされると良いだろう。

自分で曼荼羅を作ってみたいという猛者は、lgp-2.6.0a をダウンロードされたい。ビルドの詳細は README に書かれているが、ポイントは以下の通り。

  • lgp パッケージ以外に、"bc" および "flex" が必要になるので、ホスト環境にこれらのツールが用意されていなければ、あらかじめインストールしておく(Debian であれば、"apt-get install bc flex")。
  • カーネルソースツリーを展開しておく。ちなみに、Linux-2.6.8.1 では 正常な PS ファイルを出力できなかったが、Linux-2.6.0 であれば問題なし。どうやら、新しいカーネルバージョンには対応できない模様。
  • make KERNEL_DIR=/usr/src/linux-2.6.0 を実行。Pentium 4 3GHz で約30分が経過。
  • 最後に ./posterize a0 1 でA0サイズのポスターイメージを出力。私の場合は、そのまま Mac OS X 上の Illustrator で曼荼羅を堪能。

じっくり曼荼羅を眺めてみると、その美しさとは裏腹に、得られる情報は意外に少ないことに気付く。それもそのはず、この曼荼羅は「関数」のみに注目し、肝心な「データ構造」が欠落しているからである。「関数とデータ構造」の依存関係をグラフ化するツールがあれば、Kernel hacking は一段、いや十段と楽しいものになるのではないだろうか?

ちなみにこのポスター、Linux 2.4 版が Linuxcare で販売されている模様。プロッター出力が利用できる方は、2.6.0 曼荼羅を壁に張り出しておけば、友人に自慢出来ること間違いなし、である。

A 3D animation of Linux source code development

私のような物足りなさを感じたのかどうか、フランスの Pascal Brisset 氏は、なんと Linux kernel source tree の3次元表示を実現してしまった。

3次元表示された Linux-2.4.5 の美しい姿 (9MB MPEG)は、思わず溜め息が漏れるほどだが、圧巻は Linux-1.2.0 から Linux-2.4.1 への成長の軌跡 (12MB MPEG)である。バージョンの進行途中で、新たに追加されたソースファイルは、赤色でフラッシング表示されるのだが、その姿はまるで広大な銀河の中で新星が誕生しているかのようだ。

こうしてみると、カーネルソースツリーというのは、まさしく人類が生み出した「小宇宙」という気がしてくる。贅沢を言わせてもらえば、同じ環境上で NetBSD と Linux の小宇宙を比較しながら、存分に俯瞰してみたいものである。