Inferno_(网站服务)

**Inferno** 是種可以創造並支援分散式服務的作業系統。它主要是基於貝爾實驗室九號計畫的經驗以及貝爾實驗室接下來對於作業系統、語言、即時編譯器、圖形、安全性、網路、移植等的研究而產生的。

Inferno 應用程式可以移植到大多數混合的硬體、網路、環境上。它也定義了一套名為 Dis 的虛擬機器，這個虛擬機器可以在任何實體機器上實做，使用 Limbo 這種型別安全的語言來編譯成位元碼。Inferno 也提供了具備相同介面的虛擬作業系統來讓使用者可以在硬體上原生地執行 Inferno 或以應用程式的方式代管在其他系統中。

一種名為 Styx 的通訊協定被用來讓系統內可以採用一致的方式，讓應用程式只要使用標準的檔案操作，如開啟、讀取、寫入，以及關閉，就可以存取近端與遠端的資源。在第四版的 Inferno 中，Styx 跟九號計畫中 9P 協定的新版本 9P2000 是一樣的。

作業系統以及相關程式、Vita Nuova Holdings 公司的名稱都是源自於但丁・阿利吉耶里的著作，尤其是神曲。

## 設計概念

Inferno 最早是於 1995 年由貝爾實驗室計算機科學研究部門（Computer Science Research division）的成員為了把九號計畫的思想更廣泛的使用在裝置及網路上所製作的。Inferno 是基於九號計畫的三個基礎原則而製作的分散式作業系統：

* **把資源視做檔案**：把所有的資源都列在階層式檔案系統中以檔案表示。
* **命名空間**：從應用程式的觀點來看，網路是種單一且清楚的命名空間，能展現階層式檔案系統，也能代表近端或遠端實體分離的資源。
* **標準通訊協定**：採用名為 Styx 的標準協定，用來存取近端或遠端的所有資源。

為了處理並使用多樣化的網路環境，設計者決定採用虛擬機器當做系統中必要的元件。這跟後來成為 Java 的 Oak 專案的結論相同，但各別達成了這樣的目標。Dis 虛擬機器是一種傾向於貼近運行架構的一種暫存器機（register machine），相對來說 Java 虛擬機器則是一種堆疊機（stack machine）。這種方法的優勢是只要簡單的為新架構建立一個即時編譯器就可以了。

虛擬機器提供的記憶體管理功能設計上在 1MB 大小的記憶體且不提供記憶體對映的硬體上會較有效率。垃圾回收機制則是一種參照計數（reference counting）與收集循環資料（cyclic data）的即時染色收集器（real-time coloring collector）混合而成的。

Inferno 核心包含了虛擬機器、即時編譯器（on-the-fly compiler）、排程、裝置、協定堆疊（protocol stacks）、各行程檔案命名空間的命名空間直譯器（evaluator），以及階層式檔案系統的根目錄。核心也同時包含了一些提供了虛擬作業系統介面的內建模組，像是系統呼叫、圖形、安全性、以及數學函式模組。

貝爾實驗室技術期刊（Bell Labs Technical Journal）介紹 Inferno 具有幾個方面上由作業系統所支援的可移植性與通用性：

> 
> 
> * 可以移植到不同的處理器上：目前可以在 ARM、MIPS、PA-RISC、PowerPC、SPARC，以及 x86 等架構上運作，也可以移植到其他的架構上。
> * 可以移植到不同的環境上：它可以以獨立的作業系統運作在小型終端機上，或是以使用者應用軟體的形式存在於九號計畫、Windows NT、Windows 95、UNIX（Irix、Solaris、FreeBSD、GNU/Linux、AIX、HP-UX）。Inferno 應用程式在這些環境中都有相同的介面。
> * 分散式設計：在使用者終端機以及伺服器的部分都具有相同的環境，而且彼此間可以匯入對方的資源（例如附加的輸入 / 輸出裝置或是網路）。應用程式可以在運行系統中的通訊機制輔助之下，輕鬆的（甚至是動態的）分散到客戶端或伺服器端。
> * 最低硬體需求：它在機器上所運行的實用應用程式只需要 1MB 的記憶體，也不需要記憶體對映的硬體支援。
> * 可攜式應用：Inferno 應用程式是以型別安全的 Limbo 語言所撰寫，編譯出來的執行檔在各種平台上的執行結果都會一致。
> * 動態適應性（Dynamic adaptability）: 應用程式可以根據硬體或其他可用資源來載入不同的程式模組來執行特定的功能。例如像影片播放器可以使用許多不同解碼模組中的任何一個來進行影片的解碼。
> 

這些設計面上的決定導致它為了能夠讓內容與服務提供者可以著重於他們所傳送的內容，而非把重心放在處理各種不同的硬體、軟體或網路環境，因此提供了一種標準的介面來達成這樣的目的。

## 歷史

Inferno 是九號計畫的衍生產品，彼此之間有許多共通的設計概念以及核心中的程式碼，特別是關於裝置以及 Styx/9P2000 協定的部份。Inferno 也把 Unix 哲學與自貝爾實驗室繼承而來的 UNIX 經驗分享給九號計畫的專案。許多 Inferno 的命令列工具原先也都是九號計畫的工具，之後才用 Limbo 語言改寫。

IEEE Internet Computing 在 1997 年 3-4 月的刊物中有 Inferno 網路軟體的廣告。該廣告宣稱可利用多種裝置在包含網際網路、電信網路，以及區域網路等之 "任何網路" 上進行通訊。圖中甚至擺放了 PlayStation 之類的相片，如果電玩可以跟電腦溝通、手機可以存取電子郵件、電視可以存取語音郵件。

