Soft fork
A change that makes previously valid things invalid: a new restriction. Old nodes see new blocks as valid (they never check the new rule) and stay on the chain. Only miners need to enforce it for the chain to stay unified, and upgraded nodes enforce it regardless. Every Bitcoin consensus upgrade since 2012 has been a soft fork: P2SH, CLTV, CSV, SegWit, Taproot.
The trick is to make new features look like "anyone can spend" outputs to old nodes. SegWit outputs are exactly that from a legacy node's view; new nodes apply the real rules.
Hard fork
A change that makes previously invalid things valid: bigger blocks, a different subsidy, a new opcode without a soft-fork wrapper. Old nodes reject the new blocks, so unless every node upgrades there are two chains. Bitcoin Cash (2017) and Bitcoin SV (2018) are hard forks of Bitcoin; Ethereum Classic is the chain Ethereum left behind.
Activation mechanisms
- Flag day: the rule starts at a block height. Simple; risky if adoption is low.
- IsSuperMajority / BIP 9: miners signal readiness in block version bits; the rule locks in when 95% signal in a period, then activates. Gives miners a coordination role, and a veto if they refuse.
- BIP 8: like BIP 9 but with an option that the rule locks in at the end of the period whether or not miners signal, removing the veto.
- UASF (user-activated): nodes enforce the rule from a date and reject blocks that do not signal. BIP 148 did this for SegWit in 2017.
- Speedy Trial: Taproot's method: a short BIP 9-style period with a 90% threshold, and a fixed activation height on success.
Why it matters
The activation method is where governance becomes concrete. The question "who can block this?" has different answers under each, and the 2017 fight was over exactly that.