Thanks for the lenghty reply, this was a quite interesting read ! You say that 95% of the hashing power would have to agree in order to make a fundamental change but I've always read that a hard fork would need 50% + 1 of the hashing power ? Can you elaborate on that ?
I gave 95% as an example, and not as a specific required number (which is why I put the word "like" in front of it).
What is important is that the change be accepted by "a significant percentage".
The larger that percentage is the smaller the risk to the users. How significant that risk is depends on what the effects of the change are.
As an example, lets say a decision is made to have a smaller maximum allowed block size...
This is backward-compatible since any old node or miner is already perfectly willing to accept a smaller block. It only requires enough miners running the new software enforce the new rule. Therefore it is considered to be a "soft-fork".
Now lets say only 10% of the the global hashpower implements the change:
In that case, on average, the new software will solve 1 out of every 10 blocks. Lets say I'm a miner on the new software, and you're a miner on the old software. I mine a small block, and you accept it... So far so good. The blockchain is growing as it should. Next you mine a block, and broadcast it to the network. Me and all the other miners on the new software will consider your block to be invalid. We will toss it out and not build on top of it. Instead we will continue to build on top of the block that I mined earlier. Meanwhile, you and the other 90% of miners on the old software will accept your block, add it to your blockchain, and then build on top of that.
Uh oh. We've got a fork in the chain. Which one is the "real" chain? Which one is the "right" chain? There is a disagreement on that matter because there is a disagreement in the software on what the consensus rules are. Since 90% of the hashpower is running the old software, that fork will grow faster than the chain being built by the new software. It will always be longer. However, since that longer fork includes blocks that the new software thinks are invalid, the new software will never accept that fork as being valid and will continue to ignore it.
Whether a user sees a transaction as confirmed or not will depend on whether that transaction is in only one side of the fork, and which software that user is running. This is quite a mess.
Now lets say that 90% of the global hashpower implements the change:
In that case, on average, the new software will solve 9 out of every 10 blocks. Lets say I'm a miner on the new software, and you're a miner on the old software. I mine a small block, and you accept it... So far so good. The blockchain is growing as it should. Next you mine a block, and broadcast it to the network. Me and all the other miners on the new software will consider your block to be invalid. We will toss it out and not build on top of it. Instead we will continue to build on top of the block that I mined earlier. Meanwhile, you and the other 10% of miners on the old software will accept your block, add it to your blockchain, and then build on top of that.
Hmm. We've got a fork in the chain, but in this situation maybe it isn't too bad. Since the new software is likely to create another 9 blocks before you and your "old software" friends create even 1 more block, our chain will be longer than yours. Since the old software doesn't see small blocks as invalid, all the miners running the old software will just abandon/orphan the bigger block and switch over to the longer fork as soon as it has more blocks.
Whether a user sees a transaction as confirmed or not will depend on whether that transaction is in only one side of the fork, and which software that user is running. But, their wallet will switch over to the "new software" fork within a few blocks. Anyone that is running the old software might want to wait for a few more confirmations than they usually would just to make sure they are on the "correct" fork, but if a transaction has more than 10 confirmations, they can be pretty confident that the entire network sees the transaction as confirmed.
Now lets say that 51% of the global hashpower implements the change:
In that case, on average, the new software will solve just barely more than half the blocks. Lets say I'm a miner on the new software, and you're a miner on the old software. I mine a small block, and you accept it... So far so good. The blockchain is growing as it should. Next you mine a block, and broadcast it to the network. Me and all the other miners on the new software will consider your block to be invalid. We will toss it out and not build on top of it. Instead we will continue to build on top of the block that I mined earlier. Meanwhile, you and the other 49% of miners on the old software will accept your block, add it to your blockchain, and then build on top of that.
Oh dear. We've got a fork in the chain, and this seems to be the worst of the three scenarios. Since both versions of the software are likely to create blocks at a nearly equal rate it is possible that the "old software" chain could get a second block before the "new software" miners can catch up. Then it's possible that for the next 2 weeks the blocks are effectively back-and-forth (new software solves, then old software solves, then new software, etc). In this case, the "old software" fork stays longer (and therefore is accepted by all "old software" nodes as "valid") for the entire two weeks. Then suddenly the "new software" miners might get lucky and solve the next three blocks in a row before the "old software" nodes can solve any. BAM. The "new software" fork is now longer, and the entire last two weeks of confirmations and history is wiped out from the "old software" nodes. POOF. They suddenly forget everything that they thought was true and switch over to the "new software" fork, treating it as "true" and "valid".
At least when the "new software" miners only had 10%, you could count on consistency with your own view of the world. You could be sure that everyone that was running the "old software" would agree on what the blockchain looked like and it wouldn't change. You could be sure that everyone that was running the "new software" would agree on what the blockchain looked like and it wouldn't change.
Now you have a situation where everyone running the "old software" agrees for a while (hours? days? weeks? years?), and then suddenly all that history disappears and is replaced with a re-written history. That's completely unreliable and unusable.
So, perhaps you can see that trying to soft-fork with
too small of a minority of hashpower results in a permanently split chain (not much different than a hard-fork), trying to soft-fork with
an overwhelming majority of hashpower results in the majority imposing their will on those that don't upgrade, and trying to fork with
just a small majority of the hashpower results in an inconsistent and unusable system.
The larger the majority on the "new software", the safer it is and the less blocks that are likely to be orphaned when the "old software" nodes jump back to the longer chain.