Back in 2000 and 2001 as a younger programmer I started hacking on something which I thought of as a unified address space for a cluster of computers. In my head the system was a bespoke programming language with OOP-like messaging whereby object references could “live” on any machine in the cluster transparently. Objects lived like processes, waiting for IPC messages. In the background “pointers” to objects had node addreses as well as memory addresses and the runtime dereferenced pointers across the network. In this theoretical world, messages to objects behaved the same regardless of which node the call was made from and which node the object instance resided on. What you get is programs that don’t simply execute and stop, but an operating system where processes are made by instantiating new objects. I called this little experiment “Harmony”. This is roughly how it looked:
aiden@linux]$ harmony harmony-cluster]$ myProgram = new Program() harmony-cluster]$ addressof(myProgram) 192.168.2.3:0xdeadbeef harmony-cluster]$ myProgram<-say_hello() Hello World! harmony-cluster]$ cluster<-move(myProgram, "192.168.2.4") harmony-cluster]$ addressof(myProgram) 192.168.2.4:0xaabbccdd harmony-cluster]$
Resting on the idea of this “Harmony” engine was a desire to create a single living code ecosystem that was spread across many machines. A runtime for the Internet. It would be a utopic wildwest that felt like a home we have lost to walled-garden social networks.
Even though 18-year-old me got wrapped up in the technical implementation and finally realised the job was MASSIVE and put it aside, I never really let go of the idea that creating a unified and homogenous execution environment for Internet connected machines could create some kind of “new dawn” for the Internet.
I since followed the rise of virtualisation, containerisation, PaaS, serverless “functions”, Erlang’s OTP and lots of other developments … they all felt like they were edging their way forward.
In reality the hard truth is that it’s a simple idea and for me it was only ever going to be a pipe dream and a codebase whose last change was 10 years ago. Luckily brighter and more capable people than me have done more than dream: DFINITY and their “Internet Computer”.
DFINITY’s FAQ on their “Internet Computer” says:
The Internet Computer extends the functionality of the public Internet so that it can host backend software, transforming it into a global compute platform … Using the Internet Computer, developers can create websites, enterprise IT systems and internet services by installing their code directly on the public Internet and dispense with server computers and commercial cloud services.https://dfinity.org/faq
Of course there’s nothing new under the Sun; Got a bunch of connected machines? Let’s join them up! This is a familiar idea as old as computing itself. What’s great to see from DFINITY is not just the “Internet” component, but the marketing that surrounds the technical concept. “Revolution!”, “Power for all”. Reading through their website deeper almost sounds like a manifesto for a new Internet. There’s lots of lofty language and ideals about what the Internet should be, not just what it could be. I really like this.
DFINITY haven’t just thought about it, they’ve done it. They seem to have tackled the really hard problems too such as concensus and trust in a distributed untrusted compute environment.
There’s also … a bespoke programming language! Their language is called Motoko. Motoko appears to be an OOP language with message based state control which compiles to WASM in order to be injected in to the “Internet Computer” runtime.
On a personal and selfish level, seeing the DFINITY work really resonates with me. They’re making real something I dreamed of and are doing it better than I ever would’ve or could’ve. For everyone on the Internet today, I hope their work continues to drive forward and redefine what the Internet is in the future. I truely hope a technical innovation spurrs on a revolution. I’ll be watching (and maybe doing some Open Source hacking) and i’ll be hoping. I’ll be hoping that organisations such as GitHub or Amazon with their growing FaaS offerings don’t swallow up the chance to make change. I’ll be hoping it doesn’t become yet another rent-seeking operation. I’ll keep hoping.
: Seriously, I spent a year writing an interpreter and runtime in C then got bogged down implementing the Yacc/Bison parser to support Unicode support for some reason. 18-year-old me loved to focus on the wrong things. I wish LLVM was around back then too! I ended up with a rough Python-like syntax, integer types and input/output. The runtime worked and message passed across the network. It had an OTP-like “cluster” global variable which contained resource allocation, monitoring and some basic I/O. I was pretty proud of it. Sadly Github didn’t exist so I think that codebase is long gone. It’d have been cool to laugh at past me now.