Go to file
Marceline Cramer 0ba807bb94 fix(host): clean up socket on daemon exit (closes #14) 2024-06-04 23:57:16 -06:00
.helix fix: add helix workspaces for host/guest 2024-05-19 21:20:41 -06:00
derive feat: add Schema derive macro 2024-05-20 18:02:15 -06:00
guest feat(guest): expose process info, status, and root process APIs 2024-06-04 23:36:55 -06:00
host fix(host): clean up socket on daemon exit (closes #14) 2024-06-04 23:57:16 -06:00
utils feat(inspect): add initial crate 2024-06-04 23:37:52 -06:00
wit feat(wit)!: add process-info struct 2024-06-04 21:06:41 -06:00
.gitignore feat: initial guest code 2024-05-19 00:21:20 -06:00
Cargo.lock feat(inspect): add initial crate 2024-06-04 23:37:52 -06:00
Cargo.toml feat: add Schema derive macro 2024-05-20 18:02:15 -06:00
README.md feat(host): improve logging 2024-06-03 19:12:10 -06:00
runtime_config.toml feat: define new ReloadCounter class 2024-05-26 15:50:01 -06:00

README.md

Rocky Road

Rocky Road is the first prototype of the "Doublespeak architecture", a scripting and runtime architecture that prioritizes hot-reload-driven programming and runtime observability and inspection. The name represents the challenges associated with implementing this archtiecture for the first time in public.

Design Goals

The #1 priority of Rocky Road is to create an immediately usable (although maybe not useful yet) implementation of the Doublespeak architecture in order to prove its improvements in observability and runtime modification over Hearth's capability-based system.

Methodology

THIS IS A PROTOTYPE, we will be throwing anything out that doesn't work and we will be recycling the stuff that does work for future prototypes. Don't worry about making things last, and develop things quick and loose.

No CI; things should be proven to work with hands-on interaction.

New features can be experimented with as needed without calling for much foresight since long-term architecture mistakes are not as huge of a mistake in a prototype.

There is no need for lasting documentation. This is a code-driven project where strong UX comes first, and the nitty-gritty details of how individual components of the system are up in the air and up to change depending on the users. We're building a bazaar, not a cathedral.

This project gains value from use, so it's important to onboard new people into using this system in order to get feedback and seed some initial users of the architecture.

Open Questions

Doublespeak architecture is an experimental successor to Hearth, so there are several specific questions that we need to focus on answering over Rocky Road's development.

Is guest-side code made meaningfully simpler over guest-side code using Flue and Hearth's capability model? Is it easier to write and compose Rocky Road code?

Is event-based control flow overall a more useful model for process execution when compared to Erlang-style serial control flow and in-place message receiving?

Further Research

Some problems should not be addressed by Rocky Road but should be addressed in a future Doublespeak prototype.

  • host plugins or rich integration into an existing native runtime
  • CI
  • unit testing
  • message schemas, validation, and backwards compatibility
  • having multiple objects be defined in a single Wasm module
    • general idea: initialize some bindings-internal singleton as a dyn Reactor or something, and use a function pointer to a monomorphization of an entrypoint function that is generic over a Reactor. then, wire all of the reactor function exports and hot reload functions exports to be polymorphic over that singleton
  • inspecting the host- and guest-side log output of processes
  • limiting use of process resources
  • securing the registry
    • capability-based permissions before made security relatively straight-forward
    • could we turn registries into general-purpose resource kinds in the future?
    • maybe they could work sort of like watch channels but indexed by strings and with update events