A hardfork is a change to the bitcoin protocol that makes previously invalid blocks/transactions valid, and therefore requires all users to upgrade.
Any alteration to bitcoin which changes the block structure (including block hash), difficulty rules, or increases the set of valid transactions is a hardfork. However, some of these changes can be implemented by having the new transaction appear to older clients as a pay-to-anybody transaction (of a special form), and getting the miners to agree to reject blocks including the pay-to-anybody transaction unless the transaction validates under the new rules. This is known as a softfork.
Bitcoin Core has had two accidental hardforks, and many altcoins have had intended hardforks.
The accidental hardforks are:
- Due to a BerkeleyDB issue, Bitcoin pre-0.8 hardforked, and there was a chain split. This happened in 2013, before the foundation of Bitcoin Core. The post mortem is in BIP 0050.
- Bitcoin Core 0.15 accidentally hardforked. See CVE-2018-17144 full disclosure. The fix was a softfork deployed in v0.16.3. There was no chain split.