worm-blossom

worm-blossom

The endeavours of Aljoscha Meyer and Sammy Gwilym.

2026Week 927 Feb

“bread-first search”

A four panel comic, titled "Blossoquest (continues)".
      
In the first panel, we are closed in on a screen of strange green and grey waveforms and static.

In the second panel, we zoom out a little, seeing a monitor displaying this static fixed to the corner of a wall.

In the third panel, we pull back even more, seeing a strange figure with a wide-brimmed hat on sitting at a bar, alone. The monitor buzzes in the corner.

In the fourth panel, we are outside, looking at a lone building with the sign "LAST CHANCE" above it, and saloon doors. There is some kind of a platform and a railtrack behind it. In the foreground, a figure stands bearing a revolver held ready, looking at the saloon.
A drawing of Sammy, one arm holding up her head with a pencil in it, the other resting on a piece of paper.

When last week's update went up, I was at the Internet Archive Europe HQ in Amsterdam ('HQ' makes it sound like a big shiny building. It's really a cute little house by a canal). Remember last week when I said I felt like a frog finding their special frog habitat? Well this was more frogs. Many people who I'd been looking forward to meeting, and (somewhat amazingly to me) a fair number who'd heard of Willow before. After a lot of conversation, a sensible amount of cheese, and maybe a little bit of schmoozing, I left feeling energised. For years I've been trying to find a local network of people interested in this niche field, and either I was too much of a shut-in (likely), or this community in the Netherlands has finally reached a kind of critical mass and level of interconnectedness with the broader network.

Meanwhile, I worked on willow_rs. Unfortunately (and kind of intriguingly) my work finally presented a dead end in how well Rust is able to accommodate Willow's generic and parametrised ambitions. Aljoscha has (hopefully) done a write up on this below (don't leave me hanging aljoscha). I've started working on an implementation of the Willow Drop Format (WIP pull request here), where I am practicing liberal use of the todo! macro to implement as much as possible without letting little things like not having that dependency yet weigh me down. This is like taking a breadth-first approach where instead I've always taken a depth-first approach to missing bits and pieces.

~sammy

Why is it called worm-blossom?!

← Previous instalment

why is this website called ‘worm-blossom’? In this series we will explain why in a concise manner.

Part 6: Abuse Audit

It is 2018. A cloaked figure sits in their garden in Berkeley, California, typing away on a laptop. Upon their screen is Patchwork, an application for browsing and publishing on the Secure Scuttlebutt network. Cinnamon, a SSB regular, hits the publish buttion. Their latest post is titled “Useful idea: Abuse audit”. They propose to collectively pore through Secure Scuttlebutt “to find every single way it could be used to harm others and then go through that list one at a time and come up with ways (or list the ways that already exist) to stop or deter that behavior.”

Over the next two years, Cinnamon spearheads an abuse audit of Secure Scuttlebutt, eventually identifying 76 potential abuse vectors and compiling them to a now public spreadsheet.

Privately, Cinnamon faces resistance to their audit: this is the internet, you can’t have the benefits of open communication and expect to be sheltered from all its potential harms.

For example: “P2: Revenge porn”:

Person A publishes an image of person B without their consent.

The ideal resolution is to remove this content from the scuttle world completely, which isn't really possible.

or “P3: Doxxing”:

Person A publishes contact info of person B without their consent, with the intent to intimidate them or lead others to harm them.

The ideal resolution is to remove this content from the scuttle world completely, which isn't really possible.

Among worsening and inexplicable health symptoms, Cinnamon becomes frustrated and burnt out by the abuse audit and the apparent reluctance to — or outright impossibility of — addressing any of its identified issues. They work on an alternative safety-focused client for Secure Scuttlebutt called Oasis. But this still isn’t enough to stave off Cinnamon’s dissatisfaction with Secure Scuttlebutt.

In mid-2020, Cinnamon announces Earthstar:

I've been thinking hard about how to improve the user experience of #Oasis, and I kept finding deep things about SSB that I wanted to change:

  • You can't delete messages
  • You can't just download recent things first, you have to wait a long time
  • You can't re-use the same account on multiple devices

That's enough to keep most people from wanting to use SSB. When people say "why can't it be better?" the answer is "sorry, it just wasn't designed to do that ¯\(ツ)/¯"

These 3 constraints all arise from SSB's security properties as an immutable append-only log with hash backlinks. But what if we didn't need immutability? Is it appropriate for a social network?

