4 ms·
I actually think some of the underlying ideas Urbit is trying to pursue are interesting and have real potential: 1. Deterministic computing seems really intere
by ianbicking 5y ago
I actually think some of the underlying ideas Urbit is trying to pursue are interesting and have real potential:
1. Deterministic computing seems really interesting. It gives you something that is reliable and portable and replicable. It means you have to be very clear about everything that isn't deterministic, mostly I/O, and that's worth being clear about. I find determinism the more interesting part of pure functional programming, but I don't think you need a functional language to have deterministic computation.
2. Portable identity and communication are also interesting, they are necessary formal concepts if you are going to treat computation abstractly.
3. It's not crazy that you access this abstract concept of an OS using HTTP APIs and out-of-OS web frontends. It feels a little like smoke-and-mirrors since so much of what it "does" is actually the browser and JavaScript, but eh.
That said, Urbit is a terrible expression of these ideas. The expression of computation (Nock) is absurd. Jets seem a little clever, but it's really an fragile extension of the idea of JITs, but based on idioms to make up for Nock being unable to express basic computational concepts (like negative numbers). As a result the Jets are essentially the Real Bytecodes. I guess it's a little like the evolution of CPU microcode, but entirely unnecessary as Nock as no legacy or advantages that need to be preserved.
The language Hoon is the worst obscurantism I've ever seen. People will claim it's productive once you learn it, but I don't believe them one bit, the programs are long-winded, full of weird boilerplate, and just bad. They cover this up by making it seem that the programs _do_ something notable, but they don't. Most of the programs would be 100 lines in Node.js, they are just moving a little data around to rich (browser/JavaScript) clients.
There's no decent abstractions for an OS. The whole concept of the Urbit machine is that it's one big opaque bundle of bytes. There's no documents. There's no applications. There's no separation of concerns. There's no consideration that a usable system requires lots of different parties (OS makers, application developers, API developers, cloud services, etc) coming together, and there's no sense that managing the complexity of that intersection is something an OS should do.
There's no security. There's no permission model. There's no capability model. There's no firewalls between anything. It's like if you ran Python on bare metal and called it an OS.
That said, I bet someone could do something really cool in this general area using WASM, contained in something that acted like an OS but wasn't much more complicated than an execution container.