An open source software is developed in a publicly-accessible source code repository. Starting from the first commit, the source code is licensed under the GPLv3. There is only one copyright holder. On the 10th commit, an official release of version 1 of the software occurs. Two commits later, on the 12th commit, the copyright holder changes the license from GPLv3 to the BSD 3-Clause license, and continues to develop the software. The repository is now at its 20th commit. The question: when the code was relicensed, was all the old code (commits 1 to 11) relicensed as well? If not, how should the copyright holder relicense the old commits without altering the version control history of the repository?

1 Answer 1


There seem to me to be two questions here. Firstly, the issue of relicensing, and secondly, the issue of version control systems.

The first question is hard to answer, because it presumes that licences inhere in code. They do not; instead, their rights and obligations attach to recipients of the code through the act of conveyance. Once you think that way, the problem goes away.

Assuming you have the right to relicense the code, then you can change, right now, the licence declarations in the current (and also, if you wish, in the old) versions. Anyone who gets a version from you will get it on the terms stated in that version at the time that they get it.

Persons who already have copies of old versions have them under the terms that they were advised of at the time they took them. You cannot revoke those terms retrospectively. If those terms, as free licences do, permit the licensees to further redistribute the code, then if they choose to do that it will be done on the terms of their choice, subject to the constraints imposed by the licence at the time of the original conveyance.

The second question is specific to your VCS, and we can't advise on that here.

  • How do I relicense (or rather add another license) the older versions of the code? Do I just mention it somewhere in the project's documentation, wiki, or website? Something like "commits 1 to 11 are now dual licensed under the GPLv3 or BSD 3-Clause license".
    – Flux
    Sep 13, 2022 at 7:59
  • Wherever your code currently has licensing statements (beginning of each file, LICENSE file or similar, whatever), just change what appears therein.
    – MadHatter
    Sep 13, 2022 at 8:02
  • But that approach involves modifying version control history, which is a discouraged practice when developing software in a public repository (e.g. GitHub).
    – Flux
    Sep 13, 2022 at 8:05
  • We can't comment here on the specifics of your VCS. Although it's completely lawful, relicensing old versions is an unusual practice, since it results in similar codebases appearing in public with different licence arrangements, so free-software VCS don't generally easily accommodate it. In some VCS, you could bump the old version numbers that you're re-releasing (eg 1.10-1.15 were GPLv3, but 1.10.1-1.15.1 are BSD3). You will need to find something that works for your specific VCS (which I infer is git).
    – MadHatter
    Sep 13, 2022 at 8:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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