Clojure and Urbit

This is a response to originally posted on r/clojure.

There is lots of research in this space, I think the most promising modern one is Urbit "a clean-slate system software stack defined as a deterministic computer." Urbit is an operating system, network stack, persistence, etc defined as a referentially transparent pure function. a RT "Operating Function" has magical properties, like you can unplug it and plug it back in and it boots instantly from a snapshot. There is a vastly reduced surface for errors. There is no manual memory management, nor is there a need for a garbage collector. There aren't NullPointerExceptions. Everything is deterministic. Their thesis is that the root cause of all the crap/bloat in the world can be traced down to flawed and complex foundations.
To make an RT Operating System, first they had to make a RT virtual machine, and to do that they first made a RT machine language with a RT memory model (raw memory is an immutable tree manipulated as data, as opposed to array buffers manipulated with pointers). IMO the Urbit project is tightly aligned with Rich Hickey's vision of data as the foundation of computing.
BUT responding to Nikita's thesis of things being "wrong" – if you go check out urbit, you'll find that it is useless. Architectural perfection doesn't help anybody pay their bills or send their kids to college. From that perspective, Urbit is wrong. Throwing away everything and starting over is wrong. From this perspective, the only reasonable definition of "right" is "successful project". R Right = (N number of people helped) * (H how much you help them). Aka, "the market is always right." That's why we build slow compilers that target shitty slow virtual machines running in shitty slow browsers running in shitty slow operating systems running on fundamentally broken CPUs that were designed to solve performance problems of 50 years ago.
Anyone can say something is wrong. The brilliance of Clojure is figuring out a plan to get from Zero to One, making the right compromises to deliver value to people today, and a plan to make it grow over time. If N = 50k clojure programmers and H = 10x productivity, R becomes high enough to make a difference. Brilliance is turning R=N*H into a feedback loop that compounds over time. And if it compounds faster than the competition, that is how you take over the world. Startups 101!
Here is a related quote that I love.
If you'd like to know more about how Urbit and Clojure/EDN/Datomic are almost the same thing, see Clojure's Big Picture: EDN unifies database schema, MIME type, network prototol, and data structure which is (sneakily) originally sourced not from any Rich Hickey talk, but the urbit whitepaper page 2 section 1.4
One example of painful heterogeneity inherited from the current stack: the relationship between a database schema, a MIME type, a network protocol, and a data structure. The same semantics may be reimplemented incompatibly at four layers of this stack. The programmer is constantly hand-translating values. Helpful tools abound (“ORM is the Vietnam of computer science” [17]), but no tool can fix architectural impedance mismatches. There are always cracks; bugs and attackers slip between them.