Springの名前サービス
これまたtwitterで久々に目にしたOS。90年代初期、SUNはSpringと呼ばれる、マイクロカーネルベースのオブジェクト指向分散OSを研究していた*1。プロジェクト開始時の時代背景としては、UNIXをオブジェクト指向的に再実装しようというプロジェクトがご破算になり、Mach 3がリリース直後という時期だった。このころはまだJavaが実装されていなかったので、C++で記述されている。Spring自体は製品化されなかったが、SolarisやJava、CORBAなんかに影響を与えた。
ここではSpringの名前サービスに着目したい。通常、OSはいろいろな名前サービスを提供している。例えば、ファイルシステム、環境変数、DNSなどだ。そしてこれらの名前サービスはそれぞれAPIが異なっている。これに対して、Plan9は「すべてはファイル」という抽象化を進めて、ファイルベースのユニバーサルな名前サービスを提供しようとした。
Springのアイデアもこれに近いが、オブジェクト指向的なアプローチを取っている。Plan9との違いは、ファイルではなくオブジェクトのレベルで名前を持つこと、さらにオブジェクトのインタフェースがIDL (Interface Description Language)できっちり定義されることだ。前者に関しては、Plan9の場合、非ファイルな資源をファイルにマッピングするためにファイルサーバを書く必要があるけど、Springの場合は不要である。後者に関しては、Plan9の場合、ファイルに対してバイトストリームをread/writeするだけというゆるやかな規定があって、すべての操作をそこに押し込む必要があるが、Springの場合は操作やデータ型をオブジェクトに合わせて定義できることを意味する。
すべての操作をopen-read-write-closeそしてioctlに押し込めるファイルインタフェースは、常々イケてないと思うのだが、結局、数々研究されたオブジェクト指向OSは歴史の闇に消えてしまった。その意味では(?)レイヤは違うが、WindowsのPowerShellがどうなるのかちょっと興味がある。
で、Springに話を戻すと、名前とオブジェクトのバインディングはコンテキスト(オブジェクト)に保存される。コンテキストは一種のディレクトリのようなものである。ドメイン(プロセスのこと)ごとにコンテキストを持つことができるので、Plan9のようにプロセス毎の名前空間を持つことができる。