The Styx open-communication protocol is Inferno's backbone. It's used for all interprocess communication, such as communication between applications and devices. It uses the same hierarchical-naming convention that's used for files and directories. Common file operations are employed to access files and devices. Applications can then be used as filters or in place of device drivers.
Remote access to devices using Styx is completely location transparent. With this feature, applications can be located on systems other than the ones that contain the services the applications need or control. Styx is implemented on non-Inferno platforms, providing cross-platform communication support.
Inferno actually predates most embedded platforms. Yet its somewhat isolated development has limited the number and sophistication of associated development tools. Inferno's Tk graphical services are good, and Acme is a graphical development environment. But these seem less impressive compared to sophisticated tools like Visual Studio.NET and most Java development tools. Recent releases from Vita Nouva will improve Inferno immensely.
With just over a dozen messages, Styx is a simple communication protocol that combines the hierarchical directory naming system with concise functional support. A typical device may provide a number of different communication channels by delivering a directory of Styx ports with their own file names within the directory. Everything in Inferno is implemented using Styx, including the graphics and windowing support.
The Styx protocol has been implemented independently of Inferno on a number of platforms. This allows Inferno applications to operate with applications written in languages other than Limbo on non-Inferno platforms. This approach has been used effectively in products from Lucent Technologies, owner of Bell Labs.
Styx uses TCP/IP as a transport system. But it can also use other transport mechanisms, such as the similar Internet Link (IL). Unix pipes and shared memory can also be used for local communication. An Inferno implementation normally hides these details from the programmer.
Inferno also implements a two-tier garbage-collection system that combines the compactness of a reference-counting system with the coverage of a mark-and-sweep system. A compact garbage-collection system is very important on platforms with limited memory resources.
The Limbo language support incorporates most of the features found in other platforms, such as JIT compiler support and native-code compilation. Limbo is not a class-based language like Java or C#, but its module architecture provides many of the same features.
Inferno employs dynamically loaded modules. Modules are loaded using Styx. Consequently, modules can be loaded from any source.
As with most platforms, Inferno runs on top of an existing operating system such as Unix or Windows. There is a 700-KB Inferno Web browser plug-in for Microsoft's Internet Explorer, providing an alternative to Java and .NET solutions.
Fans of Dante may have noticed the significance of the names in the Inferno system. These appellations aren't coincidental.