The System Bus: syndicate-server
- Source code:
syndicate-server program has a number of closely-related functions. In many ways, it is a
reification of the system layer concept itself.
A root system bus service for use by other programs. In this way, it is analogous to D-Bus.
A configuration language suitable for programming dataspaces with simple reactive behaviours.
A general-purpose service dependency tracking facility.
A gatekeeper service, for exposing capabilities to running objects as (potentially long-lived) macaroon-style "sturdy references", plus TCP/IP- and Unix-socket-based transports for accessing capabilities through the gatekeeper.
inotify-based configuration tracker which loads and executes configuration files written in the scripting language.
Process startup and supervision services for running external programs.
The program can also be used as an "inferior" bus. For example, there may be a per-user bus, or a per-session bus, or both. Each bus would appropriately scope the lifetime of its supervised processes.
Finally, it can be used completely standalone, outside a Synit context.
The root system bus
synit-pid1 program invokes
syndicate-server like this:
/usr/bin/syndicate-server --inferior --config /etc/syndicate/boot
The first flag,
--inferior, tells the server to expect to be able to communicate on its
stdin/stdout using the standard wire protocol. This lets
the community of actors running within the system dataspace.
The second flag,
--config /etc/syndicate/boot, tells the server to start monitoring the
directory tree rooted at
/etc/syndicate/boot for changes. Files whose names end with
within that tree are loaded as configuration script files.
Almost all of Synit is a consequence of careful use of the configuration script files in