In a non capitalist world where everybody codes for fun GPL would sound great, but in the actual real world there are decent and acceptable use cases where it makes sense not to "contribute back", e.g. a business might not want their competitors to copy-paste the code of its core product.
The fast development Linux enjoys is the result of lots of 'capitalist' companies cooperating under the GPL so it's certainly not a case of one or the other.
Certain types of business, like that of using open source but not wanting to contribute 'the secret sauce' back is obviously not compatible with the GPL. But for that there are other licences.
For commercial use you want to use components that have been LGPL'd. Using LGPL'd components to build your application does not require your application to be either GPL'd or LGPL'd. See http://en.wikipedia.org/wiki/GNU_Lesser_General_Public_Licen... for information on LGPL.