The only restriction the GNU General Public License makes, is that NO ONE has the right to take away this freedom from anyone else. When an author puts his code under the GNU GPL, the freedom is an inseperable part of his program. Of course, this is a thorn in the side of a lot of businesses eyes because it stops them from taking the code, modifying it, and then selling it as a proprietary program. As long as there are people who try to live the dream of instant wealth it is this freedom that stops firms like Microsoft from corrupting the future development of our system. This argument is easy to understand for everyone since it is exactly what we have been told to believe during the last 20 years.
Reality is a little different, though.
Private programmers who can live off selling self-written software are the exception. Usually they give their rights to the firm they work at and this firm earns the money by restricting access to that program. This is the question that is one of the core thoughts of the GNU Project. Solutions for standard problems that had to be solved over and over again can be accessed easily. If a group of users needs a certain feature in a program they just hire a programmer and let him implement it.