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つの原則に基づいた分散オペレーティングシステムである。
対象とするネットワーク環境の多様性に対応するため、設計段階で仮想機械を使うのが必須であると決定された。これはJavaを生んだOakプロジェクトと同じ結論だが、それぞれ独自に同じ結論に至っている。仮想機械Disはレジスタマシンの一種で、Java仮想マシンとは反対に、動作するアーキテクチャになるべくマッチするよう設計されている。そのため、新たなアーキテクチャをサポートする際にJITコンパイラを作成するのが単純という利点がある。
この仮想機械は、メモリが1MB程度でMMUのないデバイスでも効率的に動作するよう設計されたメモリ管理を備えている。そのガベージコレクションは参照カウント方式とリアルタイム・カラーリング方式の組み合わせである。
Infernoカーネルには、仮想機械、オンザフライ・コンパイラ、スケジューラ、デバイスドライバ、通信プロトコルスタック、名前空間エバリュエータ、ファイルシステム階層のルートが含まれる。また、仮想オペレーティングシステムのインタフェース（システムコール、グラフィックス、セキュリティ、算術モジュールなど）を提供する組み込みモジュールもある。
Bell Labs Technical Journalの論文では、以下に示したような観点でInfernoの移植性と汎用性を紹介している。
このような設計は、コンテンツプロバイダやサービスプロバイダがコンテンツを提供する際に、ハードウェアやソフトウェアやネットワークの詳細を気にせずに済むような標準インタフェースを提供する目的で行われた。
歴史.
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中心の観点から解説した本になる予定だったが、完成することなく出版も見送られた。
外部リンク.
その他