Skip to content

Commit 2a6ac46

Browse files
authored
Rollup merge of #147843 - bjorn3:tidy_licenses, r=clubby789
Change the tidy license checker This adds a bunch of licenses to the global list of allowed licenses that are at least as permissive as some other license in the list. In addition it adds another list for licenses that are allowed to be used by tools, but not by the runtime. All permissive licenses from the exception lists are added here. This makes it clearer what actual exceptions to our permissive licensing policy are and will hopefully make it a bit easier to review future changes to the list of licenses rather than just adding whatever license is necessary to the global list of allowed licenses or to the list of exceptions.
2 parents 003feb4 + dd70015 commit 2a6ac46

File tree

1 file changed

+45
-98
lines changed

1 file changed

+45
-98
lines changed

src/tools/tidy/src/deps.rs

Lines changed: 45 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -19,32 +19,52 @@ mod proc_macro_deps;
1919
#[rustfmt::skip]
2020
const LICENSES: &[&str] = &[
2121
// tidy-alphabetical-start
22-
"(MIT OR Apache-2.0) AND Unicode-3.0", // unicode_ident (1.0.14)
23-
"(MIT OR Apache-2.0) AND Unicode-DFS-2016", // unicode_ident (1.0.12)
2422
"0BSD OR MIT OR Apache-2.0", // adler2 license
25-
"0BSD",
2623
"Apache-2.0 / MIT",
2724
"Apache-2.0 OR ISC OR MIT",
2825
"Apache-2.0 OR MIT",
2926
"Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT", // wasi license
30-
"Apache-2.0",
3127
"Apache-2.0/MIT",
3228
"BSD-2-Clause OR Apache-2.0 OR MIT", // zerocopy
29+
"BSD-2-Clause OR MIT OR Apache-2.0",
30+
"BSD-3-Clause/MIT",
31+
"CC0-1.0 OR MIT-0 OR Apache-2.0",
3332
"ISC",
3433
"MIT / Apache-2.0",
3534
"MIT AND (MIT OR Apache-2.0)",
3635
"MIT AND Apache-2.0 WITH LLVM-exception AND (MIT OR Apache-2.0)", // compiler-builtins
37-
"MIT OR Apache-2.0 OR LGPL-2.1-or-later", // r-efi, r-efi-alloc
36+
"MIT OR Apache-2.0 OR BSD-1-Clause",
37+
"MIT OR Apache-2.0 OR LGPL-2.1-or-later", // r-efi, r-efi-alloc; LGPL is not acceptable, but we use it under MIT OR Apache-2.0
3838
"MIT OR Apache-2.0 OR Zlib", // tinyvec_macros
3939
"MIT OR Apache-2.0",
4040
"MIT OR Zlib OR Apache-2.0", // miniz_oxide
4141
"MIT",
4242
"MIT/Apache-2.0",
43-
"Unicode-3.0", // icu4x
44-
"Unicode-DFS-2016", // tinystr
4543
"Unlicense OR MIT",
4644
"Unlicense/MIT",
45+
// tidy-alphabetical-end
46+
];
47+
48+
/// These are licenses that are allowed for rustc, tools, etc. But not for the runtime!
49+
#[rustfmt::skip]
50+
const LICENSES_TOOLS: &[&str] = &[
51+
// tidy-alphabetical-start
52+
"(Apache-2.0 OR MIT) AND BSD-3-Clause",
53+
"(MIT OR Apache-2.0) AND Unicode-3.0", // unicode_ident (1.0.14)
54+
"(MIT OR Apache-2.0) AND Unicode-DFS-2016", // unicode_ident (1.0.12)
55+
"0BSD",
56+
"Apache-2.0 AND ISC",
57+
"Apache-2.0 OR BSL-1.0", // BSL is not acceptable, but we use it under Apache-2.0
58+
"Apache-2.0 WITH LLVM-exception",
59+
"Apache-2.0",
60+
"BSD-2-Clause",
61+
"BSD-3-Clause",
62+
"CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception",
63+
"CC0-1.0",
64+
"Unicode-3.0", // icu4x
65+
"Unicode-DFS-2016", // tinystr
4766
"Zlib OR Apache-2.0 OR MIT", // tinyvec
67+
"Zlib",
4868
// tidy-alphabetical-end
4969
];
5070

