The “little lab” is an indie research lab-of-one, exploring new and renewed ideas for the future of personal computing, supported by the community. Here’s the latest from the lab. Members get every report in full.
For the last several months, I’ve been living in an itemized personal computing environment that increasingly expresses the kinds of ideas that I’ve long sought for desktop-class computing in my life.
This particular implementation started with more modest aims, however: What I initially built was a program for Sarah and I to use in the course of our independent and collaborative work (she is a teaching fellow at Harvard and does research in social medicine; together, we run Buddy Bindery & Press; and you’re already familiar with my own research). Being developed within the context of (and driven purely by our use cases found within) the bindery and our research helped Celestial Sphere shape up in meaningful ways. More on this later.
In this lab report, we consider one way to look at the architecture for the itemized user environment: a layering that has been happening since the dawn of time.
Some harbor an inclination toward a “grand design” in the construction of a new operating system’s user environment; a sort of “turtles all the way down” architecture that features one substance, or one core primitive, which defines the mechanics of an entire computing system deep under the hood and up into userland.
I’m more inclined toward the “layers” which we’ve been stacking up since we first made the jump from hard-coded circuits to programmable, general ones (and on which we have built many new layers — machine code, assembly, low- and high-level programming languages, and so on).
First, the paperback of my book, Bootstrapping Computing, is available for preorder now, and will be released on December 1! Here’s a quick summary:
The book is about how ten layers, starting from binary, were arranged to build up to personal computing and the World Wide Web. Each layer is built out of the simpler parts of the one below, arranged to produce increasingly sophisticated ideas of what computing could be. It’s an incredible story of human ingenuity.
The paperback’s cover features a beautiful original illustration by Owen D. Pomery, and the entire book is printed in full color.
Grab a copy for yourself or a friend this holiday season - I hope you enjoy it!
In this lab report, we look at Wonderful, the language purpose-built for handling items and interfaces in the itemized operator environment.
I’m in the midst of building a new user environment with the kinds of ideas that I’ve been exploring for personal computing’s future. Over the course of several lab reports, we’re looking at how this user environment works, inside and out. In the last lab report, we explored the Item Store, a database of chronological facts that serves as our persistent storage layer in the itemized environment.
Now, we’re going to take a look at the programming language purpose-built for handling items and interfaces in this environment. It has several features that help interfaces connect to the item store, and for users to iterate on their interfaces and programs from within their normal operating spaces, interacting with code items with the same benefits they gain from the rest of their things existing in an itemized environment.
In this lab report, we look at the Item Store, a database of chronological facts that serves as the itemized environment’s persistent storage.
This year, I’ve been hard at work building a user environment that reifies personal computing of the kind I’ve explored for the last several years — something I can fully live in.
Over the next several lab reports, we’re going to take a deep dive into this environment and its implementation, as well as a bit of the project’s philosophy. This first report is on the environment’s storage mechanism. The next one will cover the environment’s programming language. After that, we’ll move toward the environment’s interface.
First, we will look at the kinds of ideas the Item Store was built to support. Then we will look at how the Item Store works, highlighting some key implementation details.
The last chapter of Bootstrapping Computing is all about user environments. One of the more unique user environments mentioned is found on the Canon Cat, an obscure machine that didn’t last long on the market, but took some specific philosophies to an extreme, presenting fascinating implications for how users might interact with their personal computers.
The Cat’s user environment was one long text stream. There are some caveats to this next statement, but basically: that’s it!
There was no mouse, only a keyboard. In fact, the Cat did away with WIMP entirely — there were no windows, no icons, no menus, and no pointer. There was no file hierarchy and no need to name things. None of your text was automatically timestamped.
It was just you, a keyboard, and one long text stream with everything you’ve done in it.
I have two things to share with you today: First, we’re starting a publishing company. Second, I wrote a book about computing, out soon.
Let’s start with the book:
I’ve had a bunch of versions of the same conversation with curious friends and family over the years: folks are generally aware that computers “use binary”, but want to understand how they build up from there to all the things we recognize as modern computing today. This book answers that question.
You haven’t heard from me in a bit because I’ve spent the last several months on some exciting new projects that I can’t wait to tell you about. We’re in the home stretch now, so stay tuned!
I wish you a wonderful start to your new year,
– Alex
After two and a half years of this membership program, I’ve built a proper site for its members.
When I first started the program, I debated whether I should use Patreon or roll my own site with Memberful (a backend for membership programs, also now owned by Patreon). I thought that folks might trust Patreon more, but I was uneasy with giving up control over how the program is run, and how posts and emails appear. I was particularly nervous for changes that might be introduced down the line that don’t make sense for my members, but at that point I’d be somewhat stuck.
These kinds of changes have come to pass, such as this one caused by Apple, because Patreon offers an iOS app. That’s not to say that there are no problems with being locked into Memberful; they recently doubled their price, in addition to taking a percent of every payment, citing a growing list of features that I don’t use (website creation tools, generated signup page, referral programs, etc.).
Wonderful is a Swift-like language for the browser and other JavaScript contexts. It implements a subset of Swift’s core features, and extends it in a few ways. It can be compiled into JavaScript during development or at runtime: in the browser, on the server, or from the command line.
The initial implementation was written in JavaScript (the transpiler’s target language), and the second was written in Swift/Wonderful (the transpiler’s source language). The Swift implementation is close to being able to compile itself, which will make Wonderful fully self-hosted.
An interesting thing about a transpiler where there’s already a compiler for the source language is that if you write the transpiler in the source language rather than the target language, you can have both implementations, since the transpiler for the source language can transpile itself into the target language.
This past winter, I spent a couple months building something from scratch in C. Since it was around the holidays, I had the time to build out the more tedious pieces: immediate-mode rendering using SDL, a C implementation of my item store, and an interpreter to enable live-coding view definitions in its user environment with a language purpose-designed for the task.
I was working on this from the desert, which has a certain resonance with coding in C. The desert has an understated energy in its quietude. It was a distinct experience to be in some far-flung places, quietly sitting among the Saguaro, writing in lower-level languages to bring a new kind of personal computing environment to life. The work can be slow, but it seems exact in a way that contrasts to working with lots of dependencies which shift and buckle underneath you. I miss this kind of coding; it’s a more potent mix of the meaningful challenge in the work.
A tuplestore for storing items, with implementations in C and Swift, backed by SQLite and optionally Core Data. It makes it possible to plug in providers that can contribute items.
It’s nothing particularly novel, but it does express a series of ideas that have evolved to support my personal software stack over the last several years. It’s been influenced by a few sources, maybe most notably Datomic’s data model. It keeps things fairly simple, at the expense of performance in some cases, or disk usage in others; by reducing the optimizations, it remains a tinkerable, if steampunk, little database for the things I’ve used on a daily basis.
The Swift implementation has helpers that codify practices around storing relationships among items (which are items themselves), item views, and more.
While working with collaborators John Underkoffler, Alex Warth, and Andy Milburn during my time in LA, Alex and Andy came up with this simple idea for coding audio synths. We had lots of fun with this, creating all kinds of different implementations.
Sonicaster is one such environment which I built to understand the concepts better.
My exploration into the operator environment for an OS of the future has been guided by need and intuition, but how I’ve reacted to those forces has evolved over time. If you’ll allow some naval-gazing, I’ll share some observations and reflections on process.
My present aim is to add to the corpus of ideas. Fundamentally, I believe the ideas we’re working with today aren’t very good. There’s a very high bar; we can only work on so many things. So I have this heavy bias towards divergence in my work. Diverge and diverge again.
Rich pathways into divergence often don’t come from direct reasoning, but from exploring the terrain important ideas seem to inhabit. And it means regularly working with early, ill-defined, fragile ideas. This makes the processes of exploration and collaboration strikingly similar to those of the creative work done by artists. Discussions of process from artists offer rich inspiration for unfettered research. Rick Rubin’s book, The Creative Act: A Way of Being, is the latest entrant, and I highly recommend it.
An early exploration into how an environment might make constructing and using an interface one and the same, in a dynamic and fluid environment.
It features a live query being placed on a surface, the stack of its results being laid out in a particular order in one gesture, and semantic zoom allowing for increased detail with another gesture.
In my independent work, I tend to work with my “big questions” on background, and my curiosity on foreground.
The big questions are the hard problems that, if solved, would be quite meaningful for the field and its contribution. But I work with curiosity on foreground. Often, the big questions are the ones that remain because hammering away at them directly hasn’t landed the needed answers. Letting curiosity take the reins puts some noise into the system. It’s Feynman’s spinning plates that ultimately won his Nobel. Curiosity has the ability to lead one to important discoveries on paths that otherwise seem insignificant. It finds both problems and ways of solving them. It surfaces the principles we hold close which stand in contrast to the things around us. Working with the big questions on background and the mind’s unfettered curiosity on foreground, I can help find new paths to new results.
At the start of the Ink & Switch project that would become Embark, I built a prototype environment in which separate widgets could react to one another, allowing users to compose interfaces for different needs. I thought about it as Siri’s donation system paired with Konfabulator widgets or Mac OS X Tiger’s original Dashboard.
The ideas came out of some early sessions with Paul Sonnentag, Geoffrey Litt, and Peter van Hardenberg. As we were exploring what project we might work on together, an idea first offered by Paul gave us lots of momentum, and led us down this line of thinking. Ultimately, Embark moved toward documents.
An itemized operator environment and virtual machine. This is an ongoing project.
It features a virtual machine written in C, an in-environment language “Wonderful” that allows live coding, and an implementation of the item store written in C and Wonderful.
Many of my experiments aim to progress the thinking for WonderOS. Its data model is explored and implemented by the item store, and its user interface is the subject of many of my lab notes and experiments — Earthling and Gestural view construction are notable recent examples.
Reflections and updates after the first year of a membership program, and how the core work is evolving in its next year. This article has been shared publicly here.
I started on my current line of research in 2019, and went full-time in 2020. At the start of 2021, I began publishing lab notes, which document my explorations. And at the start of 2022, I kicked off a membership program, which helps make this work my full-time focus.
In this article, I’ll share an update on how this work went in 2022, and where it’s headed in 2023. I’ll give you the numbers on my experiment in funding this work with a membership program, and what changes I’ll be making to it with what I’ve learned.
Last year’s article is here: 2022.
OLLOS structures itemized personal computing interfaces into one long timeline. It explores some inklings around how operating systems might reify an understanding of time.
The idea first came up in my notes in June 2021 as “One Long Log OS”: “All you can do is type down one long log. You can issue commands and ask questions, like to get email, but it all gets appended into your one long log. That’s all you can do. You can’t edit or delete.”
By the time I built it in November 2022, it had taken on some other qualities; namely, my aim was to find ways of having digital environments allow for more fluidly floating our things among different timescales, as we naturally engage with what’s in our focus, let some things slip to the periphery or background, and as other things bubble up into our central focus. It ultimately only scratched the surface of those latter aims, but gave direction for how future projects might continue the work.
Update: I’ve published an expanded essay on this project here. This member update includes some particular details as I was thinking through an aspect of the project’s design.
For the past month, I’ve been working on (and living within) a new experiment that uses the dimension of time as the organizing principle in an itemized user environment.
The second issue of the Member Magazine is now available. This issue has a few images, so the PDF might be easier to follow.
It features articles on my personal stack of home-brewed software, hardware projects that point in some compelling directions, some of the challenges I’ve faced recently in my work, and a few others. I hope you enjoy it!
One of my first experiments for our membership program to work “with the lab door open” is the Member Magazine, a semi-regular publication just for members that includes more of the thinking that supports my more public work.
The first issue is ready, and you can download it now. I hope you enjoy it.
For 2021, I tried an experiment: publishing all of my thoughts and ideas on the future of the operating system.
This work came from years of notes that I had gathered, starting with one 12,850-word note that I took during a multi-week stint tucked away in remote parts of Colorado and Wyoming. As the years passed, the notes kept growing, and soon enough, so did the software prototypes.
Early in my career, I found myself at cocktail parties celebrating various business communities strangely often. These events were usually three to four hours of small talk. Business small talk. The conversations were dull and repetitive, and event wine only helps so much.
Over time, I found myself naturally gravitating to far more interesting conversations with anyone in the room who wasn’t there because of the business community: The server in New York City who was working up the money to book studio time to record his first album, or the significant other who has spent her entire career researching the butterfly.
Members of the little lab get a discount on my book, which is out now.
Bootstrapping Computing illustrates how we built each layer of computing out of the one before, inspired by many conversations and questions with curious friends and family. It's a short, technical book for curious, non-technical people.