-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
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
Julia is no longer GPL licensed (as a whole) #49266
Comments
It is still an stdlib (inside SparseArrays). Nothing has changed. |
I don't think that's true. The former stdlibs are only stdlibs in a very loose sense that we happen to ship a copy of the packages that used to be stdlibs along with |
I posted a bit more analysis here:
|
They also state this in the following paragraph:
There's a reason the ClassPath exception exists after all - https://en.wikipedia.org/wiki/GPL_linking_exception, which the FSF itself agrees with https://www.gnu.org/licenses/gpl-faq.html#LinkingWithGPL. I guess this could be viewed as "julia is GPL free until you actually start to use |
Yes, if you write a program that uses both SparseArrays and some GPL-incompatible library like MKL then you cannot legally redistribute that code. I believe it is fine to use them together so long as the combined work is not redistributed. But this is no different from the situation with any GPL package that someone could use. |
It seems that the key thing here is that SparseArrays (which includes SuiteSparse bindings), while still an stdlib, is no longer part of the system image. We should perhaps get rid of the This should probably also be prominently included in the 1.9 NEWS. |
1.10. |
Lost track of which release we removed SparseArrays from the system image... |
I opened this issue since I had "mere aggregation" in mind, but yes, only when using/linking to (even indirectly) SuiteSparse, then the whole becomes GPL. But even then it seems the System Library exception applies: https://www.gnu.org/licenses/gpl-faq.html#SystemLibraryException https://www.gnu.org/licenses/gpl-3.0.html
Also whatever you do in private can't violate the GPL. Julia is MIT, and thus GPL compatible, but even if your program, that you run on/with Julia, isn't, then also that's ok (I'm not a lawyer, and it may depend on if Julia qualifies as an interpreter, JIT not ok?), as long as you don't distribute Julia with it (e.g. use PackageCompiler). So it would be best if PackageCompiler opts out of supporting (that one) GPL component by default, and it would be an opt-in. It need to be documented well; in NEWS, MIT/"GPL-free", unless/until you actually use that component... |
It's unclear to me if an MKL that we ship would qualify for the System Library Exception. |
I agree we are non-GPL now. Given this:
it is clear to me julia is not designed to run with suitesparse; there are no references to it anywhere in the rest of the system. |
Yes, with the caveat that this also means that the SparseArrays package itself is GPL, right? It does make specific references to SuiteSparse etc. after all. Maybe this is a case of "wrappers are ok", but I'm honestly out of my depth in regard to that.. |
SparseArrays itself is not GPL, and neither are its wrappers around SuiteSparse. |
In practice, SparseArrays is designed to work with SuiteSparse and will always be used with it, so arguably the wrappers are a derived work. However the core sparse array code does not mention SuiteSparse and so could be separated from it and the wrappers. |
SparseArrays can work perfectly fine without SuiteSparse, and in fact can with little effort, replace those solvers with other solvers, many of which are already packaged in Yggdrasil, or with MKL. The SuiteSparse wrappers themselves are the only parts that are designed to work with SuiteSparse. In fact, for a while SparseArrays.jl and SuiteSparse.jl were separated, but merged back into a single package for type piracy reasons. |
I concur with the analysis. |
I would also point out that even for code like wrappers that are tightly coupled and designed to interact with GPL code, that only implies that the GPL applies to the combination, which requires the wrapper to have a GPL-compatible license. It does not imply that the wrapper must be GPL-licensed. The SuiteSparse wrapper code is MIT-licensed but when used with the SuiteSparse library, the combination is GPL. If the wrapper code is modified to work with some other library, the GPL does not come along. |
I added a news item in #50848; please review the language used there. I actually can't find anything in THIRDPARTY.md or our documentation that looks like it needs to be updated; we don't generally mention what is included in the default system image since it's kind of a detail. Let me know if you can find anything that should change. |
@JeffBezanson about your wording above, I assumed SuiteSparse the last GPL holdout. There is though: "GMP [LGPL3+ or GPL2+]". Depending on what you mean by core language, then we depend on LGPL at least, which is better than GPL. This seem ok (for proprietary code, not sure any disallows LGPL[3]; also for GPLv2 only code): https://softwareengineering.stackexchange.com/questions/238748/can-gpl-v2-code-link-to-an-lgpl-v3-library And technically we have Pkg (still) in the sysimage (until we merge my PallHaraldsson#4 see #2050833), and it depends on "LIBGIT2 [GPL2+ with unlimited linking exception]". I wouldn't include it as a "core language" feature, and we can likely keep silent on it since it's a special case with "unlimited linking exception".
But for legal reasons it isn't. If you distribute Julia (as is) with Julia, and thus the sysimage, your source code, the GPL would apply (also if you use PackageCompiler.jl I think since it uses the same sysimage?), if GPL code there. I doubt it falls under "mere aggregation". Why I want it completely GPL free. And possibly LGPL free too. I think it's easy, you choose what you precompile into the sysimage. It's kind of bad that big is in Base but not a stdlib, but I think ok since because of LPGL. People have a right to dynamically link to a replacement. I think that works, i.e. we do not statically link to GMP? |
It seems SuiteSparse in no longer a regular stdlib, so is no part of it in the sysimage (and USE_GPL_LIBS in Makefile misleading)? And was it the last GPL there (i.e. not GPL just bundled with Julia)? And neither SparseArrays that includes SuiteSparse. If I'm right Julia should document it as such.
julia/stdlib/Makefile
Line 49 in 6bfb7fb
The text was updated successfully, but these errors were encountered: