lurch icon indicating copy to clipboard operation
lurch copied to clipboard

Licensed under "GPL 3 (and just that)" or "GPL 3 or later"?

Open hartwork opened this issue 3 years ago • 9 comments

Hi!

libaxc seems to be licensed under GPL 3 (and just that, not GPL 3 or later) so I have a guess here, but I would be nice be clear in the lurch code/repository, which specific license is in place here — did overlook something? Without GPL 4 released yet this may sound a bit like splitting hair but some distro distinguish between GPL-3 and GPL-3+ explicitly, and right now I'm not 100% sure what we have with lurch. Ideally, all code files would have a brief header being clear about it. If you want help with that, let me know.

Best, Sebastian

hartwork avatar Feb 21 '21 20:02 hartwork

hi @hartwork,

thanks a lot for your offer to help. to be honest, i have no idea what i'm doing with the licenses, so i really need it. i tried to be as permissible as possible, but ran into the following problems which you can maybe help me solve:

  1. i think i misunderstood the relationship between GPL and e.g. MIT, so i thought my code needs to be some sort of GPL so i can use it with libsignal-protocol-c and libpurple (both GPL).
  2. wanting to still have it as permissible as possible, i wanted it to be "gpl 2 or later", but i couldn't find a single file to throw into the repo for github to properly parse to achieve that. so i just used gpl3 as it seemed to not really matter anyway.
  3. if (1) is true, i would like the license to be non-gpl anyway, but now i am not sure if i can just change the license, considering there have been contributions from others. i think this is also related to (2).

gkdr avatar Mar 10 '21 20:03 gkdr

Hi @gkdr,

that's a lot of complex ground to cover at once. I'm not a lawyer and have some questions about licensing unanswered myself, but I'll try to answer the parts where I'm confident.

  • Regarding "permissive": While GPL is a good license for certain things, it's a lot less "permissive" than other popular licenses like MIT, BSD, Apache 2. There are two schools: People who believe that freedom means (a) that you get my code and if you change it things should remain in the pool of code given to the community — that's copyleft and it limits one key freedom, the freedom to take away freedom from others and is sometimes called "viral" (which is political) — or (b) freedom means to allow even that: to take that code and be okay if it goes into a sink and does further grow community. I think it's fair to say that school (a) is closer to GNU people while (b) is closer to BSD people and more "permissive" in their schoold of thought.

  • Simplified, when using GPL code, you code needs to be GPL (or even AGPL, the stricter "Affero" cousin of the GPL). I will not distinguish between static and dynamic linking here, e.g. for simplicity.

  • GPL 2 and 3 are incompatible to each other. That's unfortunate but unfixable by design. As a result:

    • When you pick "GPL 2 and just 2" for your code, that code cannot be used by other GPL 3+.
    • When you pick "GPL 2 or later", that code can be used by all of GPL 2, 2+, 3, 3+ code but you miss out on enforcing what GPL 3 did better than 2, if your care about those.
    • When you pick "GPL 3" — either "and just 3" or "or later", that code cannot be used by other GPL 2 code.
  • Regarding GitHub's interpretation of your license file, I would suggest just to put the 2er version of the GPL into COPYING if you want to go with 2 or 2+ and the 3er version for 3 or 3+. The distincton between X and X+ should best be done in the header of each code file, I believe, e.g. because individual files may be re-used of a project.

I'll hit the brakes here for now. Let me know that you think.

Best

Sebastian

hartwork avatar Mar 10 '21 21:03 hartwork

hi @hartwork,

thank you for the detailed reply. it seems the situation is the following:

  • i am limited to just GPL3 by libsignal-protocol-c's GPL3. i completely forgot about that, but found it in #21.
  • for the submodules, i can pick a compatible license, which does not necessary have to be GPL.
  • it's also fine that libpurple is not GPL3, but GPL2. (?)

so the answer to your initial question seems to be that exactly GPL3 is necessary. would a license header in each file still help?

gkdr avatar Apr 03 '21 20:04 gkdr

Hi @gkdr,

* i am limited to just GPL3 by `libsignal-protocol-c`'s GPL3. i completely forgot about that, but found it in #21.

Matches my own understanding, yes.

* for the submodules, i can pick a compatible license, which does not necessary have to be GPL.

Matches my own understanding, yes.

* it's also fine that libpurple is not GPL3, but GPL2. (?)

If libpurple is "GPL 2 only" then you'd have "GPL 2 only" libpurple and "GPL 3 only" libsignal-protocol-c under one roof and that may be incompatible, either incompatible with any linking or incompatible with static linking, only. I suggest to talk to a laywer then, maybe the EFF can help with sponsoring a laywer, to be sure. There is some chance you find this table of help or interest, I'm not 100% sure what to make of it, with regard to lurch's case.

so the answer to your initial question seems to be that exactly GPL3 is necessary.

I'm not sure, please see above.

would a license header in each file still help?

In any case, 110%, yes please. For instance, libpurple has some files that say "just GPL 2" (e.g. file libpurple/protocols/novell/nmfield.c) and some "GPL 2 or later" (e.g. file libpurple/desktopitem.c) and e.g. Wikipedia apparently mis-summarizes that as "GPL 2 or later".

hartwork avatar Apr 03 '21 22:04 hartwork

Okay, I will add a license header to each file. Do you have a recommendation for a tool which does that for me? :slightly_smiling_face:

All the core libpurple files I checked are "GPL2 or later", and as well as the XMPP protocol plugin. I'm pretty sure that some other protocol plugin I don't even use is not relevant even if it's in the repository, as it's a separate shared library that I don't link against (unlike the XMPP prpl). Based on your table, it does not seem to be a relevant case that files in the same library have different licenses.

gkdr avatar Apr 07 '21 07:04 gkdr

All the core libpurple files I checked are "GPL2 or later", and as well as the XMPP protocol plugin. I'm pretty sure that some other protocol plugin I don't even use is not relevant even if it's in the repository, as it's a separate shared library that I don't link against (unlike the XMPP prpl). Based on your table, it does not seem to be a relevant case that files in the same library have different licenses.

Okay cool. I'll will leave it at that and just trust your analysis.

Okay, I will add a license header to each file. Do you have a recommendation for a tool which does that for me? slightly_smiling_face

I haven't used any tool for this job myself but

  • https://stackoverflow.com/questions/151677/tool-for-adding-license-headers-to-source-files has some ideas and links to existing tools
  • if you paste your candidate header here, I'd also volunteer to mass add it to the the code as a new pull request for you

hartwork avatar Apr 07 '21 14:04 hartwork

PS (and slightly off-topic): What I'm personally looking for is a tool to automatically write file-specific headers with author-email pair listings based on Git history. (EDIT: So far I found: http://0pointer.net/blog/projects/copyright.html)

hartwork avatar Apr 07 '21 14:04 hartwork

Hi,

What the final decision? GPL-3.0-or-later or GPL-3.0-only?

van-de-bugger avatar Jun 30 '23 21:06 van-de-bugger

Hi @van-de-bugger, as far as I understand, this has to be GPLv3-only because it uses libsignal-protocol-c, which is also GPLv3-only. That is already what the LICENSE file says and the benefit of inserting the header into every file is not clear to me, so nothing else happened. Maybe you can tell me?

I personally would like a maximally permissive license, so if I'm wrong please tell me as well. Do you need it for something specific?

gkdr avatar Jul 24 '23 04:07 gkdr