OLD | NEW |
(Empty) | |
| 1 # Adding third_party Libraries |
| 2 |
| 3 [TOC] |
| 4 |
| 5 Using third party code can save time and is consistent with our values - no need |
| 6 to reinvent the wheel! We put all code that isn't written by Chromium developers |
| 7 into src/third_party (even if you end up modifying just a few functions). We do |
| 8 this to make it easy to track license compliance, security patches, and supply |
| 9 the right credit and attributions. It also makes it a lot easier for other |
| 10 projects that embed our code to track what is Chromium licensed and what is |
| 11 covered by other licenses. |
| 12 |
| 13 ## Get the Code |
| 14 |
| 15 When you find code you want to use, get it. This often means downloading: from |
| 16 Sourceforge, from the hosting feature of Google Code, or from somewhere else. |
| 17 Sometimes it can mean negotiating a license with another company and receiving |
| 18 the code another way. Please describe the source in the README.chromium file, |
| 19 described below. For security reasons, please retrieve the code as securely as |
| 20 you can, using HTTPS and GPG signatures if available. If retrieving a tarball, |
| 21 please do not check the tarball itself into the tree, but do list the source and |
| 22 the SHA-512 hash (for verification) in the README.chromium and Change List. The |
| 23 SHA-512 hash can be computed via the `shasum (sha512sum)` or `openssl` |
| 24 utilities. If retrieving from a git repository, please list the SHA-512 hash. |
| 25 |
| 26 ## Put the Code in (the right) third_party |
| 27 |
| 28 By default, all code should be checked into |
| 29 [src/third_party](http://src.chromium.org/viewvc/chrome/trunk/src/third_party/). |
| 30 It is OK to have third_party subdirectories that are not top-level (e.g. |
| 31 src/net/third_party), but don't add more third_party directories than necessary. |
| 32 |
| 33 ## Document the Code's Context |
| 34 |
| 35 ### Add OWNERS |
| 36 |
| 37 Your OWNERS file must include 2 Chromium developer accounts. This will ensure |
| 38 accountability for maintenance of the code over time. While there isn't always |
| 39 an ideal or obvious set of people that should go in OWNERS, this is critical for |
| 40 first-line triage of any issues that crop up in the code. |
| 41 |
| 42 As an OWNER, you're expected to: |
| 43 |
| 44 * Remove the dependency when/if it is no longer needed |
| 45 * Update the dependency when a security or stability bug is fixed upstream |
| 46 * Help ensure the Chrome feature that uses the dependency continues to use the |
| 47 dependency in the best way, as the feature and the dependency change over |
| 48 time. |
| 49 |
| 50 ### Add a README.chromium |
| 51 |
| 52 You need a README.chromium file with information about the project from which |
| 53 you're re-using code. See |
| 54 [README.chromium.template](http://src.chromium.org/viewvc/chrome/trunk/src/third
_party/README.chromium.template) |
| 55 for a list of fields to include. A presubmit check will check this has the right |
| 56 format. |
| 57 |
| 58 ### Add a LICENSE file and run related checks |
| 59 |
| 60 You need a LICENSE file. Example: |
| 61 [third_party/libjpeg/LICENSE](http://src.chromium.org/viewvc/chrome/trunk/src/th
ird_party/libjpeg/LICENSE?revision=42288&view=markup). |
| 62 |
| 63 Run the following scripts: |
| 64 |
| 65 * `src/tools/licenses.py scan` - This will complain about incomplete or missing |
| 66 data for third_party checkins. We use 'licenses.py credits' to generate the |
| 67 about:credits page in Google Chrome builds. |
| 68 * `src/tools/checklicenses/checklicenses.py` - See below for info how to handle |
| 69 possible failures. |
| 70 * If you are adding code that will be present in the content layer, please make |
| 71 sure that the license used is compliant with Android tree requirements because |
| 72 this code will also be used in Android WebView. You need to run |
| 73 `src/android_webview/tools/webview_licenses.py scan` |
| 74 |
| 75 See the ["Odds n' Ends"](adding_to_third_party.md#Odds-n_Ends) Section below if |
| 76 you run into any failures running these. |
| 77 |
| 78 If the library will never be shipped as a part of Chrome (e.g. build-time tools, |
| 79 testing tools), make sure to set "License File" as "NOT_SHIPPED" so that the |
| 80 license is not included in about:credits page. |
| 81 |
| 82 ### Modify DEPS |
| 83 |
| 84 If the code is applicable and will be compiled on all supported Chromium |
| 85 platforms (Windows, Mac, Linux, ChromeOS, iOS, Android), check it in to |
| 86 [src/third_party](http://src.chromium.org/viewvc/chrome/trunk/src/third_party/).
|
| 87 |
| 88 If the code is only applicable to certain platforms, check it in to |
| 89 [src/third_party](http://src.chromium.org/viewvc/chrome/trunk/src/third_party/) |
| 90 and add an entry to the |
| 91 [DEPS](http://src.chromium.org/viewvc/chrome/trunk/src/DEPS) file that causes |
| 92 the code to be checked out from src/third_party into src/third_party by gclient. |
| 93 |
| 94 _Explanation: Checking it into src/third_party causes all developers to need to |
| 95 check out your code. This wastes disk space cause syncing to take longer for |
| 96 developers that don't need your code. When all platforms really do need the |
| 97 code, checking it in to src/third_party allows some slight improvements over |
| 98 DEPS._ |
| 99 |
| 100 As for specifying the path where the library is fetched, a path like |
| 101 `src/third_party/<project_name>/src` is highly recommended so that you can put |
| 102 the file like OWNERS or README.chromium at `third_party/<project_name>`. If you |
| 103 have a wrong path in DEPS and want to change the path of the existing library in |
| 104 DEPS, please ask the infrastructure team before committing the change. |
| 105 |
| 106 ## Setting up ignore |
| 107 |
| 108 If your code is synced via DEPS, you should add the new directory to Chromium's |
| 109 `.gitignore`. This is necessary because Chromium's main git repository already |
| 110 contains |
| 111 [src/third_party](http://src.chromium.org/viewvc/chrome/trunk/src/third_party/) |
| 112 and the project synced via DEPS is nested inside of it and its files regarded as |
| 113 untracked. That is, anyone running `git status` from `src/` would see a clutter. |
| 114 Your project's files are tracked by your repository, not Chromium's, so make |
| 115 sure the directory is listed in Chromium's `.gitignore`. |
| 116 |
| 117 ## Get a Review |
| 118 |
| 119 All third party additions and substantive changes like re-licensing need the |
| 120 following sign-offs. Some of these are accessible to Googlers only. Non-Googlers |
| 121 can email one of the people in third_party/OWNERS for help. |
| 122 |
| 123 * Chrome Eng Review. Googlers should see go/chrome-eng-review |
| 124 * open-source-third-party-reviews@google.com (ping the list with relevant |
| 125 details and a link to the CL). |
| 126 * security@chromium.org (ping the list with relevant details and a link to the |
| 127 CL). |
| 128 |
| 129 Third party code is a hot spot for security vulnerabilities. When adding a new |
| 130 package that could potentially carry security risk, make sure to highlight risk |
| 131 to security@chromium.org. You may be asked to add a README.security or, in |
| 132 dangerous cases, README.SECURITY.URGENTLY file. When you update your code, be |
| 133 mindful of security-related mailing lists for the project and relevant CVE to |
| 134 update your package. |
| 135 |
| 136 Subsequent changes don't require third-party-owners approval; you can modify the |
| 137 code as much as you want. |
| 138 |
| 139 ## Ask the infrastructure team to add a git mirror for the dependency (or |
| 140 configure the git repo, if using googlesource.com) |
| 141 |
| 142 Before committing the DEPS, you need to ask the infra team to create a git |
| 143 mirror for your dependency. [Create a |
| 144 ticket](https://bugs.chromium.org/p/chromium/issues/entry?template=Infra-Git) |
| 145 for infra and ask the infra team. |
| 146 |
| 147 If you are using a git repo from googlesource.com then you must ensure that the |
| 148 repository is configured to give the build bots unlimited quota, or else the |
| 149 builders will fail to checkout with an "Over Quota" error. [Create a |
| 150 ticket](https://bugs.chromium.org/p/chromium/issues/entry?template=Infra-Git) |
| 151 for infra and ask the infra team what needs to be done. Note that you'll need |
| 152 unlimited quota for at least two role accounts. See the quota status of |
| 153 `boringssl` as an example. |
| 154 |
| 155 ## Odds n' Ends |
| 156 |
| 157 ### Handling `licenses_check (checklicenses.py)` failures |
| 158 |
| 159 This is needed for [Issue |
| 160 28291](http://code.google.com/p/chromium/issues/detail?id=28291): Pass the |
| 161 Ubuntu license check script: |
| 162 |
| 163 __If the failure looks like ... ... the right action is to ... __ |
| 164 |
| 165 * 'filename' has non-whitelisted license 'UNKNOWN' |
| 166 * Ideally make the licensecheck.pl script recognize the license of that |
| 167 file. Often this requires __adding a license header__. Does it have |
| 168 license header? If it's third party code, ask the upstream project to make |
| 169 sure all their files have license headers. If the license header is there |
| 170 but is not recognized, we should try to patch licensecheck.pl. If in |
| 171 doubt please contact phajdan.jr@chromium.org |
| 172 * 'filename' has non-whitelisted license 'X' and X is BSD-compatible |
| 173 * Add the license X to WHITELISTED_LICENSES in checklicenses.py . Make sure |
| 174 to respect the OWNERS of that file. You must get an approval before |
| 175 landing. CLs violating this requirement may be reverted. |
| 176 * 'filename' has non-whitelisted license 'X' and X is not BSD-compatible (i.e. |
| 177 GPL) |
| 178 * Do you really need to add those files? Chromium is BSD-licensed so the |
| 179 resulting binaries can't use GPL code. Ideally we just shouldn't have |
| 180 those files at all in the tree. If in doubt, please ask mal@chromium.org |
| 181 |
| 182 ### Handling `webview_licenses.py` failures |
| 183 |
| 184 __If the failure looks like ... ... the right action is to ... __ |
| 185 |
| 186 * Missing license file |
| 187 * Make sure that the license file is present. It should be called 'LICENSE', |
| 188 or otherwise README.chromium file must point to it explicitly. |
| 189 * The following files contain a third-party license but are not in a listed |
| 190 third-party directory... |
| 191 * Check if it's a false positive (e.g. 'copyright' word used in a string |
| 192 literal), if so, update |
| 193 [src/tools/copyright_scanner/third_party_files_whitelist.txt](https://code
.google.com/p/chromium/codesearch#chromium/src/tools/copyright_scanner/third_par
ty_files_whitelist.txt) |
| 194 file. Otherwise, please move the code into third_party. |
OLD | NEW |