In a number of recent Dot Net Rocks shows Carl Franklin has mentioned that Microsoft is not anti-open source, just anti-GPL. From his comments it appears that Carl does not understand that a given piece of code may be released under a number of licences.
The GPL is based upon copyright law. By default you may not use someone else’s copyrighted code without permission.
With a commercial licence you are paid for the right to use the code. That is the price, if the price is too high don’t use the code.
GPL code is released on the condition that it is only built into an application or dll that only consists of GPL code or GPL compatible code. This is the price of using GPL code. If the price is too high don’t use the code.
If you modify GPL code you only need supply the changed source (under the GPL) to the person you give the application to and only if they ask. Some people do more and publish publicly but that is not part of the GPL.
There is no reason that a given piece of code cannot be released under multiple licences. If you own the copyright you can sell the code commercially and release the code under the GPL.