モジュール性

現在

モジュール性は良いことだとしばしば言われているけど、何がそんなに良いの? 常に良いの? モジュール性が悪い場合ってのはある?

何についても、ほとんどの人が最初にする質問、「その何が僕の役にたつの?」。ソフトウェアの世界では、大雑把に言って二つの部類の人がいる、開発者とユーザーね。ユーザーにとって、構成を取り換えられたり再整理できるってのは素晴らしいし、それは供給者への依存性をかなり取り除くことにもなる。開発者にとって、モジュール性はソフトウェアの製作を、明確で十分に相互接続される部品に分割することで簡単にしてくれるんだ。

Apache

Apache HTTP serverの遍在性は、オープンソース開発の有効性の証拠であるだけじゃなくて、モジュール性の恩恵の証拠でもあるんだ。ひょっとしたら、Apacheでもっとも広く使われているモジュールはmod_perlとmod_phpではないだろうか。それらは両方ともコンテンツを動的に生成するために使われて、両方ともApacheプロジェクトから独立して開発されたんだ。これが明白に示すのは、Apacheが明確に定義されたAPIを持っていなかったら、mod_perlやmod_phpは現在のような成功はどこでもおさめることがなかっただろうと言うことだ。

カーネル・モジュール

モジュール性の恩恵の他の例は、(たとえばLinuxの)カーネルモジュールの形がある。僕自身、カーネルモジュールを頻繁に使っている。これを書いているとき、28のモジュールを持っていて、そのなかの4つが(サウンドカードのために)ロードされていた。僕がInternetに接続するとき、もう3つほどのモジュールが(PPPのために)ロードされて、切断後はそれらはアンロードされるんだ。僕が何かを印刷するときには、3つのモジュールが(パラレルポートへのアクセスのため)ロードされて、印刷が終ったら自動的にアンロードされる。僕がIomegaのZipディスクをマウントするときide-floppy.oモジュールがロードされて、ディスクをアンマウントしたらこのモジュールもアンロードされる。

僕のハードディスクはext2ファイルシステムでフォーマットされているから、ext2.oモジュールはカーネル内にコンパイルされているんだ。定期的にWindows95とのデータ交換のためにディスクを読み書きする事があるから、vfat.oとfat.oのモジュールはデフォルトではアンロードされた状態にしてある。

ユーザーとしての僕は、これはみんな素晴らしく便利だね。ちょっと見てみると、この4つのサウンドのモジュールは94.5Kのメモリを食っているのがわかる。もし僕が28個全部ロードすると、これは431.8Kという途方もない容量にはね上がる。たとえ、それらがサウンドほどではないにしても、僕の408Kのカーネルと比べたら巨大だ。もしこれらをすべてカーネルに組み込んでしまったら、起動に時間がかかるだけでなく、もっと多くのRAMが不必要にカーネルに取られることになるだろう。それに、on-the-flyでコンポーネントを再構成する事がとても難しくなるだろう。現在、僕は、サウンドカードの使うIRQを替えたいと言いたい。それには、僕は単に設定ファイル(/etc/isapnp.conf)を編集して、サウンド・サブシステムを再起動(/etc/rc.d/init.d/sound restart)すればいいんだ。モジュール性はあなたのサウンドカードの再構成を、Apacheを再構成するのと同じようにシンプルにする!

OpenGL

OpenGLのもっとも良い点の一つは、そのパイプライン・インターフェースのモジュール性です。nVidiaが、ジオメトリ変形とライティングをハードウェアで処理するチップのGeForceラインを公表した時、OpenGLを使ったあらゆるゲームは、再コンパイルする必要なしに、即座に速度を高めた。この恩恵を感じるユーザーは、単純にこのカードを買って、カードをインストールし、ドライバーをインストールし、彼らのOpenGLのゲームを動かしたのだった。これがモジュール性の美しさだ -- うまくデザインされたときには、Plug and Playのmatterをつくり出す。

モジュール性の負の面

残念だけど、モジュール性は何にでも応用できるわけじゃない。モジュール性が、速度を落したり、問題を複雑にしたり、セキュリティーホールのもとになったりして、物事を悪化させるような状況が幾つかあるんだ。これらの状況のほとんどは技術的に不明瞭な正当化があるので、僕は下に単に2つ挙げよう。

将来

