[llvm-dev] RFC #3: Improving license & patent issues in the LLVM community
David Chisnall via llvm-dev
llvm-dev at lists.llvm.org
Tue Apr 18 04:59:10 PDT 2017
On 18 Apr 2017, at 12:45, Hal Finkel <hfinkel at anl.gov> wrote:
> On 04/18/2017 02:36 AM, David Chisnall via llvm-dev wrote:
>> Hi Chris,
>> On 17 Apr 2017, at 15:37, Chris Lattner via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>>> ---- Exceptions to the Apache 2.0 License: ——
>>> As an exception, if, as a result of your compiling your source code, portions of this Software are embedded into an Object form of such source code, you may redistribute such embedded portions in such Object form without complying with the conditions of Sections 4(a), 4(b) and 4(d) of the License.
>>> In addition, if you combine or link compiled forms of this Software with software that is licensed under the GPLv2 (“Combined Software”) and if a court of competent jurisdiction determines that the patent provision (Section 3), the indemnity provision (Section 9) or other Section of the License conflicts with the conditions of the GPLv2, you may retroactively and prospectively choose to deem waived or otherwise exclude such Section(s) of the License, but only in their entirety and only with respect to the Combined Software.
>>> ---- end —
>>> Despite the effort required to reach this point, this is only a small shift from the second round proposal. We believe that this will resolve the issue of LLVM runtime libraries being used by proprietary and other non-LLVM compilers, and the wording has been carefully vetted by a team of super-smart legal folks, led by Heather (who represents the interests of the LLVM community).
>>> We expect that we will need to have a name for this wording, and propose the name "Apache 2.0 License with LLVM Exception” to align the naming with the other exception clauses listed in the SPDX database (https://spdx.org/licenses/exceptions-index.html). Several other approaches to naming were considered, but we believe that, in this case at least, the most obvious answer is the best.
>>> At this point, we’re fairly confident that this wording covers all of the known bases. That said, we welcome comments and questions on this thread, because while we know that it is impossible to please everyone, we want to know if we’ve missed the mark in a significant way.
>> It’s not clear to me that this covers the case of code (e.g. template definitions) in libc++ headers being included in programs. With this license, if I compile a program that uses C++ standard library #includes on a platform (e.g. macOS, FreeBSD) where libc++ is the default C++ standard library implementation, am I required to add explicit LLVM attribution to binaries that I distribute? I’m happy with the platform that ships libc++ having to include an attribution in its docs somewhere, but requiring the attribution for every C++ program is very difficult to comply with.
> The intent is not to require attribution for all users of libc++. Can you explain why you feel that it might not cover this case?
> In case it helps, I'll point out that the Apache 2 license's definition of Object form is very general: ""Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to…"
Thanks, I think that covers everything that I was interested in, though presumably it also means that there are no binary attribution requirements if I use the LLVM libraries and use a system-provided libLLVM.so (or similar), only if I distribute my own copy of the LLVM libraries?
I note that the Apache license does not include a definition of ‘compiling’. As a non-lawyer, I would take this to not include linking, though with LTO the boundary is fairly blurry. If ‘compiling’ includes the linking step, then presumably I’m free to ignore 4a, 4b, and 4d for anything. If 'compiling' doesn’t include linking, then how does this relate to bits of compiler-rt that might end up statically linked into the binary (or bits of libc++ if I statically link on a platform where libc++ is the default C++ standard library)?
My chief concern is that if I do (for any foo.cc):
$ c++ -static foo.cc
Then the resulting a.out should not come with any attribution requirements (for compiler-rt or libc++). If it does, then we are going to end up with a large number of accidental license violations.
More information about the llvm-dev