By relaxing that security property, we solve all 3 problems:

  • You can delete or edit messages
  • You can download any subset of things in any order
  • You can use the same keypair on multiple devices. Now a keypair represents a person, not a device.

Earthstar addresses the key abuse vectors Cinnamon has identified over the past two years, and eschews big-world immutability for a plurality of small-world mutable networks. Cinnamon takes a pragmatic, productive approach to Earthstar, opting for the use of ‘boring’ technologies and a simple implementation which can run in a web browser.

But there’s one little problem. In rejecting the append-only log, Earthstar has adopted unlinked sets of items. In doing so, Earthstar has traded away Secure Scuttlebutt’s relatively simple and efficient synchronisation, with no obvious replacement. How to efficiently figure out what’s different between two devices when all you have is a bag of stuff?

Next time we head to Basel, where the imagination of a familiar bespectacled friend is captured by this puzzle.

We're listening to...

Nikolai Kapustin

I have not been this tempted to sit down and practice a piano piece in a long while (thanks, my dearest sister). But rest easy, I’m dead inside being responsible and will work on worm-blossom things instead (not that I have the required piano technique anyways). ~Aljoscha

A drawing of Aljoscha, fingers interlaced, eager to deliver some interesting news.

What is going on in Blossoquest? Since when did it even have that name? Why are we suddenly in a Western? Does the crack in the wall have any meaning? How can Sammy claim dislike for Homestuck and unfamiliarity with Hussy’s work, and yet the third panel looks like Problem Sleuth and the name like a play on Bard Quest? What is going on?!

Anyway, apparently I am supposed to write about the limitations of the Rust type system instead of investigating these mysteries. So here we go!

The Willow specs are highly generic. So naturally, our Rust implementation is full of generics as well. Because this is rather cumbersome, we are also providing a non-generic implementation of Willow’25 for application developers who shouldn’t need to care about the flexibility offered by the parameterisability of Willow.

In our previous codebase, the willow25 implementation merely provided type aliases, with the consequence that compiler messages bombard developers with all those hidden generics. So in the reboot of the codebase, we went for proper wrapper types. We even have a wrapper! macro that automatically generates the structs that wrap the underlying generic types. So far, so good.

The first problem that stems from this arrangement is that of converting between references. Suppose our generic implementation has a function that requires a &Entry<Lots, Of, Generics>. To implement the willow25 version of that function by calling the original function, we need to convert &Willow25Entry into a &Entry<Lots, Of, Generics>. Reference-to-reference conversions are not exactly the most idiomatic Rust. But this was doable, with the `wrapper!` macro even completely hiding the required unsafe and #[repr(transparent)] shenanigans that make it work. And up until Sammy’s recent implementation work, this was good enough.

A tiny figure loses their balance atop a tower of haphazardly balanced blocks, bearing parameter names such as N, S, PD, AT... it'll make sense to Aljoscha, at leastThe real trouble started however once we needed willow25 wrappers for generic types made up from other generic types. For example, a generic AuthorisedEntry struct consists of a generic Entry struct and a generic AuthorisationToken struct. A Willow25 wrapper around AuthorisedEntry would internally still use generic components. But for some code, we would need it to consist of (or at least to be interpreted as consisting of) a non-generic Willow25Entry and a non-generic Willow25AuthorisationToken. But for this interpret-the-generic-components-as-being-non-generic-wrapper-types business, the generics must be instantiated with types that satisfy certain constraints regarding their memory layouts. The exact details are gnarly and do not really matter, the important part is that we ended up in a situation where there would be unsafe code galore. This in itself is bad but not a showstopper, but the real problem was that the safety of this unsafe code would depend on whether you instantiated the generics in a certain way.

The compiler has no way of enforcing any invariants here. And I have never seen any code whose safety depended on properly instantiating type parameters. Calling this situation unidiomatic would not do it justice, I’d rather reach for an unholy abomination whose creators should be barred from writing Rust code ever again.

So what now? We will keep the generic code base for now, but new work will only provide willow25 APIs. Where possible, those will still make use of the underlying generic implementation, but where that does not work we will simply duplicate the generic code and then rip out the type parameters. Long-term, we will probably phase out the generic code base completely, doing concrete willow25-based implementations directly instead.

This is a bit of a shame. The genericity of the specs is a decision I still stand by, and generic implementations do have a certain elegance. But it turns out that (idiomatic) Rust is just not particularly well-suited to it. And we want to keep the codebase accessible and high-quality. The decision to move to non-generic implementations for now stings, but everything else would lead to an idiosyncratic code base that would have made Dominic Tarr proud, and scared off everyone else.

