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 date=20150224225244 -  Inferno第四版下载页面，提供原始码下载 date=20100704205215 -  教学文件 date=20200724213209 -  Inferno使用者手册 date=20201004194410 -  其他文件 date=20200924062531 -  邮件列表及其他资源 date=20201029165204 -  Ninetimes:关于Inferno、九号计划及其他相关技术的新闻及文章 date=20201130071613 -  Inferno Wikifix-attempted=yes -  Inferno程式设计师手册 - 开发人员所撰写的日志。
Ports-  Inferno for the Nintendo DS date=20150106085259 -  Inferno for the Marvell Kirkwood/Sheevaplug date=20140918032902 -  Inferno on OLPC date=20210108202550 -  Inferno port to the Openmoko neo freerunner date=20160122211522 
Of Historical Interest-  朗讯科技Inferno原本网站的cat-v典藏页面 date=20210107222838 -  Inferno原本邮件列表的cat-v典藏页面 date=20210107103931