Overview

Saturn is built around a 32-bit microkernel. The kernel itself is small and responsible for only a few key features including task scheduling, memory management and inter-process communication. All other features (drivers, filesystems, GUI) are handled by isolated ring-3 processes called services. Applications and services communicate via asynchronous message passing.

Vostok

Saturn uses a Virtual File System to provide a uniform interface to systems exposing not just files but objects too. Any system can mount itself somewhere in the root hierarchy, and any IO requests to a child of that mount point get routed to the appropriate system. Applications can also mount themselves to expose a Vostok Object for easy ad-hoc IPC.

Vostok is Saturn's Virtual Object System. It introduces the concept of objects that can be accessed like files via the VFS. Objects can have properties as well as callable functions, providing an RPC mechanism. Consider an object to be a directory; properties would be files (or directories in the case of nested objects) that can be read or written to. Functions can be similarly read from and written to, with different semantics: reading a function will get the function's signature, while writing to the function executes the function with optionally supplied (and type-checked) arguments.

Introspection plays a key role in Vostok objects. Reading the object itself returns a list of all the properties (and their types) as well as any functions (and signatures) the object supports. This promotes discoverability by providing a convenient mechanism to examine objects.

Apollo

Apollo is Saturn's graphical UI framework. It uses a tiling window manager that splits up screen space into a hierarchy of tiles (application windows) and containers that arrange tiles horizontally or vertically. One of the main goals of Apollo is to support rapid UI prototyping. To accomplish this, Apollo uses a declarative layout language called Mercury. By editing Mercury files you can easily create and modify an application's UI.

Apollo makes heavy use of databinding. Certain UI elements like Labels expose properties that are 'bindable', such as caption and background. By defining properties in an application and then 'binding' them to elements, the appropriate UI element updates automatically whenever the property's value changes.

Templates provide a convenient way of defining how user-defined classes should be displayed by Apollo. A template can be any UI element, such as a label, with appropriate bindings to the class's properties. By providing a template and an item source for collection elements (ie grid, list view), Apollo instantiates the template for each item in the source and sets up the bindings.