Has a hard fork ever occurred? BIP 50 describes the 2013 event in which a block chain fork persisted for several hours. Its first paragraph reads:


  A block that had a larger number of total transaction inputs than previously seen was mined and broadcast.  Bitcoin 0.8 nodes were able to handle this, but some pre-0.8 Bitcoin nodes rejected it, causing an unexpected hard fork of the chain [my emphasis].  The pre-0.8 incompatible chain at that point had around 60% of the hash power, ensuring that the split did not automatically resolve.


I interpret this to mean that the term "hard fork" describes a state of the network.  Some nodes have accepted a block, but others have rejected it.  The nodes accepting the questionable block keep and extend it.  The nodes rejecting the block neither keep nor extend it, but rather build their own branch.  The resulting "fork" is only visible to nodes which have accepted the questionable block.

However, the Wiki has this to say about a hard fork:


  A hardfork is a change to the bitcoin protocol that makes previously invalid blocks/transactions valid, and therefore requires all users to upgrade.


In other words, a hard fork is a kind of update to Bitcoin Core (given that Bitcoin Core is the protocol).  The idea was repeated in the top answer to this SE question.

The difference is subtle, but important.  For example, consider the question: has a hard fork ever occurred?

At least one Core developer says that Bitcoin has never experienced a hard fork, apparently using the Wiki definition.  The 2013 fork was not caused by a software update (according to some new, but undocumented information), but rather was (caused by?) nondeterministic behavior that would have happened even without the update.

The answer seems to depend on how you define a hard fork. If a hard fork is a condition of the network, the answer seems to be "yes".  But if a hard fork is a kind of software update, the answer seems to be "no".

It's not hard to see how a software update could lead to a persistent block chain fork as seen by some nodes.  So clearly the two ideas are connected.  But imprecise language around hard forks can lead to confusion, and, more importantly, to incorrect conclusions.

So which is it?  Does "hard fork" describe a condition of the network, or a software update?
So which is it? Does "hard fork" describe a condition of the network, or a software update?


Either is acceptable. You can say that version so-and-so causes a fork, and you can say that the network is currently forked.


  Was the March 2013 fork a hardfork?


It depends on your definition. The March 2013 incident initially appeared to be a hard-fork, but a later investigation showed that it was possible to trigger the issue even when all nodes were running the same version.

Quoting from BIP50:


  This would be an issue even if the entire network was running version 0.7.2. It is theoretically possible for one 0.7.2 node to create a block that others are unable to validate, or for 0.7.2 nodes to create block re-orgs that peers cannot validate, because the contents of each node's blkindex.dat database is not identical, and the number of locks required depends on the exact arrangement of the blkindex.dat on disk (locks are acquired per-page).


However, it was a hardfork in the sense that newer clients would create and validate blocks that an older client would not see as valid.