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

License issue #113

Closed
HookedBehemoth opened this issue Mar 21, 2024 · 22 comments
Closed

License issue #113

HookedBehemoth opened this issue Mar 21, 2024 · 22 comments

Comments

@HookedBehemoth
Copy link

I just saw that this project lifted big parts of it's reboot logic from hekate, atmosphere and studious pancake which are all GPLv2 licensed. The license you chose for this project isn't compatible with the GPL Software License. See https://www.gnu.org/licenses/license-list.en.html#ccbysa

@ppkantorski
Copy link
Owner

ppkantorski commented Mar 29, 2024

The GPLv2 code is included separately from the CC BY-NC 4.0 material. Please keep that in mind. There is code in the project that is of a public license, code that isn't. I made sure to give you credit as well because I appreciate your contributions, but do note that not all code included is of the same license.

@ppkantorski
Copy link
Owner

ppkantorski commented Mar 29, 2024

For that code, I did not change the license intentionally for this very reason. (see here)

Changing licenses for publicly licensed projects is not something that I am allowed to do, but licensing my own code is.

On a sidenote, my libTesla fork also utilizes its original license, not CC-BY-NC-4.0, for the same exact reason despite my numerous modifications and optimizations. (see here)

I'll leave this issue open for a few more days if you have any additional comments, questions or concerns.

@HookedBehemoth
Copy link
Author

Hey,
This is fundamentally not how interactions with the GPL class of licenses work. You can read up on it in the licensing terms themselves or under this point in the FAQ https://www.gnu.org/licenses/gpl-faq.html#IfLibraryIsGPL
I recommend you release your code that links against libtesla, sp, Atmosphère and hekate code under the GPLv2. If you don't have the rights to do so, please stop distributing binaries.

@WerWolv
Copy link

WerWolv commented Mar 31, 2024

Behemoth is absolutely correct here. libtesla is under GPLv2 and you're statically linking that into your binary which requires the entire code that interfaces with it to be under GPLv2 as well.
Probably the only thing you're allowed to have under your current license are assets, everything else needs to follow libtesla's license and the license of all other projects you lifted code from.

@ppkantorski
Copy link
Owner

ppkantorski commented Apr 3, 2024

I see you point now. So I believe that now I may need to make it explicit in code that is not being statically linked or using methods directly from either libraries under my license (assets), and which code is not and must fall under GPLv2. I appreciate the clarification, it was indeed something I overlooked. Also, I really appreciate your work. libTesla was a lot of fun to play with last year, as well as everything else you've made.

Behemoth is absolutely correct here. libtesla is under GPLv2 and you're statically linking that into your binary which requires the entire code that interfaces with it to be under GPLv2 as well. Probably the only thing you're allowed to have under your current license are assets, everything else needs to follow libtesla's license and the license of all other projects you lifted code from.

@ppkantorski
Copy link
Owner

ppkantorski commented Apr 3, 2024

Hey, This is fundamentally not how interactions with the GPL class of licenses work. You can read up on it in the licensing terms themselves or under this point in the FAQ https://www.gnu.org/licenses/gpl-faq.html#IfLibraryIsGPL I recommend you release your code that links against libtesla, sp, Atmosphère and hekate code under the GPLv2. If you don't have the rights to do so, please stop distributing binaries.

I will make sure it is explicit that the license for the binary is GPLv2, but i will preserve my own license on my code not directly statically linked to yours or WerWolv's. I do not intend on redistributing binaries that do not fall under GPLv2, but my front page "license" may indeed be misleading since some derivative materials are being used. Again, the point of me using additional licenses was not to overwrite GPLv2 or its existing protections.

@HookedBehemoth
Copy link
Author

HookedBehemoth commented Apr 5, 2024

but i will preserve my own license on my code not directly statically linked to yours or WerWolv

All the code in this repository statically links to GPLv2 code.
I don't get where you see a boundary here. You are obliged to share all this code to your users under the GPLv2.

@ppkantorski
Copy link
Owner

ppkantorski commented Apr 5, 2024

Not all code is statically linked / directly utilizing methods from the GPLv2 code. Lots of code are custom functions i wrote myself that can be 100% separated from any of yours or WerWolv's code (and don't rely on any methods from either). The boundary is drawn within the code itself. Anywhere GPLv2 code is imported for instance needs to be GPLv2 (hence what it means to be statically linked). Have you reviewed all of my code for yourself to make that judgement?

