Cosmonic has entered the Developer Preview phase and is now inviting users to deploy their ideas.
Back in 2018, only a few heretics like myself had truly embraced WebAssembly as a game-changing technology. I'd tried to convince a few people of the coming change, but most of them figured I'd spent too much time near the coffee makers. That is, until I crossed paths with Liam Randall while working for a large financial company.
Liam and I had each done our tours of duty in large enterprises. We'd seen things, you know? Terrible things. We'd seen how long it takes for a large company to react to a vulnerability detected in some obscure Java dependency three levels deep in a dependency tree. Multiply that time and effort by the thousands and the splinter becomes a spear. I used to go from team to team, consulting on building microservices. Each time, I saw the same pattern:
- Copy and paste boilerplate from a template
- Tightly couple to web servers, database clients, message brokers, tracing, metrics, logging, ad nauseum ...
- Diverge from the template
- Become a maintenance nightmare, with 90% of the reason for change/recompile/redeploy having nothing to do with the core features
- Ultimately end up with a re-design/re-architect phase because the development/iteration version of the app doesn't scale right in production
I've always had side projects and ideas and dreams of software I wanted to build. Most of the time, I'd end up tossing those ideas aside because the friction, frustration, effort, and often money, to get from my napkin sketch to production was just too much.
The Road So Far
I wanted something as brain-dead simple as taking my idea and converting it into an application. To fit into a tweet, I described it as converting napkin drawings into shipping software. Or, as a function: f(📒) = 🚀
All the friction and difficulties aside, software development wasn't fun anymore. It had lost the joy I used to feel a long time ago. I had expected to lose the feeling of awe over time as all this technology became the daily routine that paid my bills, but I wanted...needed software development to be delightful again.
So we set out on this journey to improve the lives of developers. To make software development joyful. We sketched out this vision we had of a canvas on which developers could draw their applications. It should feel like the design process with a "ship it" button at the end.
Traveling the Unpaved Road
Nothing like that existed for WebAssembly, let alone for the commonly used languages and platforms. We were going to have to build everything from the ground up. Normally when you set out to build a product, there are a number of giants on whose shoulders you can stand to gain advantages. Most of the time, someone has come before you and paved the road to your destination.
This is not the case for Cosmonic and WebAssembly in general. While there are some well-worn ruts in the dirt made by pioneers like Fastly, Cloudflare, the Bytecode Alliance, and even the Rust+WebAssembly community, today much of this is uncharted territory.
As we've built Cosmonic from our own napkin sketches, we've had to build our own tooling, create our own environments, learn our own hard lessons, and make a number of contributions to various open source projects. At times it felt very much like we were building the bridge as we crossed it. If we stopped to look down, in classic Looney Tunes fashion, we'd suddenly become aware of gravity and plummet to our doom.
Thus the open source project wasmCloud was born. This the shoulder of a giant that we built in the open in order to improve and give back to the WebAssembly community and to make Cosmonic possible. wasmCloud is an application runtime that hosts components written as WebAssembly modules. It can spread compute over disparate infrastructures and connect Wasm modules with capability providers that expose loosely coupled contracts for things like database clients, logging, message brokers, etc. More importantly, it's supposed to make development fun and easy.
As outlined in this blog post, wasmCloud is in it for the long haul and is planning on embracing more and more standards as they solidify. wasmCloud ultimately became part of the Cloud Native Computing Foundation, hoping to improve its chances to contribute positively to the distributed systems development community.
In the beginning, there we just a few of us, but ultimately the idea of Cosmonic would coalesce into an amazing, mind-blowing product and the incredible team that I get to work with every day. Never before have I been surrounded by such talented, passionate people who are all so devoted to bringing joy to distributed computing and ruthless in their pursuit of quality.
Drinking our own Champagne
When we started out, one of our core tenets was that Cosmonic must be as fun to build as it is to use. I had this rule because we were going to build Cosmonic almost entirely out of wasmCloud components. This would not only provide a powerful stress test and shakedown of the open source project, but it would immerse everyone on the team in the wasmCloud+Cosmonic developer experience. Providing a great developer experience is one of our highest priorities.
When you launch the Cosmonic application and you see the hosts in your infrastructure view and the actors, providers, links, and wormholes on your logic view—all of that is supported by wasmCloud actors deployed to wasmCloud hosts communicating over lattices.
Stay tuned as we publish a ton more blog posts diving deep into the technical details of how we built Cosmonic.
What is Cosmonic?
Cosmonic is the culmination of a shared dream of a return to the halcyon days of joyful and easy development, designed to meet the demands of today's highly distributed cloud, edge, and IoT applications.
Today, when you set out to build an application, you not only tightly couple your deployment artifact to database clients, loggers, file systems, configuration, tracing, and more, but you also end up being coupled to your scale profile.
What typically works fine on a workstation often needs to be completely re-architected to run at scale in production. Not so with Cosmonic! With Cosmonic, you can define your business logic, run and test it all in a local monolith against local resources, and then deploy it and scale it globally with resiliency and redundancy without rebuilding. The scale of your application should be a runtime knob, not a design-time commitment.
Spreading your compute out to the edge, to devices, to cloud back-ends, and across multiple infrastructures or cloud providers is something you should be able to do with no fear and just a few button clicks on your canvas.
This developer preview is just the beginning of our journey to building the best distributed application development platform.