Splits the Urbit runtime into separate processes: the Nock runtime and Arvo kernel state in one (the "worker"), and I/O drivers, event dispatch, and persistence in another (the "daemon").
This architecture provides a number of benefits, namely:
- Events are now computed and persisted in parallel.
- The number and scope of operations performed in a durably-checkpointed memory area are limited.
Perhaps most importantly: this separation allows for alternative Nock runtimes, and the simplicity of the underlying communication protocol is expected to make them straightforward to implement.
Adds support for running the full Arvo bootstrap sequence (i.e. Hoon compiles itself and Arvo, Arvo then compiles and installs
%zuseand the vanes) from a so-called brass pill.
Overhauls the event dispatch and persistence model. Namely:
- The hand-rolled event log of previous versions has been replaced by LMDB.
- Invariants for safe event handling have been formalized, and these are strictly and consistently enforced.
- Writes to the event log are now batched (with computation performed eagerly).
- The event log has been augmented with a chain of hashes that verify its determinism.
Replaces the old HTTP-handling
%eyrevane with a pair of leaner, improved ones. HTTP client and server functionality has now been isolated in
Updates the Arvo interface to support a pattern for Urbit applications designed to move beyond chat and long-form discussions. Includes some useful basic introductory apps designed to make the Arvo interface feel more like the computer it actually is.
Completely replaces the old Meson-based build system with Nix. Builds are now produced in a totally reproducible and predictable environment, with full cross-compilation functionality available for both Linux and Darwin (macOS). Building and contributing to Urbit now requires only one external dependency: the Nix package manager itself.
(Many) miscellaneous smaller improvements.