And being already set up for testing does not make it free. Hardware dies, and you have to replace it. More and more developers move on to newer OSs, and it becomes harder for them to get all of their development environment working in the older OS to find and fix bugs.
Have you ever tried developing a product with backwards compatibility across 4 different OS releases? It is by no means easy, it limits what you can do, and it makes your software more complicated and bug prone.
Don't think of it as having to make a conscious decision to stop. It's more that you have to make a conscious effort, that gets greater as time goes on, to continue supporting the older release. More libraries that you use start dropping compatibility. More new features have to be ifdef'd out, leading to divergence in what your software supports on different systems. More effort has to be put into keeping the build system running. And more manual testing needs to be done.
(1) Being "already set up for testing" for an older OS version
and
(2) continuing to use the testing setup for that version in addition to ever increasing new test setups (for 10.6, 10.7. 10.8 etc) and codepaths
is not the same thing.
As you get newer OSs to support, maintaining older testing setups means more work, and more IFDEFS and such in the code.
Putting more care in the LATEST offering. Putting more care in older versions if a loosing proposition.
And it's not just a "throw more people / money at it" problem. After some point the complexity of legacy support grows exponentially and the code suffers (or gets hold back).
>Car makers don't stop making spare parts a couple of years after a new model comes out. If they did no one would buy them.
5 years in computing is like 20 car years...