2

I want to take some GPLv2 licensed code written by someone else and add code with a BSD-3-Clause license, originally written by someone else. This BSD-code has been modified by me to add some functionality, where some of it uses the GPLv2-code (by calling its functions). I want to combine them to make a larger program. This program as a whole would have GPLv2 as its license but the BSD licensed source files would keep their BSD license so that people can share them (but not the program as a whole) without the GPLv2 requirements. Is this possible?


GPLv3 allows additional terms to be added, in section 7.

You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

[List of types of terms one can add]

I want to do something similar but this is not explicitly permitted in GPLv2. My understanding is that you can still do something similar. The closest I have found in the GPLv2 license text is this:

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

but it requires the codes to be "reasonably considered independent and separate works in themselves".


Is it possible to do this even if the added BSD-code is not 100% independent (it requires the GPL-code to work correctly)? It can still be somewhat considered a separate work since it was developed as a separate project, but then modified by me and combined with the GPLv2-code.

If not, does that mean that it is impossible to add any permissive-licensed code to GPLv2-code and keep the permissive permissions for the added code, if it is not 100% independent?

If there is a way, I would like to know how I can interpret the GPLv2 license text that way.

Update: From the GPLv2 FAQ: "But you can give additional permission for the use of your code. You can, if you wish, release your module under a license which is more lax than the GPL but compatible with the GPL." It sounds like I can use "additional permissions" just like in GPLv3. Is this correct? Does it not matter how independent the "module" is?

  • 1
    Indeed you may not remove the BSD license present on someone else's code, but you may include that BSD-licensed within a GPL-licensed work. If the BSD-licensed code were later to exist again in isolation from any GPL-licensed work, it would not continue to carry GPL requirements. These seem likely highly relevant GPL FAQ items: gnu.org/licenses/gpl-faq.en.html#IfLibraryIsGPL and gnu.org/licenses/gpl-faq.en.html#GPLModuleLicense ("You can, if you wish, release your module under a license which is more lax than the GPL but compatible with the GPL.") – apsillers Jul 30 '18 at 16:22
  • I'm not talking about preserving the BSD license note. I'm asking, can I make it possible for my users to take the BSD parts of the program and share them without the GPLv2 requirements? Also note that this is only about GPL version 2, not 3. I already know you can do this with version 3 using the "additional terms". The question is also not about what license to use for the whole program. I know it has to be GPLv2. – Robalni Jul 30 '18 at 16:38
  • Without fully addressing your conserns here in the comments, I'll just note that the old GPLv2 FAQ has identical versions of those FAQ items: gnu.org/licenses/old-licenses/… – apsillers Jul 30 '18 at 16:42
  • @apsillers "If the BSD-licensed code were later to exist again in isolation from any GPL-licensed work, it would not continue to carry GPL requirements" for GPLv2 I respectfully disagree; see my answer for more details on my position. – MadHatter supports Monica Jul 31 '18 at 5:58
2

IANAL/IANYL. That said, I got so frustrated with this question that some time ago I asked a barrister specialising in IP law for his take on how English and Welsh law would most likely approach this question.

Firstly, remember is that licences do not inhere in software. They are instead accepted by persons (legal and natural) when software is conveyed to them.

Secondly, by analogy with restrictive covenants in land law, there is no reason why the terms of more than one licence cannot simultaneously apply to the conveyance of any given piece of software. This is not dual-licensing, where you are free to choose which of a menu of licences you will accept a conveyance under (A or B). This is the application of multiple licences, so that your obligations are the union of those in all the licences (i.e., obligations which appear in any of them apply to you), and your permissions are the intersection of those in all the licences (i.e., only permissions which are in all of them apply to you); that is, A and B.

When you take BSD software and combine it with GPL software into a single work, the resulting combination must be distributed under the terms of the GPL (GPLv2 s2b). That isn't relicensing; it's adding the requirements of the GPL to those of the BSD licence in regard to the conveyed work. This is possible because the BSD licence does not forbid it, and because the resulting obligations aren't self-inconsistent and the resulting permissions are non-zero.

It also means that a third party could not take the BSD work back out of the combined work while leaving the obligations of the GPL behind. However, although the BSD-code-as-modified-by-you is part of this greater work, if it stands alone as a work you are free to distribute it separately under the terms of e.g. the BSD licence. People who would like to use it under those terms are free to read in the GPL program's sources that (e.g.) "librobalni is available from https://librobalni.example.org", and go and get it from you under a BSD licence. GPLv2 was pretty clear about this, in s2 (italics mine):

If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License

So, to answer your questions:

Is it possible to do this even if the added BSD-code is not 100% independent (it requires the GPL-code to work correctly)? It can still be somewhat considered a separate work since it was developed as a separate project, but then modified by me to combine it with the GPLv2-code.

The code was developed as a separate project, so it seems to me it's still likely to stand alone. Adding to it can't have made it smaller. No library can function without being linked into something, so merely not functioning without some more code is no bar to it being a project in its own right.

Therefore, although your modified BSD code must also be under the terms of GPL as part of the big project, it can be distributed on its own under just-BSD by you.

  • The legal domain can have some truly startling properties, so I want to be sure I understand this answer correctly. Suppose Alice distributes her own BSD work to Bob, and then Bob includes it in a larger GPL work. Later, Charles strips out all of Bob's work, leaving exclusively Alice's work (but Charles never interacted with Alice). I understand this answer to mean that if Charles distributed a derivative of that stripped work (which includes none of Bob's work) in a GPL-incompatible way, then Charles would run afoul of the GPL requirements of Bob's license grant. – apsillers Jul 31 '18 at 19:14
  • My clarifying question is: are you saying here that Bob could prevail in a suit against Charles based on how he redistributes only Alice's work, purely because Charles received Alice's work from Bob under the GPL? I don't see on what grounds can Bob sue Charles when Bob's copyrighted work is not involved -- but that leads me to think that I might misunderstand the content of your answer. (It's also possible that my model of the players involved is different from what you propose in your answer.) – apsillers Jul 31 '18 at 19:17
  • I edited my question (the part quoted in this answer) to clarify that I did not only modify the BSD code to make it work with the GPL code. I actually added quite a lot of other functionality too, if it makes any difference. – Robalni Jul 31 '18 at 19:56
  • @apsillers "I understand this answer to mean that if Charles distributed a derivative of that stripped work (which includes none of Bob's work) in a GPL-incompatible way, then Charles would run afoul of the GPL requirements of Bob's license grant." yes, that is my understanding. However, your clarifying question gets tied up with who has standing to sue, as well as the grounds on which they might file suit, so I don't propose to address it. – MadHatter supports Monica Jul 31 '18 at 20:22
1

The BSD license and the GPLv2 are considered compatible licenses by the Free Software Foundation, and thus joint works that include both licenses are legally distributable. However, all of the terms of the GPLv2 apply to this distribution.

Your modified version of the BSD-licensed code depends on the GPL-licensed code (accoding to you). In that case, the FSF would say that your code can no longer be distributed solely under the BSD license; it must carry the GPL as well, because of the dependancy on GPL-licensed material. This is what's called Linking, and is somewhat debatable but not with out a copyright lawyer on your side. Now, some GPL-licensed projects carry a Linking Exception, which would make your desired licensing scheme legal ... but it's up to the upstream GPL project to carry that rider, you can't add it for them.

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.