@@ -89,17 +109,15 @@ pub(crate) const WORKSPACES: &[WorkspaceInfo<'static>] = &[
89109
)),
90110
submodules: &[],
91111
},
92-
{
93-
WorkspaceInfo {
94-
path: "compiler/rustc_codegen_cranelift",
95-
exceptions: EXCEPTIONS_CRANELIFT,
96-
crates_and_deps: Some((
97-
&["rustc_codegen_cranelift"],
98-
PERMITTED_CRANELIFT_DEPENDENCIES,
99-
PERMITTED_CRANELIFT_DEPS_LOCATION,
100-
)),
101-
submodules: &[],
102-
}
112+
WorkspaceInfo {
113+
path: "compiler/rustc_codegen_cranelift",
114+
exceptions: EXCEPTIONS_CRANELIFT,
115+
crates_and_deps: Some((
116+
&["rustc_codegen_cranelift"],
117+
PERMITTED_CRANELIFT_DEPENDENCIES,
118+
PERMITTED_CRANELIFT_DEPS_LOCATION,
119+
)),
120+
submodules: &[],
103121
},
104122
WorkspaceInfo {
105123
path: "compiler/rustc_codegen_gcc",
@@ -169,19 +187,8 @@ pub(crate) const WORKSPACES: &[WorkspaceInfo<'static>] = &[
169187
#[rustfmt::skip]
170188
const EXCEPTIONS: ExceptionList = &[
171189
// tidy-alphabetical-start
172-
("ar_archive_writer", "Apache-2.0 WITH LLVM-exception"), // rustc
173-
("arrayref", "BSD-2-Clause"), // rustc
174-
("blake3", "CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception"), // rustc
175190
("colored", "MPL-2.0"), // rustfmt
176-
("constant_time_eq", "CC0-1.0 OR MIT-0 OR Apache-2.0"), // rustc
177-
("dissimilar", "Apache-2.0"), // rustdoc, rustc_lexer (few tests) via expect-test, (dev deps)
178-
("fluent-langneg", "Apache-2.0"), // rustc (fluent translations)
179-
("foldhash", "Zlib"), // rustc
180191
("option-ext", "MPL-2.0"), // cargo-miri (via `directories`)
181-
("rustc_apfloat", "Apache-2.0 WITH LLVM-exception"), // rustc (license is the same as LLVM uses)
182-
("ryu", "Apache-2.0 OR BSL-1.0"), // BSL is not acceptble, but we use it under Apache-2.0 // cargo/... (because of serde)
183-
("self_cell", "Apache-2.0"), // rustc (fluent translations)
184-
("wasi-preview1-component-adapter-provider", "Apache-2.0 WITH LLVM-exception"), // rustc
185192
// tidy-alphabetical-end
186193
];
187194

@@ -198,57 +205,22 @@ const EXCEPTIONS_STDLIB: ExceptionList = &[
198205

199206
const EXCEPTIONS_CARGO: ExceptionList = &[
200207
// tidy-alphabetical-start
201-
("arrayref", "BSD-2-Clause"),
202208
("bitmaps", "MPL-2.0+"),
203-
("blake3", "CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception"),
204-
("ciborium", "Apache-2.0"),
205-
("ciborium-io", "Apache-2.0"),
206-
("ciborium-ll", "Apache-2.0"),
207-
("constant_time_eq", "CC0-1.0 OR MIT-0 OR Apache-2.0"),
208-
("dunce", "CC0-1.0 OR MIT-0 OR Apache-2.0"),
209-
("encoding_rs", "(Apache-2.0 OR MIT) AND BSD-3-Clause"),
210-
("fiat-crypto", "MIT OR Apache-2.0 OR BSD-1-Clause"),
211-
("foldhash", "Zlib"),
212209
("im-rc", "MPL-2.0+"),
213-
("libz-rs-sys", "Zlib"),
214-
("normalize-line-endings", "Apache-2.0"),
215-
("openssl", "Apache-2.0"),
216-
("ring", "Apache-2.0 AND ISC"),
217-
("ryu", "Apache-2.0 OR BSL-1.0"), // BSL is not acceptble, but we use it under Apache-2.0
218-
("similar", "Apache-2.0"),
219210
("sized-chunks", "MPL-2.0+"),
220-
("subtle", "BSD-3-Clause"),
221-
("supports-hyperlinks", "Apache-2.0"),
222-
("unicode-bom", "Apache-2.0"),
223-
("zlib-rs", "Zlib"),
224211
// tidy-alphabetical-end
225212
];
226213

227214
const EXCEPTIONS_RUST_ANALYZER: ExceptionList = &[
228215
// tidy-alphabetical-start
229-
("dissimilar", "Apache-2.0"),
230-
("foldhash", "Zlib"),
231-
("notify", "CC0-1.0"),
232216
("option-ext", "MPL-2.0"),
233-
("pulldown-cmark-to-cmark", "Apache-2.0"),
234-
("rustc_apfloat", "Apache-2.0 WITH LLVM-exception"),
235-
("ryu", "Apache-2.0 OR BSL-1.0"), // BSL is not acceptble, but we use it under Apache-2.0
236-
("scip", "Apache-2.0"),
237217
// tidy-alphabetical-end
238218
];
239219

240220
const EXCEPTIONS_RUSTC_PERF: ExceptionList = &[
241221
// tidy-alphabetical-start
242-
("alloc-no-stdlib", "BSD-3-Clause"),
243-
("alloc-stdlib", "BSD-3-Clause"),
244-
("brotli", "BSD-3-Clause/MIT"),
245-
("brotli-decompressor", "BSD-3-Clause/MIT"),
246-
("encoding_rs", "(Apache-2.0 OR MIT) AND BSD-3-Clause"),
247222
("inferno", "CDDL-1.0"),
248223
("option-ext", "MPL-2.0"),
249-
("ryu", "Apache-2.0 OR BSL-1.0"),
250-
("snap", "BSD-3-Clause"),
251-
("subtle", "BSD-3-Clause"),
252224
// tidy-alphabetical-end
253225
];
254226

@@ -258,36 +230,10 @@ const EXCEPTIONS_RUSTBOOK: ExceptionList = &[
258230
("cssparser-macros", "MPL-2.0"),
259231
("dtoa-short", "MPL-2.0"),
260232
("mdbook", "MPL-2.0"),
261-
("ryu", "Apache-2.0 OR BSL-1.0"),
262233
// tidy-alphabetical-end
263234
];
264235

265-
const EXCEPTIONS_CRANELIFT: ExceptionList = &[
266-
// tidy-alphabetical-start
267-
("cranelift-assembler-x64", "Apache-2.0 WITH LLVM-exception"),
268-
("cranelift-assembler-x64-meta", "Apache-2.0 WITH LLVM-exception"),
269-
("cranelift-bforest", "Apache-2.0 WITH LLVM-exception"),
270-
("cranelift-bitset", "Apache-2.0 WITH LLVM-exception"),
271-
("cranelift-codegen", "Apache-2.0 WITH LLVM-exception"),
272-
("cranelift-codegen-meta", "Apache-2.0 WITH LLVM-exception"),
273-
("cranelift-codegen-shared", "Apache-2.0 WITH LLVM-exception"),
274-
("cranelift-control", "Apache-2.0 WITH LLVM-exception"),
275-
("cranelift-entity", "Apache-2.0 WITH LLVM-exception"),
276-
("cranelift-frontend", "Apache-2.0 WITH LLVM-exception"),
277-
("cranelift-isle", "Apache-2.0 WITH LLVM-exception"),
278-
("cranelift-jit", "Apache-2.0 WITH LLVM-exception"),
279-
("cranelift-module", "Apache-2.0 WITH LLVM-exception"),
280-
("cranelift-native", "Apache-2.0 WITH LLVM-exception"),
281-
("cranelift-object", "Apache-2.0 WITH LLVM-exception"),
282-
("cranelift-srcgen", "Apache-2.0 WITH LLVM-exception"),
283-
("foldhash", "Zlib"),
284-
("mach2", "BSD-2-Clause OR MIT OR Apache-2.0"),
285-
("regalloc2", "Apache-2.0 WITH LLVM-exception"),
286-
("target-lexicon", "Apache-2.0 WITH LLVM-exception"),
287-
("wasmtime-jit-icache-coherence", "Apache-2.0 WITH LLVM-exception"),
288-
("wasmtime-math", "Apache-2.0 WITH LLVM-exception"),
289-
// tidy-alphabetical-end
290-
];
236+
const EXCEPTIONS_CRANELIFT: ExceptionList = &[];
291237

292238
const EXCEPTIONS_GCC: ExceptionList = &[
293239
// tidy-alphabetical-start
@@ -296,13 +242,9 @@ const EXCEPTIONS_GCC: ExceptionList = &[
296242
// tidy-alphabetical-end
297243
];
298244

299-
const EXCEPTIONS_BOOTSTRAP: ExceptionList = &[
300-
("ryu", "Apache-2.0 OR BSL-1.0"), // through serde. BSL is not acceptble, but we use it under Apache-2.0
301-
];
245+
const EXCEPTIONS_BOOTSTRAP: ExceptionList = &[];
302246

303-
const EXCEPTIONS_UEFI_QEMU_TEST: ExceptionList = &[
304-
("r-efi", "MIT OR Apache-2.0 OR LGPL-2.1-or-later"), // LGPL is not acceptable, but we use it under MIT OR Apache-2.0
305-
];
247+
const EXCEPTIONS_UEFI_QEMU_TEST: ExceptionList = &[];
306248

307249
#[derive(Clone, Copy)]
308250
struct ListLocation {
@@ -867,6 +809,11 @@ fn check_license_exceptions(
867809
}
868810
}
869811
}
812+
if LICENSES.contains(license) || LICENSES_TOOLS.contains(license) {
813+
check.error(format!(
814+
"dependency exception `{name}` is not necessary. `{license}` is an allowed license"
815+
));
816+
}
870817
}
871818

872819
let exception_names: Vec<_> = exceptions.iter().map(|(name, _license)| *name).collect();
@@ -890,7 +837,7 @@ fn check_license_exceptions(
890837
continue;
891838
}
892839
};
893-
if !LICENSES.contains(&license.as_str()) {
840+
if !LICENSES.contains(&license.as_str()) && !LICENSES_TOOLS.contains(&license.as_str()) {
894841
check.error(format!(
895842
"invalid license `{}` for package `{}` in workspace `{workspace}`",
896843
license, pkg.id

0 commit comments

Comments
 (0)