I was trying to think of analogies for hard vs. soft forks. I've been a fan for a while of analogizing the Bitcoin network to a traveling herd of animals where every individual
could go wherever the hell they want, but where it's obviously in every one's interests to stick together because of the strong network effect. We can think of the direction the herd is currently traveling in as the "current protocol." And the current direction is almost always the strongest Schelling point for future travel.
A hard fork is like a big group of the animals beginning to head off in a different direction. Hard forks are thus transparent and explicit. They present you with a clear choice: do I want to keep going on the original path or do I want to stick with the majority? They make it easier for people who feel strongly about NOT forking to coordinate their "resistance" to a fork, because they don't have to do anything to not fork and because the status quo is such a powerful Schelling point. But that still doesn't mean that hard forks make it
easy for a meaningful persistent chain split to occur because of how powerful the network effect is. The more individuals that "lose their nerve" and defect from the smaller herd, the more incentive there is
to defect, creating an incredibly powerful positive feedback loop toward convergence on the new direction.
So all of that is more or less stuff I've said before. Ok, so now what is a soft fork in this analogy? Well, first let's talk about an "ordinary" soft fork, where the functional nature of the desired change actually lends itself to implementation via a soft fork. A soft fork involves adding new rules / making the existing rules more strict. So an ordinary soft fork is not exactly like changing direction; it's more like narrowing the path. If we're imagining a soft fork to reduce the block size limit from 1MB to 500kb, a "natural" soft fork like that is sort of like a majority of the animals running ahead and placing boulders across the "500kb - 1MB" portions of the path to block them off. Because of their nature, soft forks like this aren't automatically transparent to users, and thus you can imagine scenarios where a majority of the hashpower deploys a soft fork in secret. So if you don't know about the new rules being enforced by a majority of the hashpower, you might try to walk down that part of the path (i.e., mine a >500kb block) and what will happen is you'll encounter a boulder blocking your way (i.e., your block will be orphaned). And at first you might chalk it up to bad luck. But if
every time to you try to access that part of the path you encounter a boulder, you're going to start to suspect that it's by design. Soft forks are harder for an unhappy minority to resist because they basically
"automatically" funnel everyone onto the narrower path. If you don't want to go along, you have to affirmatively coordinate your own change in direction with other people who are similarly dissatisfied with the new development.
Finally, what about an "unnatural" soft fork? Well, there's the idea that any functional change in behavior that can be done with a hard fork can also be done with a more-convoluted / "hacky" soft fork. So what's the analogy here? How does the herd change direction without changing direction? They build a Stargate.
Now I don't know if any of you guys have ever tried to build a Stargate before. But it's tricky. It's certainly going to be a more complex undertaking than just rotating your body a certain number of degrees and walking forward. And the obvious similarity to Bitcoin we see is that "hacky" soft forks introduce complexity into the code. You've also gotta figure that Stargates are more dangerous. Oh sure, you think to yourself, "this is gonna be great. I'm going to save so much time on my commute." But then one morning you're a little more tired than usual, and you make a tiny error entering the coordinates for your workplace and suddenly you find yourself trapped on an alien slave planet being forced to mine Naquadah for Jaye Davidson. Similarly, unnecessary complexity in Bitcoin's code is bad because it increases the chances that dangerous bugs slip through and pop up unexpectedly or are deliberately exploited. The code also gets increasingly difficult to maintain and upgrade as you pile one hack on top of another.
tl;dr: hard forks yes; Stargates no
[doublepost=1472705941,1472704849][/doublepost]If anyone's interested, I've had some interesting back and forth in the comments section with MAbtc, the author of that
hard fork v. soft fork piece from the other day that I said almost gave me an aneurysm. Here's an excerpt (the parts where I'm quoting something MAbtc said are bolded):
“That’s all well and good, but it’s not how consensus networks work. It’s not how Bitcoin works. You can continue to use sophistry to avoid the facts, but intelligent people won’t fall for it.”
Well, I don’t see how my analogy [comparing Bitcoin / money to language] is “sophistry.” It’s just an analogy that I happen to be fond of. Is it a perfect analogy? Well, no because analogies never are. But, to expand on my analogy since I really do love it, it seems to me that your view of Bitcoin (referring to “the” software and claiming that it requires “immutable consensus rules”) is sort of like the people who treat “the dictionary” as the definitive guide to whether or not a word is “real.” And thinking that “soft forks” and “new rules” are acceptable but that “hard forks” aren’t is sort of like being ok with adding new words to “the dictionary” but trying to stop people from repurposing old words (because the latter can result in ambiguity / a “split” in how you’re understood by different people depending on whether they’ve “updated their language protocol”).
“Okay. As Satoshi said: ‘Nodes can leave and rejoin the network at will.’ Go ahead and leave the network.”
Well, you can obviously call it whatever you like. To me, a more accurate characterization [than nodes "leaving the network" in response to a malicious 51% soft-fork] would be “the network routing around an attack.” Because to me, “the network” isn’t defined by one particular rule set with this weird ratchet-like characteristic where rules can only be added but never subtracted. Rather, “the network” is a network of economic participants using an inherently-fluid protocol to maintain and update a shared monetary ledger.
“That is exactly the intention of vote thresholds like 75% — to coerce the minority of miners. A sufficient mining monopoly can then coerce the userbase as a function of their need for confirmed transactions.”
Eh… or their intention is just to use the protocol they prefer. (You’re not suggesting we force them not to run the software they want to?) Look, if you want to call that “coercion,” suffice it to say that it’s the kind I’m A-OK with. To me, complaining about “coercion” in that scenario is sort of like my imaginary 10,000-year-old man complaining that he’s being continually “coerced” into changing the language he speaks. (BTW, I just watched an interesting youTube video called “How far back in time could you go and still understand English?” and apparently the answer is only like 600 years before things start getting really dicey.)