(Also, writing docs for two almost identical versions of our APIs was a pain from the very start, so I cannot truthfully report that I am entirely unhappy.)

~Aljoscha

A friendly computer waving his mouse, beckoning you to come contribute!!!

Contributions Welcome: ufotofu Limit adaptors (Rust)

https://codeberg.org/worm-blossom/ufotofu/issues/15

Sammy needs an Ufotofu adaptor that limits how many items a wrapped producer will emit. We had an open issue for this for a while. This is a great opportunity to dive into the ufotofu codebase: small scope, not too difficult, and there even is an implementation in an older version of ufotofu to use as a basis. It would be a shame if such a good first issue had to be wasted by us implementing it ourselves. So if anyone wants to give it a try, now is the chance!

2026Week 820 Feb

“be kind (non-hypothetically)”

An illustration of two playing cards, one slightly overrlapping the other.
        
        The two cards show illustrations of Aljoscha and Sammy, styled as face cards.
        
        Aljoscha's card shows him playing music, and coding seriously on a computer.
        
        Sammy's card shows her drawing, and working at a computer with some displeasure.
A drawing of Sammy, one arm holding up her head with a pencil in it, the other resting on a piece of paper.

Recently I’ve felt like a weird little frog who is finally finding their weird little microhabitat. The perfect temperature! Exactly the kind of slime I like! Other weird frogs like me! January put me in the path of lots of people who do and make things I’m excited about, and who seem excited about the work I’m doing too.

The only problem being that I actually have to do that work.

Our immediate goal with Willow is to implement the means to save and retrieve Willow data, and to have at least one way to exchange that data. For the latter, we’re going with the Willow Drop Format, which collects lots of Willow data into a single file that you can deliver with whichever way you like to send files.

Since I started working on private encodings last week, we’ve merged implementations of private path encoding, private area encoding, and private authorisation token encoding to willow_rs’s main branch. I had to get all these past the relentless scrutiny of our fuzz testing apparatus (and Aljoscha), so I’m fairly confident these new implementations are robust and well documented. Which feels great! There is definitely some kind of maladjusted satisfaction I get from merging code, which is something I should probably watch out for.

A drawing of Sammy in a frog suit.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 borrel, where I guess I’ll do borrel-y things like eat little cubes of cheese... and with any luck, meet some more frogs.

~sammy

A drawing of Aljoscha, fingers interlaced, eager to deliver some interesting news.

I finally made good progress on the persistent backend of the Bab implementation. All the logic is in place; the remaining steps are to rearrange the public API, document it, and then to add more thorough tests.

And instead of writing a long editorial, I’ll continue programming now.

~Aljoscha

Why is it called worm-blossom?!

← Previous instalment

why is this website called ‘worm-blossom’? In this series we will explain why in a concise manner.

Part 5: Disconnected, but never alone

It is 2014. Dominic Tarr stands on the deck of his boat, surveying the horizon. There is nothing in sight but bright, blue ocean. Tarr is a sailor and programmer, one with a particular interest in distributed systems.

Tarr’s boat, alone at sea, has little to zero internet connectivity. But why should that stop the flow of data? What if a device could opportunistically send and receive data when a connection was available, storing it for later? It could even make entirely new kinds of networks possible, ones without middlemen dictating the terms of network usage.

This approach brings its own different problems, of course. How do two devices determine which data to exchange? How do they know the data they’re exchanging can even be trusted?

No problem is without a solution, however. Tarr has chosen the append-only log as the foundational data structure for his latest experiment. Append-only logs can be efficiently compared and merged, and the power of content-addressing makes their constituent data verifiable. There’s even some precedent: Git, the most popular system for decentralised version control, has content-addressing at its heart.

Tarr’s experiments coalesce into a new protocol known as Secure Scuttlebutt. Over time, SSB attracts thousands of users, each of their devices transformed into their own little boat all at sea, perhaps disconnected, but never alone. SSB’s users comment on each others posts, play chess, and chart a course into a new decentralised future together. And with content-addressing quietly powering it all.

Two years prior, Tarr had written that “The biggest problems facing humanity are really software problems”:

Currently, humanity stands at a crossroads like never before. Great power and great changes are looming on the horizon - genetic engineering, nano technology. Yet also great dangers - Climate Change, peak oil, and the fact that western governments are getting stupider and more corrupt. We need better software to solve these problems.

