Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
hartwork opened this issue Feb 21, 2021 · 9 comments
Open

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

hartwork opened this issue Feb 21, 2021 · 9 comments

Comments

@hartwork
Copy link

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

@gkdr
Copy link
Owner

gkdr commented Mar 10, 2021

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).

@hartwork
Copy link
Author

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

@gkdr
Copy link
Owner

gkdr commented Apr 3, 2021

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 Missing license #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?

@hartwork
Copy link
Author

hartwork commented Apr 3, 2021

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".

@gkdr
Copy link
Owner

gkdr commented Apr 7, 2021

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

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.

@hartwork
Copy link
Author

hartwork commented Apr 7, 2021

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

@hartwork
Copy link
Author

hartwork commented Apr 7, 2021

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)

@van-de-bugger
Copy link

Hi,

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

@gkdr
Copy link
Owner

gkdr commented Jul 24, 2023

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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants