« Initial code in SVN. 
Updated look. » 

Brief overview of the GNU GPLv2.

There is an ongoing discussion concerning the GNU GPLv2 at one of the sites I read. Normally I ignore all the back and forth discussions people post on their blogs, it’s a huge time sink. However since I will be releasing the software developed here under the GNU GPLv2 this is a topic that should have some relevance.

In this article I am just going to use GPL to refer to the GNU GPL version 2. The main articles leading up to this post are here, here and here.

The discussion is primarily around people being confused with the GPL and what is allowed under the license. The GPL is a license which states what is expected up front, if you comply with those terms then you do not need to contact the author for permission.

If you want to do something that is not authorized by the GPL a separate license is required from the author. This way the author is not bothered with people asking to use their software for pre-approved uses.

So what use is approved by default? Everything.

The GPL does not restrict how you use the software, the restrictions only take place when you want to distribute the software. This is the first area where people new to Open Source may get confused, usually a license tries to limit what you can do with the software once it is in your possession.

The second area of confusion is on what we call linking. The Free Software Foundation has a good FAQ page on this point, but I believe this is confusing if people lack a programming background. As an aside, the Free Software Foundation is the organization which maintains the GPL and holds license over a large body of GPL code.

Why does a programming background matter? The GPL was written in a time when C and C++ ruled the roost, it was also written mostly by a programmer (with the help of a lawyer).

If a person has programmed in C or C++ then the term linking has a specific meaning. However if you have only known higher level languages such as Ruby, Python or Perl, which do not have an explicit linking process, the term may seem more ambiguous. The GPL FAQ says in part:

If the modules are included in the same executable file, they are definitely combined in one program. If modules are designed to run linked together in a shared address space, that almost surely means combining them into one program.

By contrast, pipes, sockets and command-line arguments are communication mechanisms normally used between two separate programs. So when they are used for communication, the modules normally are separate programs. But if the semantics of the communication are intimate enough, exchanging complex internal data structures, that too could be a basis to consider the two parts as combined into a larger program.

Why does this matter? If, under the GPL, you link two programs together they must have compatible licenses. If one of them is GPL then the other must either be GPL or under a license that allows the same freedoms as the GPL, if it is ever distributed.

This is the cost of using GPL software. If the cost is too high, then you need to find some other software to build upon.

It is important to remember that this is only if you distribute the software outside your organization. If the software is used internally then the source code never has to be shared. However if you provide a copy to anyone outside your organization you must also make available the source code and they have the same rights as you do.

They can turn around and post that source code on the Internet if they desire, including your changes. They can also charge money for it, but they cannot use a trademark of yours. For example, I can download all of the code that comprises Red Hat Linux, but I can’t sell my version of that code as Red Hat Linux. I can re-brand the code and sell it under a different name though.

You also can’t add restrictions to the GPL, it wouldn’t be the GPL anymore. The GPL FAQ says in part:

You can use the GPL terms (possibly modified) in another license provided that you call your license by another name and do not include the GPL preamble, and provided you modify the instructions-for-use at the end enough to make it clearly different in wording and not mention GNU (though the actual procedure you describe may be similar).

The biggest problem I have seen with people being confused about the GPL is that they expect it to be more complex. Remember the GPL is a distribution license, it does not restrict how code can be used only the terms under which it can be distributed.

The main GPL FAQ answers a lot of questions and includes a quiz if you want to test your understanding of the GPL.

If I can clarify anything or you have questions please let me know.

TTFN,

Wayne

Tags: knownGood, GPL

This post was edited to clean up some spelling errors.

This entry was posted on Saturday, March 3rd, 2007 at 1:16 pm and is filed under Miscellaneous, Programming. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

One Response to “Brief overview of the GNU GPLv2.”

  1. Mitchell Ashley Says:

    Good overview, Wayne. Thanks.

    - Mitchell

Leave a Reply

You must be logged in to post a comment.