Perhaps Secure Scuttlebutt was Tarr’s own attempt to solve some of the world’s problems with better software, software which would bring about a new vision of the world through its superior design choices.

But the systems underpinning our software often bring about their own vision of the world whether we want them to or not. Any user of Git will wince at the thought of accidentally committing some secret key to a repository, and the subsequent scramble to undo it. Git’s view of the world is one of a canonic, immutable history, where every change can be tracked down and replayed, and even blame assigned. And with content-addressing quietly powering it all.

But why is worm-blossom called that? Next time, we’ll travel to Berkeley, California, where someone is starting to feel nervous about all this.

Next instalment →

The Surfers’ Review

“just finished reading (and listening to the soundtrack of) the latest Worm Blossom “graceful_producer.slurp()” [...] If this project is not on your radar, you are missing out cause they are doing amazing things!”
“such a lovely website, I really love how hand-made its stuff is. The music and artwork and everything [...] Wait a minute is 'worm-blossom' a pun on 'brainworms'”

worm-blossom.org thanks you for your continued patronage!

2026Week 713 Feb

“graceful_producer.slurp()”

A two panel comic.
        
        In the first panel, Sammy stands in front of a four panel comic of the same format as last week's. She says "So for this week's comic, let's invert last week's, and have you modelling t-shirts and I'm begging for your help?!"
        
        The second panel is introduced by the text: "Aljoscha's actual reply". Below, Aljoscha appears unmoved, and says "Sure, if you think that's funny". Sammy looks aghast in the corner.
A drawing of Sammy, one arm holding up her head with a pencil in it, the other resting on a piece of paper.

Shortly after last week’s update my body — sensing uncharacterstic relief — instantly succumbed to a flu that I’m still not completely rid of. So I spent a lot of time in bed reading The Rose Field and quietly feeling pleased with myself about my FOSDEM talk doing the rounds. Again, thank you for watching (and maybe even sharing) it, the response has meant a huge amount to me.

With no more slides to prepare, I returned to programming (shudder). It has been a while, and I feel clumsy and slow, especially in Rust. But I’ve started implementing the prerequisite encodings for Willow’s drop format. These use Willow’s private encodings, where items can only be successfully decoded with a bit of common knowledge. This might sound like overkill for a non-interactive method of exchange like the Drop format, but as Aljoscha reminded me: “turns out trying to omit as much data as possible results in short codes”. And what if that makes all the difference for someone to squeeze as much Willow data possible on their low-capacity USB key? That is what I tell myself as I port existing implementations to another, hopefully final incarnation of an Ufotofu-based encoding abstraction.

I’ve also been thinking about Discord, which will reportedly soon start requiring age verification to access all features. I belong to a few communities based on Discord which will sadly disperse if this ends up happening. And it doesn’t seem like there’s any persuasive answer for where to disperse to. Why is that? Is it because the pieces (protocols, people) aren’t there yet? Or is there a deeper problem in that even if we had all those pieces, fusing them into a monolithic whole requires an amount of coordination (and funding) we collectively can’t muster? I have included some links in this week's update to ponder.

~sammy

Shout-out!

Ufotofu now has combinators for chaining together two producers or two consumers, thanks to danmw. My favourite aspect of this contribution needs a bit of elaboration:

The BulkConsumerExt trait has a stage method, whose doc comment features the following paragraph:

This method only exists to preserve symmetry. We cannot even write a meaningful example for it. If you ever find a legitimate use, please let us know!

And as you probably already guessed: Dan's implementation of the chaining combinator for consumers uses stage! I added that method purely to preserve symmetry, anticipating that eventually some use for it would show up and that it would be really annoying if it was missing. Principled design, yay!

(The very fact that using this method is necessary in the first place showcases a problem with the current API design, but that’s a different story :>)

A drawing of Aljoscha, fingers interlaced, eager to deliver some interesting news.

This week saw a fruitful discussion about Ufotofu, triggered by Dan’s implementation of chaining combinators. In a nutshell, the problem is that some methods irretrievably swallow up their arguments in case of an error.

There is an obvious fix, which is to have the error case return not only the actual error but also the original arguments. We should be able to apply this for bulk processors, but things are less clear for regular consumers: if consume returned the item it was supposed to consume in case of an error, then that would break the symmetry with the producer design.

For a terrible day-and-a-half or so, I was actually ready to break the symmetry here, in order to make the chaining combinator work without cloning (with a destructive consumer API, the only sensible workaround is to clone items before feeding them into the consumer, so that you still have the clone around after an error). But then I thankfully realised that everything works nicely for types that are Copy. So we can have “normal” APIs that require their items to implement Copy, and then do more expensive and clunky variants that require only Clone.

