Are hardforks just safer than softforks? Bitcoin seems to like softforks for some reason.
Let's first define the terms:
Hardfork means that nodes running old and new software will have a diverging view of the blockchain. They'll be on their own fork, playing by different rules.
Softfork means that even though nodes running old and new software have a different view of the blockckhain the blockchain doesn't fork.
Let's now take RingCT (RCT) as an example of a fork. This is a huge update so old and new software will have different views of RCT transactions. Nodes running old software won't understand RCT so they'll view RCT transactions as invalid and blocks containing RCT transactions as invalid.
Now we have two choices:
- Disguise RCT transactions in some manner so they'll look like old transactions.
- Let the old nodes reject RCT transactions.
If we opt for 1. We're adding complexity in terms of the implementation code but also complexity we have to deal with when analyzing the network itself. This is unavoidable because not only do we have to implement a new thing, but we also have to make it look like something else.
We're also creating another, more subtle, problem for ourselves. All the old nodes on the network are now zombies. They're there, but they're not doing any validation (they can't, because they don't understand the new rules).
To make matters worse, it's very hard for anyone to reject the new rules. We can't upgrade, because we don't want the rules, but we can't do nothing either because we'd be turned into a zombie. To object we'd have to implement our own version of the software which explicitly rejects valid transactions just because they are implementing the new protocol!
If we opt for 2. We have the problem of forcing everyone to take a stand. The chain will split in two. Those running old software will be on one chain, those running the new software will be on another.
In most cases the old chain will simply die, because nobody finds it valuable. But sometimes, we'll get in a situation where both chains have perceived value, like with Ethereum and Ethereum Classic.
And now, we're finally in a position to answer the original question. Are hardforks or softforks safer?
Hardforks are safer because they reduce complexity (both in the implementation code and in the network's rules). They ensure all nodes on the network are validating. They force people to regularly update their software (to increase performance, patch security holes etc).
Softforks are safer because they prevent the community from fracturing (by taking away choice).