“less thinking more fuzzing”

Reader, it wouldn't be unreasonable to look at last weeks plans of ‘support peers’ and think: that’s just another name for a server. You couldn’t find enough peers, so you had to turn to an always-online machine somewhere. Cop-out.
Well: nuh-uh. In this editorial I will argue that we are doing something meaningfully different from traditional servers.
Servers are (hopefully) characterised by their high uptime, but they are not fungible. If a Mastodon instance’s server is down, we can’t point our mobile client at another server and expect to have the same functionality available to us.
Peers in a p2p network are fungible. We can connect to whatever we can and exchange as much data as possible. But a peer running on a mobile device has only very intermittent uptime. It may only be available when an app is in the foreground, which is not very often at all.
A non-fungible machine with low uptime is just… a crappy server, so that’s not a very interesting combination. But a fungible machine with high-er uptime feels like it’s relatively unexplored.

What kinds of infrastructure are possible when high-uptime peers are fungible? Sure, you get a ‘swarm’ of high-uptime peers that are more resilient to outages, but… how about something more intentional, like a relay of peers turning on and off as solar power becomes available to them?
Servers are also usually far more capable machines than the devices they serve: more processing power, more storage, more authority. But we’d expressly like to enable peers which can provide high uptime but which have other constraints such as low storage or processing power. If we can prioritise the storage of recent data, operators of constrained devices like this are still able to meaningfully pitch in.
And those high uptime peers can even sync with each other! I think it’s meaningfully different from ordinary servers, and I hope we can use this as a tool to change how we think about supporting infrastructure.

~sammy
We're listening to...

aljoscha, later: I am unironically enjoying this quite a bit.
links of the week
- Hacker Post - A (deliberately) whimsical peer-to-peer routing protocol — for postcards. Inspired by Chaos Post, but not localised to individual events. I can report form personal experience how fun delivering Chaos Post is, so I definitely approve. Below the sillyness of it all, there is room for some more serious thoughts, around anonymity, openness, surveillance and abuse. Hacker Post has good reasons for restricting itself to postcards rather than allowing sealed envelopes or USB drives.

A good chunk of my worm-blossom time this week went into the Willow test vector repository. Before this week, that repo held inputs and expected outputs for a few Willow encodings, some of them outdated and thus actively misleading. Now everything is up-to-date again. Additionally, I started adding test data for more than just encodings: there is now also a directory for data-model related functions, such as determining whether an entry should overwrite another, or computing the lexicographic successor of a path (a task less trivial than it initially sounds).
There has been a flurry of other tasks on my mind, to the point where I started to feel a bit overwhelmed. Writing them all down is probably going to help, so here we go:
- WTP design:
- handling proofs of knowing the secret for a write capability,
- unifying the different messages that all request entries as much as possible,
- determining how/whether peers should pre-announce which features they implement,
- mapping out which messages can be sent as responses to which other messages,
- the ed25519 ambiguity issue of willow25
- updating to the new major version of the ed25519 implementation we use in our Rust work,
- mildly panicking about quantum computers breaking ed25519 in the not-entirely-unreasonably-far future,
- planning Rust traits for Willow stores that allow aggregating metadata (for RBSR) and for splitting 3d-ranges into smaller ranges containing roughly equally many entries (again for RBSR),
- more media file format details (in particular, I’m still exploring different mechanisms for enabling efficient seeking in audio/video files),
- the Macromania website,
- some macromania macros I should really write sooner rather than later (macros for integrating and possibly transforming assets for websites, macros for referencing these assets),
- a data base file format for 3d Willow entry storage,
- the prerequisite 3d-zip-tree work I need for that,
- providing recommended ways of encrypting Willow data (and metadata) at rest as part of Willow25 (we already have generic designs, but no specific instantiation for Willow25 yet),
- API and implementation designs for this encryption work in Rust,
- figuring out how to make encrypted sneakerwebsites a thing (in a backwards-compatible way, ideally),
- work on my writeup of p2p design principles/lessons,
- plans for the first birthday of worm-blossom.org,
- idle thoughts around more intentional background music tracks in the next year,
- adding more Willow (and Bab) test vectors,
- planning some test vector improvements,
- sketching a design for a Willow-powered alternative to Email (that I will probably write more about in the future), and
- a whole bunch of encryption issues pertaining to that Email alternative.
- Bonus stuff:
- sketching a type system for an object-oriented programming language where there are no concrete object types but only interface constraints,
- sketching an engine for web-technology-powered text-based single-player RPGs, with beepbox integration for (reactive) soundtracks,
- reflecting on Hannah Arendt’s On Revolution and how her thoughts on the origins and nature relate to technical protocol.
Jup, okay, in retrospect I can tell why I was feeling a bit stressed out this week.
~Aljoscha
Shout-outs!

Thank you to Freckles for all their& feedback on the Willow test vectors, and the resulting discussions. Whenever they& found an inconsistency, they& scoured the specifications and our Rust implementation for the cause, uncovering and reporting bugs in both — including a rather serious missing check in our capability verification implementation. It turns out providing test vectors does not only help other implementors debug their code, it also helps debug our own implementation. And it has been pleasant and fun!
Unsurprisingly enough, the reason they& started scrutinising the test vectors is that they& are doing a Willow implementation. It is written in Typescript and currently lives here. Willow in Typescript means Willow in the browser, and that is quite exciting!

Slug has contributed a command to our sneakerweb implementation for locally removing sneakerwebsites without blocking them. I’ve wanted to do exactly that multiple times by now, it’ll be great to have that in there. It was merged into a branch called fix-all-the-things, so it is going to make it into main any minute now I’m sure!
Also I want to point out how all sneakerweb contributors so far consistently have neat personal websites. Not exactly surprising if you think about it for more than two seconds, but still. It’s been neat browsing through this unexpected trickle of free-spirited digital places. Here’s the collection of those who linked to their website in their codeberg profile:




































