In any case, the discussion with Dan helped clarify a couple of muddy aspects around ufotofu, and has given me a new perspective on what makes Copy so special in the context of ufotofu items — Copy exempts types from linear typing, thus making them match my purely mathematical mental model of the design space.

~Aljoscha

2026Week 606 Feb

“blobjects”

A four panel comic, titled "SAMMY'S CONFERENCE OUTFITS!!!".
      
      In the first panel, Sammy is wearing a mesh top with high waisted jeans.
      
      In the second panel, Sammy is wearing a long sleeved striped shirt, turtleneck and midi skirt. A hand is thrust into the air behind her.
      
      In the third panel, Sammy is wearing a checkered skirt, dress shirt and scoop top. Someone says "help" in the background.
      
      In the final panel, Sammy is wearing a bolero jacket, scoop top, and houndstooth trousers. In the background, Aljoscha says "Sammy", "i'm dying".
A drawing of Sammy, one arm holding up her head with a pencil in it, the other resting on a piece of paper.

Back at last. And I owe the faithful readers of worm-blossom.org not one… but two editorials, as these last two weeks I was busy attending two very different events: p2p-basel and FOSDEM. The former is intimate and deep, the latter huge and sprawling. And I had a great time at both. Let’s start with Basel.

p2p-basel invites researchers and p2p practicioners to a weekend of lectures and talks at the University of Basel. This year there were only approximately 16 participants, and that creates a very intimate atmosphere for discussion. For example, the catering of the event is also peer-to-peer, with attendees participating in cooking and cleaning. Those moments where you stand shoulder to shoulder with someone while peeling carrots present wonderful opportunities for deep discussion.

A drawing of a conference room.

There are prepared presentations and a time dedicated to spontaneous unconference discussions, of which I moderated two this year.

The first was on ‘delay tolerant UIs', anticipating user confusion stemming from systems where authored data may only reach other users a week later. This might mean the arrival of a message divorced from its original context, or worse, placed into a new context which changes its meaning (e.g. a thumbs up emoji arriving during the discussion of something sad). Clearly we cannot simply lift the UIs of applications which presume near-instant data delivery and expect them to work.

a cropped photograph of a whiteboard with two columns: problems and mitigations. In the former column is a problem arising from delay tolerant systems in a UI, and the latter a suggested way to mitigate it.

The second was on ‘zero / low identity systems’, and I was really happy that so many others were also interested in this topic. Digital identity is often used to link different pieces of data together through a ‘digital double’ which can often be linked to a real person. The risk here speaks for itself, and I had a half-baked idea on how to reduce or eliminate identity in networks: random IDs for all data, with the option for the ‘owner’ of a random ID to derive a new one which everyone else can then verify is provably linked to the original ID. This forms a kind of ‘identity on demand’, or as someone else put it much more eloquently, ‘lazy identity’. It was pointed out that this is not conceptually unlike image board tripcodes (though I’ve since learnt these are apparently quite crackable). Maybe there’s something here, though? It would be interesting to plug such a system into Willow.

Huge thanks to p2p-basel’s organiser Erick, who has relentlessly improved the event year after year.

(CONTINUED BELOW)

~sammy

We're listening to...

Soichi Terada

While working late into the night I kept myself going by listening to the unreal jungle soundtrack of Ape Escape by Soichi Terada. No sooner had I mentioned this to our discord I was linked to this album by the same artist, which is just as jungle, just as fine, but a lot more chill and a lot less monkey. Thanks to rory k. for the recommendation!

A drawing of Aljoscha, fingers interlaced, eager to deliver some interesting news.

Weekly updates and depressive episodes are not a good match.

I'm trying to take good care of myself, as much as I am able to. Even if that means taking a break in the exact week where FOSDEM has hopefully pulled a lot of fresh eyes toward us.

I often feel like Willow is coming into being too slowly. But even then, we are still doing meaningful and creative work, and putting it out for everyone to interact with. And that is something I can draw strength from, even when I am too off-balance to meaningfully act on that strength.

~Aljoscha

A drawing of Sammy, one arm holding up her head with a pencil in it, the other resting on a piece of paper.

A handful of days after returning from Basel, I departed again for FOSDEM in Brussels. This was my first time attending, and I was a little overwhelmed by the size of the event. So many buildings, people, and cat ears. And for some reason I chose to wear heels the whole weekend.

