In practice, a fork happens whenever the software running a blockchain's nodes is updated, and how that update is received determines what kind of fork it becomes. Developers propose changes for many reasons: fixing a bug, adding a feature, adjusting block size or gas limits, or resolving a dispute about the network's future direction. Once the new client software is released, node operators, miners, and validators choose whether to run it, and their collective decision decides if the chain stays unified or splits.
A hard fork changes the rules in a way older software cannot validate, so nodes that do not upgrade end up on a separate, incompatible chain. Ethereum's Merge and its later Pectra and Fusaka upgrades are examples of planned, non-contentious hard forks where the community coordinated a single transition. By contrast, Bitcoin Cash split away from Bitcoin in August 2017 after a prolonged disagreement over block size, producing two permanently distinct assets from one shared history, a chain split.
A soft fork tightens the rules rather than breaking them, so unupgraded nodes still recognize new blocks as valid, provided enough of the network's hashpower or stake adopts it.
Because most blockchain code is open source, anyone can technically fork the codebase, but a fork only matters economically when a meaningful share of users, exchanges, and infrastructure follows it. Forks carry real risks, including replay attacks, community fragmentation, and confusion over which chain represents the "real" project.