"Bitcoin fork" gets used loosely to describe everything from a minor software update to an entirely new cryptocurrency. Those are actually different events. Here's what actually distinguishes them, and what happened during Bitcoin's two most consequential forks.
Bitcoin's rules are enforced by every full node independently checking every block. A fork happens when a change to those rules causes some nodes to accept a set of blocks that other nodes reject, splitting the network's view of what counts as valid. What happens next depends entirely on what kind of rule change caused it.
A soft fork narrows what counts as valid, in a way that's backward compatible: blocks following the new, stricter rules are still considered valid by nodes still running the old software, they just can't fully verify certain new-style transactions. This means a soft fork can activate gradually as nodes upgrade, without necessarily splitting the network into two separate coins. SegWit, activated in August 2017, was a soft fork that changed how transaction data is structured to fix a long-standing issue called transaction malleability and free up effective block capacity.
A hard fork loosens or changes the rules in a way that isn't backward compatible: blocks valid under the new rules are rejected outright by nodes still running the old software. Unless every participant upgrades together, this permanently splits the network into two separate chains, each with its own history from the fork point onward, and, practically speaking, its own separate cryptocurrency.
In August 2017, a disagreement over how to scale Bitcoin's transaction capacity, larger blocks versus SegWit's approach, led a portion of the community to hard fork away from Bitcoin entirely, creating Bitcoin Cash (BCH) with a larger block size limit. Anyone holding Bitcoin at the moment of the fork received an equal balance of Bitcoin Cash, since the two chains shared identical transaction history up to that exact block. Bitcoin Cash has since operated as a fully separate cryptocurrency, with its own further forks and history.
A fork changes network-level consensus rules, not the fundamental cryptography behind private keys and addresses. A private key that controlled Bitcoin before a hard fork generally controls the equivalent balance on both resulting chains afterward, since address derivation itself didn't change, only the transaction and block rules going forward did.
This tool can generate any Bitcoin private key there is, Satoshi's included. Try for a million years and you'll still come up empty.
Try the key collider nowA soft fork tightens the rules and can roll out gradually without splitting the coin. A hard fork changes the rules in a way older software can't accept, and without everyone agreeing to upgrade together, that permanently splits the network into two separate chains. For how those rules get enforced in the first place, see what a full node does. For the fuller story of how the 2017 split actually played out and why the market settled the question so decisively, see how the block size wars shaped Bitcoin's payments ambitions, and for Ethereum's own version of the same dilemma, its 2016 hard fork after The DAO hack, see why that fork is central to the maximalist argument.