Every node in the Bitcoin network checks every block it receives and validates any transactions in it. As coin generation is a transaction that is included in the block, it is also checked. Same as a node would not accept a transaction that does not balance its inputs and outputs (for example, by spending more coins than it has), neither would it accept a block reward different, than the one that is scheduled to occur (50 coins currently, half of that for some number of blocks, and then other fractions of that amount). The nodes know what rewards to expect based on the block number, as it is set to half based on that number.
To change it you would have to (convince people to) change all the clients, exactly like any other protocol change.
Bitcoin source code: https://github.com/bitcoin/bitcoin/blob/master/src/main.cpp#L1053
– Stephen Gornick – 2013-04-12T08:26:50.687@StephenGornick In order to see the code that limits bitcoin to 21 million, am I supposed to read down from line 1053? Is there an english translation of the code anywhere for non-coders? thanks – Alex Millar – 2014-07-22T22:21:57.023
Well, the source code is continually changing, so a pointer to a specific line of code in "tip" (the latest code that exist) will be obsolete in a short amount of time. – Stephen Gornick – 2014-07-23T15:24:53.163
1The code to look at is the GetBlockValue function.
The block subsidy started out at 50 but is halved every 210,000 blocks. So the english translation basically is "if block 1 through 210,000 then award 50 XBT per-block, if block is 210,001 through 420,000 then award 25 XBT per-block, if block is 420,001 through 630,000 then award 12.5 XBT, etc. Eventually (like a hundred some years from now) the reward is so small, there is no block award remaining to issue. – Stephen Gornick – 2014-07-23T15:30:27.997