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