Inferno (オペレーティングシステム)

Infernoは、分散システムのためのオペレーティングシステム (OS)。Plan 9 from Bell Labs (Plan 9) を開発した経験を元に、その後のベル研究所でのOS、言語、オンザフライ・コンパイラ、グラフィックス、セキュリティ、ネットワーク、移植性などの研究成果を盛り込んでいる。 Infernoアプリケーションは様々なハードウェア、ネットワーク、環境に移植可能である。任意のマシンに実装可能な仮想機械 (Dis) がベースになっている。また、型安全な言語Limboが移植性の高いバイトコードを生成する。さらに、ハードウェア上で直接動作する場合でも、他のOS上でアプリケーションとして動作する場合でも同じインターフェースを提供する仮想オペレーティングシステムを含む。 リソースアクセスは、ローカルでもリモートでもStyxという通信プロトコルを使う。例えばアプリケーションが標準的なファイル操作（オープン、リード、ライト、クローズ）を行う場合もその通信プロトコルを経由する。第4版 (Fourth edition) では、StyxはPlan 9の新しいバージョンでの9Pプロトコル (9P2000) と全く同じである。 OSの名称、関連プログラムの名称、さらには Vita Nuova Holdings という企業名は、ダンテ・アリギエーリの作品、特に『神曲』に由来している。 Infernoは1995年、ベル研究所の計算機科学研究部門がPlan 9の考え方をより広範囲なデバイスやネットワークに広めるために開発した。Infernoは、Plan 9から得られた以下の3つの原則に基づいた分散オペレーティングシステムである。 ファイルとしてのリソース 全てのリソースはファイルとして表現され、ファイルシステムの階層内のどこかに配置される。 名前空間 アプリケーションから見て、ネットワークは単一で一貫した名前空間であり、物理的には分散したリソースも1つの階層化されたファイルシステムとして見える。 標準通信プロトコル Styxという標準プロトコルで、ローカルなリソースにもリモートのリソースにもアクセスする。 対象とするネットワーク環境の多様性に対応するため、設計段階で仮想機械を使うのが必須であると決定された。これはJavaを生んだOakプロジェクトと同じ結論だが、それぞれ独自に同じ結論に至っている。仮想機械Disはレジスタマシンの一種で、Java仮想マシンとは反対に、動作するアーキテクチャになるべくマッチするよう設計されている。そのため、新たなアーキテクチャをサポートする際にJITコンパイラを作成するのが単純という利点がある。 この仮想機械は、メモリが1MB程度でMMUのないデバイスでも効率的に動作するよう設計されたメモリ管理を備えている。そのガベージコレクションは参照カウント方式とリアルタイム・カラーリング方式の組み合わせである。 Infernoカーネルには、仮想機械、オンザフライ・コンパイラ、スケジューラ、デバイスドライバ、通信プロトコルスタック、名前空間エバリュエータ、ファイルシステム階層のルートが含まれる。また、仮想オペレーティングシステムのインタフェース（システムコール、グラフィックス、セキュリティ、算術モジュールなど）を提供する組み込みモジュールもある。 Bell Labs Technical Journalの論文では、以下に示したような観点でInfernoの移植性と汎用性を紹介している。 プロセッサ間の移植性 現在、x86、SPARC、MIPS、ARM、HP-PA、PowerPCといったアーキテクチャで動作し、他のプロセッサへの移植も容易である。 環境間の移植性 小型端末上の独立したOSとしても動作するが、Windows NT、Windows 95、Unix (IRIX, Solaris, FreeBSD, Linux, AIX, HP-UX)、Plan 9上でもアプリケーションとして動作する。どの環境でもInfernoのアプリケーションはインタフェースが同一である。 分散設計 ユーザーのクライアントマシンでもサーバでも同じ環境を確立し、どちらも相手のリソース（例えば、接続しているI/Oデバイスやネットワーク）をインポートできる。システムの通信機能の助けにより、アプリケーションをクライアントとサーバに（時には動的に）分割するのが容易である。 ハードウェアの要求仕様が小さい 最小1MBのメモリでもそれなりのアプリケーションを実行でき、MMUハードウェアを必要としない。 移植性の高いアプリケーション Infernoのアプリケーションは型安全な言語Limboで書かれており、その実行ファイルは全てのプラットフォームで同一である。 動的適応性 ハードウェアや利用可能なリソースの状況によって、アプリケーションがロードするモジュールを変えることがある。例えば、ビデオプレーヤーのアプリケーションは状況によってデコーダモジュールを使い分ける。 このような設計は、コンテンツプロバイダやサービスプロバイダがコンテンツを提供する際に、ハードウェアやソフトウェアやネットワークの詳細を気にせずに済むような標準インタフェースを提供する目的で行われた。 InfernoはPlan 9からの派生であり、設計理念の大部分、さらにはカーネルのソースコードの大部分、特にデバイス関連とStyx/9P2000プロトコル部分は共通である。 また、ベル研究所のUnixの遺産とUNIX哲学も共通している。Infernoでの多くのコマンド行ツールはPlan 9のツールをLimboで書き直しただけである。 IEEE Internet Computing誌の1997年3月4月号には、Infernoの広告が掲載された。それによると、様々なデバイスがインターネットやLANを含む任意のネットワークで通信できるとされていた。広告にはゲーム機（プレイステーションの写真が広告の中にあった）とコンピュータの通信も可能とあり、テレビを使ったボイスメールなどといった話もあった。 ルーセント・テクノロジーは当初、Infernoのソースコードのライセンスを販売しようとした。しかし、インターネットの重要性とInfernoとの関係を営業部門が認識しておらず、マーケティングは非常に小規模だった。同じ頃サン・マイクロシステムズは、ほぼ同じ市場を狙ったJavaを大々的にマーケティングしていた。どちらも似たような技術（仮想機械）を使っていたが、Javaはウェブブラウザ上で動作し、当時流行していたオブジェクト指向プログラミングを採用していた。ルーセントはサンからJavaのライセンスを取得し、全てのInfernoデバイスはJavaも実行できるようになると主張した。JavaのバイトコードをDisのバイトコードに変換するトランスレータがそのために開発された。しかしInfernoは未だに顧客がついていなかった。Inferno部門は3年でなくなり、権利は Vita Nuova に移譲となった。 ルーセントは少なくとも2つの製品でInfernoを使った。1つはLucent VPN Firewall Brickで、もう1つはLucent Pathstar phone switchである。 Vita Nuovaは権利を取得した後も開発を進め、商用ライセンスで完全品を販売しながら、カーネルとVMを除いたシステムを無料でダウンロード可能としていた（ライセンスはGPL非互換）。新たなハードウェアへの移植も行い、分散アプリケーションに注力した。最終的にVita NuovaはソースコードをGPLv2でリリースし、Infernoはオープンソースプロジェクトとなった。 Infernoはハードウェア上で直接動作するが、同時に他のプラットフォーム上のアプリケーションとして動作し仮想オペレーティングシステムにもなる。アプリケーションは修正や再コンパイルすることなく、全てのInfernoプラットフォーム上で動作できる。 直接動作するハードウェアとしては、x86、MIPS、ARM、PowerPC、SPARCなどがある。 仮想OSが動作するOSとしては、Microsoft Windows、Linux、FreeBSD、Plan 9、macOS、Solaris、IRIX、UnixWareなどがある。 Internet Explorerのプラグインとしても動作する。Vita Nuovaによれば、他のブラウザ用プラグインも開発予定である。 InfernoはOpenMokoにも移植されている。 Inferno 4th edition は2005年初めにフリーソフトウェアとしてリリースされた。デュアルライセンスであり、ユーザーはフリーソフトウェアとして利用することもできるし、商用ライセンスで購入することもできる。フリーソフトウェアライセンスの場合、システムの部分によってライセンスが異なっており、GNU General Public License、GNU Lesser General Public License、Lucent Public License、MIT Licenseが各部分に対応している。その後Vita Nuovaはシステム全体（ただし、フォントはBigelow and Holmesからのサブライセンス）をGPLv2で利用できるようにした。これら3種類のライセンス形態が今でも選択可能である。 Phillip Stanley-Marbellの教科書的著書 Inferno Programming with Limbo ISBN 0-470-84352-7 (Chichester: John Wiley & Sons, 2003) はInfernoの第3版を解説しているが、Limbo言語の解説とLimboのInfernoとのインタフェースが主眼であり、Inferno自体の解説は少ない。例えばInfernoの汎用シェルの情報は少ない。 Brian StuartのPrinciples of Operating Systems: Design and Applications ISBN 1-4188-3769-5 (Course Technology, 2008) は、Infernoを例としてオペレーティングシステムの設計を論じたものである。 Martin Atkins、Charles Forsyth、Rob Pike、Howard TrickeyのThe Inferno Programming Book: An Introduction to Programming for the Inferno Distributed Systemは、OS中心の観点から解説した本になる予定だったが、完成することなく出版も見送られた。