@@ -1,128 +1,128 @@
2−sort: 9
2+title = "Common Objections to Urbit"
3−type: post
3+date = "2016-06-27"
4−title: Common objections to Urbit
4+description = "Some common objections to Urbit, discussed."
6+ "/posts/essays/common-objections-to-urbit",
7+ "/posts/common-objections-to-urbit",
5−author: Curtis Yarvin
12+author = "Curtis Yarvin"
6−preview: Some common objections to Urbit, discussed.
13+ship = "~sorreg-namtyv"
7−image: http://media.urbit.org/site/blog-9.jpg
14+image = "https://storage.googleapis.com/media.urbit.org/site/posts/essays/common-objections-to-urbit-1.jpg"
8−layout: urbit,post
15++++
10−comments: true
17+
19−We're strong believers in crowdsourced criticism. We've heard a
19+We love crowdsourced criticism. We've heard a lot of great
20−lot of great criticisms of Urbit. Surely there's more out there!
20+objections to Urbit. Surely there's more out there! We'll
21−Comments are open at the bottom of the page.
21+revise this document to include anything new and interesting.
23Here's our list right now:
23Here's our list right now:
25- [Urbit is not ready for prime time.](#prime)
25- [Urbit is not ready for prime time.](#prime)
26- [Nock jets are a total hoax.](#jets)
26- [Nock jets are a total hoax.](#jets)
27- [Urbit needs an infinitely extending packet/event log.](#log)
27- [Urbit needs an infinitely extending packet/event log.](#log)
28−- [Urbit is a total scamcoin. It's 100% premined.](#scam)
28+- [Urbit is a total scamcoin. It's 100% premined.](#scam)
29−- [Urbit isn't even really decentralized! It has a government!](#gov)
29+- [Urbit isn't even really decentralized! It has a government!](#gov)
30+- [Sandstorm/IPFS/Ethereum is way ahead of Urbit.](#sand)
30- [Urbit doesn't have enough planets for every human being.](#planet)
31- [Urbit doesn't have enough planets for every human being.](#planet)
31- [Cloud computing is inherently non-private.](#pwned)
32- [Cloud computing is inherently non-private.](#pwned)
32- [Urbit will never be able to call any existing code.](#code)
33- [Urbit will never be able to call any existing code.](#code)
33−- [Hoon is too weird. No one will be able to program in it.](#program)
34+- [Hoon is too weird. No one will be able to program in it.](#program)
34- [Urbit programmers are stuck with Hoon.](#stuck)
35- [Urbit programmers are stuck with Hoon.](#stuck)
35- [Ordinary users will never be able to manage an Urbit server.](#user)
36- [Ordinary users will never be able to manage an Urbit server.](#user)
36- [Urbit has no killer app.](#killer)
37- [Urbit has no killer app.](#killer)
37−- [Urbit is a reactionary digital dictatorship.](#dictator)
38- [Urbit is sniffed at by Houyhnhyms.](#horse)
38- [Urbit is sniffed at by Houyhnhyms.](#horse)
40−*"We choose to go to the moon, not because it is easy, but because it is hard."*
40+_"We choose to go to the moon, not because it is easy, but because it is hard."_
41−— John F. Kennedy
41+— [John F. Kennedy](https://www.youtube.com/watch?v=g25G1M4EXrQ)
43−<h2 id="prime">Urbit is not ready for prime time.</h2>
43+## Urbit is not ready for prime time. {% #prime %}
45−**TLDR**: we agree.
45+_TLDR_: we agree.
47−Urbit right now is a fun toy. It is fun to learn Hoon. It is
47+Urbit right now is a fun toy. It is fun to learn Hoon. It is
48even fun and quite practical to make actual contributions.
48even fun and quite practical to make actual contributions.
49(Hoon's IEEE floating-point was written by someone we've never
49(Hoon's IEEE floating-point was written by someone we've never
50−met: `~nym`, formerly `~nodpet-rinned`.) In fact, we have never
50+met: `~nym`, formerly `~nodpet-rinned`.) In fact, we have never
51−seen anyone *not* have fun with Urbit.
51+seen anyone _not_ have fun with Urbit.
53−But there is all kinds of stuff wrong with the codebase. Urbit's
53+But there is all kinds of stuff wrong with the codebase. Urbit's
54documentation is much improved, but remains incredibly weak --
54documentation is much improved, but remains incredibly weak --
55−Arvo is almost totally undocumented. Scaling is poor at best.
55+Arvo is almost totally undocumented. Scaling is poor at best.
56−Urbit's reliability is dubious. Its security is nil.
56+Urbit's reliability is dubious. Its security is nil.
58−Urbit is feature-frozen. The only thing we're working on now,
58+Urbit is feature-frozen. The only thing we're working on now,
59and for the rest of 2016, is doc, debugging and and self-hosting.
59and for the rest of 2016, is doc, debugging and and self-hosting.
60In that order of importance -- teaching Urbit is more important
60In that order of importance -- teaching Urbit is more important
61than fixing it, which is more important than making it useful.
61than fixing it, which is more important than making it useful.
62But we're quite confident that these are all solvable problems.
62But we're quite confident that these are all solvable problems.
64The most important milestone about Urbit today is that it's ready
64The most important milestone about Urbit today is that it's ready
65−for technical decisions to be made collectively. A system like
65+for technical decisions to be made collectively. A system like
66−Urbit can only be invented by a mad auteur. It can't be
66+Urbit can only be invented by a mad auteur. It can't be
67−maintained or stabilized by a mad auteur. Our primary goal today
67+maintained or stabilized by a mad auteur. Our primary goal today
68is expanding the number of people who understand Urbit, and we
68is expanding the number of people who understand Urbit, and we
69expect these pioneers to participate in technical governance.
69expect these pioneers to participate in technical governance.
71−<h2 id="jets">Nock jets are a total hoax.</h2>
71+## Nock jets are a total hoax. {% #jets %}
73−**TLDR**: all of computing is a hoax. You can't compare a hoax
73+_TLDR_: all of computing is a hoax. You can't compare a hoax
74−to nothing. You can only compare it to all the other hoaxes.
74+to nothing. You can only compare it to all the other hoaxes.
76−A "jet" is a sort of software device driver in Urbit. Urbit is
76+A "jet" is a sort of software device driver in Urbit. Urbit is
77precisely defined in terms of an interpreter that fits on a
77precisely defined in terms of an interpreter that fits on a
78−T-shirt, Nock. But a naive implementation of Nock is nowhere
78+T-shirt, Nock. But a naive implementation of Nock is nowhere
79near practical, because Nock has only one integer operation:
79near practical, because Nock has only one integer operation:
80−increment. For example, to decrement a number in Nock, you
80+increment. For example, to decrement a number in Nock, you
81increment a counter up to the number under it.
81increment a counter up to the number under it.
83The only way an efficient Nock interpreter can work is to
83The only way an efficient Nock interpreter can work is to
84recognize algorithms like decrement, and implement them
84recognize algorithms like decrement, and implement them
85−non-naively. By far the easiest way to do this is not to analyze
85+non-naively. By far the easiest way to do this is not to analyze
86arbitrary code as it's being executed, but to register and match
86arbitrary code as it's being executed, but to register and match
87−well-known implementations in the standard library. No one
87+well-known implementations in the standard library. No one
88should be writing their own decrement.
88should be writing their own decrement.
90−But the semantics of the interpreter, *so long as the jet and the
90+But the semantics of the interpreter, _so long as the jet and the
91−jet harness are defined correctly*, are exactly those of Nock.
91+jet harness are defined correctly_, are exactly those of Nock.
92−We are not extending or changing Nock in any way. We are just
92+We are not extending or changing Nock in any way. We are just
93taking a shortcut in certain cases we understand perfectly.
93taking a shortcut in certain cases we understand perfectly.
95It's not at all unprecedented to have implementations much more
95It's not at all unprecedented to have implementations much more
96−complex than the corresponding specification. The x86
96+complex than the corresponding specification. The x86
97instruction set is relatively simple; the complexity of its
97instruction set is relatively simple; the complexity of its
98−decoding and execution path in a modern CPU is enormous. This
98+decoding and execution path in a modern CPU is enormous. This
99path may well have "peephole optimizations" that replace matched
99path may well have "peephole optimizations" that replace matched
100−algorithms, and if it doesn't the modern compiler does. People,
100+algorithms, and if it doesn't the modern compiler does. People,
101−*bad* people, use "jets" to cheat on benchmarks all the time.
101+_bad_ people, use "jets" to cheat on benchmarks all the time.
103−Nock is designed as a standard. It's built like a standard.
103+Nock is designed as a standard. It's built like a standard.
104Typically what causes real problems in standards is ambiguity.
104Typically what causes real problems in standards is ambiguity.
105Two implementations are incompatible, but each swears it has the
105Two implementations are incompatible, but each swears it has the
106−right interpretation of the natural-language spec. This simply
106+right interpretation of the natural-language spec. This simply
107−cannot happen in the Nock world. If two implementations
107+cannot happen in the Nock world. If two implementations
108−disagree, at least one of them is incorrect. This puts us firmly
108+disagree, at least one of them is incorrect. This puts us firmly
109in "with enough eyeballs, all bugs are shallow" territory.
109in "with enough eyeballs, all bugs are shallow" territory.
111The fact remains, however, that a Nock interpreter without jets
111The fact remains, however, that a Nock interpreter without jets
112−is completely useless. And there is not even an informal
112+is completely useless. And there is not even an informal
113document that tells you what jets you need for a reasonably
113document that tells you what jets you need for a reasonably
114−efficient Urbit. (There should be such a document.)
114+efficient Urbit. (There should be such a document.)
116The correct way to think about jets is not to compare them to a
116The correct way to think about jets is not to compare them to a
117−perfect interpreter created by unicorns. Jets are a combined
117+perfect interpreter created by unicorns. Jets are a combined
118replacement for two other techniques in language implementation:
118replacement for two other techniques in language implementation:
119intrinsics and a foreign-function interface.
119intrinsics and a foreign-function interface.
121Compared to both intrinsics and an FFI, your jets have one key
121Compared to both intrinsics and an FFI, your jets have one key
122−disadvantage: they need to be specified in pure code. You may
122+disadvantage: they need to be specified in pure code. You may
123not have this executable specification, which means you need to
123not have this executable specification, which means you need to
124−write it. Is this really so bad for your development process?
124+write it. Is this really so bad for your development process?
125−An executable specification? Which can be trivially tested
125+An executable specification? Which can be trivially tested
126against the efficient implementation?
126against the efficient implementation?
128Compared to intrinsics, jets give you true separation between
128Compared to intrinsics, jets give you true separation between
@@ -130,7 +130,7 @@ mechanism and policy; only the interpreter, not the programmer
130and not the compiler, needs to know what's accelerated.
130and not the compiler, needs to know what's accelerated.
132Compared to an FFI, jets preclude I/O, so can be trivially
132Compared to an FFI, jets preclude I/O, so can be trivially
133−sandboxed. Except that the programmer needs to mark routines
133+sandboxed. Except that the programmer needs to mark routines
134which may benefit from optimization with a hint, here too we
134which may benefit from optimization with a hint, here too we
135separate mechanism (efficient implementation) from policy.
135separate mechanism (efficient implementation) from policy.
@@ -138,43 +138,41 @@ Yes, formal verification of jet equivalence is desirable.
138However, in the real world, many specifications, including quite
138However, in the real world, many specifications, including quite
139complex ones, are tested into equivalence by brute force.
139complex ones, are tested into equivalence by brute force.
141−Urbit has some jet abuses. The equivalence between our markdown
141+Urbit has some jet abuses. The equivalence between our markdown
142−parser in Hoon and the CommonMark C library is super dubious. It
142+parser in Hoon and the CommonMark C library is super dubious. It
143−should be taken out and shot.
143+should be revisited.
145But the miscomputation resulting from a minor jet discrepancy is
145But the miscomputation resulting from a minor jet discrepancy is
146−not a security hole or even fatal. It effectively means the
146+not a security hole or even fatal. It effectively means the
147event history, computed correctly, does not match the current
147event history, computed correctly, does not match the current
148−state. The way to resolve this conflict is for the current state
148+state. The way to resolve this conflict is for the current state
149to win, and the event history to be discarded -- not abnormal
149to win, and the event history to be discarded -- not abnormal
150−anyway. See the next question.
150+anyway. See the next question.
152−<h2 id="log">Urbit needs an infinitely extending packet/event
152+## Urbit needs an infinitely extending packet/event. {% #log %}
155−**TLDR**: no, it doesn't. Urbit can prune the log.
154+_TLDR_: no, it doesn't. Urbit can prune the log.
157We can prune the event log because the Urbit transition function
156We can prune the event log because the Urbit transition function
158doesn't have any access to the event history -- just the current
157doesn't have any access to the event history -- just the current
159state and the current event.
158state and the current event.
161−Urbit defines the semantics of a complete event log. It doesn't
160+Urbit defines the semantics of a complete event log. It doesn't
162and can't require an implementation to maintain the whole log.
161and can't require an implementation to maintain the whole log.
163It can maintain a checkpoint and the log since that checkpoint.
162It can maintain a checkpoint and the log since that checkpoint.
164−The current implementation of Urbit maintains
166However, any practical urbit maintains a periodically updated
164However, any practical urbit maintains a periodically updated
167−checkpoint. Our present implementation doesn't provide a way to
165+checkpoint. Our present implementation doesn't provide a way to
168−prune the event log. But that's just a missing feature. We have
166+prune the event log. But that's just a missing feature. We have
169one or two of those!
167one or two of those!
171−<h2 id="scam">Urbit is a total scamcoin. It's 100% premined</h2>
169+## Urbit is a total scamcoin. It's 100% premined. {% #scam %}
173−**TLDR**: yeah. But at least it's not the DAO.
171+_TLDR_: yeah. But at least it's not the DAO.
175−Like a cryptocurrency, Urbit is a digital title. But Urbit is
173+Like a cryptocurrency, Urbit is a digital title. But Urbit is
176−digital land, not digital money. If you assess it as a currency,
174+digital land, not digital money. If you assess it as a currency,
177−it's a lousy currency. If you assess a cat as a dog, it's a
175+it's a lousy currency. If you assess a cat as a dog, it's a
178lousy dog.
176lousy dog.
180In real-world economics, the crucial distinction between land and
178In real-world economics, the crucial distinction between land and
@@ -182,25 +180,25 @@ money is that land (a) has intrinsic utility and (b) is
182non-fungible.
180non-fungible.
184Because of (b) alone, frictionless transactions in land are
182Because of (b) alone, frictionless transactions in land are
185−impossible. A blockchain is only needed to ensure zero-cost
183+impossible. A blockchain is only needed to ensure zero-cost
186−high-frequency transactions. So digital land doesn't need a
184+high-frequency transactions. So digital land doesn't need a
187−blockchain. Which means it doesn't need mining.
185+blockchain. Which means it doesn't need mining.
189Of course, just because a digital title system doesn't need
187Of course, just because a digital title system doesn't need
190mining, doesn't mean it can't distribute an initial allocation by
188mining, doesn't mean it can't distribute an initial allocation by
191proof-of-work -- or by any other arbitrary method which is
189proof-of-work -- or by any other arbitrary method which is
192−careful not to benefit the system's own developers. Could we
190+careful not to benefit the system's own developers. Could we
193−give away the Urbit address space randomly? Sure. But why?
191+give away the Urbit address space randomly? Sure. But why?
195Probably the purest design is the "proof-of-burn" initial
193Probably the purest design is the "proof-of-burn" initial
196−allocation used by some coins. By any standard, proof-of-burn is
194+allocation used by some coins. By any standard, proof-of-burn is
197technically beautiful and results in an extraordinary level of
195technically beautiful and results in an extraordinary level of
198−ethical independence. We can't help but admire it.
196+ethical independence. We can't help but admire it.
200−But any altcoin or metacoin is just way less work than Urbit. An
198+But any altcoin or metacoin is just way less work than Urbit. An
201altcoin can afford to burn even its creation energy, capturing no
199altcoin can afford to burn even its creation energy, capturing no
202−value at all from its seigniorage. Your altcoin doesn't have a
200+value at all from its seigniorage. Your altcoin doesn't have a
203−clean-slate system software stack to drive. If your rocket has
201+clean-slate system software stack to drive. If your rocket has
204to go to the moon, it's going to leave a little bit of smoke in
202to go to the moon, it's going to leave a little bit of smoke in
@@ -209,80 +207,78 @@ of the currency are rewarded disproportionately for their effort.
209The scamcoin is a get-rich-quick scheme, vaguely pyramid-shaped.
207The scamcoin is a get-rich-quick scheme, vaguely pyramid-shaped.
210Nothing about Urbit matches this pattern at all.
208Nothing about Urbit matches this pattern at all.
212−Curtis invented Urbit. So by the [homestead
210+Curtis invented Urbit. So by the [homestead
213principle](https://en.wikipedia.org/wiki/Homestead_principle), he
211principle](https://en.wikipedia.org/wiki/Homestead_principle), he
214−started out owning all of it. But by now, Urbit's 8-bit galaxies
212+started out owning all of it. But by now, Urbit's 8-bit galaxies
215−have already been distributed among [57 separate individuals]().
213+have already been distributed among [57 separate individuals](https://github.com/urbit/arvo/blob/master/sys/vane/ames.hoon#L118-L373).
216−Curtis owns 4 -- or 24, counting his whole family. (Some of whom
214+Curtis owns 20, or about 8%.
217−he still owes money.)
219Tlon, the corporation which still runs Urbit development, has 95.
216Tlon, the corporation which still runs Urbit development, has 95.
220−(Without Tlon, there is basically no Arvo.) 50 are reserved for
217+(Without Tlon, there is basically no Arvo.) 50 are reserved for
221−a hypothetical Urbit Foundation. Tlon employees have another 16.
218+a hypothetical Urbit Foundation. Tlon employees have another 16.
223The rest of the galaxies belong to donors, investors,
220The rest of the galaxies belong to donors, investors,
224contributors, contest winners, and just random people who were in
221contributors, contest winners, and just random people who were in
225−the right place at the right time. One is a Silicon Valley
222+the right place at the right time. One is a Silicon Valley
226−tycoon. Another is an Orthodox nun in a monastery in Greece. A
223+tycoon. Another is an Orthodox nun in a monastery in Greece. A
227−couple are ex-Tlon employees who might totally hate us. There is
224+couple are ex-Tlon employees who might totally hate us. There is
228nothing they all have in common, which is sort of the point.
225nothing they all have in common, which is sort of the point.
230This property distribution looks a lot like land ownership in the
227This property distribution looks a lot like land ownership in the
231−real world -- complex and asymmetrical. That's no accident. If
228+real world -- complex and asymmetrical. That's no accident. If
232you have a problem living in New York because New York's real
229you have a problem living in New York because New York's real
233estate is not distributed equally among its residents, you may
230estate is not distributed equally among its residents, you may
234−have a similar problem with Urbit. The reality is that Urbit,
231+have a similar problem with Urbit. The reality is that Urbit,
235like New York, wasn't born yesterday and comes with a complex
232like New York, wasn't born yesterday and comes with a complex
236ownership history which we couldn't possibly change, even if we
233ownership history which we couldn't possibly change, even if we
237wanted to.
234wanted to.
239−Decentralization is hard. The only real goal of a property
236+Decentralization is hard. The only real goal of a property
240system in address space is to create and maintain
237system in address space is to create and maintain
241−decentralization. The whole network has to exhibit centrifugal
238+decentralization. The whole network has to exhibit centrifugal
242−force, not centripetal force. Proof-of-work systems certainly
239+force, not centripetal force. Proof-of-work systems certainly
243seem to have unexpected centripetal qualities, producing
240seem to have unexpected centripetal qualities, producing
244−unanticipated concentrations of centralized hashpower. See the
241+unanticipated concentrations of centralized hashpower. See the
245next objection.
242next objection.
247−<h2 id="gov">Urbit isn't even really decentralized! It has a
244+## Urbit isn't even really decentralized! It has a government! {% #gov %}
250−**TLDR**: it's technically impossible for Urbit to be
246+_TLDR_: it's technically impossible for Urbit to be
251−decentralized at this stage of its life. Urbit is designed to
247+decentralized at this stage of its life. Urbit is designed to
252achieve decentralization, not be born with it.
248achieve decentralization, not be born with it.
254−A young network can't afford to be decentralized. It has to act
250+A young network can't afford to be decentralized. It has to act
255−as a unit. Because it has no network effect, it needs every
251+as a unit. Because it has no network effect, it needs every
256−scrap of efficiency it can get.
252+scrap of efficiency it can get.
258A decentralized general-purpose computing network like Urbit can
254A decentralized general-purpose computing network like Urbit can
259−*only* be bootstrapped by a central government. For example, by
255+_only_ be bootstrapped by a central government. For example, by
260default your urbit upgrades its OS automatically (like an
256default your urbit upgrades its OS automatically (like an
261−"evergreen" browser) with signed network updates. Whoever signs
257+"evergreen" browser) with signed network updates. Whoever signs
262these updates is a government by definition.
258these updates is a government by definition.
264When it's impossible to eliminate centralized power, it becomes
260When it's impossible to eliminate centralized power, it becomes
265−necessary to tame, stabilize, and limit it. This should not be
261+necessary to tame, stabilize, and limit it. This should not be
266surprising to anyone living under a constitutional government.
262surprising to anyone living under a constitutional government.
268As we found out with the DAO, if a network isn't ready to be
264As we found out with the DAO, if a network isn't ready to be
269−decentralized, its developers shouldn't even try. If Ethereum is
265+decentralized, its developers shouldn't even try. If Ethereum is
270hard-forked to roll back the DAO (which looks like the most
266hard-forked to roll back the DAO (which looks like the most
271probable result), it acknowledges that it both has a central
267probable result), it acknowledges that it both has a central
272−government, and needs a central government. Decentralization is
268+government, and needs a central government. Decentralization is
273−good. Pretend decentralization -- "decentralization theater" --
269+good. Pretend decentralization -- "decentralization theater" --
274is harmful, and not a effective path to actual decentralization.
270is harmful, and not a effective path to actual decentralization.
276A key test of a free software project's health is whether it can
272A key test of a free software project's health is whether it can
277−fork. So long as the unity of the public-key hierarchy and the
273+fork. So long as the unity of the public-key hierarchy and the
278network protocol is maintained, the Arvo kernel and Urbit system
274network protocol is maintained, the Arvo kernel and Urbit system
279can fork in all kinds of ways without disrupting the network.
275can fork in all kinds of ways without disrupting the network.
280Any stress will fragment the "government" that develops the
276Any stress will fragment the "government" that develops the
281−kernel, and as it fragments it grows more limited and stable.
277+kernel, and as it fragments it grows more limited and stable.
283Urbit is designed to govern itself collectively by address space
279Urbit is designed to govern itself collectively by address space
284−ownership -- effectively, "proof of stake." Any arbitrary power,
280+ownership -- effectively, "proof of stake." Any arbitrary power,
285−will tend to fracture along these property lines. For instance,
281+will tend to fracture along these property lines. For instance,
286our hot updates are sent through the galaxy hierarchy; in a
282our hot updates are sent through the galaxy hierarchy; in a
287development fork, active galaxies would pick upstream sources.
283development fork, active galaxies would pick upstream sources.
288Two implementations of a standard are better than one.
284Two implementations of a standard are better than one.
@@ -292,72 +288,70 @@ we've created a global property map which is much more likely to
292splinter further, than reunite.
288splinter further, than reunite.
294In the long run, every galaxy should have a separate owner, who
290In the long run, every galaxy should have a separate owner, who
295−is a human being rather than a corporation. Combining galaxy
291+is a human being rather than a corporation. Combining galaxy
296−holdings will damage the reputation of both galaxies. The only
292+holdings will damage the reputation of both galaxies. The only
297reason to merge ownership is to move toward incipient monopoly.
293reason to merge ownership is to move toward incipient monopoly.
298Whether a galaxy admits this openly or denies it dishonestly, its
294Whether a galaxy admits this openly or denies it dishonestly, its
299reputation will suffer.
295reputation will suffer.
301−The technical goal of Urbit is to create a network which, *if it
297+The technical goal of Urbit is to create a network which, _if it
302−actually takes over the world*, inevitably becomes decentralized.
298+actually takes over the world_, inevitably becomes decentralized.
303Even if Urbit takes over the world, no individual or coherent
299Even if Urbit takes over the world, no individual or coherent
304−organization takes over the world. There is nothing even close
300+organization takes over the world. There is nothing even close
305to a single point of failure in a mature, successful Urbit.
301to a single point of failure in a mature, successful Urbit.
307−This is the goal of all the new "web3" decentralized systems. If
303+This is the goal of all the new "web3" decentralized systems. If
308IPFS, Sandstorm or Ethereum takes over the world, nobody takes
304IPFS, Sandstorm or Ethereum takes over the world, nobody takes
309−over the world. (The same is almost true of the Internet --
305+over the world. (The same is almost true of the Internet --
310though it wouldn't be that surprising if a time traveler from
306though it wouldn't be that surprising if a time traveler from
3112116 revealed that ICANN had become a planetary government.)
3072116 revealed that ICANN had become a planetary government.)
313Urbit, by starting out as a centralized network, just reduces the
309Urbit, by starting out as a centralized network, just reduces the
314−technical problem to match the actual goal. Only long-term
310+technical problem to match the actual goal. Only long-term
315decentralization matters.
311decentralization matters.
317It's very important that Urbit in 2116 be fully decentralized.
313It's very important that Urbit in 2116 be fully decentralized.
318For Urbit in 2016, pretending to be decentralized would be a joke
314For Urbit in 2016, pretending to be decentralized would be a joke
319−at best, and a hoax at worst. And of course, no one can DAO us
315+at best, and a hoax at worst. And of course, no one can DAO us
320-- since the property system is still just a central registry.
316-- since the property system is still just a central registry.
321−Among other things, we check it into Github. Github is not a
317+Among other things, we check it into GitHub. GitHub is not a
322blockchain -- but still, good luck with that.
318blockchain -- but still, good luck with that.
324−[{Sandstorm, IPFS, Ethereum, ...} is way ahead of Urbit.](#sand)
320+## Sandstorm/IPFS/Ethereum is way ahead of Urbit. {% #sand %}
325−<h2 id="sand">{Sandstorm, IPFS, Ethereum, ...} is way ahead of
328In general, web3 (next distributed web) solutions don't compete
322In general, web3 (next distributed web) solutions don't compete
329−with each other. They support each other. Concretely, they are
323+with each other. They support each other. Concretely, they are
330all part of each others' network effect.
324all part of each others' network effect.
332IPFS, Sandstorm, Ethereum, and Urbit can all take over the world
326IPFS, Sandstorm, Ethereum, and Urbit can all take over the world
333−at the same time. None of them competes with the others. They
327+at the same time. None of them competes with the others. They
334−enable each other.
328+enable each other.
336For instance, IPFS and Urbit are both global immutable
330For instance, IPFS and Urbit are both global immutable
337−namespaces. IPFS is a chord-routed, content-addressed namespace.
331+namespaces. IPFS is a chord-routed, content-addressed namespace.
338−Urbit is a direct-routed, identity-addressed namespace. Urbit is
332+Urbit is a direct-routed, identity-addressed namespace. Urbit is
339−a typed revision-control system; IPFS is a blob store. IPFS
333+a typed revision-control system; IPFS is a blob store. IPFS
340isn't a computer; the work hasn't been done, but Urbit can easily
334isn't a computer; the work hasn't been done, but Urbit can easily
341mount the IPFS namespace and compute functionally against it.
335mount the IPFS namespace and compute functionally against it.
343So the better IPFS does, the less Urbit needs to struggle against
337So the better IPFS does, the less Urbit needs to struggle against
344−its lack of network effect. The better Urbit does, the easier it
338+its lack of network effect. The better Urbit does, the easier it
345is for IPFS to point to a functional language that can actually
339is for IPFS to point to a functional language that can actually
346−use its referential transparency directly. So their relationship
340+use its referential transparency directly. So their relationship
347is symbiotic, not competitive at all.
341is symbiotic, not competitive at all.
349The closest thing to a general-purpose competitor that Urbit has
343The closest thing to a general-purpose competitor that Urbit has
350−is Sandstorm. Sandstorm, which by the way rocks, is also a
344+is Sandstorm. Sandstorm, which by the way rocks, is also a
351personal server built around a network protocol.
345personal server built around a network protocol.
353But Sandstorm and Urbit compete in the way that, on the PC, the
347But Sandstorm and Urbit compete in the way that, on the PC, the
354−OS and the browser compete. In theory, the OS could solve the
348+OS and the browser compete. In theory, the OS could solve the
355problems that the browser solves; or the browser could be the OS.
349problems that the browser solves; or the browser could be the OS.
356In practice, Windows is a great OS to run a browser on.
350In practice, Windows is a great OS to run a browser on.
358Similarly, a world in which Sandstorm takes off is an awesome
352Similarly, a world in which Sandstorm takes off is an awesome
359world for Urbit, because everyone who has a Sandstorm instance
353world for Urbit, because everyone who has a Sandstorm instance
360−has a great platform for running Urbit on. Urbit on Sandstorm
354+has a great platform for running Urbit on. Urbit on Sandstorm
361will be a sort of "double-hulled" personal server, safer and more
355will be a sort of "double-hulled" personal server, safer and more
362friendly than either system alone.
356friendly than either system alone.
@@ -365,25 +359,24 @@ Sandstorm and Urbit have very different approaches to network
365identification; Sandstorm uses capabilities, Urbit identity.
359identification; Sandstorm uses capabilities, Urbit identity.
366Broadly speaking, we believe, capabilities are optimal for
360Broadly speaking, we believe, capabilities are optimal for
367expressive power; but identity is optimal for the UI of the
361expressive power; but identity is optimal for the UI of the
368−common case. We'd need to see the Powerbox, Sandstorm's UI, more
362+common case. We'd need to see the Powerbox, Sandstorm's UI, more
369fully fleshed out to understand its UI approach better.
363fully fleshed out to understand its UI approach better.
371−<h2 id="planet">Urbit doesn't have enough planets for every human
365+## Urbit doesn't have enough planets for every human {% #planet %}
374−A 32-bit planet is a tool, not a toy. Like a car, it's a device
367+A 32-bit planet is a tool, not a toy. Like a car, it's a device
375−for a responsible and independent adult. There aren't 4 billion
368+for a responsible and independent adult. There aren't 4 billion
376−cars in the world, nor 4 billion independent adults.
369+cars in the world, nor 4 billion independent adults.
378If you aren't an independent adult, and you don't need or even
371If you aren't an independent adult, and you don't need or even
379shouldn't have unconditional digital freedom (no one's 8-year-old
372shouldn't have unconditional digital freedom (no one's 8-year-old
380daughter needs unconditional digital freedom), a moon from
373daughter needs unconditional digital freedom), a moon from
381−someone else's planet is fine. (Even most of today's independent
374+someone else's planet is fine. (Even most of today's independent
382adults don't complain enough about being Facebook's moons.)
375adults don't complain enough about being Facebook's moons.)
384And limiting the supply of anything doesn't create a shortage.
377And limiting the supply of anything doesn't create a shortage.
385−It sets a price. Ideally, in the long run, we think a planet
378+It sets a price. Ideally, in the long run, we think a planet
386−should cost about $10. This could be off by an order of
379+should cost about $10. This could be off by an order of
387magnitude either way, and it wouldn't be the end of the world.
380magnitude either way, and it wouldn't be the end of the world.
389If a planet costs $10, that means you paid $10 to get a planet.
382If a planet costs $10, that means you paid $10 to get a planet.
@@ -395,52 +388,51 @@ social network social.
395There is always a tradeoff between free speech and free beer.
388There is always a tradeoff between free speech and free beer.
396Urbit will always choose free speech.
389Urbit will always choose free speech.
398−<h2 id="pwned">Cloud computing is inherently non-private.</h2>
391+## Cloud computing is inherently non-private. {% #pwned %}
400−**TLDR**: a general-purpose cloud computer is much, much more
393+_TLDR_: a general-purpose cloud computer is much, much more
401−private than a special-purpose cloud computer. In general, a
394+private than a special-purpose cloud computer. In general, a
402cloud VM is secure against corporations but not governments.
395cloud VM is secure against corporations but not governments.
403With a global adversary, compute in your closet -- or even on
396With a global adversary, compute in your closet -- or even on
404your body.
397your body.
406One reason we want the decentralized Internet is that we're tired
399One reason we want the decentralized Internet is that we're tired
407−of giant corporations spying on us. Think about it this way:
400+of giant corporations spying on us. Think about it this way:
408−Amazon is Netflix's main competitor. And yet, Netflix runs its
401+Amazon is Netflix's main competitor. And yet, Netflix runs its
409−whole operation on AWS. Why is Netflix sure that Amazon won't
402+whole operation on AWS. Why is Netflix sure that Amazon won't
410spy on it?
403spy on it?
412A general-purpose virtual machine is special from a privacy
405A general-purpose virtual machine is special from a privacy
413standpoint, just because it's commercially realistic to design
406standpoint, just because it's commercially realistic to design
414terms of service that prevent the host from peeking and poking at
407terms of service that prevent the host from peeking and poking at
415−the customer's machine. Crossing this moat is technically
408+the customer's machine. Crossing this moat is technically
416nontrivial and can't possibly happen by any reasonable accident.
409nontrivial and can't possibly happen by any reasonable accident.
417No hosting contract could contemplate it.
410No hosting contract could contemplate it.
419Whereas when your cloud computer is a special-purpose machine --
412Whereas when your cloud computer is a special-purpose machine --
420just a database row on some corporation's mainframe -- there is
413just a database row on some corporation's mainframe -- there is
421no way these services can promise not to handle your data.
414no way these services can promise not to handle your data.
422−Handling your data is *what they do*. On a special-purpose
415+Handling your data is _what they do_. On a special-purpose
423server, the concept of privacy is not even defined.
416server, the concept of privacy is not even defined.
425Where even a general-purpose server falls down is where the user
418Where even a general-purpose server falls down is where the user
426has a sovereign adversary, which can secretly violate explicit or
419has a sovereign adversary, which can secretly violate explicit or
427−implicit hosting contracts. Users with a sovereign adversary
420+implicit hosting contracts. Users with a sovereign adversary
428−must rely only on their own physical security.
421+must rely only on their own physical security.
430−However, most users don't have a sovereign adversary. And those
423+However, most users don't have a sovereign adversary. And those
431who do maximize their "herd immunity" if they can use the same
424who do maximize their "herd immunity" if they can use the same
432−protocols as those who don't. Otherwise, the adversary could
425+protocols as those who don't. Otherwise, the adversary could
433simply focus on everyone who uses the secure protocols.
426simply focus on everyone who uses the secure protocols.
435−Also, the portability of a cloud server image is critical. Of
428+Also, the portability of a cloud server image is critical. Of
436course, since Urbit is formally specified, it's trivially
429course, since Urbit is formally specified, it's trivially
437−portable. In fact, one strategy against sovereign adversaries
430+portable. In fact, one strategy against sovereign adversaries
438may be continuous rotation between hosts, like an MX missile.
431may be continuous rotation between hosts, like an MX missile.
440−<h2 id="code">Urbit will never be able to call any existing
433+## Urbit will never be able to call any existing code. {% #code %}
443−**TLDR**: neither will Javascript. And dear Unix, the browser
435+_TLDR_: neither will Javascript. And dear Unix, the browser
444does not miss interacting with your `$LD_LIBRARY_PATH` at all.
436does not miss interacting with your `$LD_LIBRARY_PATH` at all.
446You can't talk to the OS or use system libraries from Javascript.
438You can't talk to the OS or use system libraries from Javascript.
@@ -449,33 +441,31 @@ compatibility bridge, native methods, or other interface between
449Javascript and C.
441Javascript and C.
451When in doubt, remember that Urbit is "the browser for the server
443When in doubt, remember that Urbit is "the browser for the server
452−side." It plays by the same general rules. Isolation means
444+side." It plays by the same general rules. Isolation means
453isolation.
445isolation.
455−[There's no way Urbit will ever be adopted. It's too
447+## There's no way Urbit will ever be adopted. It's too weird. {% #weird %}
456−weird.](#weird) <h2 id="weird">There's no way Urbit will ever be
457−adopted. It's too weird.</h2>
459−**TLDR**: Urbit adoption is designed to be driven by ordinary end
449+_TLDR_: Urbit adoption is designed to be driven by ordinary end
460−users. Urbit isn't ready for ordinary end users yet. We're
450+users. Urbit isn't ready for ordinary end users yet. We're
461working on it -- come help.
451working on it -- come help.
463−Right now, Urbit is a developer tool. Or rather, a developer toy
453+Right now, Urbit is a developer tool. Or rather, a developer toy
464−-- since the only thing it's useful for is developing Urbit. It
454+-- since the only thing it's useful for is developing Urbit. It
465−also could be a much better toy. We're working on that too.
455+also could be a much better toy. We're working on that too.
467But it's absolutely wrong to think of Urbit being adopted as a
457But it's absolutely wrong to think of Urbit being adopted as a
468−developer tool in the conventional sense. If you think this is
458+developer tool in the conventional sense. If you think this is
469almost impossible, you're right.
459almost impossible, you're right.
471If we look at the way most successful platforms are adopted,
461If we look at the way most successful platforms are adopted,
472−they're not adopted for their own virtues. They're adopted
462+they're not adopted for their own virtues. They're adopted
473−because they're part of a larger solution. It's very hard to
463+because they're part of a larger solution. It's very hard to
474−displace a native component of an existing platform. Urbit is
464+displace a native component of an existing platform. Urbit is
475not trying to do this.
465not trying to do this.
477C is a better language than Pascal, but it didn't beat Pascal
467C is a better language than Pascal, but it didn't beat Pascal
478−because it's a better language. C beat Pascal because C was the
468+because it's a better language. C beat Pascal because C was the
479native language of Unix, and people wanted to program in Unix.
469native language of Unix, and people wanted to program in Unix.
480People don't use Javascript because Javascript is a great
470People don't use Javascript because Javascript is a great
481language, but because it's the native language of the browser.
471language, but because it's the native language of the browser.
@@ -483,9 +473,9 @@ Replacing the native language of a platform may be doable -- but
483it's incredibly hard.
473it's incredibly hard.
485Hoon is not competing with C, or even Haskell, as a Unix
475Hoon is not competing with C, or even Haskell, as a Unix
486−programming language. The only reason to program in Hoon is that
476+programming language. The only reason to program in Hoon is that
487−it's the native language of Urbit. Urbit is not competing with
477+it's the native language of Urbit. Urbit is not competing with
488−node.js or Rails as a Web backend. The only reason to run Urbit
478+node.js or Rails as a Web backend. The only reason to run Urbit
489is to run a personal server.
479is to run a personal server.
491Nock is cool, but it only gets adopted if Hoon gets adopted.
481Nock is cool, but it only gets adopted if Hoon gets adopted.
@@ -494,10 +484,9 @@ Urbit only gets adopted if it's useful as a personal server for
494human beings -- most of whom won't be Hoon programmers, or
484human beings -- most of whom won't be Hoon programmers, or
495programmers at all.
485programmers at all.
497−<h2 id="program">Hoon is too weird. No one will be able to
487+## Hoon is too weird. No one will be able to program in it. {% #program %}
500−**TLDR**: Hoon is ridiculously simple. Our documentation and
489+_TLDR_: Hoon is ridiculously simple. Our documentation and
501tooling are just immature.
490tooling are just immature.
503It's pretty fair to assume that (a) functional programming is
492It's pretty fair to assume that (a) functional programming is
@@ -507,96 +496,94 @@ so (c) Hoon must be hard-squared.
507Actually, Hoon is weird even for a functional language because
496Actually, Hoon is weird even for a functional language because
508it's an attempt to remove the hardest things about functional
497it's an attempt to remove the hardest things about functional
509programming: category theory, lazy evaluation, and gratuitous
498programming: category theory, lazy evaluation, and gratuitous
510−abstraction. To know a language is to know what the compiler is
499+abstraction. To know a language is to know what the compiler is
511doing; all the semantics of the Hoon compiler fit in 2000 lines
500doing; all the semantics of the Hoon compiler fit in 2000 lines
514It's too easy for us to wind up living in Isaac Asimov's Trantor,
503It's too easy for us to wind up living in Isaac Asimov's Trantor,
515a world in which everything got invented thousands of years ago
504a world in which everything got invented thousands of years ago
516−and the idea of new technology is just weird and scary. History
505+and the idea of new technology is just weird and scary. History
517isn't over yet, and nor is technical history.
506isn't over yet, and nor is technical history.
519−New things are harder to learn than old things. We ask smart
508+New things are harder to learn than old things. We ask smart
520−high-school students to learn calculus. Think about how much
509+high-school students to learn calculus. Think about how much
521harder it was for Newton and Leibniz to invent calculus, or for
510harder it was for Newton and Leibniz to invent calculus, or for
522−their first students to pick it up. Hoon is nowhere near as hard
511+their first students to pick it up. Hoon is nowhere near as hard
523as calculus.
512as calculus.
525Most of the difference is just the collective certainty that our
514Most of the difference is just the collective certainty that our
526society conveys to a high-school student that calculus is
515society conveys to a high-school student that calculus is
527−learnable. When you're learning Urbit, you don't have this
516+learnable. When you're learning Urbit, you don't have this
528collective knowledge; so you don't have the confidence that the
517collective knowledge; so you don't have the confidence that the
529−problem is solvable. Confidence makes a huge difference.
518+problem is solvable. Confidence makes a huge difference.
530Moreover, any bug or glitch in the developer experience destroys
519Moreover, any bug or glitch in the developer experience destroys
531this confidence and takes a long time to heal.
520this confidence and takes a long time to heal.
533−Yes, we know: Hoon remains quite hard to learn. Again, we have
522+Yes, we know: Hoon remains quite hard to learn. Again, we have
534−no reason to think this problem isn't solvable. Public
523+no reason to think this problem isn't solvable. Public
535enlightenment remains our main priority.
524enlightenment remains our main priority.
537−<h2 id="stuck">Urbit programmers are stuck with Hoon.</h2>
526+## Urbit programmers are stuck with Hoon. {% #stuck %}
539−**TLDR**: patience, grasshopper.
528+_TLDR_: patience, grasshopper.
541There's quite a straightforward way to implement any perfectly
530There's quite a straightforward way to implement any perfectly
542−specified language with a reliable interpreter in Hoon. First,
531+specified language with a reliable interpreter in Hoon. First,
543−write an interpreter for that language in Hoon. Second, jet that
532+write an interpreter for that language in Hoon. Second, jet that intepreter function with the existing implementation.
544−intepreter function with the existing implementation.
546−It is not clear that Javascript is *quite* well-defined enough
534+It is not clear that Javascript is _quite_ well-defined enough
547−for this treatment. But Lua probably is.
535+for this treatment. But Lua probably is.
549−<h2 id="user">Ordinary users will never be able to manage an
537+## Ordinary users will never be able to manage an Urbit server. {% #user %}
552−**TLDR**: Urbit's technical simplicity has always been designed
539+_TLDR_: Urbit's technical simplicity has always been designed
553−to drive human usability. But the polish is the last thing that
540+to drive human usability. But the polish is the last thing that
554−goes on. So we can't evaluate this claim right now.
541+goes on. So we can't evaluate this claim right now.
556−Right now, Urbit is only for geeks. You already need to be able
543+Right now, Urbit is only for geeks. You already need to be able
557−to wrangle a Unix machine to run it. What's the point?
544+to wrangle a Unix machine to run it. What's the point?
559−This Urbit isn't the real Urbit. It's an early milestone on the
546+This Urbit isn't the real Urbit. It's an early milestone on the
560way to the real Urbit.
547way to the real Urbit.
562The real Urbit -- for normal human beings -- is a hosted service.
549The real Urbit -- for normal human beings -- is a hosted service.
563−Getting a planet is as easy as signing up for Facebook. Probably
550+Getting a planet is as easy as signing up for Facebook. Probably
564−many users will think of it as another web account. They might
551+many users will think of it as another web account. They might
565not even know it can run more apps than the ones they use.
552not even know it can run more apps than the ones they use.
567A deterministic, persistent cloud computer is something different
554A deterministic, persistent cloud computer is something different
568−from a traditional server. Normally when we think of a server in
555+from a traditional server. Normally when we think of a server in
569the cloud, we think of it like a live animal -- a creature that
556the cloud, we think of it like a live animal -- a creature that
570−needs to be cared for, fed, and herded. A file in the cloud is
557+needs to be cared for, fed, and herded. A file in the cloud is
571more like a rock -- you can forget about it for ten years.
558more like a rock -- you can forget about it for ten years.
573An urbit is a general-purpose computer, but it doesn't even have
560An urbit is a general-purpose computer, but it doesn't even have
574−the concept of a reboot. It upgrades itself. If you don't feed
561+the concept of a reboot. It upgrades itself. If you don't feed
575it any packets for ten years, then turn it back on, it will spend
562it any packets for ten years, then turn it back on, it will spend
576−a day or two upgrading itself, then be back to normal. Maybe
563+a day or two upgrading itself, then be back to normal. Maybe
577it's something in between a rock and an animal -- a cactus?
564it's something in between a rock and an animal -- a cactus?
579Another huge difference versus an Internet server is that we're
566Another huge difference versus an Internet server is that we're
580confident that Urbit's limited supply of identities will make it
567confident that Urbit's limited supply of identities will make it
581−easy to keep abusers off the network. So far, so good -- but of
568+easy to keep abusers off the network. So far, so good -- but of
582course, no one abuses a young network.
569course, no one abuses a young network.
584The bottom line is that managing your urbit has to be as easy as
571The bottom line is that managing your urbit has to be as easy as
585−managing your iPhone. Normally, it consists of deciding what
572+managing your iPhone. Normally, it consists of deciding what
586apps you want to be running, and how much you trust them.
573apps you want to be running, and how much you trust them.
587Resources can't be free, so sometimes you have to play memory
574Resources can't be free, so sometimes you have to play memory
588−police. Humans have shown that they can handle these tasks.
575+police. Humans have shown that they can handle these tasks.
590Our '70s OSes and networks, which were great designs in their day
577Our '70s OSes and networks, which were great designs in their day
591and have matured into excellent industrial tools, give us a
578and have matured into excellent industrial tools, give us a
592totally misleading impression of how hard it should be to manage
579totally misleading impression of how hard it should be to manage
593−a general-purpose computer. Computing isn't scary or dangerous.
580+a general-purpose computer. Computing isn't scary or dangerous.
594−Unix and the Internet are scary and dangerous. That's fine for
581+Unix and the Internet are scary and dangerous. That's fine for
595an industrial tool, but not a personal tool.
582an industrial tool, but not a personal tool.
597−<h2 id="killer">Urbit has no killer app.</h2>
584+## Urbit has no killer app. {% #killer %}
599−**TLDR**: the killer app is personal API aggregation.
586+_TLDR_: the killer app is personal API aggregation.
601It's a truism that any new platform has to be fundamentally much
588It's a truism that any new platform has to be fundamentally much
602better at solving some problem than the mature platform it seeks
589better at solving some problem than the mature platform it seeks
@@ -609,23 +596,23 @@ From the developer's perspective, Urbit's advantage is that it's
609a network stack which provides exactly-once delivery of typed,
596a network stack which provides exactly-once delivery of typed,
610validated, transactional, encrypted and authenticated messages.
597validated, transactional, encrypted and authenticated messages.
611The difference between an Urbit API and a REST API is like the
598The difference between an Urbit API and a REST API is like the
612−difference between a paved road and a dirt road. On the other
599+difference between a paved road and a dirt road. On the other
613hand, you do need to learn a new functional language.
600hand, you do need to learn a new functional language.
615From the user's perspective, there's one task that any personal
602From the user's perspective, there's one task that any personal
616server can perform, that can't be performed by any Web service:
603server can perform, that can't be performed by any Web service:
617unrestricted API aggregation.
604unrestricted API aggregation.
619−Well before Urbit is ready to *replace* any conventional web
606+Well before Urbit is ready to _replace_ any conventional web
620−services, it should be ready to *command* them in place by API.
607+services, it should be ready to _command_ them in place by API.
621−(Or if needed, by scraping.) If all you care about is being in
608+(Or if needed, by scraping.) If all you care about is being in
622control of your own data, it's fine to leave it in the hands of
609control of your own data, it's fine to leave it in the hands of
623these services, as you have the API secrets to get it out.
610these services, as you have the API secrets to get it out.
625Managing a set of security connections to your existing services
612Managing a set of security connections to your existing services
626is one of the first important tasks of a modern personal server.
613is one of the first important tasks of a modern personal server.
627This is a stateful task that typically requires both a durable
614This is a stateful task that typically requires both a durable
628−API key and a temporary OAuth token. APIs change all the time,
615+API key and a temporary OAuth token. APIs change all the time,
629so connection maintenance also requires evergreen updates.
616so connection maintenance also requires evergreen updates.
631The origin of this API key will vary, but usually the best way to
618The origin of this API key will vary, but usually the best way to
@@ -637,7 +624,7 @@ do with your own data.
638Terms of service which constrain the use of data (as opposed to
625Terms of service which constrain the use of data (as opposed to
639the abuse of the service) simply aren't realistic and will no
626the abuse of the service) simply aren't realistic and will no
640−longer apply. This enables a variety of novel user experiences
627+longer apply. This enables a variety of novel user experiences
641which aren't implementable as traditional web services, and also
628which aren't implementable as traditional web services, and also
642aren't available via conventional third-party API aggregators.
629aren't available via conventional third-party API aggregators.
@@ -645,67 +632,42 @@ Also, since Urbit is after all quite immature, it doesn't make
645much sense to restrict this security state to code within Urbit.
632much sense to restrict this security state to code within Urbit.
646The Urbit interpreter `vere` runs as a Unix daemon that
633The Urbit interpreter `vere` runs as a Unix daemon that
647implements the FUSE user-level filesystem protocol, and maps the
634implements the FUSE user-level filesystem protocol, and maps the
648−data on your services into the Unix filesystem. For example, one
635+data on your services into the Unix filesystem. For example, one
649−of our demos lets you `ls` your Github issues.
636+of our demos lets you `ls` your GitHub issues.
651So it's straightforward to build, for instance, a Python app that
638So it's straightforward to build, for instance, a Python app that
652−uses Urbit as a gateway to mash up a bunch of web services. As a
639+uses Urbit as a gateway to mash up a bunch of web services. As a
653Unix programmer, you might even just regard Urbit as a generic
640Unix programmer, you might even just regard Urbit as a generic
654Web API gateway daemon, without worrying about its internals.
641Web API gateway daemon, without worrying about its internals.
656−We have other ideas for initial killer apps. But this, we feel,
643+We have other ideas for initial killer apps. But this, we feel,
657−is the best one. API libraries for `npm` et al abound.
644+is the best one. API libraries for `npm` et al abound.
658Stateful, self-updating, generic API aggregators with FUSE
645Stateful, self-updating, generic API aggregators with FUSE
659integration, also integrated with a reactive web server, are
646integration, also integrated with a reactive web server, are
662−<h2 id="dictator">Urbit is a reactionary digital
665−**TLDR**: Facebook is a digital dictatorship.
666−Urbit is a decentralized network with a republican constitution.
668−It's especially important to combat the impression that Tlon is a
669−reactionary conspiracy. Tlon is a Delaware corporation. It
670−exists to make its investors as rich as possible. We are not
671−aware of our investors' ideologies. We are pretty confident that
672−they don't take precedence, ever, over turning a profit.
674−As in any corporation, Tlon's employees work for its investors.
675−Those employees would have trouble conspiring in any political
676−sense, though. In 2016 election terms, two of us are for
677−Sanders, one for Clinton, and two for Trump.
679−Now, in the long run, it's quite wrong for Urbit to be run by any
680−profit-oriented corporation, Delaware or otherwise. This is why
681−we've partitioned off 50 galaxies for a future Urbit Foundation.
682−Furthermore, the power of *any* central body in Urbit is designed
683−to wane over time. But we can't get ahead of ourselves in this.
684−Urbit, to create an effective and competent digital republic,
685−needs to move slowly and carefully in establishing it.
687−<h2 id="horse">Urbit is sniffed at by Houyhnhyms.</h2>
649+## Urbit is sniffed at by Houyhnhyms. {% #horse %}
689It's difficult to categorize [this awesome
651It's difficult to categorize [this awesome
690essay](http://ngnghm.github.io/blog/2016/06/11/chapter-10-houyhnhnms-vs-martians/)
652essay](http://ngnghm.github.io/blog/2016/06/11/chapter-10-houyhnhnms-vs-martians/)
691−a single bullet point. So I've saved it for last.
653+in a single bullet point. So I've saved it for last.
693When reading this essay, it's important not to forget the amazing
655When reading this essay, it's important not to forget the amazing
694absence of genuine, mutually critical discourse in computer
656absence of genuine, mutually critical discourse in computer
695−science (as in most sciences today). You never hear what Swift's
657+science (as in most sciences today). You never hear what Swift's
696−designers think of Go, or vice versa. And critical public
658+designers think of Go, or vice versa. And critical public
697discourse decreases, not increases, with increasing academic
659discourse decreases, not increases, with increasing academic
698legitimacy.
660legitimacy.
700The basic test of any field purportedly scientific in nature is
662The basic test of any field purportedly scientific in nature is
701whether its researchers are genuinely interested in each others'
663whether its researchers are genuinely interested in each others'
702−work, and willing to share these genuine responses publicly. If
664+work, and willing to share these genuine responses publicly. If
703this practice does not exist, the field may still be useful
665this practice does not exist, the field may still be useful
704−and/or interesting. But it is not science.
666+and/or interesting. But it is not science.
706−What's awesome about Fare's essay is that he's *doing it right*.
668+What's awesome about Fare's essay is that he's _doing it right_.
707−All the actual details are irrelevant. And mostly wrong. But
669+All the actual details are irrelevant. And mostly wrong. But
708−that's of very little importance compared to *doing it right*.
670+that's of very little importance compared to _doing it right_.
710Anyway, we've already addressed the idea that jets are a sham.
672Anyway, we've already addressed the idea that jets are a sham.
711Some other points:
673Some other points:
@@ -713,11 +675,11 @@ Some other points:
713### Event-sourcing and/or caching is a pattern, not a layer
675### Event-sourcing and/or caching is a pattern, not a layer
715Fare' is perfectly right that "one size does not fit all" in
677Fare' is perfectly right that "one size does not fit all" in
716−persistence. Generally, Urbit uses event-sourced persistence.
678+persistence. Generally, Urbit uses event-sourced persistence.
718But it has multiple layers of event-sourcing: in the definition
680But it has multiple layers of event-sourcing: in the definition
719of Urbit itself; in the application sandbox vane (Gall), and in
681of Urbit itself; in the application sandbox vane (Gall), and in
720−the application itself. Urbit also has a completely orthogonal
682+the application itself. Urbit also has a completely orthogonal
721revision control system (Clay).
683revision control system (Clay).
723And there is not a single cache across the whole system, though
685And there is not a single cache across the whole system, though
@@ -731,33 +693,33 @@ or feature, and equally fatal whichever direction you fail.
731### Let's be clear about why DSLs suck
693### Let's be clear about why DSLs suck
733DSLs suck not because they are difficult to newbies in the base
695DSLs suck not because they are difficult to newbies in the base
734−language. DSLs suck because every time a programmer, even one
696+language. DSLs suck because every time a programmer, even one
735−*experienced* in the base language, comes into a new codebase or
697+_experienced_ in the base language, comes into a new codebase or
736project, she has to learn a new custom language.
698project, she has to learn a new custom language.
738−You need enormous wins to justify this cost. It's the goal of
700+You need enormous wins to justify this cost. It's the goal of
739the base language designer to preempt these wins, creating a
701the base language designer to preempt these wins, creating a
740language which is almost never so tiresome and full of
702language which is almost never so tiresome and full of
741boilerplate that it requires a DSL or template layer.
703boilerplate that it requires a DSL or template layer.
743Hoon is almost entirely made of macros -- but they are internal,
705Hoon is almost entirely made of macros -- but they are internal,
744−fixed, built-in macros (with no gensyms). This fixed set of
706+fixed, built-in macros (with no gensyms). This fixed set of
745−macros is essentially enough. Occasionally we want to add one or
707+macros is essentially enough. Occasionally we want to add one or
746−two. But we never, ever pine for context-dependent macros.
708+two. But we never, ever pine for context-dependent macros.
748### Determinism is not consensus, and is not constraining
710### Determinism is not consensus, and is not constraining
750Fare' is totally right that an urbit's data is meant for itself
712Fare' is totally right that an urbit's data is meant for itself
751−alone. In fact, an urbit has the right to compute incorrectly if
713+alone. In fact, an urbit has the right to compute incorrectly if
752−it wants. We go to considerable lengths to ensure that you can't
714+it wants. We go to considerable lengths to ensure that you can't
753gain any particular advantage by incorrect computing.
715gain any particular advantage by incorrect computing.
755The whole point of Nock is that it's so low-level that there is
717The whole point of Nock is that it's so low-level that there is
756−no conceivable advantage in upgrading it. Divergence is just
718+no conceivable advantage in upgrading it. Divergence is just
757−pointless. This is not a question of network integrity, just of
719+pointless. This is not a question of network integrity, just of
758practical standardization.
720practical standardization.
760−This consistency stops at Nock. Without anyone violating the
722+This consistency stops at Nock. Without anyone violating the
761correctness of their lifecycle functions, anyone or everyone in
723correctness of their lifecycle functions, anyone or everyone in
762−Urbit could replace Hoon with Javascript. Determinism does not
724+Urbit could replace Hoon with Javascript. Determinism does not
763cramp Urbit's semantic style in any way, shape or form.
725cramp Urbit's semantic style in any way, shape or form.