It’s been almost two years since I made Orca open source, so I thought it would be a good time to reflect on what we’ve done so far, and introduce some changes in the project’s direction. Here’s the outline:
In these past two years, we did a lot of groundworks, i.e. tooling and systems work laying foundations for future features and better developer experience. Here are a some notable examples:
I’m pretty proud of the team for achieving this much, especially given our limited time (more on this later). This is the kind of work that is difficult to showcase, but is also extremely valuable, as we’re now in a better position to onboard contributors, help language bindings maintainers, debug our WebAssembly SDK, and experiment with our own execution environment.
On the other hand this means we still have a pretty limited API set. For example, we purposefully delayed working on new APIs like networking or audio, because we first needed to develop the tools to debug their wasm-side implementations, and because they depend on choices we’ll make about the execution model (like multi-threading). Ultimately this is a problem of priorities and scope, but long time contributor Reuben Dunnington has already started fleshing out the file system API, and there is more to come.
After this phase of getting the codebase off the ground and building the tools we need to iterate on it, I think it is time to shift gears, and I’ll explain how in the next section.
Since my first post here, my ideas about the goals and strategy of Orca have evolved a fair bit, so I want to give readers a clear idea of those changes.
The high level goal was and still is to make a better stack for building, distributing and running applications. Originally I thought about these three aspects as somewhat separable concerns, that could be tackled in sequence. I also put a stronger emphasis on the distribution and execution models (although I did hint at integrated tooling and composition features).
I’ve come to think a much more fruitful perspective is to consider development, distribution and execution as modalities of the same live environment. In this approach these three modalities support and flow from each other. The execution model supports both development features like hot-reloading and time-travel, and distribution features like portability and sandboxing. The distribution model can be used both for transparently fetching apps and for fetching plugins and packages for the development environment. And the development environment cooperates with the runtime to provide insight into, and control over, the execution of apps, in addition to helping package programs for distribution.
This rebalances the focus in favour of the development workflow in this environment, since the distribution and execution models can now support more interesting features by cooperating closely with the dev tooling. This also seems to me like the most interesting area for research and progress. In particular I’m interested in exploring the idea of a live, observable programming environment mixing code and visual components to interactively compose and debug applications. I engaged with the topic a couple times (see for example here and there) and I’m eager to wrestle with it again.
Along with this shift in focus, I’m also revising the strategy to get there. The original plan was to first build a minimal product (an Electron-like platform) providing practical value from the start, which hopefully would generate interest and translate to some users/contributors/sponsors, and then use that as a base for further explorations. This did seem reasonable, and I still think it would be for an organization with enough velocity. But for a part-time and (mostly) solo developer like me, it pushes “the interesting parts” way too far in the future. As such, it fails to account for maintaining a clear vision and sustaining my own long term enthusiasm, and, I fear, also the enthusiasm of other contributors and sponsors.
Leaning into the more innovative and exploratory aspects of the project, although less predictable, might actually be the more sustainable way. First, it feels more rewarding to me personally, so it is more likely to keep me working on it. And second, while the original plan was trying to foster adoption as in “users buying into the product”, I think this new focus can foster adoption as in “a community playing with and exploring the vision”, which actually makes more sense for a long-term project like Orca.
Ok, but what does all this mean in practice?
Generally speaking, I will put a stronger emphasis on research and exploration, and start tackling the more “radical” aspect of the project sooner than planned. Obviously, in the longer term I want Orca to become a complete and polished product (not just a research project!), but I think the path to the best version of it goes through this research effort. In the meantime though, I do want our experiments to be actual features you can play and engage with, and I hope the community will take part in the exploration!
One of the main channels I’ve used to keep people posted on the project is this blog. The thing is, blog posts take a long time to write, and not all updates feel worthy of a full-blown post. I think we need more frequent, smaller-sized updates so that we don’t work “invisibly” for extended periods of time. This way people can see the project is well alive, gauge the direction it’s moving towards, and hopefully get interested in participating or supporting it.
To address this, I’ve added a Devlog page to the website. This is a curated feed of small progress updates and news that require way less work than a blog post or newsletter, so hopefully we can publish them more often. I also set up an RSS feed for it so you can get the latest updates directly in your favorite reader. By the way the blog also has its own feed here (it already existed, I just made it more explicit). I’ll also continue to publish blog posts at a slow pace, but reserve them for technical walkthroughs of specific systems of Orca, or “position” posts refining the vision of the project.
As a reminder, we also have a Discord server where we chat about Orca development. I added channels that pull in the RSS feeds from the website as well as the logs from the git repo, so if you want to see everything in one place that’s where you should go!
During the past two years I took a couple contract jobs, and I dipped into my savings to work on Orca the rest of the time. Balancing contracts (sometimes two at a time) with making progress on Orca was pretty hard. Obviously it meant less time and energy for the project, but it also involved a lot of context switching. In particular, research really needs a critical mass of focused time, so it’s the part that suffered most.
Over the year, monthly donations to Orca have amounted to around $400 on average, which I’m immensely grateful for, but of course it isn’t enough to keep the project going long term. With my savings dwindling, I clearly need to ramp up funding, otherwise I’ll likely have to take more contracts, or even a full time job sometimes in the coming year, which would considerably slow down the project.
I’ve been looking into R&D grants, and applied to some. We’ll see what this yields, but this is a slow and hit or miss process. The most truthful funding source remains donations, because they express the interest and commitment of supporters and users sharing the project’s vision. Speaking of which, I created a bunch of new sponsorship tiers. They each come with some perks, from getting your name credited as a sponsor, to priority support and consulting hours. I’m also thinking of making special content (i.e. advanced tutorials and technical walkthroughs) for sponsors, but this is a start.
I also set a first goal of $4000 per month, as this is the amount that would allow me to focus on Orca full time. I’m only 12% towards that goal, but that is a beginning, and you can help push that number up!
If you think the research and programming work I do on Orca is important, and you want to help me move the project forwards, please have a look at the Orca Github Sponsors page and pick a tier you’re comfortable with (or choose a custom amount) - any help is deeply appreciated!
Thanks for reading, and see you soon~
Thanks to Reuben Dunnington for his feedback on this post’s draft.