src/third_party (even if you end up modifying just a few functions). We do this to make it easy to track license compliance, security patches, and supply the right credit and attributions. It also makes it a lot easier for other projects that embed our code to track what is Chromium licensed and what is covered by other licenses.
When you find code you want to use, get it. This often means downloading: from Sourceforge, from the hosting feature of Google Code, or from somewhere else. Sometimes it can mean negotiating a license with another company and receiving the code another way. Please describe the source in the README.chromium file, described below.
For security reasons, please retrieve the code as securely as you can, using HTTPS and GPG signatures if available.
If retrieving a tarball, please do not check the tarball itself into the tree, but do list the source and the SHA-1 hash (for verification) in the README.chromium and Change List. The SHA-1 hash can be computed via the
If retrieving from a git repository, please list the SHA-1 hash.
src/third_party. It is OK to have third_party subdirectories that are not top-level (e.g. src/net/third_party), but don't add more third_party directories than necessary.
Your OWNERS file must include 2 Chromium developer accounts. This will ensure accountability for maintenance of the code over time. While there isn't always an ideal or obvious set of people that should go in OWNERS, this is critical for first-line triage of any issues that crop up in the code.
As an OWNER, you're expected to:
You need a README.chromium file with information about the project from which you're re-using code. See README.chromium.template for a list of fields to include. A presubmit check will check this has the right format.
You need a LICENSE file. Example: third_party/libjpeg/LICENSE.
Run the following scripts:
See the "Odds n Ends" Section below if you run into any failures running these.
If the code is applicable and will be compiled on all supported Chromium platforms (Windows, Mac, Linux, ChromeOS, iOS, Android), check it in to src/third_party.
If the code is only applicable to certain platforms, check it in to src/third_party and add an entry to the DEPS file that causes the code to be checked out from src/third_party into src/third_party by gclient.
Explanation: Checking it into src/third_party causes all developers to need to check out your code. This wastes disk space cause syncing to take longer for developers that don't need your code. When all platforms really do need the code, checking it in to src/third_party allows some slight improvements over DEPS.
You should add the new directory to .gitignore.
You also need to set the svn:ignore property on the folder. This requires an svn checkout and isn't reviewable. It's best to use a clean checkout to avoid accidentally pulling in other changes.
Here is a recipe for adding a dep that will get checked out into third_party/jarjar:
All third party additions should go through a Chrome Eng Review before being checked in. The initial submission (and any substantive change, like relicensing) of third party code requires review from email@example.com and firstname.lastname@example.org.
Third party code is a hot spot for security vulnerabilities. When adding a new package that could potentially carry security risk, make sure to highlight risk to email@example.com. You may be asked to add a README.security or, in dangerous cases, README.SECURITY.URGENTLY file. When you update your code, be mindful of security-related mailing lists for the project and relevant CVE to update your package.
Subsequent changes don't require third-party-owners approval; you can modify the code as much as you want.
This is needed for Issue 28291: Pass the Ubuntu license check script: