rust-lang / libm

A port of MUSL's libm to Rust.
Other
548 stars 97 forks source link

Update licensing to MIT AND (MIT OR Apache-2.0) #317

Closed tgross35 closed 1 month ago

tgross35 commented 1 month ago

Currently both Cargo.toml and the license files indicate that this library may be used under either MIT or Apache-2.0. However, this is not accurate; since portions of this library were derived from musl libc, which is available under the MIT license, this terms of use for this library must also include use under the MIT license. That is, it is not correct that this library may be used under only the Apache-2.0 license.

Update the SPDX license identifier to MIT OR (MIT AND Apache-2.0) to indicate that use must include the MIT license, but to clarify that contributions are made under MIT OR Apache-2.0. This is compatible with the current state of this repository since it has always contained both license files, and the Cargo.toml license field has indicated MIT OR Apache-2.0 since it was added.

In accordance with the above, replace the two license files with a combined LICENSE.txt that makes these terms clear and gives attribution to works from which this library is derived.

Fixes: https://github.com/rust-lang/libm/issues/215 Link: https://rust-lang.zulipchat.com/#narrow/channel/335408-foundation/topic/Request.20for.20legal.20team.20input.20on.20crate.20licensing Link: https://git.musl-libc.org/cgit/musl/tree/COPYRIGHT

tgross35 commented 1 month ago

Requesting review from @joshtriplett since you have been knowledgeable about all this.

I changed the copyrights to "Rust Developers", @japaric would you be able to ack this since your name is currently on the copyrights?

This doesn't affect the copyright headers mentioned in https://github.com/rust-lang/libm/issues/73

joshtriplett commented 1 month ago

@tgross35 Strictly speaking, you have to preserve all copyright notices. For instance, since we're copying code from projects under the MIT license, if the version of the license they're using starts with copyright notices, we need to preserve all of those.

For that exact reason, I would recommend that we not add any more, "Rust Developers" or otherwise. But we have to preserve all the ones that already exist within the projects we're copying from.

joshtriplett commented 1 month ago

Other than the issue of preserving copyright notices (and not adding any more), LGTM.

tgross35 commented 1 month ago

I did include Copyright © 2005-2020 Rich Felker, et al. at the bottom, but made this text more explicit. This is what is included at the top of the MIT license https://git.musl-libc.org/cgit/musl/tree/COPYRIGHT - is this sufficient?

Later in the file it states:

Much of the math library code (src/math/* and src/complex/*) is
Copyright © 1993,2004 Sun Microsystems or
Copyright © 2003-2011 David Schultz or
Copyright © 2003-2009 Steven G. Kargl or
Copyright © 2003-2009 Bruce D. Evans or
Copyright © 2008 Stephen L. Moshier or
Copyright © 2017-2018 Arm Limited
and labelled as such in comments in the individual source files. All
have been licensed under extremely permissive terms.

But I assume we are probably okay to not include this since we retain the copyright headers in our math source files.

Edit: later it also states:

All other files which have no copyright comments are original works
produced specifically for use as part of this library, written either
by Rich Felker, the main author of the library, or by one or more
contibutors listed above. Details on authorship of individual files
can be found in the git version control history of the project. The
omission of copyright and license comments in each file is in the
interest of source tree size.

I'm not sure how to handle this. It doesn't seem very useful to list all musl contributors, so I think Rich Felker, et al. could cover this as well, but I'm not sure how we should be propagating this to source files (if at all).

joshtriplett commented 1 month ago

The requirement is to preserve all copyright notices you receive. We should not be pruning any. We can preserve them either in the source files or the license, as long as they're preserved. It'd probably be convenient for downstream users if they were all in the license, but the requirement on our end is just to preserve them all somewhere.

tgross35 commented 1 month ago

I updated this to include the first excerpt from above (with specific copyright notices) verbatim. I think that anything else should be covered by license headers, but let me know if specific updates are needed.

tgross35 commented 1 month ago

@japaric would you be able to ack this since your name is currently on the copyrights?

As suggested by @joshtriplett, I updated the file to persist this copyright since there are quite a few we have to retain anyway: https://github.com/rust-lang/libm/blob/b8d8354982b4ce0991952ac33bf78b991ad05b4d/LICENSE.txt#L228-L230