As per Boris Mann's request , I am writing this short concept article.
I recently wrote some modules for a client. The normal way I work on these types of assignments is for me to retain copyright on the code, as well as give them them a copy (after all, this is PHP, and they have the source).
I also ask that I have the right to:
a) Sell the modules to other paying customer
b) Release the modules under the GPL license to the community
Sometimes, the client asks for a favor that I do not release certain functionality for everyone, because it makes their site less unique. As a courtsey, I often entertain this request.
Because I see the modules as useful to others, I then ask that a basic functionality version be released to the community. This does not have the extended features that I wrote for the client, yet is still useful to the community.
I can still sell the full featured extended version to paying customers.
This way, everyone wins: the community gets a base to build on, I get to sell it to others AND release a version under the GPL, and the client has a business edge.
Compared to the alternatives, it is the best solution to all. If we are not to release anything the community is deprived of it, and something is better than nothing.
Of course, this assumes that the module is totally new development that I did, and not based on any other GPL code, otherwise, the GPL takes precedence and all changes have to be made available to all.