I forked a repository a year ago, which at the time had GPLv3 license. Mainstream repository has now applied AGPLv3 license. Do I have to change my license too ? My fork's last commit is over a year ago (GPLv3).

  • 11
    Welcome to OpenSource.SE! This strikes me as a well-written, sensible first question, for which I thank you. I hope you stick around the site. – MadHatter May 26 '20 at 13:10
  • I recommend to contact politely the author of the upstream code.... – Basile Starynkevitch May 28 '20 at 17:00

Not only are you not required to change the licence, you are not permitted to. The code you took at the time was, according to you, conveyed under GPLv3. You've worked on it, and made a derivative work (in copyright terms), which you can only lawfully distribute under GPLv3 (see GPLv3 s5c).

Note also that now upstream have relicensed, you cannot trivially take ongoing contributions to their project and work them into your own (I'm not suggesting that you were doing this; only noting that hitherto you were permitted to do so, and the situation is now more complex). As the FSF explain, it is possible to combine work under AGPLv3 with work under GPLv3, but the accounting gets a bit messy. As long as you don't wish to do that and are happy to stay under GPLv3, you are fine to do so.

Should you wish to relicense your fork, you could rebase your fork against the current upstream project; essentially, you could take their current offering, and re-apply the changes you had made. At that point you'd have a derivative of a work received under AGPLv3, which by AGPLv3 s5c you can only redistribute under AGPLv3.

Such a rebasing would be further complicated if anyone other than you has contributed to your fork. You have no right to distribute their work under any terms other than GPLv3, so you would need to seek their permission to relicense their contributions under AGPLv3. If this is the case, and you go this route, make very sure to keep safe copies of the permissions.

  • 29
    "welcome to license hell" is one of my first thoughts. Well analyzed. – planetmaker May 26 '20 at 14:40
  • @planetmaker why, thank you! – MadHatter May 27 '20 at 9:20
  • 2
    Just note that such "rebasing" wouldn't need an actual git rebase. You could verify that all their code you have is now AGPLv3, relicense your own changes and simply stick a new license to the work (explaining what you are doing, please). – Ángel May 28 '20 at 0:45
  • @Ángel but the OP doesn't have any of their current code (see the last sentence of the question) hence the need for rebasing in order to relicence. And I take your point about not needing a git rebase, although I never said that it did. – MadHatter May 28 '20 at 6:45
  • 1
    Note that license rebasing is a big part of why many (larger) open-source projects expect you to assign contribution to someone/something else - it makes doing so much easier. – Clockwork-Muse May 28 '20 at 23:36

While MadHatter's answer covers the general case of a changing upstream license fairly well, it's worth noting that GPLv3 has a special compatibility clause with AGPLv3:

13. Use with the GNU Affero General Public License.

Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

Basically, this section of the GPLv3 allows you (or anyone else) to include GPLv3-licensed code in an AGPLv3-licensed program and, for most purposes, effectively treat it as if it was licensed under the AGPLv3 in the first place. Technically, the GPL code still remains licensed under the GPL even if included in an AGPL program, but the distinction is mostly academic.

What this means, in your case, if that if you want to relicense your fork under the AGPL, you can do that, even if it includes third-party contributions that are only licensed under the GPL. And, conversely, even if you decide to keep your fork GPL-only, the authors of the upstream version (or of another fork!) may still legally merge back your changes into their AGPL version if they want to.

Ps. There's also, naturally enough, a corresponding clause in the AGPLv3 as well. It's included in the same section as the Remote Network Integration clause (which is the main thing that differentiates the AGPL from the GPL):

13. Remote Network Interaction; Use with the GNU General Public License.

Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph.

Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License.

As written, this clause seems to allow you to also incorporate any AGPLv3-licensed code from the upstream project (or elsewhere) into your GPLv3-licensed fork, and to distribute the combined program under the terms of the GPLv3, as long as you (and any reusers) comply with the Remote Network Interaction clause of the AGPLv3 (which requires the provision of source code to any AGPLv3 or GPLv3 licensed parts of the code to any remote users of the software).

If I'm not mistaken, what this effectively means is that you can take GPLv3 and AGPLv3 licensed code and link or copy-paste them together. Insofar as the combined work is more that just the sum of its distinct parts, you can even choose which license (GPL or AGPL) to convey it under — but in effect, as long as there's any AGPL code included in the mix, you (and any reusers) will have to follow the AGPL's requirement to make all of the source code (both the GPL and the AGPL parts) available to any remote users.

Pps. The GNU licenses FAQ says (emphasis mine):

Please note that the GNU AGPL is not compatible with GPLv2. It is also technically not compatible with GPLv3 in a strict sense: you cannot take code released under the GNU AGPL and convey or modify it however you like under the terms of GPLv3, or vice versa. However, you are allowed to combine separate modules or source files released under both of those licenses in a single project, which will provide many programmers with all the permission they need to make the programs they want. See section 13 of both licenses for details.)

Honestly, I don't see anything supporting the "separate modules or source files" requirement in the license text itself; it seems to rest on a particularly restrictive interpretation of the word "combine", which is not specifically defined in either license. That said, given that it's apparently the FSF's interpretation, it may be wisest to abide by it and keep the GPL and AGPL parts of any mixed programs clearly separated.

  • 3
    There is a difference between "allowed to re-license" and "allowed to combine". It is trivial to create a project where different source code files are subject to different licenses and to create a programme from that. That's my understanding of the permission to include GPLv3 code in AGPL projects. – planetmaker May 28 '20 at 17:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.