The GPL Nitty-Gritty
The GPL itself consists of a preamble, which explains the philosophy behind the license. There are thirteen terms and conditions of the license, numbered 012. Each one of these terms and conditions places a restriction on how you can copy, modify, or distribute an application using the GPL.
It's important to note that, as stated in the GPL, "[...]the act of running the Program is not restricted." That means that if you download and use a GPL application for your own personal or even commercial use, the GPL really has no impact on how you use the program at all. The GPL concerns itself only with distributing and modifying programs.
When it comes to distributing, copying, and modifying software released under the GPL, however, there are a number of important restrictions.
The first restriction, and arguably the most important, is that if you distribute software covered by the GPL, you have to make the source code for the software available. The GPL suggests that you do this simply by including the source code in the package with the binary files for the software. With this method, the source and the program are delivered together, and there's no issue. In some instances, that procedure might not be practical, so the GPL does allow you to distribute the binaries and source code separately, just so long as you do make that source available. And you can't just make it available online. If you're engaged in the distribution of software covered by the GPL, you have to make the source code available via mail order, although the GPL does permit you to charge to cover your expenses in doing so.
The second major restriction of the GPL resides in modifying the software. Everyone is completely free to modify the source code of a GPL-covered piece of software in any way. You can add features or take features out. You can change the look and feel of the application. It doesn't matter what change you want to makeyou're free to make it. However, you're not free to do whatever you want with your modified code; there are some restrictions imposed by the GPL.
Let's say that you modify the application simply for your own personal use (or for private use within your company). Then you don't really have to do anything under the GPL. The GPL only kicks in if you decide to distribute your modified version of the software; for example, if you want to give your program to a client or sell it to customers. Then you're distributing software covered by the GPL, and under the terms of the GPL, your modifications are bound by GPL restrictions as well; anyone who gets a copy of your modified software must also be provided with the source code for the modifications.
This restriction doesn't mean that you can't charge money for the changed application; you're completely free to do so. However, keep in mind that once someone has a copy of the modified source code, the GPL gives that person or company the right to distribute that softwarewithout paying you a license fee or charging one to pass on the software. They can give it away freely.
This point is one of the most often cited and most misunderstood by critics of open source software. After all, if you invest the time and energy into modifying the software, shouldn't you be compensated for your efforts? And how can you ensure that you will be compensated, if the first person you sell your product to starts giving away your new version?
The short answer is that you can't ensure your compensation. Indeed, someone can come along, buy the software, and then turn around and start giving it away, complete with the source code you wrote to make your changes. However, as the rise of Linux and Linux vendors has shown, you still may be able to profit from your changes in several ways:
You can charge for supporting your software. While someone might be able to get the software for free, they might need your help in installing and using it correctly. The GPL doesn't prohibit you from charging for these services.
The GPL also doesn't prohibit you from charging for the version of the software you're distributing, and many people (and certainly many companies and organizations) would rather pay for your modified software, to ensure that they're getting the version you created and not some other version that has been modified even further.
Finally, the GPL doesn't stop you from making warranties on versions of the software you create and distribute, which adds value to potential customers. If you purchase Linux from Red Hat, you get the support, documentation, and peace of mind that comes from having purchased a CD from a known entity. If you download it free from the Net, you don't necessarily get that same level of assurance. To many consumers, that's a very important distinction.
So the GPL doesn't in any way stop you from charging for software. You can charge a fee to download GPL-covered software (so long as that fee includes both source and binaries) or to receive a published version on CD or some other media. You can charge for support, and even charge for custom application development. The "freedom" that the GPL grants includes the freedom to make money and sell a product. However, keep in mind that your changes will become available to anyone who purchases the modified product, and that they could, in turn, choose to distribute the product for free. That's the double-edged sword of the GPL, although clearly that hasn't stopped companies from making their way in the market economy with GPL software.