Spritely Goblins v0.12.0 Released: Two new netlayers join the OCapN family and more!
Jessica Tallon —We're excited to announce the v0.12.0 release of Spritely Goblins!
The highlights of this release:
- New Prelay netlayer
- New TCP-TLS netlayer
- Various fixes and enhancements to CapTP support
- A new Queue (FIFO) actor in our actor-lib library
Goblins is Spritely's distributed object programming environment with implementations for both Guile and Racket Scheme. Goblins provides an intuitive security model, automatic local transactions for locally synchronous operations, and an easy to use and efficient asynchronous programming interface for encapsulated objects which can live anywhere on the network.
(While both versions of Spritely Goblins are fully network compatible over the OCapN protocol, most new features are aimed at Guile Goblins.)
Prelay Netlayer
The Prelay netlayer (the "preview of relay" netlayer) is a new netlayer that sits on top of our existing netlayers and uses a client/server model. This works especially well with our new TCP-TLS netlayer, as users will often be behind firewalls and routers which require special configuration to allow for peer-to-peer connections.
This new netlayer hopefully will help connect more nodes who otherwise couldn't have connected to each other. It's currently a technology preview with some limitations, those being that traffic is unencrypted and unauthenticated, something akin to IRC or vanilla ActivityPub. It currently requires trusting the relay server, however in the near future we will be looking to address those limitations.
TCP-TLS Netlayer
This is a new netlayer which supports connections over TCP sockets with encryption built in with TLS. Eager readers of the our news blog might already familiar with this netlayer, as we built it last year and used it with the Fantasary Game Jam. This netlayer has now made its way into this release of Goblins.
Unlike the Tor netlayer, which requires extra software (the Tor daemon) and configuration, this allows for both simpler and quicker communication between two nodes. Encryption occurs with self-signed certificates. This netlayer works particularly well with the new Prelay netlayer as making peer-to-peer connections is often difficult due to firewall or router configurations.
A new Queue actor
This new queue actor exists (goblins actor-lib queue)
and represents a queue
(i.e. FIFO) where new items can be queued or removed. Please refer to the new
documentation to see how to use this.
Improved CapTP support
CapTP is part of OCapN, the network protocol that Goblins uses to communicate securely over the network. Specifically CapTP is the bigger of the three specifications which make up OCapN, being that which supports object communication, promises, Third Party Handoffs and more. Since CapTP working the same across both of the two Goblins implementations, these changes come to both Racket & Guile Goblins.
The improvements we've made to CapTP are:
- Added crossed hellos mitigation (when two nodes try to connect to each other at the same time)
- Removal of the now deprecated
op:bootstrap
operation (this is now done by always exporting the bootstrap object at position `0``). - More robust verification on third party handoff certificates.
In addition to ensure both our implementations and other OCapN implementations work according to the specifications we're helping to develop in the OCapN group, we added the test suite code to each repository to make it easier to test them against the OCapN test suite.
Getting the releases
You can test the latest Guile Goblins release using, Guix:
$ guix pull
$ guix install guile-goblins
If you'd prefer to try out the Racket version:
raco pkg install goblins
You can also read the documentation for this release here:
FOSDEM 2024
Finally, while not directly related to the Spritely Goblins release, several of us at Spritely will be attending both FOSDEM and the Guix days which precede them. So, if you're planning to attend and would like to speak to us or tell us about the cool things you're building with Goblins, let us know by joining our community, we'd love to chat with you!