blob: 0b34789f43c7fd419aa490b7ce1c530841980113 [file] [log] [blame] [view]
zpeng8d6f584a2016-12-16 20:50:281# Adding third_party Libraries
2
3[TOC]
4
5Using third party code can save time and is consistent with our values - no need
6to reinvent the wheel! We put all code that isn't written by Chromium developers
Dirk Pranke568e95c2018-11-01 23:41:507into `//third_party` (even if you end up modifying just a few functions). We do
zpeng8d6f584a2016-12-16 20:50:288this to make it easy to track license compliance, security patches, and supply
9the right credit and attributions. It also makes it a lot easier for other
10projects that embed our code to track what is Chromium licensed and what is
11covered by other licenses.
12
Dirk Pranke568e95c2018-11-01 23:41:5013## Put the code in //third_party
zpeng8d6f584a2016-12-16 20:50:2814
Lei Zhangf1c73922024-05-13 19:17:4415By default, all third party code should be checked into
Dirk Pranke53e12c32024-09-12 20:55:1816[//third_party](../third_party/), for the reasons given above.
17
18There is one primary exception to this, which is that if a third_party
19dependency has its own dependencies *and* it can be built on its own (without
20Chromium), you can check its dependencies into its third_party. For example,
21Dawn is a project that is developed independently of Chromium, and
22it has a dependency on GLFW (which Chromium does not have). Dawn
23can check that dependency into its `//third_party/glfw`, and in a Chromium
24checkout, that will show up at `//third_party/dawn/third_party/glfw`.
25That is okay, but it'd be better if we could add GLFW to a Chromium
26checkout (in chromium/src's `third_party/glfw`) and configure Dawn
27to use that location when it is being built as part of Chromium.
28
29However, if that dependency is also needed by Chromium or another
30of Chromium's dependencies, then it must be checked out into Chromium's
31//third_party (i.e., now you have to use `//third_party/glfw`). This
32prevents us from possibly needing to use two different versions of a
33dependency.
34
35Apart from that, other locations are only appropriate in a few
Dirk Pranke568e95c2018-11-01 23:41:5036situations and need explicit approval; don't assume that because there's some
37other directory with third_party in the name it's okay to put new things
38there.
zpeng8d6f584a2016-12-16 20:50:2839
Tim van der Lippe5870ac32019-10-18 11:46:5440## Before you start
41
42To make sure the inclusion of a new third_party project makes sense for the
Alex Mineer55764332022-02-25 18:05:1943Chromium project, you should first obtain
John Abd-El-Malek704bca02022-12-14 18:47:5944[Chrome ATL](../ATL_OWNERS) approval. Please include the following information in an
John Abd-El-Malekf44dc07b2023-02-07 02:39:1145email to [email protected]:
Yaron Friedmane34271392022-04-29 16:45:5346* Motivation of your project
47* Design docs
48* Additional checkout size
John Abd-El-Malekdde7f232022-12-14 23:41:5049 * If the increase is significant (e.g., 20+ MB), can we consider limiting the
50 files to be checked in?
Yaron Friedmane34271392022-04-29 16:45:5351* Build time increase
Erik Staab6e341e82024-08-26 15:13:3552 * This refers to building `chrome` or test targets in the critical
Erik Staab933b35e2025-03-01 02:29:5453 development path. The [compile-size](speed/binary_size/compile_size_builder.md)
54 builder in CQ is a good proxy for the whether the delta is acceptable
55 (caveat that it measures just `chrome` on Linux).
John Abd-El-Malekdde7f232022-12-14 23:41:5056 * If the increase is significant (e.g., 30+ seconds), can we consider making
57 this an optional build target?
58* Binary size increase on Android ([official](https://www.chromium.org/developers/gn-build-configuration) builds)
Lei Zhangf1c73922024-05-13 19:17:4459 * Any increase of 16 KB or more on Android is flagged on the build bots and
John Abd-El-Malekdde7f232022-12-14 23:41:5060 justification is needed.
Yaron Friedmane34271392022-04-29 16:45:5361* Binary size increase on Windows
John Abd-El-Malekdde7f232022-12-14 23:41:5062* Is this library maintained on all platforms that we will use it on?
63 * If not, will the Chrome org be expected to maintain this for some or all
64 platforms?
65* Does it have any performance / memory implications (esp. on Android)? Was the
66library designed with intended use on Android?
67* Do we really need the library? Is there any alternative such as an existing
68library already in Chromium? If introducing a library with similar functionality
69as existing, will it be easy for another developer to understand which should be
70used where? Will you commit to consolidating uses in Chromium and remove the
71alternative libraries?
72* For desktop (Win/Mac/Linux/ChromeOS), does the dependency introduce closed
73source components (e.g., binaries, WASM binaries, obfuscated code)? If yes,
74please reach out to Chrome ATLs.
75
Yaron Friedmane34271392022-04-29 16:45:5376
John Abd-El-Malek704bca02022-12-14 18:47:5977Googlers can access [go/chrome-atls](https://goto.google.com/chrome-atls) and review
78existing topics in g/chrome-atls, and can also come to office hours to ask
Alex Mineer55764332022-02-25 18:05:1979questions.
80
Scott Violet50a02e42022-11-29 20:02:3481### Rust
82
David Adriand8918692024-12-12 22:02:5083Rust is allowed for third party libraries. Unlike C++ libraries, Rust third
84party libraries are [regularly rolled to updated versions by a
85rotation](https://chromium.googlesource.com/chromium/src/tools/+/HEAD/crates/create_update_cl.md)
86and can be audited for unsafety. The process for adding a Googler adding new Rust third-party
87dependencies is documented at go/chrome-rust. External contributors adding a new
88third party Rust dependency will be shepherded through the process as part of
89their ATL review.
Scott Violet50a02e42022-11-29 20:02:3490
David Adriand8918692024-12-12 22:02:5091Email [email protected] with any questions about the Rust toolchain.
Scott Violet50a02e42022-11-29 20:02:3492
Yaron Friedmane34271392022-04-29 16:45:5393### A note on size constraints
94
95The size of Chromium derived executables can impact overall performance of those binaries as they
96need to run on a wide range of devices including those with extremely limited RAM. Additionally, we
97have experience from Windows of the binary size impacting successful patch rate of updates as well
98as constraints from the Android Ecosystem where APKs included in the system image have hard
99limits on their size due to allocation size of the system partition. For more details and
100guidelines on size increases see
Michael Cui5d517752022-11-01 14:11:32101[//docs/speed/binary_size/binary_size_explainer.md](speed/binary_size/binary_size_explainer.md) and Googlers can
102additionally check [go/chrome-binary-size](https://goto.google.com/chrome-binary-size)
Tim van der Lippe5870ac32019-10-18 11:46:54103
Rachael Newitt15546992023-09-17 22:13:09104### Binaries, obfuscated or minified code
105
106The addition of third-party dependencies that contain binaries, obfuscated
107code, or minified code is strongly discouraged. Code review is an important
108part of reducing risk to Chromium and a reviewer asked to approve a change
109that contains any of these has no way to determine the legitimacy of what
110they are approving. Minification for performance optimization is
111[usually not necessary](speed/binary_size/optimization_advice.md), and the
112trade-off in terms of understandability and security is rarely worth
113it.
114
115Where your dependency will form part of a release binary where size is a concern,
116there are existing tools which handle [compression for distribution](speed/binary_size/optimization_advice.md).
117
118You should not check in any pre-built binaries where there is an alternate,
119supported solution for getting them. If you need to compile from source,
120consider using [CIPD](cipd_and_3pp.md) instead.
121
Dirk Pranke4038090a2024-05-09 01:51:37122This is accessible to Googlers only. Non-Googlers can email one of the people
123in third_party/OWNERS for help.
Rachael Newitt15546992023-09-17 22:13:09124
125See [Chrome Code Policy](https://goto.google.com/chrome-code-policy)
126
127
Dirk Pranke568e95c2018-11-01 23:41:50128## Get the code
zpeng8d6f584a2016-12-16 20:50:28129
Dirk Pranke568e95c2018-11-01 23:41:50130There are two common ways to depend on third-party code: you can reference a
Jason D. Clintonb21e99b2021-09-30 19:19:58131Git repo directly (via entries in the DEPS file) or you can check in a
132snapshot. The former is preferable in most cases:
133
1341. If you are actively developing in the upstream repo, then having the DEPS
135 file include the upstream (that's been mirrored to GoB, see below) can be a
136 way to include those changes into Chromium at a particular revision. The
137 DEPS file will be updated to a new revision when you are ready to "roll" the
138 new version into Chromium. This also avoids duplicate copies of the code
139 showing up in multiple repos leading to contributor confusion.
1401. This interacts favorably with our upstream tracking automation. We
141 automatically consume the upstream Git hashes and match them against a
142 database of known upstreams to tracking drift between Chromium and upstream
143 sources.
1441. This makes adding deps that don't need local changes easier. E.g. some of
145 our automation automatically converts non-GN build rules into GN build rules
146 without any additional CLs.
147
148Checking in a snapshot is useful if this is effectively taking on maintenance
149of an unmaintained project (e.g. an ancient library that we're going to GN-ify
150that hasn't been updated in years). And, of course, if the code you need isn't
151in a Git repo, then you have to snapshot.
zpeng8d6f584a2016-12-16 20:50:28152
Tim van der Lippe5870ac32019-10-18 11:46:54153### Node packages
154
155To include a Node package, add the dependency to the
156[Node package.json](../third_party/node/package.json). Make sure to update
157the corresponding [`npm_exclude.txt`](../third_party/node/npm_exclude.txt)
158and [`npm_include.txt`](../third_party/node/npm_include.txt) to make the code
159available during checkout.
160
Dirk Pranke568e95c2018-11-01 23:41:50161### Pulling the code via DEPS
162
163If the code is in a Git repo that you want to mirror, please file an [infra git
164ticket](https://bugs.chromium.org/p/chromium/issues/entry?template=Infra-Git)
165to get the repo mirrored onto chromium.googlesource.com; we don't allow direct
166dependencies on non-Google-hosted repositories, so that we can still build
Jason D. Clintonb21e99b2021-09-30 19:19:58167if an external repository goes down.
Dirk Pranke568e95c2018-11-01 23:41:50168
169Once the mirror is set up, add an entry to [//DEPS](../DEPS) so that gclient
170will pull it in. If the code is only needed on some platforms, add a condition
171to the deps entry so that developers on other platforms don't pull in things
172they don't need.
173
174As for specifying the path where the library is fetched, a path like
175`//third_party/<project_name>/src` is highly recommended so that you can put
176the file like OWNERS or README.chromium at `//third_party/<project_name>`. If
177you have a wrong path in DEPS and want to change the path of the existing
178library in DEPS, please ask the infrastructure team before committing the
179change.
180
David Dorwin7fde299b2020-09-25 02:10:34181Lastly, add the new directory to Chromium's `//third_party/.gitignore`, so that
182it won't show up as untracked files when you run `git status` on the main
183repository.
Dirk Pranke568e95c2018-11-01 23:41:50184
185### Checking in the code directly
186
187If you are checking in a snapshot, please describe the source in the
188README.chromium file, described below. For security reasons, please retrieve
189the code as securely as you can, using HTTPS and GPG signatures if available.
190If retrieving a tarball, please do not check the tarball itself into the tree,
191but do list the source and the SHA-512 hash (for verification) in the
192README.chromium and Change List. The SHA-512 hash can be computed via
193`sha512sum` or `openssl dgst -sha512`. If retrieving from a git
194repository, please list the revision that the code was pulled from.
195
196If you are checking the files in directly, you do not need an entry in DEPS
David Dorwin7fde299b2020-09-25 02:10:34197and do not need to modify `//third_party/.gitignore`.
Dirk Pranke568e95c2018-11-01 23:41:50198
199### Checking in large files
200
Dirk Pranke4038090a2024-05-09 01:51:37201This is accessible to Googlers only. Non-Googlers can email one of the people
202in third_party/OWNERS for help.
Dirk Pranke568e95c2018-11-01 23:41:50203
204See [Moving large files to Google Storage](https://goto.google.com/checking-in-large-files)
205
206## Document the code's context
zpeng8d6f584a2016-12-16 20:50:28207
208### Add OWNERS
209
Dirk Pranke6d3bb8e2024-05-09 00:54:33210Your OWNERS file must either list the email addresses of two Chromium
211committers on the first two lines or include a `file:` directive to an OWNERS
212file within the `third_party` directory that itself conforms to this criterion.
213This will ensure accountability for maintenance of the code over time. While
214there isn't always an ideal or obvious set of people that should go in OWNERS,
215this is critical for first-line triage of any issues that crop up in the code.
zpeng8d6f584a2016-12-16 20:50:28216
217As an OWNER, you're expected to:
218
219* Remove the dependency when/if it is no longer needed
220* Update the dependency when a security or stability bug is fixed upstream
221* Help ensure the Chrome feature that uses the dependency continues to use the
222 dependency in the best way, as the feature and the dependency change over
223 time.
224
225### Add a README.chromium
226
227You need a README.chromium file with information about the project from which
228you're re-using code. See
Dirk Pranke568e95c2018-11-01 23:41:50229[//third_party/README.chromium.template](../third_party/README.chromium.template)
zpeng8d6f584a2016-12-16 20:50:28230for a list of fields to include. A presubmit check will check this has the right
231format.
232
Dirk Pranke568e95c2018-11-01 23:41:50233README.chromium files contain a field indicating whether the package is
234security-critical or not. A package is security-critical if it is compiled
235into the product and does any of the following:
236
237* Accepts untrustworthy inputs from the internet
238* Parses or interprets complex input formats
239* Sends data to internet servers
240* Collects new data
241* Influences or sets security-related policy (including the user experience)
242
Rachael Newittfc2e3342023-07-04 23:07:31243**CPE Prefix**
Adrian Taylor0a06ec32020-03-03 05:00:07244One of the fields is CPEPrefix. This is used by Chromium and Google systems to
245spot known upstream security vulnerabilities, and ensure we merge the fixes
246into our third-party copy. These systems are not foolproof, so as the OWNER,
247it's up to you to keep an eye out rather than solely relying on these
248automated systems. But, adding CPEs decreases the chances of us missing
249vulnerabilities, so they should always be added if possible.
250
251The CPE is a common format shared across the industry; you can look up the CPE
Anne Redulla04f91972023-08-31 04:09:19252for your package [here](https://nvd.nist.gov/products/cpe/search).
253* Use CPE format 2.3 (preferred) or CPE format 2.2 (supported).
254* If the CPE uses the 2.3 URI binding or 2.2 format (i.e. starts with "cpe:/"),
255and no version is explicitly specified within the `CPEPrefix`, the `Version`
256in the `README.chromium` file will be appended to the `CPEPrefix`, if available.
257 * Note: if the `Version` field is set to a git hash value, version matching
258 for vulnerabilities will fail.
259
260When searching for a CPE, you may find that there is not yet a CPE for the
261specific upstream version you're using. This is normal, as CPEs are typically
262allocated only when a vulnerability is found. You should follow the version
263number convention such that, when that does occur in future, we'll be notified.
264If no CPE is available, please specify "unknown".
Adrian Taylor0a06ec32020-03-03 05:00:07265
Adrian Taylor8e0d3fd2020-04-17 20:14:25266If you're using a patched or modified version which is halfway between two
267public versions, please "round downwards" to the lower of the public versions
268(it's better for us to be notified of false-positive vulnerabilities than
269false-negatives).
Adrian Taylor0a06ec32020-03-03 05:00:07270
Rachael Newittfc2e3342023-07-04 23:07:31271
272**Shipped**
273Your README.chromium should also specify whether your third party dependency
274will be shipped as part of a final binary. The "Shipped" field replaces the now
275deprecated special value of "NOT_SHIPPED" which was previously allowed in the
Rachael Newittf3531fd2024-09-26 03:37:41276"License File" field. This use is no longer supported and all third party
277dependencies must include a valid license regardless of whether it is shipped
278or not.
Rachael Newittfc2e3342023-07-04 23:07:31279
280
Anne Redullab75419e2023-09-12 03:34:01281**Multiple packages**
282Each package should have its own README.chromium. However, if this is not
283possible and the information for multiple packages must be placed in a single
284README.chromium, use the below line to separate the data for each package:
285```
286-------------------- DEPENDENCY DIVIDER --------------------
287```
288
289
zpeng8d6f584a2016-12-16 20:50:28290### Add a LICENSE file and run related checks
291
292You need a LICENSE file. Example:
Rachael Newittf3531fd2024-09-26 03:37:41293[//third_party/libjpeg/LICENSE](../third_party/libjpeg/LICENSE). Dependencies
294should not be added without a license file and license type, even if they are
295not shipped in a final product. Existing dependencies without a license file or
296license type are currently being cleaned up as part of the metadata uplift
297effort. If you are an OWNER of a dependency missing license fields, there will
298soon be a bug filed to fix it.
zpeng8d6f584a2016-12-16 20:50:28299
Andrew Mellen2be00b92022-11-11 16:38:42300Run `//tools/licenses/licenses.py scan`; this will complain about incomplete or missing
Dirk Pranke568e95c2018-11-01 23:41:50301data for third_party checkins. We use `licenses.py credits` to generate the
302about:credits page in Google Chrome builds.
zpeng8d6f584a2016-12-16 20:50:28303
304If the library will never be shipped as a part of Chrome (e.g. build-time tools,
Rachael Newittfc2e3342023-07-04 23:07:31305testing tools), make sure to set the "Shipped" field to "no" so that the license
Rachael Newitt15546992023-09-17 22:13:09306is not included in about:credits page ([more on this below](#credits)).
zpeng8d6f584a2016-12-16 20:50:28307
Jordan Brown77ce40f2024-12-10 00:31:13308When a dependency allows a choice of license, OWNERS should choose the least
309restrictive license that meets Chromium's needs and document only the chosen
310license(s) in the README.chromium file.
311
312Multiple licenses apply when there are dependencies bundled together, or
313different parts have different restrictions, these are inherently 'and'. This is
314very different to a project allowing multiple license options.
315
Jordan Browne9acbe72025-01-12 22:07:34316The `License:` field in README.chromium must use a _comma-separated list_ of licenses
Jordan Brown77ce40f2024-12-10 00:31:13317that are actively in use. Complex license expressions are not allowed or
318supported.
319
Jordan Browne9acbe72025-01-12 22:07:34320Use SPDX license identifiers (https://spdx.org/licenses/) when possible e.g.
321['Apache-2.0'](https://spdx.org/licenses/Apache-2.0.html). You can find the full
322allowlist in
323[depot_tools/+/main:metadata/fields/custom/license_allowlist.py](https://source.chromium.org/chromium/chromium/tools/depot_tools/+/main:metadata/fields/custom/license_allowlist.py).
324If the dependency uses a license that is not in the allowlist, you will need to
325add it to the
326[allowlist](https://source.chromium.org/chromium/chromium/tools/depot_tools/+/main:metadata/fields/custom/license_allowlist.py).
327This requires approval from the ATLs who will check that the license
328classification is one of [unencumbered/permissive/notice/reciprocal]. If the
329license is more restrictive than reciprocal, engage with the ATLs to determine
330if the dependency is appropriate for Chromium. The license identifier will still
331need to be added to the restricted list
332['WITH_PERMISSION_ONLY'](https://source.chromium.org/chromium/chromium/tools/depot_tools/+/main:metadata/fields/custom/license_allowlist.py).
333Do not use a license on that list without approval from the ATLs.
334
335#### License Classifications
336
337Licenses used in our codebase fall into several categories of increasing
338restrictiveness, with notice-level and less restrictive licenses being allowed
339in all projects:
340
341* **Public Domain/Unencumbered/Permissive Licenses** - These licenses allow
342 you to do almost anything with the code, they may require attribution e.g.:
343 * [CC0-1.0](https://spdx.org/licenses/CC0-1.0.html).
344 * [Unlicense](https://spdx.org/licenses/Unlicense.html).
345* **Notice Licenses** - (Most open source licenses fall into this category)
346 These licenses are similar to permissive but have additional notice
347 requirements e.g.:
348 * [Apache-2.0](https://spdx.org/licenses/Apache-2.0.html): [`Any modified files
349 must carry prominent notices stating that you changed the
350 files`](https://source.chromium.org/chromium/chromium/src/+/main:third_party/catapult/third_party/coverage/LICENSE.txt;l=98).
351 * [BSD-3-Clause](https://spdx.org/licenses/BSD-3-Clause): [`3. Neither the
352 name of the copyright holder nor the names of its contributors may be
353 used to endorse or promote products derived from this software without
354 specific prior written
355 permission.`](https://source.chromium.org/chromium/chromium/src/+/main:ios/third_party/fishhook/LICENSE;drc=1308ce89bbb959047a73145a0ca4a2f5f7dde894;l=10).
356
357Additionally, open source projects like Chromium are also allowed to use reciprocal licenses:
358
359* **Reciprocal Licenses** - These licenses require sharing modifications under
360 the same terms:
361
362 * [MPL-1.1](https://spdx.org/licenses/MPL-1.1.html).
363 * [APSL-2.0](https://spdx.org/licenses/APSL-2.0.html).
364
365* **Restricted Licenses !Case-by-case Approval Required!** - These licenses
366 have stricter requirements but are allowed in some circumstances. These
367 licenses may require you to publish the code under the same terms and
368 conditions:
369
370 * [LGPL-2.1](https://spdx.org/licenses/LGPL-2.1.html).
371 * [GPL-2.0](https://spdx.org/licenses/GPL-2.0.html).
372
373Make sure you understand the license terms before checking in a dependency, and
374when making any local modifications or forks.
375
Jordan Brown09c138a2025-02-05 03:42:27376The following restricted licenses are allowed under the following circumstances
377(this is not a definitive list):
378
379* GPL licenses are allowed for all non-shipped dependencies.
380* LGPLv2.1 is always okay as long as it is part of the Chromium binary.
381
Dirk Pranke568e95c2018-11-01 23:41:50382## Get a review
zpeng8d6f584a2016-12-16 20:50:28383
Aaron Gablefc8cdad2018-01-16 21:02:40384All third party additions and substantive changes like re-licensing need the
Dirk Pranke568e95c2018-11-01 23:41:50385following sign-offs. Some of these are accessible to Googlers only.
386Non-Googlers can email one of the people in
387[//third_party/OWNERS](../third_party/OWNERS) for help.
zpeng8d6f584a2016-12-16 20:50:28388
John Abd-El-Malek704bca02022-12-14 18:47:59389* Make sure you have the approval from Chrome ATLs as mentioned
Tim van der Lippe8c7498392019-10-28 12:21:04390 [above](#before-you-start).
Alex Rudenkof712a7f2022-02-23 17:55:36391* Get [email protected] (or [email protected], Google-only)
Jordan Browna376e322024-12-23 00:25:27392 approval. Document all security considerations, concerns, and risks in the
393 `Description:` field of the README.chromium. Third party code is a hot spot
394 for security vulnerabilities. Help people make informed decisions about
395 relying on this package by highlighting security considerations.
Dirk Pranke6fb90c02018-10-17 02:02:20396* Add [email protected] as a reviewer on your change. This
Adam Langley88658b32018-11-20 22:12:47397 will trigger an automatic round-robin assignment to a reviewer who will check
398 licensing matters. These reviewers may not be able to +1 a change so look for
399 verbal approval in the comments. (This list does not receive or deliver
400 email, so only use it as a reviewer, not for other communication. Internally,
Michael Cui5d517752022-11-01 14:11:32401 see [cl/221704656](http://cl/221704656) for details about how
Dirk Prankef7432812020-06-10 22:38:20402 this is configured.). If you have questions about the third-party process,
403 ask one of the [//third_party/OWNERS](../third_party/OWNERS) instead.
Adam Langley88658b32018-11-20 22:12:47404* Lastly, if all other steps are complete, get a positive code review from a
405 member of [//third_party/OWNERS](../third_party/OWNERS) to land the change.
zpeng8d6f584a2016-12-16 20:50:28406
John Abd-El-Malek704bca02022-12-14 18:47:59407Please send separate emails to the ATLs and [email protected].
408You can skip the ATL review and [email protected] when you are only moving
Kentaro Haracd328342022-02-25 08:25:44409existing directories in Chromium to //third_party/.
jochen893d5182017-01-31 22:01:49410
Dirk Pranke568e95c2018-11-01 23:41:50411Subsequent changes don't normally require third-party-owners or security
412approval; you can modify the code as much as you want. When you update code, be
413mindful of security-related mailing lists for the project and relevant CVE to
414update your package.
Dirk Prankebf4136b2018-09-20 22:48:43415
416## How we ensure that the right credits are displayed {#credits}
417
418As we said at the beginning, it is important that Chrome displays the
419right credit and attributions for all of the third_party code we use.
420
421To view this in chrome, you can open chrome://credits.
422
423That page displays a resource embedded in the browser as part of the
424[//components/resources/components_resources.grd](../components/resources/components_resource.grd)
425GRIT file; the actual HTML text is generated in the
426[//components/resources:about_credits](../components/resources/BUILD.gn)
427build target using a template from the output of the
Rachael Newittfc2e3342023-07-04 23:07:31428[//tools/licenses/licenses.py](../tools/licenses/licenses.py) script. Assuming
429you‘ve followed the rules above to ensure that you have the proper path to the
430LICENSE file and set the Shipped value, if it passes the checks, it’ll be
431included automatically.