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）:應用程式可以根據硬體或其他可用資源來載入不同的程式模組來執行特定的功能。例如像影片播放器可以使用許多不同解碼模組中的任何一個來進行影片的解碼。

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

## 歷史

日期｜版本｜備註

1996年｜Inferno Beta｜貝爾實驗室

1997年5月｜Inferno Release 1.0｜貝爾實驗室技術期刊文章，1997年冬季

July 1999｜Inferno第二版｜Lucent's Inferno Business Unit

June 2001｜Inferno第三版｜Vitanuova

2004｜Inferno第四版｜開放原始版版本，改善了早期版本不相容的介面，納入了9P2000的支援

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典藏頁面

## 基本資料

- 軟體版本週期：Inferno
- 域：

<image>

- 開發者：貝爾實驗室 / Vita Nuova Holdings
- 源碼模式：自由軟體
- 內核類別：虛擬機器
- 支援平台：ARM，PA-RISC，MIPS，PowerPC，SPARC，x86
- 作業系統家族：類Unix
- 程式語言：C
- 運作狀態：持續中
- 許可證：GPL / LGPL / MIT
- 網站： Vita Nuova, https://bitbucket.org/inferno-os/inferno-os