Inferno !!

Inferno

inferno - n. (plural - infernos), scene of horror or distress, esp. in fire; hell
            * Little Oxford Dictionary; Sixth Edition


from : http://inferno.lucent.com./inferno/index.html
         : http://inferno.lucent.com./inferno/infernosum.html

                Developed by the  Computing Sciences Research Center of Bell Laboratories (the research arm of Lucent Technologies), Infernotm  is a new network operating system and programming environment to deliver content in a rich environment of heterogeneous networks, clients and servers. Basically, the Inferno system includes the Inferno kernel, the Limbotm programming language, reference APIs that include interfaces for networking and graphics, network protocols, security and authentication, and various toolkits.

                There are a variety of network environments that Inferno can be an important part of; for example those supporting advanced hand-held devices, TV set-up boxes attached to cable systems, and inexpensive networked computers. Not to mention the most visible new environments such as cable television, direct satellite broadcast, the Internet, and other networks. Why is it so important and useful to have an operating system such as Inferno implemented in such networks? As the entertainment, telecommunications, and computing industries converge and interconnect, a variety of public data networks are emerging, each potentially as useful and profitable as the telephone system. But unlike the telephone system, which started with standard terminals and signaling, these networks are developing in a world of diverse terminals, network hardware, and protocols. Only a well-designed, economical operating system can insulate the various providers of content and services from the equally varied transport and presentation platforms. This is why we need such an operating system. Inferno is a network operating system for this new world.

Portability

                Again portability (as in JAVA) gives Inferno its special strength above others. Let us investigate the scope of Inferno's portability and versatility :
Portability across processors
Inferno currently runs on Intel, Sparc, MIPS, ARM, HP-PA and AMD 29K architectures, and is readily portable to others
Portability across environments
Inferno runs as a stand-alone operating system on small terminals, and also as a user application under Windows NT, Windows 95, Unix (Irix, Solaris, Linux, AIX, HP/UX) and Plan 9. In all of these environments, Inferno applications see an identical interface
Distributed Design
The identical environment is established at both the user's terminal and at the server, and each may import the resources of the other; aided bye the communications facilities of the run-time system, applications may be split easily (and even dynamically) between client and server.
Minimal hardware requirements
Astonishingly, it runs useful applications stand-alone on machines with as little as 1 MB (!!) of memory, and does not require memory mapping hardware.
Portable applications
Inferno applications are written in the type-safe language LIMBO (!!), whose binary representation is identical over all platforms ( compare this with JAVA !)
Dynamic adaptability
Applications may, depending on the hardware or other resources available, load different program modules to perform a specific function.
                Inferno is parsimonious enough in its resource requirements to support interesting applications on today's hardware, while being versatile enough to grow into the future. In particular, it enables developers to create applications that will work across a range of facilities. An example: an interactive shopping catalog that works in text mode over a POTS modem, shows still pictures (perhaps with audio) of the merchandise over ISDN, and includes video clips over digital cable. Clearly not everyone who deploys an Inferno-based solution will want to span the whole range of possibilities, but the system architecture should be constrained only by the desired markets and the available interconnection and server technologies, not by the software.


Inferno Interfaces

                The role of the Inferno system is to create several standard interfaces for its applications:                 At the same time, Inferno uses interfaces supplied by an existing environment, either bare hardware or standard operating systems and protocols.

                Most typically, an Inferno-based service would consist of many relatively cheap terminals running Inferno as a native system, and a smaller number of large machines running Inferno as a hosted system. On these server machines Inferno might interface to databases, transaction systems, existing OA&M facilities, and other resources provided under the native operating system. The Inferno applications themselves would run either on the client or server machines, or both.


External Environment of Inferno Applications

                The purpose of most Inferno applications is to present information or media to the user; thus applications must locate the information sources in the network and construct a local representation of them. The information flow is not one-way: the user's terminal (whether a network computer, TV set-top, PC, or videophone) is also an information source and its devices represent resources to applications. Inferno draws heavily on the design of the Plan 9 operating system in the way it presents resources to these applications.

The design has three principles.

                In practice, most applications see a fixed set of files organized as a directory tree. Some of the files contain ordinary data, but others represent more active resources. Devices are represented as files, and device drivers (such as a modem, an MPEG decoder, a network interface, or the TV screen) attached to a particular hardware box present themselves as small directories. These directories typically containing two files, data and ctl, which respectively perform actual device I/O and control and status operations.


Internal environment of Inferno applications

                Inferno applications are written in LIMBO, which was designed specifically for the Inferno environment. Its syntax is influenced by C and Pascal, and it supports the standard data types common to them, together with several higher-level data types such as lists, tuples, strings, dynamic arrays, and simple abstract data types. A communication mechanism called a channel is used to connect different LIMBO tasks on the same machine or across the network. A channel transports typed data in a machine - independent fashion, so that complex data structures (including channels themselves) may be passed between LIMBO tasks or attached to files in the name space for language-level communication between machines. Note that multi - tasking is supported directly by LIMBO; so by building channels and tasks into the language and its virtual machine, Inferno encourages a communication style that is easy to use and safe.

                Modules are self-contained units with a well-defined interface containing functions (methods), abstract data types, and constants defined by the module and visible outside it. Modules are accessed dynamically, that is, when one module wishes to make use of another, it dynamically executes a load statement naming the desired module, and uses a returned handle to access the new module. When the module is no longer in use, its storage and code will be released. Remember that LIMBO programs are built of modules, therefore the flexibility of its modular structure contributes to the smallness of typical Inferno applications, and also to their adaptability.

                LIMBO is fully type-checked at compile- and run-time; allowing LIMBO programs to run safely on a machine without memory - protection hardware. Moreover, all LIMBO data and program objects are subject to a garbage collector, built deeply into the LIMBO run-time system. All system data objects are tracked by the virtual machine and freed as soon as they become unused. LIMBO programs are compiled into byte-codes representing instructions for a virtual machine called Distm. When loaded into memory for execution, the byte-codes are expanded into a format more efficient for execution. There is also an optional on-the-fly compiler that turns a Dis instruction stream into native machine instructions for the appropriate real hardware. This can be done efficiently because Dis instructions match well with the instruction-set architecture of today's machines. The resulting code executes at a speed approaching that of compiled C.


The Environment of the Inferno System

                Inferno creates a standard environment for applications. Identical application programs can run under any instance of this environment, even in distributed fashion, and see the same resources. Depending on the environment in which Inferno itself is implemented, there are several versions of the Inferno kernel, Dis/Limbo interpreter, and device driver set.                 Inferno is, to the extent possible, written in standard C and most of its components are independent of the many operating systems that can host it.

Security

                Inferno provides security of communication, resource control, and system integrity. Each external communication channel may be transmitted in the clear, accompanied by message digests to prevent corruption, or encrypted to prevent corruption and interception. Once communication is set up, the encryption is transparent to the application.  Inferno is secure against erroneous or malicious applications, and encourages safe collaboration between mutually suspicious service providers and clients.


JAVA and Inferno - a comparison
Take a peek at Inferno Desktop
Return to Main Page


ABSTRACT

"If, reader, you are slow now to believe
What I shall tell, that is no cause for wonder,
For I who saw it hardly can accept it."

Dante Alighieri, Inferno, Canto XXV.