Luckily I was met by friends of worm-blossom (FoWB) Miaourt and danmw, and we spent Saturday discussing blobjects, fictional Willow companion hardware / tamagotchis, radio-friendly Willow, and Miaourt bearing a seemingly inexhaustible bag of waffles. We had a lovely worm-blossom.org dinner that evening, and although I did not say it at the time because I wanted to appear cool and not overly sappy, I thought to myself that if these were the kinds of people worm-blossom is interesting to, then surely we are doing something right.

I spent Sunday in the Local-first, CRDTs and Sync Engines devroom. My favourite talk was from Modal Collective, in which they detailed their motivation for building a new secure, iPhone-quality OS with p2p at its heart. It shared a lot of themes with my own presentation and I was excited that this line of thinking is turning into action. It’s always lovely to see adz of p2panda, and lovely to meet Tobias Bernard of GNOME too.

Then it was my turn to present. I’ve been working on my talk since the start of the year, and it had been through several incarnations before reaching its current one, leaving me a week and a half to produce approximately fifty drawings. Fortunately I embraced the scrappy spirit of worm-blossom.org, and put together possibly the only talk of FOSDEM with an opening cutscene (music provided by Aljoscha, naturally):

(There is also a live recording if you’d like to experience the live vibes and Q&A portion).

Readers, four days later I am still glowing from the reception to my talk. I’m so, so grateful for all the kind things people said to me afterwards, and the lovely conversations it afforded later that evening.

As I took the train home, I thought about how the p2p community has grown over the years, and how the connections between us have matured alongside the theory and implementations. Perhaps we can do something really wonderful together?

~sammy

A drawing of Aljoscha, fingers interlaced, eager to deliver some interesting news.

The music for the intro of the FOSDEM presentation is a beepbox piece, of course:

~Aljoscha

2026Week 530 Jan

“we forgot to remember to express ourselves clearly”

A three panel comic, drawn with much less skill than usual.
        
        In the first panel, a bird says "Well, this is maybe a bit weird..."
        
        In the second panel, another bird continues "but Sammy couldn't do a comic this week..."
        
        The final panel consists of a badly drawn, grumpy owl concluding "and Aljoscha refused to draw anything but birds".
A bad drawing of Sammy, done in mspaint. It is bad because Aljoscha drew it.

Hello readers,

it is me, Samy Gwylim. Because I am focussing on preparing my presentation for fosdem this weekend, I cannot contribute to this week's update. I asked Aljoscha to handle things on his own. And for some reason I thought I wouldn't regret it.

This week, I was reflecting on Kirby Air Riding, the revolutionary home console game from the 90s that combined beat time with choppy jpegs of japanese cuisine. The game wonderfully captured the raw stuffs of human experience, and my assessment is not tinged by nostalgia at all. Maybe I should draw on this game for the fosdem presentation. No better way of standing out from the other presentations than with a healthy sprinkling of pixelated onigiri. Or, since I am low on time, salmon would be great? Genius.

~“samy”

Assorted Mottos

Each of our updates features a short motto in the header for that week. These are mostly snippets out of Sammy’s and Aljoscha’s conversations. Our buffer of collected snippets has grown a bit large by now, and it would be a shame to let good mottos go to waste. So here we go!

worm-blossom:

  • from quirky-but-bearable to completely insane
  • victory is all that matters
  • we are sorry
  • being-able-to-cross-a-moat-full-of-crocodiles-based access control
  • we didn’t have to do this, but we did it anyway
  • nobody had to do this, but we did it anyway
  • I feel like every time we try a crazy thing, we are rewarded for it
  • there's a certain amount of mania we just need to accept as part of your lifestyle
  • gardeners rather than architects
  • I’ve had another thought — oh no
  • look, we’re probably going to generate two more mottos over the course of this call
  • swedish-intention-coded dutch accent
  • why?
  • i *never* just get to state my beliefs as facts anymore, it’s so *unfair*
A bad drawing of Aljoscha, done in mspaint. It is bad because Aljoscha drew it.

So, P2P Basel happened. I had a nice and calm train ride there together with Andreas and Glyph from p2panda, where we avoided talking about p2p stuff for the most part, knowing the weekend would hold more than enough of that. I did get a bunch of music recommendations from Andreas.

