“meat-derived specifications”


New WTP Specification
We have uploaded a new version of the Willow Transport Protocol specification. We will start implementing things based on this spec, so any and all feedback is highly welcome.
The WTP is a protocol by which peers can exchange Willow data. It supports both pull-based (one peer issues a request, the other peer responds with the data) and push-based (one peer issues a long-lived request, and the other peer can continuously send new matching data over time) communication. It can resume interrupted payload transfers through the power of Bab. It can do efficient set reconciliation. It supports both stateful or stateless operation. It does your laundry (no it doesn’t).
Oh, and it doesn't have an actual on-the-wire encoding yet. We will start working on that after there’s been a bit of time for feedback.

Last week, I received an email from Elvio Amparore (whose work on efficient RBSR implementations (Amparore, 2026bb) I shared in the last update), with the innocent subject line Some observations on Willow storage and RBSR. And these observations were so impressive that we immediately started reworking the WTP spec and several pages of Willow docs. Put simply: it is possible to efficiently answer arbitrary Area queries without multidimensional data structures.
One-dimensional data structures are simple and efficient, whereas multidimensional data structures are everything but. The need for an optimised persistent three-dimensional storage backend was by far the most daunting task on our horizon. And Elvio basically magicked that away.
I will now sketch the underlying ideas, but you can get the full picture in this paper Elvio wrote (Amparore, 2026aa). It is accessibly-written and well worth the read.
The core idea is to materialise additional (one-dimensional) database indexes through denormalisation instead of using only a single multi-dimensional data structure. This is easiest to explain with subspaces. Each Area includes either entries from all subspaces or from one specific subspace. Here is a database design that exploits this to go from three-dimensional storage down to two-dimensional storage: maintain a two-dimensional search tree (keyed by timestamp and path) that contains all entries, and for each subspace maintain a 2d tree that only stores the entries of that subspace. This suffices to answer arbitrary Area queries, you simply go the correct 2d subtree for the subspace id of the Area, or to the indiscriminate tree if the Area ranges over all subspaces.
And then it turns out you can do a further denormalisation step for paths: for each prefix of any path of any entry you store, maintain a tree storing all entries whose path is prefixed by By combining this path denormalisation with the subspace denormalisation, you end up indexing each entry in one-dimensional search trees, where is the number of components of the path of that entry. And every Area query can be answered by consulting exactly one of these indexes.
It further turns out you can generalise Areas to area slices which can be split into evenly-sized subslices and which can still be served by these denormalised indexes. And that means we can do RBSR over Areas without relying on three-dimensional storage. Even better: every area slice can be converted into a small number of “normal” 3d ranges, so any traditional three-dimensional storage backend can be made to efficiently handle area-slice-based RBSR. Going from our previous 3d-range-based RBSR to area-slice-based RBSR thus increases the number of viable implementation techniques.
And so that is what we did. We have a definition of AreaSlices. And the new WTP spec does RBSR in terms of AreaSlices already. Our old type of 3d ranges is effectively deprecated.
Early in the design of Willow we decided to use Areas instead of arbitrary 3d ranges as the user-facing grouping of choice in Willow, anticipating that this deliberate restriction in expressivity would allow for more powerful tools working with Willow groupings. And years later, we get an email that solved one of our biggest pending challenges exactly by leveraging this limited expressivity. “Yay!” doesn’t even begin to cover it.
~Aljoscha
Auntie Source

Being an open source contributor or maintainer is no small task! How do you navigate a world of unpaid labour, slop, and the ground constantly shifting out from under your feet? If only someone had all the answers! Luckily, we know someone who does! In our new column, ‘Auntie Source’ will read your problems and give you fool-proof advice, right here on worm-blossom.org! Please send your questions to sammy@worm-blossom.org(she will pass them on to Auntie Source).
All content from Auntie Source is provided for general information only, and should not be treated as a substitute for face to face counselling, medical or legal advice. Auntie Source is not responsible or liable for any action made by a user based on the content of this website or from correspondence with Auntie Source.
In the past week I made two .snk file deliveries by train. This file contained my second edition of “sammy’s guide to the sneakerweb”, the ideal companion for any new sneakerweb user. But more than just a practical guide to using the sneakerweb, I also wanted to offer some ideas for directions to take the sneakerweb in: what kind of sites can we put on the sneakerweb which are hard or downright impossible to put on the www? What kind of network effects do we get from person-to-person data transmission? Can we use this system for preserving and protecting data within specific communities? For now this guide needs a little more time to cook, but I can see us making it available from a downloadable .snk file on sneakerweb.org.
Until then, a review to whet your appetite:
i just finished and now i want to go to sneakmeet like yesterday
The rest of the week I have been applying to events with talks and workshops. Half the job is showing up, after all. The other half of the job is apparently writing funding proposals. The third half is actually doing the work.
My actual programming work this week has been a new branch of sneakerweb which uses axum instead of our cobbled-together HTTP server. I’m partly doing this to make it easier to add new pages to the sneakerweb tool, but also so that I can learn a Rust web framework to use for our Pillow project and the support node web UI which I’ll be building as part of that. Just like with Rocket, I’ve been running into issues reconciling the usage of multi-threaded runtimes with worm-blossom’s Frugal Async Rust. It seems like we’ll be able to get the two to play nicely, and I hope in the future we’ll be able to just give that to other people rather than making everyone go through my experience of coding something for five hours and then running face-first into a brick wall of inscrutable Rust compiler errors concerning the Send trait.
~sammy

Equiped with the insights from Elvio's paper, and the corresponding updates to the Willow specs, a lot of things feel like they've snapped into place all at once for me this week. Between this new clarity and the time I spent settling in last week, I've found pretty significant reserves of energy to put into simply writing code.
Abundant energy is not necessarily abundant focus, however. I have mostly managed to keep tapping away at my SummarisableStore work, and I'm quite happy with how that's coming along, but yaks seem to keep wandering in front of my shaving arm. A lot is getting done, but not so much is yet finished.
I want to say it feels strange to have had such a productive week and to have so little to show for it, but I suspect that there are two misleading ideas in that sentence - first, that all productive work is visible, and second, that I have nothing to show.
In Sammy's editorial last week, she described the creation of this site as the drawing of a magic circle, whose arcane power is derived from a potent mixture of care and vulnerability. Caring is, on some level, easy - I'm here because I care. Vulnerability, however, is something I am going to have to keep practising.
I, sometimes, need to let myself simply say “look what I wrought”.
None of this, however, gets me any closer to what truly matters, which is of course to find a fun thing to contribute to these weekly updates. Perhaps, with Sammy and Aljoscha bringing visual and auditory treats, respectively, I should cater to another of the senses? The autumnal weather here has me wondering about a weekly soup recipe.
~Emmy
























