“pininit”


At the workshop in Prague, a surprising number of people had been on Secure Scuttlebutt (SSB) at some point, and SSB also kept popping up as a reference point in conversations. And a few days ago, someone on our Discord was asking about the relation between Willow and SSB. So I'd like to reflect a bit on how SSB still influences my design work.
I still subscribe to several of the mantras of SSB. The most important ones:
- No global singletons: if a system depends on any kind of global singleton — be it a server, a network, a legal entity, or a blockchain — it is brittle and
canwill be co-opted. - Against consensus: those parts of a system that depend on global consensus between all participants will be unable to evolve as needs change. My personal take on this mantra is more nuanced than its classic formulation: I believe that there is value in a minimal foundation that is guaranteed to remain unchanging. Eventually it will have to be replaced because of its inability to adapt. But until that point, it will provide a stable foundation, superior to a continuously moving target that accrues complexity over time. As long as such foundations are clearly labeled and allowed to retire eventually, things are great. But: these foundations should be minimal. And everywhere where evolution is desirable, there should be no need for global consensus.
- Free listening: free speech has to be counterbalanced by the ability not to listen. Listening should be opt-in, not opt-out.
Many other aspects of SSB have not aged well. I've detailed my views on immutability-by-default elsewhere. Another pattern I would not want to see repeated on top of Willow is the public follow-graph of SSB: everyone publicly recording whose data they want to follow. While this enables a nice replication mechanism with the ability to transitively fetch data for improved reliability and discovery, the public nature of this graph also enables spidering and surveillance. This tradeoff feels inacceptable to me by now.
More generally speaking, SSB was emphasising discoverability and interlinked data, in order to optimise for network effects and virality. The public follow graph, immutability, a single multi-purpose log per user... many SSB design decisions are in support of fostering network effects. But these are also the design decisions that make the protocol unsuitable for vulnerable users.
The tradeoff certainly payed off, chances are SSB would not have reached its level of adoption without these deliberate design choices. Perhaps projects such as Willow are fated to being crowded out by projects that emphasise virality over privacy. At least as long as the majority of tech users are not vulnerable users themselves. This feels sobering, but it cannot change the kind of technology we are building — because we desperately need this tech to be available and reliable.
So while the average techie is safe and confortable, I guess we'll simply have to rattle a tin can every once in a while.
~Aljoscha
Shout-outs!

Aescsocket opened not one, not two, but three pull requests to willow-rs this week. We now have a typesafe EntryBuilder, can derive the Display and Error traits, and will soon have some convenient tooling for running a whole bunch of cargo commands in one go. I don't quite know whether they are a polygonal dog or a markov chain, but in either case, thank you!
Here's a clean version of the lightning talk I gave at the Dweb virtual meetup the week before last. ~sammy
Why is it called worm-blossom?!

why is this website called ‘worm-blossom’? In this series we will explain why in a concise manner.
Let's talk about sets, baby
It is late 2019. Aljoscha Meyer has a scheduled call with someone who reached out from Secure Scuttlebutt. gwyl? Something like that. They want to learn about ‘Bamboo’, a kind of append-only log Aljoscha had designed some time ago. They’re clearly keen to build something with it, but Aljoscha gives it to them straight: append-only logs aren’t really good because you can’t use the same identity across multiple devices. Okay then. Predictably, the call doesn’t really go anywhere, and the two of them shall not interact for a long while.
When Sammy ends the call, she can’t help but feel like she still doesn’t have any idea how this peer-to-peer stuff works. And didn’t that Aljoscha guy seem a bit… disillusioned?
But Aljoscha is not going to let a little thing like disillusionment get in the way of what he’s really interested in: abstract nonsense! With regular expressions, choice and concatenation are dual. Doesn’t this suggest that unordered sets are dual to logs? And whereas you cannot easily combine two logs into a new log, two sets certainly combine into a new set. If only there was an efficient algorithm for computing set unions across two devices (i.e., to efficiently sync), then you could easily achieve composable multi-device identities.
A few months later, Aljoscha presents his set union algorithm at p2p-basel. Originally his session had an hour allotted to it, but discussion runs over to two hours. There’s clearly a deep interest in the notion of sets, but no implementations come of it yet. And Aljoscha is certainly not going to write any code himself.
Months later still, Aljoscha is browsing Secure Scuttlebutt, and on a whim joins a kind of virtual hangout which another user named Cinnamon has organised. Aljoscha joins the call, and listens in on a showcasing of… React components? But it turns out Cinnamon also has an interest in sets, and soon Aljoscha and Cinnamon are the only ones left in the call. Cinnamon is working on something called Earthstar, and has yet to figure out how to efficiently synchronise their mutable, unlinked datasets.
Cinnamon also tells Aljoscha about their terminal diagnosis. Cancer. Aljoscha doesn’t really know how to respond to that, but the call leaves a deep impression on him. When he selects the topic for his masters thesis in early 2021, Aljoscha decides to flesh out his set union algorithm, as a present to Cinnamon.
Meanwhile, Cinnamon has been figuring out what to do with an enthusiastic new contributor to their project.