Think of it like this. Even 100% without any of your's or WerWolv's code, my program will still function when being ran on the command line and could still "potentially" be used on any computer. It is not limited to Switch Homebrew.

but i will preserve my own license on my code not directly statically linked to yours or WerWolv

All the code in this repository statically links to GPLv2 code. I don't get where you see a boundary here. You are obliged to share all this code to your users under the GPLv2.

@WerWolv
Copy link

WerWolv commented Apr 5, 2024

This is not how the GPL works. You're using libtesla (which is under GPLv2) in various files to fulfill the Overlay's purpose. Any code that interfaces with GPL code is required to be under the same GPL license as well. And that condition propagates through your entire program. Every function that will ultimately call any function in libtesla needs to be under the GPL license which is every single one of them in one way or another (not that you generally put a license on individual functions).

Think of it like this. Even 100% without any of your's or WerWolv's code, my program will still function when being ran on the command line and could still "potentially" be used on any computer

Without libtesla, your overlay in the current state wouldn't be able to run at all. If you reimplemented libtesla from scratch though, you could obviously put it under any license you want. But you chose to link to libtesla which in turn requires you to follow its license. You can read about this specifically in subsection 2b of the GPLv2 license:

You must cause any work that you distribute or publish, that in whole or in part contains
or is derived from the Program or any part thereof, to be licensed as a whole at no charge
to all third parties under the terms of this License. 

https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html

@ppkantorski
Copy link
Owner

ppkantorski commented Apr 5, 2024

That is incorrect. my download functions, hex functions, ini functions.. many of them can be ran on my mac with no need for an overlay or a nintendo switch. However the distributed binary will still follow GPLv2 (which is what I stated previously). I still need to make those modifications to reflect our conversation. Just have not had the time to yet.

This is not how the GPL works. You're using libtesla (which is under GPLv2) in various files to fulfill the Overlay's purpose. Any code that interfaces with GPL code is required to be under the same GPL license as well. And that condition propagates through your entire program. Every function that will ultimately call any function in libtesla needs to be under the GPL license which is every single one of them in one way or another (not that you generally put a license on individual functions).

Think of it like this. Even 100% without any of your's or WerWolv's code, my program will still function when being ran on the command line and could still "potentially" be used on any computer

Without libtesla, your overlay in the current state wouldn't be able to run at all. If you reimplemented libtesla from scratch though, you could obviously put it under any license you want. But you chose to link to libtesla which in turn requires you to follow its license. You can read about this specifically in subsection 2b of the GPLv2 license:

You must cause any work that you distribute or publish, that in whole or in part contains
or is derived from the Program or any part thereof, to be licensed as a whole at no charge
to all third parties under the terms of this License. 

https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html

The key here is derivative work. Not all of my work is a direct derivative of any of your code. But the end result, the final product would still be GPLv2 due to the nature of the GPLv2 code.

@WerWolv
Copy link

WerWolv commented Apr 5, 2024

Of course some of your individual functions would run fine without libtesla. But they're still part of the whole executable.
You could put those utility functions into some sub-library and put it under some other license that's compatible with GPLv2 and statically link to that. But each and every file that interfaces with libtesla or contains any Atmosphere code or code from Behemoth's libraries needs to be under the GPLv2. In its current state you're clearly violating the license.

@ppkantorski
Copy link
Owner

ppkantorski commented Apr 5, 2024

Of course some of your individual functions would run fine without libtesla. But they're still part of the whole executable. You could put those utility functions under some other license that's compatible with GPLv2 and statically link to that. But each and every file that interfaces with libtesla or contains any Atmosphere code or code from Behemoth's libraries needs to be under the GPLv2. In its current state you're clearly violating the license.

"..each and every file that interfaces with libtesla or contains any Atmosphere code or code from Behemoth's libraries.."

That is correct. However like I have stated, some (not all) of your guys' code interfaces with my code, not the other way around. I could pull out functions and seperate them into my own custom library if that makes things easier. Again, the end result would still follow GPLv2 and be distributed under GPLv2.

Currently, I make no claims that the binaries being distributed are not under GPLv2. By this claim, I am not breaking license agreements. However, i do need to make it more explicit on the project itself.

@WerWolv
Copy link

WerWolv commented Apr 5, 2024

