Inferno was created in 1995 by members of
Bell Labs' Computer Science Research division to bring ideas derived from their previous operating system,
Plan 9 from Bell Labs, to a wider range of devices and networks. Inferno is a
distributed operating system based on three basic principles: • Resources as files: all
resources are represented as files within a
hierarchical file system • Namespaces: a program's view of the network is a single, coherent
namespace that appears as a hierarchical file system but may represent physically separated (locally or remotely) resources • Standard communication protocol: a standard protocol, called
Styx, is used to access all resources, both local and remote To handle the diversity of network environments it was intended to be used in, the designers decided a
virtual machine (VM) was a necessary component of the system. This is the same conclusion of the Oak project that became
Java, but arrived at independently. The
Dis virtual machine is a
register machine intended to closely match the architecture it runs on, in contrast to the
stack machine of the
Java virtual machine. An advantage of this approach is the relative simplicity of creating a
just-in-time compiler for new architectures. The virtual machine provides memory management designed to be efficient on devices with as little as 1 MiB of memory and without memory-mapping hardware. Its
garbage collector is a hybrid of reference counting and a real-time coloring collector that gathers cyclic data. The Inferno kernel contains the virtual machine, on-the-fly compiler, scheduler, devices, protocol stacks, the name space evaluator for the file name space of each process, and the root of the file system hierarchy. The kernel also includes some built-in modules that provide interfaces of the virtual operating system, such as system calls, graphics, security, and math modules. The Bell Labs Technical Journal paper introducing Inferno listed several dimensions of portability and versatility provided by the OS: • Portability across processors: it currently runs on
ARM, SGI
MIPS,
HP PA-RISC, IBM
PowerPC, Sun
SPARC, and Intel
x86 architectures and is readily portable to others. • Portability across environments: it runs as a stand-alone operating system on small terminals, and also as a user application under Bell
Plan 9, MS
Windows NT,
Windows 95, and
Unix (
SGI Irix,
Sun Solaris,
FreeBSD,
Apple Mac OS X,
Linux,
IBM AIX,
HP-UX, Digital
Tru64). In all of these environments, Inferno programs see an identical interface. • Distributed design: the identical environment is established at the user's terminal and at the server, and each may import the resources (for example, the attached I/O devices or networks) of the other. Aided by the communications facilities of the run-time system, programs may be split easily (and even dynamically) between client and server. • Minimal hardware requirements: it runs useful applications stand-alone on machines with as little as 1 MiB of memory, and does not require
memory-mapping hardware. • Portable programs: Inferno programs are written in the
type-safe language Limbo and compiled to
Dis bytecode, which can be run without modifications on all Inferno platforms. • Dynamic adaptability: programs may, depending on the hardware or other resources available, load different program modules to perform a specific function. For example, a video player might use any of several different decoder modules. These design choices were directed to provide standard interfaces that free content and service providers from concern of the details of diverse hardware, software, and networks over which their content is delivered. == Features ==