LGPL doesn’t give you a free pass at all.
The opinion of the general counsel of the Free Software Foundation, Eben Moglen, speaking about the LGPL
(https://www.spinics.net/lists/xf/msg02311.html)
A library linked to a program? (i.e., Is this a derivative
work of the program?)
Moglen: Code statically linked to code constitutes a
derivative work of the code to which it is linked,
without question, regardless of license terms. More
specifically, now regarding licensing as well as the
status of the work, code that cannot be used at all
unless dynamically linked to GPL’d code, and which is
distributed along with that GPL’d code, must be
distributed under the terms of the GPL. This provides
a competitive advantage to free software, requiring
those who wish to make unfree software to undertake
proprietary reimplementation of feature sets only
available in GPL’d libraries, such as GNU readline.
That seems to indicate that if the commercial software requires the LGPL library, even when just dynamically linked, it may be considered derivative, and must be distributed under the terms of the GPL.
IANAL (my wife was ), but that’s a strong reason to avoid any use of either BigInt
and BigFloat
in Julia if you want to be absolutely sure you don’t have a problem with the license in a commercial situation.
I’ve warned the people at my work to not depend at all on them, or on things that in turn depend on them in Julia.
MATLAB & MathWorks was around long before the LGPL and MPFR, and MATLAB does not require it, it is just part of a “multiple precision toolbox” package, so it’s optional use is fine with the LGPL.
Julia actually does require BigInt
(to support the div
, rem
and mod
functions for Int128
and UInt128
, on 32-bit systems), which may mean that it is already in violation of the LGPL.
Irrationals also seem to require BigFloat
, which might be another problem issue for Julia (so maybe irrationals need to be moved out of Base and the JuliaPro packages as well).
Numbers in Julia are considered immutable, however, because of the way BigFloats
are currently wrapped,
they are very inefficient for space and performance. However, since they are in Base, it’s harder to supplant them with something better - for arbitrary precision, possible ArbFloats
, although suffers from some of the same issues with wrapping something that has C pointers that BigFloat
s and BigInt
s have.
The way they use a global precision and rounding mode is an issue with the using multiple threads, they are not thread-safe (printing them also uses a global buffer, that is not thread-safe [or at least wasn’t, when I investigated this thoroughly back in 2016, before the JuliaCon]).
My point comparing to DecFP
, was simply that other alternatives are faster and are provided totally via packages, so keeping something in Base that might cause legal problems for commercial use of Julia doesn’t seem like a good idea.