From what I can see the main offenders currently are:
https://github.com/ppkantorski/Ultrahand-Overlay/blob/main/source/main.cpp: Links to libtesla
https://github.com/ppkantorski/Ultrahand-Overlay/blob/main/source/utils.hpp: Uses code from Behemoth's util.hpp and payload.hpp as well as libtesla

The small helper files can be under any license you want, provided it is compatible with the GPLv2 license. But the vast majority of your project needs to be under GPLv2.

@ppkantorski
Copy link
Owner

ppkantorski commented Apr 5, 2024

From what I can see the main offenders currently are: https://github.com/ppkantorski/Ultrahand-Overlay/blob/main/source/main.cpp: Links to libtesla https://github.com/ppkantorski/Ultrahand-Overlay/blob/main/source/utils.hpp: Uses code from Behemoth's util.hpp and payload.hpp as well as libtesla

The small helper files can be under any license you want, provided it is compatible with the GPLv2 license. But the vast majority of your project needs to be under GPLv2.

yes, there are indeed sections within main and utils that need to be modified and made clear they are under GPLv2. I do agree. as for helper functions, yes I can choose my own license. I will make these changes very soon to remove further confusion.

@WerWolv
Copy link

WerWolv commented Apr 5, 2024

Thank you.

@ppkantorski
Copy link
Owner

Thank you.

again, both of you. I really appreciate everything you guys have done. 🙏🏼. And I am sorry that my misguided use of licenses caused this issue. It will be resolved.

@ppkantorski
Copy link
Owner

ppkantorski commented Apr 5, 2024

One other issue that I just realized arrises is the distribution of CC-by-NC-4.0 material directly within GPLv2 since in general these licenses can conflict (non-commercial / commercial). I may have to compile each separately, or change CC-by-NC-4.0 in some way. This is what I will try to resolve next, but it does indeed cause some room for confusion.

If it comes down to me not being able to distribute my library within a GPLv2 project, there will need to be some changes made on my end with my choice of license.

@ppkantorski
Copy link
Owner

ppkantorski commented Apr 6, 2024

Update: I believe all issues are now addressed. I came to a realization that I can dual license the project if both licenses are compatible with each other, subjecting it to the terms of both license agreements. My project will now follow both GPLv2 and CC-BY-SA-4.0 (which is backwards compatible). Distribution with a dual license is allowed so long as the terms and conditions of each license agreement are met.

Feel free to double check the modifications, otherwise I will be closing this issue in a couple days.

Thanks again for the corrections from both of you.

@HookedBehemoth
Copy link
Author

Please check what static compilation means and how the switch build chain works.

@ppkantorski
Copy link
Owner

ppkantorski commented Apr 6, 2024

Please check what static compilation means and how the switch build chain works.

Update: Give me a little more time to review my last described logic. I think that I may have made a mistake and may have to make more changes to how I incorporate the cc-by material. There is a possibility that the entire project is still having licensing issues with respect to GPLv2. I will be making more changes soon. My prior idea of merging the project to follow both licenses only works if I am the sole creator of the GPLv2 material (which I am not).

I believe now that I will have to remove the -SA aspect to my license, make any GPLv2 derivative work licensed solely under GPLv2, and make my own code (non derivative work) licensed under CC-BY-4.0 to make it truly compatible. Licenses are a headache, but I do try to choose mine carefully to make sure everything is compliant.

@ppkantorski
Copy link
Owner

ppkantorski commented Apr 6, 2024

Alright, all GPLv2 derivative work (including distributions) now fall solely under GPLv2, but some of the non-derivative work will fall under the CC-BY-4.0 license. CC-BY-4.0 is compatible with GPLv2 distributions as long as its terms are met within the derivative work (here being the GPLv2 code, which is a derivative of my own licensed software). In each of my code's headers, it now clearly states which license the software falls under.

Derivative GPLv2 work (like main.cpp and utils.hpp) have it clearly stated that they are solely under GPLv2, and CC-BY-4.0 work (like my _funcs.hpp methods) have their license clearly marked to distinguish what is derivative and what is not.

I hope that this approach makes a bit more sense moving forward. Let me know your thoughts this time around (and thank you for your patience). If no additional comments, I will be closing this issue within the next 2 days. If you do have more concerns after, feel free to raise the issue again and I will try to address them.

@ppkantorski
Copy link
Owner

Thanks again both of you. I appreciate the feedback on getting my project GPLv2 compliant. Hopefully everything is resolved now, but feel free to add more comments or re-raise the issue in the future if there is anything else of concern.

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