A prominent topic of last week’s gathering in Prague were sneakernets. There is something about this method of transporting data — the ultimate fallback mode of peer-to-peer transport — that seems to capture people’s imaginations. Embodied control of where data is, and tacit recognition of whose hands it is in, understandable to anyone.
On the first day I found my own understanding (and implementation!) of sneakernets being interrogated. What is Willow’s view of the sneakernet? Oh, so a user needs to choose what is in this ‘drop’? How do user's express what they want from others? They can’t? I see.
By the next morning, my view of sneakernets was dismantled (alongside a few others) to construct a new view, one where sneakernets take on an almost homeostatic nature. In this model of the sneakernet, data is not only pushed into the world, but the need for certain data is also expressed. The overlap between these two forces creates a hot zone of data worth transporting.
Reeling a little from this model, I started wondering if there was a way to make it so that users could query a Willow drop, shifting its design from linear access to a random access (thus neatly nerd-sniping Aljoscha, who mentioned this idea first thing last week).
Then Aljoscha announced at breakfast that sneakernets were really about congestion control. As I understood it (while trying to carefully eat from a bowl I’d filled with entirely too much yoghurt and fruit), if you have a USB drive filled with data from many people, at some point you’re going to hit storage constraints and have to choose what’s worth sending. This is analogous to throttling, and is effectively congestion control.
But here’s the tricky (Aljoscha: fun) part: sneakernets are non-interactive, so you have the problem of congestion control without explicit feedback. But perhaps you could use implicit feedback of tracking which data you receive from other people, and use that to prioritise what to send yourself?
A day after the event ended, we received this message:
We are the Memory Commons, just that nobody told us about this when we met in Prague. It is memory that we care about. Some call it replicas, other fancy about USB sticks. When discussing Sneakernets, Aljoscha suggested that this is a discussion on congestion control, which now makes even more sense as congestion control is about memory of the router packet queues, managed by a social contract that can't be technically enforced. Memory commons all over the place.
When we take this view, we must be mindful of the distinction between a commons and a hoard. We spent the last thirty years building the memory hoard. This hoard’s purpose went far beyond archival, and into the wholesale weaponisation of data. While the constraints of peer-to-peer certainly encourage us to prune and forget data, we should still steward the memory commons mindful of the fact that the value of data is in how it affects us, and nothing more.
~sammy















So how about ‘persona’? Data can be verified to be written by a persona, you can have as few or as many as you like, and you can attach as much ‘identity’ information (e.g. display name, avatar) you want… or not. Miaourt suggested using little masks as the iconography for this, which I really love.

This week I finished a super secret side-project that I will reveal... later :>



The real trouble started however once we needed willow25 wrappers for generic types made up from other generic types. For example, a generic 

With that out the way I can get back to the important work of being a weird little frog. This weekend I’ll be heading to the Internet Archive’s new European Headquarters in Amsterdam for a little 