Skip to content
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

Relicense under dual MIT/Apache-2.0 #4

Closed
1 task
emberian opened this issue Jan 8, 2016 · 8 comments
Closed
1 task

Relicense under dual MIT/Apache-2.0 #4

emberian opened this issue Jan 8, 2016 · 8 comments

Comments

@emberian
Copy link

emberian commented Jan 8, 2016

Why?

The MIT license requires reproducing countless copies of the same copyright
header with different names in the copyright field, for every MIT library in
use. The Apache license does not have this drawback, and has protections from
patent trolls and an explicit contribution licensing clause. However, the
Apache license is incompatible with GPLv2. This is why Rust is dual-licensed as
MIT/Apache (the "primary" license being Apache, MIT only for GPLv2 compat), and
doing so would be wise for this project. This also makes this crate suitable
for inclusion in the Rust standard distribution and other project using dual
MIT/Apache.

How?

To do this, get explicit approval from each contributor of copyrightable work
(as not all contributions qualify for copyright) and then add the following to
your README:

## License

Licensed under either of
 * Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
 * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you shall be dual licensed as above, without any
additional terms or conditions.

and in your license headers, use the following boilerplate (based on that used in Rust):

// Copyright (c) 2015 t developers
// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT
// license <LICENSE-MIT or http://opensource.org/licenses/MIT>,
// at your option. All files in the project carrying such
// notice may not be copied, modified, or distributed except
// according to those terms.

And don't forget to update the license metadata in your Cargo.toml!

Contributor checkoff

@BurntSushi
Copy link
Owner

@cmr This crate is already dual licensed under MIT and the UNLICENSE. Is there any particular reason why the UNLICENSE is not suitable for your purposes? (Similarly for BurntSushi/tabwriter#5, and all my crates.)

@emberian
Copy link
Author

emberian commented Jan 9, 2016

@BurntSushi oops, my script was a little indescriminate about hitting MIT dual-licensed with other things.

I would prefer CC0 to the UNLICENSE though, I'm not sure UNLICENSE'd components would be able to be included in the standard distribution, and I won't include UNLICENSE or CC0'd components in Robigalia (which is a shame, because I'd like to use this for our channels atm)

@BurntSushi
Copy link
Owner

and I won't include UNLICENSE components in Robigalia

It's dual licensed. You can elect to use chan under the terms of the MIT license.

@emberian
Copy link
Author

emberian commented Jan 9, 2016

The runtime (currently unreleased), "phoma", is licensed the same as the Rust standard library, MIT/Apache-2.0, and I won't include components which are not availble under either the MIT or Apache-2.0 at the licensees choice, or licenses with Apache-2.0 compatible terms that don't require redistributing a license document (for example, the CC0 is not compatible here) at users option. The patent license Apache-2.0 grants is not included with the MIT license (which is primarily why MIT is GPLv2 compatible and Apache-2.0 is not).

@BurntSushi
Copy link
Owner

But chan is available under the MIT license, so I sincerely do not understand your objection. You can elect to use chan under the terms of either the MIT or UNLICENSE licenses.

@emberian
Copy link
Author

emberian commented Jan 9, 2016

Ignoring the UNLICENSE, I can't then say to my users, "You can use phoma under the terms of either the MIT or Apache-2.0 licenses" if it included chan, since they cannot use chan under the terms of the Apache-2.0 license (since the MIT license does not include the patent grant). It would effectively make phoma MIT-only. Copyright isn't the only issue here, patent law comes into play as well.

@BurntSushi
Copy link
Owner

OK, so I think what you're saying is that all libraries you use must be MIT/Apache-2.0, or alternatively, MIT/X where X has Apache-2.0 compatible terms? Is my understanding correct? And you're also claiming that the CC0 is suitable as X but the UNLICENSE is not. Could you explain why that is? (Or, if it's complicated, a link to someone else explaining it would be fine!)

@emberian
Copy link
Author

emberian commented Jan 9, 2016

Sorry, I had a misunderstanding and have since edited the comments to note that CC0 is not suitable as X.

It's not MIT/X, really, it's X where X is compatible with both the MIT and Apache-2.0. For example, the 2-clause BSD license would suffice for the "MIT" compatability.

I immediately regret using the word "compatible" though, as it's not quite precise here - the MIT is compatible with the Apache-2.0 license, in that you can freely combine two works that are MIT licensed and Apache-2.0 licensed. What I cannot do, though, is say to my users "If you use phoma, choose either MIT or Apache-2.0, and if you chose Apache-2.0 you only need to distribute a single copy of the Apache-2.0 license with the binary form", and instead need to have a file like https://github.com/rust-lang/rust/blob/master/COPYRIGHT that needs to be redistributed listing all the MIT, BSD, etc copyright notices.

It's minor, and I'm not entirely convinced that I want to stick to my guns on this one, but it certainly seems nice to me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants