Table of Contents
1. Introduction / goals
Aurie1 is the "safe serialization" system for Spritely Goblins. The core idea (provided by Jonathan A. Rees) is that serialization is "eval/apply in reverse", ie "uneval/unapply".
Aurie's goals:
- Serialization should be easy to do, and to many use cases, automatic
- No requirement for underlying language runtime snapshotting
- Restoration is an opportunity for upgrade, so Aurie is also the default upgrade mechanism
- Preserves ocap requirements
- "Feels goblins'y"
A longer introduction to these ideas can be found in the Heart of Spritely.
2. Aurie's history
2.1. JAR's Uneval and Unapply, jhu-paper
The first exposure the author (Christine Lemmer-Webber) had to the ideas Aurie builds on was from Safe Serialization Under Mutual Suspicion by Mark S. Miller (read after persistent encouragement from Baldur Jóhannsson). Most of Aurie's key ideas can be found in that paper, but contextualized slightly differently and with a very different interface.
However, that paper was itself inspired by comments presented from Jonathan A. Rees to Mark S. Miller about "uneval/unapply". (Mark had been previously convinced by Randy Farmer while at Electric Communities that explicit serialization was a viable path, but the uneval/unapply metaphor provided a clean language conceptual mapping that worked well with object capability security.) This is the core idea: while running a program happens through eval/apply, serialization can be seen as simply eval/apply in revese, hence uneval/unapply. Thus, restoring from serialization is a kind of re-eval/re-apply.
2.2. Proto-Aurie: Aurie as a library
An early implementation of Aurie was then implemented in the Racket version of Goblins. This proved that Aurie could be layered as a conceptual layer on top of Goblins, without requiring core support from either the language runtime or Goblins itself.
2.3. Aurie re-imagined as core to Goblins
Unfortunately, there were several annoyances with the first (and separate from Goblins) version of Aurie:
- Since Aurie was a separate library, many core common actor types
provided in Goblins'
actor-lib
did not have Aurie support, thus had no way of being serialized - Aurie was very annoying to integrate
Hence this new version of Aurie, which aims to integrate Aurie into Goblins itself aiming to make it omnipresent and strongly encouraged for every actor which might be serialized to implement, and much more conveniently than before.
3. High level user story
4. Implementation and interface details
4.1. Writing Aurie-bindable objects
4.2. The aurenv
4.3. Wiring an aurenv to a vat
4.4. Low-level actormap snapshotting
4.5. Different kinds of storage backends
5. Auto-diagram bonus feature
6. Conclusions
Footnotes:
Aurie's name partly came from the character design assigned to it as a conceptual Spritely sub-project, which was of a character made of ethereal flame which was meant to be extinguished and re-ignited like a phoenix, so "Aurie" is somewhat derived from the "aurora borealis".