This page documents the string routines licensing and copyright issues.
We want a good range of string routines that are optimised for Cortex processors and can be used anywhere for any purpose. String routines are unusual as they are fundamental, self contained, and consumed by a wide-range of projects.
The goals are:
- Make these routines easy to find
- Make them available for open and closed source projects
- Have them included in C libraries such as GLIBC, Newlib, and Bionic
- To share any improvements between these different consumers
Some of the conflicts are:
- GLIBC greatly prefer LGPL and FSF copyright assignment
- Bionic, Newlib, and proprietory products won't accept LGPLed code
- Having different variants with different licenses causes bugfix headaches, especially from third parties
- ARM are unhappy with the IP implications of the current FSF assignment agreement
The candidate licenses are:
- No license - applicable to the donor version providing it is never released
- Public domain: may not be possible in all countries
- MIT/X11 - permissive, GPL compatible, allows consumers to re-license
- Simplified BSD - permissive, GPL compatible
LGPL v2.1 - GPL compatible. v3 might cause issues due to patent grants
The FSF strongly prefers any code contributed to GLIBC to be under the LGPL.
The author of any new work or non-trivial change to an exsiting work owns the copyright to that work. Defining non-trival and their effect is tricky, but generally the copyright of the whole of the work stays with the original author.
The copyright owner can do whatever they want with the work, including re-licensing and assigning copyright to someone else.
The FSF strongly prefers owning the copyright of any code contributed to GLIBC.
Licenses such as the GPLv3 require a patent grant. Some contributor agreements such as Android also require a patent grant.
Some projects require contributed code to also have the copyright assigned to the project managers.
According to Paul McKenney, the following is valid:
- Author some code
- Create a copy of the code base and re-license under a different license such as the LGPL
- Assign copyright of the LGPLed copy to another party, such as the FSF
- Submit the re-licensed version to the other party
- Create another copy of the original code and re-license under some other license
GLIBC prefers code to be under the LGPL and copyright the FSF.
Bionic prefers the Apache License, Version 2. Copyright assignment is not requested, but a copyright and patent grant is required. The Apache License allows sublicensing.
Newlib is a mix of licenses.
The core of each routine is the same for all upstreams, but the boiler plate around it isn't. This extra code is sufficently different that we can't have one version that drops in to every C library.
Linaro supports the Cortex-A series and as such only needs to make a optimised for speed Thumb-2 version. Most upstreams support other ARM ISAs and variants. Most upstreams, such as Newlib and Bionic, fix the variant at build time and intermix the different ISAs and versions in the one file.
MLH doesn't see a way of solving the technical problems without having upstream specific variants of the routines. This may help the licensing issue.
- Linaro authors all of the routines, or gets copyright assignment from the original author
- Linaro reduces the routines to be Thumb-2 and optimised for speed
- Linaro licenses everything under the MIT-X11 license
- Linaro creates variants of the routines for the specific upstreams
- If unavoidable, Linaro re-licenses these variants under the preferred upstream license
(2) is TBD. (5) keeps the variant in the MIT-X11 license if possible to make backporting improvements easier.
ARM has three string related routines that they want in EGLIBC but also want to use for any purpose. Is the following valid:
- ARM copyright assigns to Linaro
- Linaro licenses back to ARM for ARM to do as they see fit
- Linaro copyright assigns to the FSF
- FSF licenses back to Linaro for Linaro to do as they see fit
WorkingGroups/ToolChain/StringLicensing (last modified 2010-10-14 00:55:23)