Use of the GNU Affero GPL is on the rise, so it’s no surprise that I get a lot of questions about it. Most recently, I was asked how AGPL-licensed extensions interact with a Content Management System that is licensed under the GNU GPL, version 2 or later. Generally speaking, AGPLv3 extensions are compatible with CMS code licensed “GPLv2 or later”. The complication arrives when you have multiple extensions of various licenses because the extensions need to be license-compatible with each other as well. Hopefully this post will clarify matters.
There are three versions of the AGPL. The first wasn’t much used. The second exists solely as a way to upgrade to AGPLv3, and it is not a license used for distribution. The third is what most people think of when they say “AGPL”.
At any rate, when using AGPL (or even just discussing it), make sure you specify which license you mean. You might want to use the phrase “AGPL version 3 or later” to describe your AGPL-licensed code.
As with AGPL, there are multiple version of GPL as well. There was version 1, which is no longer in use. There is GPLv2, which is the most used software license on the planet (although I’m guessing not in outer space). And there is GPLv3, an update to GPLv2 that is growing in popularity.
Some software is licensed under multiple versions of GPL. This includes software that is licensed under GPL but doesn’t specify a version, as well as software that designates a minimum license version (e.g. “GPL version 3 or later”). Other software limits itself to a single version (e.g. “GPL version 3 only”).
There are various ways to combine these licenses, so here is license compatibility in tabular form:
|AGPLv1 only||AGPL||AGPLv3 only||AGPLv3 or later|
|GPLv2 or later||No||Yes||Yes||Yes|
|GPLv3 or later||No||Yes||Yes||Yes|
Assuming you’re not dealing with AGPLv1 code (a safe assumption almost every time), as long as none of your extensions are GPLv2 only, you can mix AGPLv3 extensions without difficulty.
If, however, you are dealing with GPLv2-only extensions, you can run into complications. While the extensions can be distributed separately, if you distribute a “CMS-in-a-box” or deliver to somebody a complete CMS install that comes with the extensions already plugged in, mixing extensions of different licenses can lead to incompatibility. Packaging up GPLv2-only extensions with AGPLv3 extensions is usually a license violation.
Because of this, projects that maintain extension directories might consider requiring extensions to select from a set menu of licenses. That way developers and repackagers can be assured the extensions will play well with each other. To ensure extensions are license compatible, both now and in the future, you could restrict extensions to the following licenses: “GPL”, “GPLv2 or later”, “GPLv3 or later”, “AGPL”, “AGPLv3 or later”.