Skip to content

Commit

Permalink
dist: Re-work how we describe the licence of Rust in our distributions
Browse files Browse the repository at this point in the history
) add COPYRIGHT*.html files to the rustc binary distribution
) add contents of LICENSE folder to dist tarballs, because some of our in-tree licences will require that the license text is reproduced.
) The wording of COPYRIGHT is adjusted to not include license text (`reuse` ensures that it's in the LICENSE folder)
) A blanket copyright notice is added to LICENCE-MIT as required by the text.

The general approach is that the license statements are now compiled using a tool in CI (generate-copyright), and you get either:

* the source code (COPYRIGHT, LICENCE-APACHE, LICENCE-MIT, REUSE.toml and the LICENCES folder), or
* the compiled version (COPYRIGHT.html, COPYRIGHT-library.html and the LICENCES folder).
  • Loading branch information
jonathanpallant committed Dec 9, 2024
1 parent 9b4d7c6 commit f9c1699
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 395 deletions.
392 changes: 21 additions & 371 deletions COPYRIGHT

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions LICENSE-MIT
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
Copyright (c) The Rust Project Contributors

Permission is hereby granted, free of charge, to any
person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the
Expand Down
25 changes: 17 additions & 8 deletions src/bootstrap/src/core/build_steps/dist.rs
Original file line number Diff line number Diff line change
Expand Up @@ -503,14 +503,22 @@ impl Step for Rustc {
// Debugger scripts
builder.ensure(DebuggerScripts { sysroot: image.to_owned(), host });

// Misc license info
let cp = |file: &str| {
builder.install(&builder.src.join(file), &image.join("share/doc/rust"), 0o644);
// HTML copyright files
let file_list = builder.ensure(super::run::GenerateCopyright);
for file in file_list {
builder.install(&file, &image.join("share/doc/rust"), 0o644);
}

// README
builder.install(&builder.src.join("README.md"), &image.join("share/doc/rust"), 0o644);

// The REUSE-managed license files
let license = |path: &Path| {
builder.install(path, &image.join("share/doc/rust/licences"), 0o644);
};
cp("COPYRIGHT");
cp("LICENSE-APACHE");
cp("LICENSE-MIT");
cp("README.md");
for entry in t!(std::fs::read_dir(builder.src.join("LICENSES"))).flatten() {
license(&entry.path());
}
}
}
}
Expand Down Expand Up @@ -986,14 +994,15 @@ impl Step for PlainSourceTarball {
"CONTRIBUTING.md",
"README.md",
"RELEASES.md",
"REUSE.toml",
"configure",
"x.py",
"config.example.toml",
"Cargo.toml",
"Cargo.lock",
".gitmodules",
];
let src_dirs = ["src", "compiler", "library", "tests"];
let src_dirs = ["src", "compiler", "library", "tests", "LICENSES"];

copy_src_dirs(builder, &builder.src, &src_dirs, &[], plain_dst_src);

Expand Down
4 changes: 2 additions & 2 deletions src/bootstrap/src/core/build_steps/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ impl Step for CollectLicenseMetadata {
pub struct GenerateCopyright;

impl Step for GenerateCopyright {
type Output = PathBuf;
type Output = Vec<PathBuf>;
const ONLY_HOSTS: bool = true;

fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
Expand All @@ -220,7 +220,7 @@ impl Step for GenerateCopyright {
cmd.env("CARGO", &builder.initial_cargo);
cmd.run(builder);

dest
vec![dest, dest_libstd]
}
}

Expand Down
23 changes: 17 additions & 6 deletions src/tools/generate-copyright/templates/COPYRIGHT-library.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,31 @@

<h1>Copyright notices for The Rust Standard Library</h1>

<p>This file describes the copyright and licensing information for the Rust
Standard Library source code within The Rust Project git tree, and the
third-party dependencies used when building the Rust Standard Library.</p>

<h2>Table of Contents</h2>
<ul>
<li><a href="#short-version">Short version for non-lawyers</a></li>
<li><a href="#longer-version">Longer version</a></li>
<li><a href="#in-tree-files">In-tree files</a></li>
<li><a href="#out-of-tree-dependencies">Out-of-tree dependencies</a></li>
</ul>

<h2 id="short-version">Short version for non-lawyers</h2>

The Rust Standard Library is dual-licensed under Apache 2.0 and MIT terms.

<h2 id="longer-version">Longer version</h2>

<p>Copyrights in the Rust Standard Library are retained by their contributors. No copyright assignment is required to contribute to the Rust project.</p>

<p>Some files include explicit copyright notices and/or license notices. For full authorship information, see the version control history or <a href="https://thanks.rust-lang.org">https://thanks.rust-lang.org</a>.</p>

<p>Except as otherwise noted (below and/or in individual files), the Rust Standard Library is licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> or the <a href="http://opensource.org/licenses/MIT">MIT</a> license, at your option.</p>

<p>This file describes the copyright and licensing information for the source code within The Rust Project git tree related to the Rust Standard Library, and the third-party dependencies used when building the Rust Standard Library.</p>

<h2 id="in-tree-files">In-tree files</h2>

<p>The following licenses cover the in-tree source files that were used in this
release:</p>
<p>The following licenses cover the in-tree source files that were used in this release:</p>

{{ in_tree|safe }}

Expand Down
26 changes: 18 additions & 8 deletions src/tools/generate-copyright/templates/COPYRIGHT.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,37 @@

<h1>Copyright notices for The Rust Toolchain</h1>

<p>This file describes the copyright and licensing information for the source
code within The Rust Project git tree, and the third-party dependencies used
when building the Rust toolchain (including the Rust Standard Library).</p>

<h2>Table of Contents</h2>
<ul>
<li><a href="#short-version">Short version for non-lawyers</a></li>
<li><a href="#longer-version">Longer version</a></li>
<li><a href="#in-tree-files">In-tree files</a></li>
<li><a href="#out-of-tree-dependencies">Out-of-tree dependencies</a></li>
</ul>

<h2 id="short-version">Short version for non-lawyers</h2>

The Rust Project is dual-licensed under Apache 2.0 and MIT terms.

<h2 id="longer-version">Longer version</h2>

<p>Copyrights in the Rust project are retained by their contributors. No copyright assignment is required to contribute to the Rust project.</p>

<p>Some files include explicit copyright notices and/or license notices. For full authorship information, see the version control history or <a href="https://thanks.rust-lang.org">https://thanks.rust-lang.org</a>.</p>

<p>Except as otherwise noted (below and/or in individual files), Rust is licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> or the <a href="http://opensource.org/licenses/MIT">MIT</a> license, at your option.</p>

<p>This file describes the copyright and licensing information for the source code within The Rust Project git tree, and the third-party dependencies used when building the Rust toolchain (including the Rust Standard Library).</p>

<h2 id="in-tree-files">In-tree files</h2>

<p>The following licenses cover the in-tree source files that were used in this
release:</p>
<p>The following licenses cover the in-tree source files that were used in this release:</p>

{{ in_tree|safe }}

<h2 id="out-of-tree-dependencies">Out-of-tree dependencies</h2>

<p>The following licenses cover the out-of-tree crates that were used in this
release:</p>
<p>The following licenses cover the out-of-tree crates that were used in this release:</p>

{% for (key, value) in dependencies %}
<h3>📦 {{key.name}}-{{key.version}}</h3>
Expand Down

0 comments on commit f9c1699

Please sign in to comment.