2006年06月23日

今後のOSに望むこと

 新しいOSを作ることが流行らなくなってから、長い年月が過ぎた。
 念のため言っておくが、Linuxは新しくない。そしてWindowsも新しくない。どちらもC言語をベースにした、UNIXもどきのOSだ。1973年でOSの時間は止まった。いまも私たちはそこにいる。
 おそらく私が生きているあいだには、OSは漸進的にしか進歩しないだろう。どのように進歩するかを、私の願望という形で予想してみる。

 
 Java VMや.NET CLRを、カーネルに入れてほしい。もちろん、インタプリタでは話にならない。動的コンパイルされたコードが、カーネルモードで動かせるようになってほしい。メリットは以下のとおりだ。
・カーネルモードで動くコードを、かなり安全かつ簡単に書ける
 Microsoftも、糞ドライバに青筋を立てるよりは、C#でドライバを書かせたほうがいい。というか、C言語で書かされるこちらも青筋を立てている。
・OSに依存しないドライバが可能になる
 現在、ドライバはOSごとに違う。実用的な仮想マシンはOSよりも少ない(事実上2つしかない)ので、仮想マシンごとに違うほうがマシだ。また、一つのOSで同時に複数の仮想マシンを実行することもできる。
・カーネルモードとユーザモードの境界が柔軟になる
 LinuxにはkHTTPdというものがある。これはHTTPのリクエストをカーネルモードで処理して高速化する(とはいえ現在の実装は、Apacheに比べれば速い、というレベルらしいが)。また、昔のLinuxでは、NFSサーバはユーザモードで動作した。現在ではカーネルモードで動いている。これも性能を出すためだ。
 Windowsにも同様の事情がある。NT系列は、4.0まではディスプレイドライバはユーザモードだったが、4.0以降はカーネルモードになった。また、IISの6.0以降は、kHTTPdと同様のことをしている。
 これらのカーネル化には批判が多い。カーネル化で得られる性能を、すべての人が必要としているわけではないからだ。もちろん純粋なマイクロカーネルもやりすぎだ。では、どうやって線引きすればいいのか?
 そもそも、OSが線引きすること自体が間違っている。
 カーネルモードとユーザモードの境界を、OSが決めるべきではない。決めるのはアプリケーションであるべきだ。アプリケーションは、必要とあれば気軽にカーネルモードを使えるべきだ。
 
 分散アプリケーションでOSのユーザ認証を使えるようにしてほしい。
 ユーザ登録と認証のあるWebアプリを作ったとしよう。Webメールなどだ。そのユーザ認証を、OSの機能で行うだろうか。WebアプリのユーザごとにOSのユーザアカウントを作成する――そんなことをするだろうか。おそらく、しない。だがWebアプリのユーザは、OSの管理下にある資源を使っている。
 ということは、Webアプリのユーザは潜在的に、過大な権限を与えられている。別の見方をすれば、Webアプリはユーザ認証と資源管理を独自実装している。「暗号を独自実装してはいけない」というのは常識だが、「ユーザ認証を独自実装してはいけない」「資源管理を独自実装してはいけない」というアドバイスはまだ聞いた覚えがない。しかしこれらは明らかに、独自実装するには危険な代物だ。
 WebアプリでOSのユーザ認証を使えるようになったとしても、RDBMSは? それもOSのユーザ認証と一本化する。RDBMSは分散アプリケーションだ。
 
 これらはすべて斬新的な進歩だ。「ゼロからHaskellで書き直せ」とか「CPUのアーキテクチャから作り直せ」といったドラスティックな進歩はいくらでも考えられる。実装することもできる。しかし、それ以上のものにはならないだろう。
 斬新的にしか進歩しない世界でも、やることはたくさんあるし、C言語のコードを完全に消滅させることさえも夢ではない。ある日気がつくと、C言語のコンパイラがいらなくなっていた――そんな日が来るはずだ。

Posted by hajime at 2006年06月23日 00:18
Comments