Tenfold: Celebrating 10 Years of Ink & Switch

Livelymerge and Effective Expressiveness

For us in the Northern Hemisphere, fall is in full swing. The weather is cooling, we’re spending more time indoors enjoying spiced drinks and preparing our late-October scares, and — would you look at that — another brave soul has entered our laboratory. Please welcome Fintan Halpenny, joining the Automerge team. Meanwhile, the rest of the lab has been busy building a synchronized heap for a collaborative live programming environment, finding new ways to share the flood of activity around Automerge, and coining a helpful new term for assessing how well programming languages fit a particular task.

Livelymerge

When people write collaborative software, they usually communicate the state of a program over the network using some protocol. They might use something like REST to send API calls, or stream UDP packets with the state of a multiplayer game. I’m not aware of anyone implementing RFC2549, but in principle, you could.

In our ongoing Livelymerge project, we’re exploring what it feels like to put the entire state of a program into a shared collaborative database (Automerge, unsurprisingly). That includes the code, the state of any object in the system… the whole thing.

Livelymerge documents can be collaboratively edited, taken offline, synchronized, forked, or rewound. This leads to all kinds of exciting opportunities and difficult problems. In fact, in a meaningful sense, we’ve known this project was doomed from the outset.

Fans of systems in the Smalltalk lineage might recognize Livelymerge as a descendant of Lively Kernel, and Dan Ingalls has built a new implementation of Morphic on top of Alex’s transpiler and runtime for experimenting. This environment has had all kinds of interesting challenges — like managing the speed at which the Automerge document grows!

The ongoing project continues to explore the possibility-space by discovering (or creating) a problem and then trying to resolve it. If you’d like to learn more, you can see all the fun GIFs and thorny problems by browsing our ongoing series of Lab Notes.

This Month in Automerge

Today, the Automerge project has five fulltime members and supports commercial, personal, and research users around the world. It’s an exciting time! We’re powering the upcoming version of Quarto (by Posit, creators of RStudio), bits of Automerge are being adopted into the brand new Coln proof database led by Martin Kleppmann.

Because there’s so much going on, we’ve started a new “This Month in Automerge” newsletter to try and make it easier to follow our work.

For example, in the July newsletter, we highlighted how Orion Henry’s recent rewrite of Automerge internals atop the Hexane columnar store brought huge improvements in load time and memory use.

We’ll keep syndicating the occasional highlight here, but you should subscribe now if you want to keep tabs on the Automerge CRDT, the Subduction sync engine, Keyhive’s key management system for decentralized collaboration.

Effective Expressiveness

Nearly every general-purpose programming language is Turing complete. If you only care about what a language can do, they’re all the same. How it feels to use these languages is a different story. Each one makes some things easy and other things painful. Each gives you a different way to think about a problem, and some of those ways fit a given class of problems far better than others. Computational power tells you almost nothing about what a language is good for. What lab researcher Alex Warth cares about is the effective expressiveness of a language: how naturally it lets a programmer express solutions to a particular kind of problem, in practice.

Read more about the concept of effective expressiveness in Warth’s recent lab note.

That’s it for this edition of the Ink & Switch Dispatch. We’ll be back next month with another round of notes and news from the lab.


The Ink & Switch Dispatch

Keep up-to-date with the lab's latest findings, appearances, and happenings by subscribing to our newsletter. For a sneak peek, browse the archive.