This is the fundamental design of blockchain technology.
Correct. It is distributed and decentralized governance, what the majority decides goes. This happens constantly whether it's moving to a new client or upgrading to a new protocol. That is the design.
Here it is in code
https://github.com/bitcoin/bitcoin/blob/master/src/main.cpp#L2474 // Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded:
if (block.nVersion < 2 &&
CBlockIndex::IsSuperMajority(2, pindexPrev, Params().RejectBlockOutdatedMajority()))
{
return state.Invalid(error("AcceptBlock() : rejected nVersion=1 block"),
REJECT_OBSOLETE, "bad-version");
}