オーケー。いくらかのものはモジュール化されている。で、僕らはこれからどこへ行くべきなの?

もし、誰かが僕に質問したら、僕は彼に彼自身について尋ねるだろうね、モジュール化されていないものが沢山あるじゃないか。残念ながら、後方互換性が重要だと判断されている間は、このままだろうね。この点は、BeOSが能率的である主な理由の一つだよ -- 設計者は現在の慣例を捨てて、現状にあったシステムを設計したんだ。その結果、ちょうどそれがデザインされた通りになったんだ -- 素晴らしいマルチメディア・オペレーティング・システムにね。

赤ん坊を風呂の水と一緒に捨てる

じゃあ、何が捨て去られるべきなの? 煙る残骸の山になるリスクがあるけど(フレームは勘弁してね)、最初のはUNIXのコマンドラインの構造だろう。誤解しないでよ、僕はコマンドラインを常用していて、Xには確かな疑念を持っているんだ。でも、コマンドラインのパイプラインには更に強い疑念を持ってる。僕が思う幾つかの欠点を列挙してみよう。

そうです、僕は哀れな声を出してます。でも、これは僕が出来るようにしたい事なんだ。

[ds@phoenix ds]$ tar c myfiles >[1,2]
			|1 gzip -9 > backup.tgz
			|2 bzip2 -9 >{192.168.0.4}

僕の空想の世界(もちろん、その世界で僕はLinux 4.2.18を使ってる)では、「myfiles」ディレクトリをtarで固めて、bzip2で圧縮してネットワークの先にあるリモートのマシンに送ると同時に、gzipで圧縮してローカルなtarballにバックアップする。これは、すっきりしてるだけじゃなくて、多くのアプリケーションにとって役にたつだろう。

ハードウェア

僕は映画のキャラクターでは狙撃手をずっと気に入っている。(もちろん、映画は狙撃手が実際に登場するのに限るけどね。) 彼らは、目的の場所(ひょっとしたら、塔のある見捨てられた建物)へ旅行し、武器のケースを開け、狙撃銃を独立した部品から組み上げる。main firing chamberをつかみ、正面にサイレンサーを取り付け、スコープをクリップし、弾薬のマガジンをロックし、そして狙撃して去るだろう。

こんなスナイパーみたいに、僕は材料を合わせて組み立てるのが好きなんだ。僕は、サウンドカードのスピーカーの出力をテープデッキのマイクロフォンのジャックに差し込んで、デッキの録音ボタンをいれ、mpg123を動かすだけで、MP3をカセットに録音出来たら良いなと思うんだよね。だから、使うために簡単に一般化できるアプリケーション(たとえばQtツールキット)を、何でKDEやGNOME特有のままにしとかなくちゃいけないわけ。それは、KDEかGNOMEか、それとも素のXで動いてる? 何で、時計プログラムにKDEが必要なわけ?

何で、そんなにも多くの人々が信じられないほど誤ったのだろうか? マーティン・ルーサー・キングは「私たちはミサイルをガイドして来たと同時に、人間を誤った方向に導いて来た」と言った。KDEはデスクトップ環境である。それはアプリケーションのフロントエンドであって、アプリケーションの主成分それ自体ではないんだ。

Intel, AMD, Cyrix, Intel, Transmeta, Intel (おおっと、Intelについても言う必要がある?)

ちょうど3年前、x86プロセッサとマザーボードの標準的な接続は、偏在的な"Socket 7" ZIF (Zero Insertion Force)ソケットだった。それから、インテルはPentium IIを"Slot 1"という根本的に異なったCPUとマザーボードのコネクタと一緒に発表した(1998年4月)。それから、(Intel; Celeron PPGA, April 1998)、"Slot 2" (Intel; Pentium II Xeon, June 1998)、それと"Slot A" (AMD; Athlon, August 1999)のおかげで、それはすっかり衰退してしまった。

残念だけど、僕は状況が今すぐに、特に、普通Mercedとして知られているCPI(Itanium)を転機点として改善されつつあるとか、Pentium IVがより早く(2000年後半にも)登場するとかは思ってない。この質問に対する回答は、それだけで一つの社説が書けるぐらいだ。

リファレンス


David Symonds (xoxus@usa.net)はオーストラリアのシドニー大学の最初の年のコンピューターサイエンスの学生で、彼の現在の職業の野望は職を見つけることだ。