Hacker News new | ask | show | jobs
by jcrites 3664 days ago
I don't disagree with your criticism. I read through the Urbut whitepaper [1] a while ago, and there's some meat and novel ideas there. As far as a concise description, here's my attempt, followed by some content from the whitepaper.

The key idea that distinguishes Urbit is its focus on deterministic computing. Urbit is a computing environment, like a virtual machine, with the distinction that the entire computational result is designed to be a deterministic function of the inputs. The inputs are represented as a sort of transactional log-structured file system, where computation is a pure function of the input events. They have provisions for multiple computers interacting over a network while handling inputs in that way.

They implement a sort of combinator-based assembly language and virtual machine, a higher level language on top, and then an OS on top of that. Their virtual machine runs on a regular computer, but in theory you could run an Urbit VM on any machine and observe the same computational result. This is not a trivial problem to solve for an entire OS and network! They invented some interesting optimization techniques ("jets") and networking concepts to make it feasible. As an analogy (this is a stretch): it's like Plan9, except purely functional and deterministic.

> Urbit is a new clean-slate system software stack. A nonpreemptive OS (Arvo), written in a strict, typed functional language (Hoon) which compiles itself to a combinator VM (Nock), drives an encrypted packet network (Ames) and defines a global version-control system (Clay). Including basic apps, the whole stack is about 30,000 lines of Hoon. Urbit is a “solid-state interpreter”: an interpreter with no transient state. The interpreter is an ACID database; an event is a transaction in a log-checkpoint system.

Their goal is to make hosting this virtual machine easy enough to do that anyone could, while (if I recall correctly) decoupling it from the underlying physical machine it's running on, such that it could run anywhere you want it to. Then they speculate that, if many people hosted their own, then people would be less reliant on cloud services, or at least could fully trust computational results from the cloud.

The ideas are unfortunately cumbersome to follow once the whitepaper and other technical content reach the point where they explain things with made-up, Urbit-specific terminology [2]. The authors explain their rationale for their choice to do this (IIRC, their reasoning was that they need to name so many new concepts that it's better just to assign random words like codenames - something like that). I feel ambivalent about this, but I will respectfully mention that the choice to do this might make more sense from the perspective of someone who lives and breathes Urbit every day. From the perspective of a beginner, it's a turn-off; I find it grating and it doesn't work for me. Haskell and Rust have terms to introduce, but their material doesn't leave me feeling bamboozled.

If an alien species had invented computing, what might it look like? I think Urbit is a credible answer to that question. I'm joking, but only partially: from the perspective of "throw out everything and start over from scratch to see what modern computing would be like", Urbit seems like it may be a sincere attempt. At one point in the past, the ideas appeared to be deliberately obfuscated, like performance art or like Brainfuck. They've subsequently made efforts to explain the ideas and build things up from basic concepts, and I think the authors are sincere, but don't hold me to that. In conclusion, I think it's technically neat, but I think it'd be a lot neater if it were documented and presented within a grounding of typical CS and software terminology/concepts. Or if they can't give up the custom terminology, I'd want to see ~10X more material (per unit concept) introducing and clarifying the ideas slowly from the ground up. If they're inventing their own alien computer science, then they need to write the alien "C Programming Language" (K&R) and alien "Structure and Interpretation of Computer Programs" [3].

[1] http://media.urbit.org/whitepaper.pdf

[2] https://urbit.org/docs/hoon/advanced/ and prev discussion: https://news.ycombinator.com/item?id=10435757

[3] https://mitpress.mit.edu/sicp/full-text/book/book.html

3 comments

I don't see how a clean-slate approach brings them closer to their goal of "make hosting this virtual machine easy enough to do that anyone could".

Decentralized "cloud" computing is a necessity and I commend them for their efforts but this seems like a case of NIH syndrome if I ever saw one.

There's an alternative purely functional distributed virtual machine out there?
It might not be easy in terms of connecting it to your existing knowledge, but it could be easy in terms of learning it for the first time. Beginner's mind.
> while (if I recall correctly) decoupling it from the underlying physical machine it's running on

> Urbit is a new clean-slate, full-stack server. It's implemented on top of the old platform, but it's a sealed sandbox like the browser.[0]

It appears that you do indeed recall directly.

Also, thank you. The two quotes from your comment, plus your sentence following, do describe it in a nice single paragraph. Granted, I do have to research most of the technologies in the stack, admittedly.

[0] https://urbit.org/#learn

Sounds like an interesting approach.

I hope they integrate a proper capabilities framework too, ideally one with cryptographic credentials that allows for reasonable assurances in distributed systems. Stuff like being able to provide a cryptographic guarantee of who have access to what data.