貝爾實驗室計算科學研究中心（Computing Science Research Center）的成員 Ken Thompson、Dennis Ritchie，以及道格拉斯・麥克羅伊研究並開發了 C 語言，並使用該語言建造了 UNIX。貝爾實驗室中的程式設計師隨後進行九號計畫及 Inferno 等針對現代分散式環境的作業系統開發。

朗訊科技至少有兩個內部專案有採用 Inferno：Lucent VPN Firewall Brick 以及 Lucent Pathstar phone switch。這也開啟了販賣 Inferno 原始碼授權的嘗試，不過反應並不熱烈。朗訊科技沒特別做行銷又忽略了 Inferno 與網際網路的重要關連，而 Java 語言跟 Inferno 目標市場相似、採用類似的技術、可以在網頁瀏覽器中運行，也同時滿足了當時對於物件導向語言的流行。當昇陽電腦大力行銷自家的 Java 時，朗訊科技自昇陽電腦取得 Java 的授權，宣稱所有 Inferno 的裝置皆能執行 Java。Java 位元碼與 Dis 位元碼的轉譯器就是為了達成這個功能所產生的。然而 Inferno 還是賣不出去。

Inferno 商業部門過了三年就關閉且被賣給 Vitanuova。Vitanuova 持有相關的權利後，便繼續研發並對整個系統採用商業化授權的方式，隨後提供免費下載以及對核心以及虛擬機器以外的整個系統採非 GPL 相容授權的方式。Vitanuova 將軟體繼續移植到新的硬體以及專注在分散式應用軟體上，最終將原始碼採用 GPLv2 授權釋出，而 Inferno 作業系統現今也變成是一個開放原始碼的專案。

## 移植

Inferno 可以直接在原生硬體中執行，也能在其他平台以應用程式的方式提供虛擬作業系統。應用程式無須經過修改或重編譯即可在所有的 Inferno 平台開發並執行。

原生移植包括 x86、MIPS、ARM、PowerPC，以及 SPARC。

代管或虛擬作業系統移植則包括：Microsoft Windows、GNU/Linux、FreeBSD、九號計畫、Mac OS X、Solaris、IRIX、UnixWare。

Inferno 也可以以套件的方式代管於 IE 中。根據 Vita Nuova 的說法，針對其他瀏覽器的套件也在開發中。

Inferno 也可以移植到 OpenMoko、Nintendo DS 以及 SheevaPlug。

## 授權

Inferno 第四版於 2005 年初以自由軟體的授權釋出。具體來說，Inferno 採用了雙授權的方式採用了兩種授權供使用者選擇。使用者可選擇在自由軟體授權或傳統商業化授權的情況下取得 Inferno。根據自由軟體授權的規範，系統中各個部份可以採用不同的授權方式，這些授權方式包括 GPL、LGPL、Lucent Public License，以及 MIT License。後來 Vita Nuova 讓 Inferno 可以在 GPLv2 的授權下取得除了字型（採用 Bigelow and Holmes 授權）以外的整個系統。現在總共有三種授權方式可供選擇。

## 書籍

由 Phillip Stanley-Marbell 所撰寫的 _Inferno Programming with Limbo_ 雖然描述了一些 Inferno 作業系統第三版的情況，但大多都專注在 Limbo 語言以及 Inferno 系統所提供的介面上。例如說這本書僅提到一點 Inferno 多用途命令列（command shell）的功能，不過作為一本程式設計相關的書籍，這也是可理解的情況。

另一本由 Brian Stuart 所撰寫的 _Principles of Operating Systems: Design and Applications_ 則採用 Inferno 作為作業系統設計的實例。

而由 Martin Atkins、Charles Forsyth、Rob Pike，以及 Howard Trickey 合著的 "The Inferno Programming Book: An Introduction to Programming for the Inferno Distributed System" 一書，嘗試以作業系統為中心的觀點介紹 Inferno，只是不幸地作者從未完成或釋出該一著作。

## 參照

* Inferno 應用程式列表
* 貝爾實驗室九號計畫
* Unix
* Language-based system
* JNode
* Singularity (作業系統) 微軟研究院作業系統方面的類似成果

## 參考文獻

## 外部連結

* Inferno Project at Google Code （頁面存檔備份，存於網際網路檔案館）
* Inferno 第四版下載頁面，提供原始碼下載 （頁面存檔備份，存於網際網路檔案館）
* 教學檔案 （頁面存檔備份，存於網際網路檔案館）
* Inferno 使用者手冊 （頁面存檔備份，存於網際網路檔案館）
* 其他檔案 （頁面存檔備份，存於網際網路檔案館）
* 郵件列表及其他資源 （頁面存檔備份，存於網際網路檔案館）
* Ninetimes: 關於 Inferno、九號計畫及其他相關技術的新聞及文章 （頁面存檔備份，存於網際網路檔案館）
* Inferno Wiki
* Inferno 程式設計師手冊 - 開發人員所撰寫的日誌。

**Ports**

* Inferno for the Nintendo DS （頁面存檔備份，存於網際網路檔案館）
* Inferno for the Marvell Kirkwood/Sheevaplug （頁面存檔備份，存於網際網路檔案館）
* Inferno on OLPC （頁面存檔備份，存於網際網路檔案館）
* Inferno port to the Openmoko neo freerunner （頁面存檔備份，存於網際網路檔案館）

**Of Historical Interest**

* 朗訊科技 Inferno 原本網站的 cat-v 典藏頁面 （頁面存檔備份，存於網際網路檔案館）
* Inferno 原本郵件列表的 cat-v 典藏頁面 （頁面存檔備份，存於網際網路檔案館）