The evening had a couple of workshop participants meet for lunch. I had a nice chat with Pierre from Pijul, who gave me some much needed reassurance that most everyone has moved on from their phd thesis topic by the time it comes down to writing, and also that most everyone hates publishing by that time. The key is to do it anyway, I guess. So for the first time in well over a year, I've actually been motivated to keep chipping away at this phd thingy.

Then Friday was the first actual day of the workshop. Except I didn't feel terribly well. I made it through the day, but ended up shambling back to the apartment with a fever. And then I spent the remaining weekend lying in bed, with Sammy bringing me the occasional meal from the venue.

I'm still recovering, so no implementation progress report this week. Though I am a bit concerned how long it has been since the last actual code release. I hope I'll get over the hump of releasing the first storage-backed-Bab version soon, so that things can get back to more regular, incremental feature releases.

~Aljoscha

We're listening to...

Kurt Vile

The first music recommendation Andreas gave to me on the train ride to Basel. I have a soft spot for this kind of repetition-heavy songwriting. Highlights for me are Hysteria and Mutinies.

2026Week 423 Jan

“all theory and no storage”

A three panel comic.
        
        In the first panel, Aljoscha and Sammy clamber towards a kind of monitor embedded in the rock. The monitor speaks: "Please"
        
        In the second panel, we close in on the screen of the monitor. It says: "You'll help me find mother..."
        
        The final panel is entirely taken up by the monitor's static and waves. In the centre of the noise, it says "won't you?".
A drawing of Sammy, one arm holding up her head with a pencil in it, the other resting on a piece of paper.

I’m writing this on the second leg of my seven hour train journey from the Hague to Basel. Like Aljoscha, I’m going to p2p-basel to listen rather than to speak. Tags: receptive, curious, critical. And frequently: confused. Plenty of leaning over to Aljoscha and whispering “what does that mean?”. I still remember him explaining monotonicity to me a few years ago with the patience of a saint (St. Numbers).

The FOSDEM talk’s shaping up rapidly. I’ve now updated its title and description to better reflect its contents: “Willow - protocols for an uncertain future”. This is going to be a very different take on Willow than we’ve presented before, so I hope it will be interesting even if you’ve been hanging around the project for a while.

This week, I want to start adding more random little one-off drawings to our weekly updates.

~sammy

We're listening to...

Sébastien Tellier

One of my favourite music listening moments is when you have the radio on, or are out and about somewhere, and you hear the beginning of something you can't quite put your finger on until it dawns on you that it's a remix or cover of a song you already love. Check out the Gilligan Ross remix.

A drawing of Aljoscha, fingers interlaced, eager to deliver some interesting news.

I have been programming too much over the past weeks; it has been impoverishing my life. Case in point: tomorrow (I am writing this on Wednesday), I am leaving for p2p-basel, and I... have barely thought about that at all, being too busy doing computer things. I don't even have a presentation to give, whereas in the previous years my problem usually was having too many presentation ideas to choose from. Still, there is much to look forward to: I will be seeing old friends again, will meet new interesting folks (there'll be someone from the Pijul VCS, I might finally get closure on some question regarding this paper), there will be interesting discussions and fun evenings. And I'll be meeting Sammy in person for the first time in over a year!

Despite me programming too much, we will not get everything ready by FOSDEM that we had hoped to. Which makes me feel disappointed, despite the fact that I have actually been pretty productive: Bab slice verification is implemented, and I am close to having a simple storage backend that can store a single, contiguous slice. In terms of unlocking funding milestones, I am more productive than needed. Yet the self-imposed FOSDEM-deadline makes me feel bad about the current state of things.

Hence, I label the self-imposed deadline silly, and I will do my best to focus on everything I did implement instead of what is still missing. As usual, there is also the voice that wants Willow to finally become a real thing that people use. But if listening to that voice means wasting my time staring at a small rectangle all day, then I label that voice silly for now as well.

In less silly news, academia and macadamia have a Levenshtein distance of two. Hmmmm, macadamia... now that is something I can get behind!

~Aljoscha

2026Week 316 Jan

“it’s really just a hassle for *us*”

A four panel comic.
        
        In the first panel, Sammy look serious. The text above reads: "sammy thought about this. The mines were supposed to be metaphorical, and thus empty.". Aljoscha looks confused in the background and Sammy thinks to herself.
        
        In the second panel, we see a wider view of the mines. The text reads: "More importantly, it was meant to be free of the moral implications of its tacit extractivism.
        
        In the third panel, Sammy is set in pale green against a spiralling background. The text below her reads: "But don't the stories we tell say so much about the way we see the world? What we wish we could do without guilt? Sammy asked herself what this choice of setting said about her inner world!!!".
        
        In the final panel, Aljoscha reappears next to Sammy and says: "Hey. I took a look. I think there's a child trapped down here". Sammy winces.

