Urbit in 2017

  • I appreciate the design notes, but there is a strange dissonance in the concept.

    The text reads: "Urbit has to be just as usable as any widely used app in 2017. For a personal server, the usability bar can't be Unix."

    Just above this, there is a screenshot of a browser displaying the following: "OK, ~ravmel-ropdyl is coming online. Ping 734ms, DNS Waiting, :talk Waiting"

    ...which, well, looks exactly like '70s Unix usability.

    I also find it odd that Urbit wants to conquer the world, yet the design is so attached to entering ASCII sequences on a command line. This severely limits the platform's international usability. Their programming language's syntax page even proclaims "To make ASCII great again, we've mapped each punctuation glyph to a syllable": https://urbit.org/docs/hoon/syntax/#-glyphs-and-characters

    The problem with using all these ASCII punctuation marks is that many of them are hard or even impossible to type on various international keyboards. It doesn't seem like non-English users were ever considered when the decision was made to "make ASCII great again".

    On a more conceptual level, marrying a supposed futuristic redesign of the Internet to a 1960s character set just seems off. Today's computing increasingly happens on touchscreens, but Urbit's I/O model is happy to settle for the ancient paradigms of teletype terminal emulation and ASCII streams.

    The whole thing has a weird retro-futuristic vibe to it, like it's more of an art project about a computer system that the Mad Men would have used to update their websites in some alternate reality.

  • For a toy project of mine, I needed a way to encode small programs to send around. I originally wrote a interpreter for the MIPS instruction set, but then I encountered Urbit's functional machine language, "nock", and switched right over to that. It ended up being a much much simpler interpreter with more compact program encodings and a lot fewer arbitrary-feeling decisions involved. Nock also turns out to be a really straightforward compile target for lisp-like languages. Nock is confusing to approach, but it is really very clever. I would recommend learning it if you are in the mood for a puzzle!

    Nock: https://github.com/cgyarvin/urbit/blob/master/doc/book/1-noc... My project's nock VM: https://github.com/PeterReid/hoplight/tree/master/vm

  • It's a wonderful luxury to craft such a sufficiently vast work of nonsense that no one possessed of sufficient reason to craft an informed critique will ever feel it worthwhile to invest the time to do so...one can putter away indefinitely in such a self-crafted safe space

  • I remain unsure whether Urbit is a real thing or simply an incredibly long-running satire. Their missives do nothing to clarify this point.

  • Reading urbit, I feel like I've stumbled upon some ancient alien artifact, that no one has any idea what its purpose is.

  • ...still no "Urbit for mere mortals guide" or something like this?

    Or even a "how to do X with Urbit" where X could be anything.

    Sorry, but no matter how great the ideas, until they can show an explanation anyone can understand it's all worthless. If you try hard enough you can explain block-chain and bitcoin and ethereum to a poet or painter or politician. Won't be easy, but you'll get somewhere.

    Whereas their:

    > If Bitcoin is money and Ethereum is law, Urbit is land.

    ...makes absolutely no sense whatsover to anyone, despite the plain words used. What's the correspondence, analogy, what abstracts what, what does what?! No place for your mind to even start chewing this. With this you can't even explain Urbit to a mathematician or to a philosopher... let alone to Joe Average or Frank Underwood.

  • Yarvin's having a laugh at all of you.

    Early in the article:

    > What is an app, anyway? It's shared computing. Everyone's data is one data structure, in one program, on one server, owned by one corporation.

    This is a callout to the Nazi slogan Ein Volk, ein Reich, ein Führer: https://en.wikipedia.org/wiki/F%C3%BChrer#Ein_Volk.2C_ein_Re...

    And then the only other time "shared computing" appears in the document:

    > To paraphrase Walter Sobchak: say what you want about the tenets of shared computing, but at least it's an ethos.

    In the movie The Big Lebowski, the protagonists are harassed by by nihilists that the sort-of militantly Jewish Walter initially assumes are Nazis. When it finally gets through to him, he says, stunned, "Say what you want about the tenets of National Socialism, at least it's an ethos."

    Yarvin is a deliberate, meticulous writer who prides himself on his references. This is not a coincidence, this is a white supremacist laughing at programmers not recognizing that he's calling competing software Nazis. Well, I happen to be reading up on Yavin's buddies[0] and I understood that reference[1].

    [0]: https://www.amazon.com/They-Thought-Were-Free-Germans/dp/022... [1]: https://www.youtube.com/watch?v=YIp-0V6YKfQ

    He's laughing at you because he knows the technical and political are inseparable, and the longer you think so the longer he gets to use you.

  • How is this different from many other approaches like Sandstorm, or any other effort to "decentralize the web" by giving people their own servers?

    I'm asking in terms of actual benefit it provides, not the technical part. I think at this point it's pretty clear that these efforts have failed due to lack of traction in that department (not enough people care about "owning their own server" or "controlling their own destiny")

  • A couple thoughts from an early backer who really, really wants Urbit to succeed (and fears it won't):

    1. What is Urbit?

    I'm not involved with it and don't speak for the devs, but this always comes up, so I'll just explain in plain terms what I think Urbit is, or what I hope it will grow up to be. Urbit is the server-app-container thing that would make my non-techy Mom want to pay $5/mo for a hosted server instance.

    Imagine if every man, woman and child had their own server. Nothing fancy, just a cheap ECC instance or DigitalOcean droplet or something. What would they do with them? Well, host a webserver I suppose, maybe a mail server, maybe a Minecraft server, stuff like that, right? But, these would have to be accessible to non-sysadmin types, so all of these server applications would have to be easy-as-an-iphone to set up and administer. Right now, such apps don't exist, because there's no market for them. But if the market were there, millions of people with hosted servers just sitting around, you can imagine how quickly they'd get made.

    What about a social media? At a high level, every social media app is essentially the same app - they let you upload a file to the cloud and they let your friends access it and they show you ads. The differences between Twitter and FB and Instagram and Snapchat are nothing more than differences in how those three features are implemented. So why do they all use the cloud? Because there aren't a million people with server space just sitting around on which to host their IG pictures and FB arguments and Twitter profundities. But if there were, a good self-hosted social media app would make a lot of sense to build.

    Urbit is intended to shortcut this chicken-and-egg problem by making a container in which it is easy to build those things. My Mom can afford a hosted server, but she has nothing to run there. If there were great things to run there, like a Facebook with no ads and a webserver with no hassles, she might rent one. Urbit is intended to be the thing in which those great apps are easy to build.

    2. Why I want it

    Those are all abstract reasons why something like urbit might succeed. As we all know, the mark of a good startup is not whether you can explain why it might succeed, it's whether there are users who want to use it right now. Well, I do want to use it, but it's hard to explain why. I'll take a stab at it.

    If you're over 40, you may remember getting your first shell account. Wasn't that the shit? You want to host some files for colleagues? Just make a directory, chmod it to world-readable. You want to run a web server? Go ahead, and don't worry about security, the only people that can see this are inside your college/company. Want to see what Bill Smith is up to? finger bsmith. Want to argue about politics? talk.politics. God, how simple things were! Playing with Urbit feels like those days to me. It makes a handful of things, like identifying users and sharing files between them, trivial. You could probably write a Twitter clone in less than 1K LOC.

    Or at least you could, if Urbit does everything it says it does. That's a big if. Which brings me to...

    3. Isn't it really weird and fucked up?

    Yes. Oh yes. It is incredibly eclectic, the fevered result of an insane genius toiling away in obscurity on his dream project when he wasn't busy writing interminable political screeds. It is an attempt to combine a bunch of things (a ground-up OS, two new languages, and a novel networking architecture) that might be too much for such a small team. The Hoon language is weirder than you've heard. Some people swear it's great once you get used to it, but the docs are sparse and I haven't invested the effort. And if you do invest the effort, it could well be that it has non-obvious architectural flaws that will doom it to be a buggy mess for all eternity. And on top of that, the founder is primarily known for political rantings that are... well, not racist per se, but close enough to get Urbit boycotted by the sorts of people who boycott obscure open source projects due to things in the founder's blog.

    But if it fails, I really hope someone builds something less weird that accomplishes the same thing, because at the end of the day, I want it. I want a cheapo server with a cheapo self-hosted Twitter clone and a cheapo self-hosted FB clone, and I want to share pictures of my kids with my Mom without running them through some enormous corporation's billion-dollar machine-learning advertising algorithm, and I want to host my own website and server apps without taking on "sysadmin" as a night job. And it seems like, right now, Urbit is the fastest way from here to there.

  • Someday I hope to understand what urbit actually is :-)

  • Is the idea behind urbit that you have one place that stores all your data and then you can use different services to access and use that data in whatever way they want?

  • Why did they go with 32 bit addresses for planets? Seems short sighted given the woes of the ipv4 -> ipv6 transition.

  • For those using Nock and seeking an alternative take on Urbit check out this open source project https://github.com/tibru/tibru A few willing devs could take this forward with open libertarian ideals. There is nothing special about Nock and Urbit technically or mathematically.

  • I find Urbit very confusing. It uses a bespoke virtual machine for a bespoke programming language, uses a bespoke approach to optimisation, uses another bespoke programming language which compiles down to the first, has a bespoke OS written in that second language, connects these OSes into a bespoke p2p network, all in order to.... what?

    Their go-to example seems to be social networking with an interface to Twitter??

    I absolutely get the 'own your data/compute' idea.

    I think a bespoke OS is a decent approach, as it removes a lot of legacy complexity and allows a few carefully-chosen, simple, unified approaches to things like I/O and addressing.

    I like the use of a functional language, as it's an extreme form of isolation/sandboxing/reproducibility which makes sense in an untrusted online world. I don't see why a new language was invented though, when something like a subset of Scheme, Joy, plain lambda calculus, etc. would suffice.

    I have absolutely no idea why they've invented a custom p2p network/addressing system. I chalk this up to huris, along with their spiel about ASCII punctuation, etc.

    I have absolutely no idea how this has anything to do with social media. I assume it's just for buzzword value. I don't use social media, but I imagine programming language theory isn't its main appeal?

    Even if we assume that all of Urbit's ideas pan out: interacting with Twitter seems to completely undermine all of it!

    - Twitter is centralised, whilst the point of Urbit's network is decentralisation.

    - No matter how much elaborate language machinery you build, there's very little you can actually do with Twitter, since they keep their database secret.

    - Despite all of the sandboxing, reproducibility, etc. Twitter will not execute any code that you try to send them. The only operations which can be performed are chosen by them, and exposed as API endpoints.

    - Doing anything with Twitter throws purity out of the window, since they only interact via I/O requests.

    - No amount of fanciness in OS interfaces or language semantics can do anything to prevent Twitter modifying/deleting/overwriting/etc. any of their data at any time, without any notification to anyone; hence there are very few guarantees that the OS or language can actually provide about such values (e.g. there's no referential transparency, no way to know if a cache is invalid, no way to know if someone else will receive the same data you did, etc.).

    - Whatever the resulting API looks like, it will be a constant source of incompatibility and churn, since Twitter are free to modify their API at any time. If some operation gets dropped, any applications which rely on it may break irreparably.

    I get that the Twitter example seems to be along the lines of a minimum viable product, but it seems like a bad choice considering that it can't really make use of any of Urbit's features. It could be implemented as a big string of Javascript, with Urbit only being used to get it into the browser; the result would be about as integrated as any other approach.

    A more relevant example might be a multiplayer game with a shared leaderboard, player chat and non-critical use of external APIs (e.g. gravatar for player pics), e.g. a clone of Words With Friends or maybe something with more animation.

    The game itself would be a decent test of the programming languages, rather than just shuttling strings in/out of Twitter. The interactivity and chat would test the latency. The leaderboard would test shared access to data. Using external APIs would test the data-shuttling, in a way that doesn't much affect the application if the provider shuts down the API.

  • Needs a GUI to be useful for any non-enthusiast users. Does urbit need any non-enthusiast users at this point, though?

  • An interesting idea confounded by inexplicably strange design choices, and the regressive, odious politics of its creator.

    Would love to see a similar idea done by a different team.