Become a Spritely supporter today!

We're building the next generation of distributed web technology for secure collaboration and we need your help to fill up our health bar

$51,333 of $80,000 raised so far! Please support Spritely!

Spritely Goblins v0.11.0 released: time travel distributed debugging and more!

Christine Lemmer-Webber —

Goblins version 0.11.0

We are delighted to announce the v0.11.0 release of our distributed programming environment, Spritely Goblins!

Highlights from this release:

  • A new time-traveling distributed debugger
  • Substantially improved documentation and docstrings
  • Several more actor-lib modules ported from Racket to Guile
  • Updates to OCapN code

Goblins is Spritely's distributed object programming environment, providing an intuitive security model, automatic local transactions for synchronous programming, and asynchronous programming allowing collaboration over the network with the same level of ease as local asynchronous programming. Goblins takes the pain out of reasoning about distributed and secure peer-to-peer programming: with Goblins, that's the default mode of operation!

(Releases of Goblins v0.11.0 are available for both Guile and Racket alike, but new features are aimed at the Guile version of Goblins. More about the Racket version at the end!)

A time traveling distributed debugger for Goblins!

distributed debugger demo video

Goblins now includes a time-traveling distributed debugger! Yeah, you heard that right!

The new Goblins debugger allows programmers to inspect and debug distributed computations that happen across many vats (communicating event loops.) The time travel feature allows for visiting past events and inspecting program state at the time the event happened.

These tools are implemented as “meta-commands” for Guile's REPL, complementing the tools that Guile already provides for sequential debugging. In true Scheme fashion, this means that debugging happens live, while the program is running, allowing programmers to fix bugs and try again without having to stop and recompile/reboot their program.

Documentation overhaul

Documentation has received a major overhaul in this release:

  • All key procedures now have docstrings, allowing for easier discovery of API usage during development
  • The manual's tutorial has been cleaned up for clarity and correctness
  • All core API procedures are now documented in the manual
  • All modules in the actor-lib are now documented in the manual
  • The manual now has an index, so finding procedures is much easier

OCapN / CapTP updates

Work has continued on Goblins' implementation of OCapN, the Object Capability Network, the set of network abstractions which provide the fluid experience of distributed networked programming.

Goblins' network architecture is still in active development; this release breaks compatibility with the 0.10 release of Goblins.

Semantics closer to CapTP draft specification

Goblins' implementation of the OCapN version of CapTP (the Capability Transfer Protocol) is aimed to be used as the starting point for revisions for the OCapN group. We have submitted a draft version of the protocol to the OCapN group. Goblins 0.11.0 gets us closer to the aims of that draft; we are hoping within the next few releases to get full alignment and group consensus towards a unified OCapN protocol, and the 0.11.0-goblins release of OCapN and CapTP shipped with Goblins gets us closer to that goal.

Add acyclic distributed GC support to CapTP

Goblins 0.11.0 now ships support for acyclic distributed garbage collection, meaning that references to cooperative freeing of objects shared over the network but no longer needed is possible

More actor-lib modules ported from Racket to Guile

More of Goblins' "standard library" is now available in the Guile version of Goblins, ported from Racket:

  • (goblins actor-lib pushdown) is a simple pushdown automata implementation, useful for various kinds of state machines, especially in some games
  • (goblins actor-lib opportunistic) allows for proxying object behavior, opportunistically using $ for near objects but using <- otherwise (known as select-swear in the Racket version)
  • (goblins actor-lib simple-mint) is a very simple example "bank" of sorts, ported from the example in An Ode to the Granovetter Diagram
  • (goblins actor-lib let-on) provides convenient code for promise resolution which strongly resembles let in Scheme, but with the behavior of on in Goblins

Goblins, Racket edition v0.11.0

The Guile version of Goblins is now the primary version of Goblins, but we continue to support the Racket version of Goblins. In particular, the Racket version of Goblins has also received a v0.11.0 release, bringing its network code up to the same state as the Guile version and maintaining compatibility.

Onward and upward!

And that's not all! For more information on Goblins v0.11.0, read the NEWS file!

This release is brought to you by the following contributors: David Thompson, Juliana Sims, Christine Lemmer-Webber, Jessica Tallon, Vivianne Langdon, and Geoffrey J. Teale. Thank you for your work!

We hope you enjoy this release of Spritely Goblins! And if you're building something cool with Goblins, let us know on our community forum. (Use OCAPN2023 for the Invite Code when you join.)