-
Notifications
You must be signed in to change notification settings - Fork 39
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
Clarify license statement #81
Comments
Hi, thanks for bringing this up! We've had a previous discussion about this: #23. The takeaway is that there has to be a notice that the binaries are LGPL'd, but nlprule itself is dual licensed under Apache 2.0 and MIT. I can clearly say that if you are using nlprule you do not have to license your application under a *GPL license. It does not have any impact whatsoever on downstream applications. Do you have any concrete suggestions for how to change the phrasing? I was thinking of changing the last sentence to "Under LGPLv2.1 §6(a) this does not have any implications on the license of nlprule itself, or applications using nlprule. Applications using nlprule do not have to be licensed under *GPL licenses." |
I'd want clarification on:
|
Also, regarding #75, probably a good idea to pre-emptively establish a policy of either requiring clean-room (Java → natural language description of the algorithm → Rust via two people) porting or gating them behind a flag that renders the binary's license LGPL, combined with something like the Linux kernel's "Developer Certificate of Origin" where the contributor takes on legal responsibility for ensuring that the contribution is contributable under non-LGPL licenses. ...and/or using the abi_stable and libloading crates to make Rust rules runtime-loaded dynamic libraries. |
A user can always recompile nlprule with a different binary since nlprule is Open Source. So under LGPLv2.1 §6(a), although nlprule is a work that uses LanguageTool derivatives, it does not have to be licensed under the LGPL.
(1) "We runtime-load and include_bytes! these .png files." <- Yes, this is what I mean by that. (2) You do not have to do anything. It always is. See above. |
That's basically saying that, in Rust's current ABI-unstable, "statically link the world" state, if a binary ...which means that, while nlprule itself doesn't have to be LGPLed, any binary produced from it which
Either you never "statically link" things and should remove that from the statement as obsolete information or I do need to do something to ensure I'm not opening myself up to legal liability if I use nlprule in a non-LGPL/GPL binary and there should be clear documentation for how to runtime-load all LGPLed parts to ensure compliance with the LGPL's terms by taking advantage of that avenue for satisfying "so that the user can modify the Library and then relink". |
Can you clarify this phrasing?
...because:
I don't see any sign of static or dynamic linking in the sense the LGPL considers... just aggregating assets, similar to how you can use runtime-loaded CC-BY-SA art assets in a game with GPLed code without there being a license conflict as long as you don't embed the art assets inside the binary or otherwise make the binary unavoidably dependent from the assets. (eg. compiling in a hash check that will fail if someone swaps in new
.png
files.)When people see "statically and dynamically links" and "LGPL", they get concerned, because Rust statically links all its code so, if you statically link your LGPLed stuff into nlprule and you statically link nlprule into a Rust binary, then that Rust binary must be distributed in accordance with the LGPL's requirement that it be possible to swap out the LGPLed components with modified versions... and Rust doesn't have stable ABI to facilitate that without sharing the source.
I've actually seen people warn other people away from nlprule in favour of some more recent bindings for the LanguageTool HTTP API because "nlprule statically links to LGPLed stuff, which means your Rust binaries must be released under the LGPL, GPL, or AGPL".
The text was updated successfully, but these errors were encountered: