I am surprised Apple let this happen.
Firstly, I understand why AT&T and O2 are doing this in line with how their mobile phone contract model works, which is fine IF this were just a mobile phone. Its not...
Its a platform for application vendors to put next gen mobile applications, the likes of which we haven't seen yet into the hands of, well, everyone. And Apple stands to punch that ticket each time an app is sold... The revenue stream for Apple is not solely the sale of the handsets, long term app sales will make more money than profit on the device. What this move has done has set the biggest app consumers (the fanboys) and early adopters up to NOT be on the latest hardware. This means the application vendors will be targeting the platform that most people have, the existing 3G model and not the new features of the 3GS. The platform will stall for at least 6 months. Enough of a window for something else to come along...
Think that wont happen? Well look... Apple themselves have said there are 40 million handsets out ther currently, a lot of people who are likely to want an iPhone, already have one. Most of them wont upgrade due to the contracts, and new customers wont exactly flood in. Add to that the fact that pretty much all 3G users (in the UK) are on the same length of contract, expiring at around the same time. If they arent going to buy themselves out of a contract, they arent likely to lock themselves in to another 18 month contract 6 months out from the potential launch of a new device. By any logic, the 3GS will be in far fewer hands than the 3G. No app vendor is going to want to limit their market, therefore the new features on the 3GS will not be exploited nearly as much as Apple would hope by app developers. Therefore stale platform... Better products have died because of similar issues.
This can only play into the hands of competing platforms.
Here is a final suggestion to O2 customers who are looking to upgrade... Consider buying phone insurance that includes contract / upgrade insurance. That way you can invoke the upgrade clause in your insurance policy when you need to get out of one contract in order to upgrade. The premiums cost less that the contract buy out so for situations like this it is perfect.
I can only imagine next time round, Apple and the carriers might work to align the release cycle with the pay-off of the phones since the last release. i.e. 18 months between releases or 12 month contracts.
I have pretty much decided to skip the 3GS at least until its more favorably priced or I can invoke my contract get out clause.