Is it possible for a freelance programmer to use Open Source products under GNU Public License and make money given that he cannot stop his customers from freely distributing his products?
I have done this for 7 years. Most of my work is on LedgerSMB. The simple answer is yes. Here is more information as to how to do this and so forth.
Open Source Development is Pay Up Front for Development
With software licenses you are compensating a developer in arrears for development work. Microsoft spends vast amounts of money developing their products which they hope to make back through software sales. Occasionally this doesn't happen (remember Bob?) and so in this model the developer bears all risk.
With open source software, things are very different. You charge up front for the development, and don't try to make the money back on the other side. Contributing your changes back however, and hoping to ensure free redistribution cuts your maintenance costs, and this is a good thing.
Why Contribute Back
There are two important reasons to try to get your work incorporated in the main distributions of the software. The first is that it cuts your maintenance cost. Other people will find and fix bugs and this will benefit your customers for less cost than coming back to you. Happy customers refer more customers.
The second reason is that contributing back establishes your visibility in the projects you contribute to and this is a way of marketing your skills to others who already use the software. When you get more sales calls you can point to features you have done, some of which the customer may already be using, and this gives you an in sales-wise.
Of course not everything can be contributed back. Maybe some things the community doesn't want. Maybe some things are specific to a customer, and this gives you some extra support revenue down the road. However, if you minimize this, you will have happier customers and more customers.
Limits of the GPL
Under no interpretation of any version of the GPL is mere use of GPL software sufficient to impose the GPL on work you do. The question is what your licensing options are when you include GPL software in your solutions and this is not always an easy or straight-forward question to answer (for the v2 license, is it mere aggregation or derivation?, for the v3 license does 7(b) allow you to irrevocably grant user rights to your code to downstream users in excess of what the GPL allows? I think it must because otherwise the BSD license family is incompatible. Also does mere linking to a library under the GPL require your code to be under the GPL too? (Intensely debated in legal circles) Is this transitive? (aside from the FSF, the general consensus is no)
I prefer to release my code, where I can (a minority of my time), under the BSD license because it avoids these questions, but for the most part following community norms will never get you in trouble. These norms assume that BSD and GPL software can be combined together into a single work licensed, as a whole, under the GPL, that BSD code cannot have its license changed without first being modified (see http://www.softwarefreedom.org/resources/2007/gpl-non-gpl-collaboration.html) and so forth. Involvement in a community and following what everyone else in that community does is likely to be generally safe.
Yes it's possible, especially in this case where the freelance programmer makes money by creating custom products. Since the product is heavily customized for a particular customer, the customer can distribute it, but it will be of less benefit to other businesses.
In the case of a more generic product, if it is open source then one a customer buys it they can share it with their friends, colleagues etc, so there will be less sales. the freelancer could still make money by selling support services around the product though.