We're listening to...

Sonic Youth

I (Aljoscha) rarely listen to music, but this song popped into my head multiple times this week. So I listened to myself (and the song) and tried to unwind a bit. I even had a cup of hot chocolate. This is a surprisingly good song for a cup of hot chocolate.

Burial

The star here is Archangel, composed to evoke a walk home through the city after a night out.

A drawing of Sammy, one arm holding up her head with a pencil in it, the other resting on a piece of paper.

This week my attention was once again fully occupied by the upcoming FOSDEM talk. After a run-through of a draft slide deck this morning, I felt dissatisfied, although everything was arguably there. Empty calories.

I am a person driven by dissatisfaction, and I work on things until I am happy with them. Aljoscha has the same malady. There is seemingly no cure. This makes the things we work on take a very long time. This website is a kind of compromise: we blog about our ongoing dissatisfaction on a weekly schedule.

So now I am restructuring the presentation for what is hopefully the final time. I mentioned last week that if you want to learn about what Willow is and how it works, we have a website. But why is Willow like it is? What kind of world made us feel such a thing was necessary? That is the kind of talk I think people will enjoy most.

It will be fun, maybe even insightful. If you have been reading worm-blossom.org for any amount of time, how this presentation turns out will not surprise you in the least.

~sammy

2026Week 209 Jan

“I had another thought while washing the dishes last night”

Another illustration of a underground scene. In the distant background, we see a jagged speech bubble coming from the rear of a cavern, crying "PLEASE". In the foreground, Aljoscha turns to Sammy (who is shuddering). The caption reads "I thought these mines were supposed to be purely metaphorical".
A drawing of Sammy, arms crossed with a pencil tucked behind her ear.

My week was high-intensity but low-worm-blossom as I was single parenting. With the time I had between biking my kids to school through the snow, preparing meals, pleading with them to just open their mouth so I could brush their teeth... I mulled over my FOSDEM presentation.

I got stuck in a 'concept' phase. For me it would be a bit disappointing to just say what Willow is and explain it spec by spec. After all, we have a website for that. This presentation should act as a complement to it. But how? I sat around pondering. Thinking really hard. And guess what: it didn't help.

As soon as I switched to making — even with only a very vague idea — things began to progress. Being able to sketch, respond, tear down, iterate. Share an idea I'm excited about with Aljoscha, and he gets excited too. And now I can't wait to keep working on this thing.

And so the first thing we did was confirm with the devroom organisers that we would be able to play audio over the speakers.

~sammy

We're listening to...

Vega Trails

I heard Closer on the first night of the year, and it sort of perfectly summed up how 2025 had felt for me (sammy).

Michael Lückner

house full of time is just one of those tracks meant for cruising on your bike, gliding past people and lights and painted lines.

A drawing of Aljoscha, fingers interlaced, eager to deliver some interesting news.

Rambly, reflective editorial incoming — creativity is fascinating (as is reading McGilchrist).

I was almost completely unable to make any progress coding this week, despite desperately wanting to. But whenever I opened the text editor, I would just be completely disinterested. I’d like to tell myself that I have the cognitive ability and trained skills to be able to work productively even when I’m not into it. But truthfully, the code I did force myself to write is so bad I will probably have to rework it at some point.

I usually struggle with creative output because I judge my own intuition too harshly and want to get things right. This website has been a good exercise in loosening up in that respect. But this week, the problem was of a different nature — I did not care enough to judge at all, leading to pretty bad code I normally would not let myself write. So where ideally there should be a healthy balance of generative creativity and quality control, this week had neither. And forcing things regardless just doesn’t work.

And then, out of nowhere, my brain delivered the solution for how to elegantly implement verification of incoming data streams in Bab. And suddenly, I felt like coding again, and have been happily coding since. This did not happen in time for finishing things by today, so I will detail this implementation approach next week.

Interestingly enough, while I was more or less unable to code, I did do some beepbox pieces I am not unhappy with after the fact — both of which I imagine working nicely in an RPG of some sorts, inspired by watching some Expedition 33 and Final Fantasy VII over the week:

And I did not dread the task of writing an editorial for this week either, despite having little idea what to write about before actually sitting down and starting to type. Not sure whether this says something about myself, or more about differences between writing, music, and coding.

~Aljoscha