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:

1

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".

Author: Christine Lemmer-Webber

Created: 2023-02-16 Thu 08:41

Validate