blob: 17e52aa32bc2579297113ab2bf0cfccf31a52bae [file] [log] [blame] [view]
Supported Chromium Products and Platforms
=========================================
Chromium is used to produce many products, which run on many platforms.
One of the biggest challenges in making changes to Chromium is appropriately
considering that wide variety of supported products and platforms and dealing
with platform-specific or product-specific test failures.
To keep this cost manageable the Chromium project is very conservative in adding
new supported platforms and products, with additions requiring approval by Chrome
ATLs (chrome-atls-discuss@google.com). This document is the canonical document
describing which products are officially supported on which platforms.
**Note**: This document applies to Chromium. Some of Chromium's subcomponents like
ANGLE or V8 currently support more platforms.
Definitions of Terms
--------------------
* **Platform**: for this document means a build configuration: A combination
of OS, ISA like 64-bit Intel or 32-bit Arm, compiler, debug / release,
sanitizers, and so on. In short, a combination of flags you might stick into
args.gn.
* **Product**: An executable that can be built on one or more platforms and
ships to users.
* **Embedder**: An embedder is a code module that glues together ("embeds")
Chromium's lower-level layers (e.g., content layer + selected //components) to
produce a product. Embedders can live either upstream (i.e., in the Chromium
repository) or downstream.
* **Officially supported product**: A product is officially supported if
engineers working in the Chromium codebase are accountable for regressions
in that product.
* **Officially supported platform**: A platform is officially supported if there
are bots on [Chromium's waterfall](https://ci.chromium.org/p/chromium/g/main/console) and commit queue that build and run tests on that
platform. Commit queue coverage means that no patches that land will break these
platforms. Note that official platform support can and does vary by product,
as detailed below.
* **Community supported platform**: Some platforms that are not officially
supported for a given product can still be community supported. That means that
despite no bots making sure that the platform does not break, the community sends
patches to unbreak things, and we accept these patches unless they introduce
undue cost in the judgment of the local owners in question.
* **Unsupported platform**: Actively blocked from working upstream (e.g., may
#error out in build).
* **Downstream product**: Chromium is used by several other projects as a "soft-fork"
(downstream branch) for which engineers making upstream changes are not
accountable for preventing regressions, but instead should ideally be helpful in
providing guidance to
project owners in a good open-source citizen best-effort fashion. Such
downstream products are of course free to support platforms that are
unsupported in upstream Chromium at the cost of maintaining the fork.
* **SKU (Stock keeping unit)**: A build configuration of a product that ships to
users. We try to limit the number of SKUs. For example, on each OS, we generally try to
have a single binary for each product per ISA (instruction set architecture, e.g. x86
or ARM), with optional fast paths for optional specialized instructions dispatched to
at runtime.
* **CQ (commit queue) bot**: A bot that runs some build/test configuration on Chromium
CLs pre-submit and blocks submit if it turns red.
* **CI (continuous integration) bot**: A bot that runs some build/test configuration
on Chromium CLs post-submit and closes the tree if it turns red.
* **FYI bot**: A bot that runs some build/test configuration on Chromium's
waterfall at some cadence but does not block commit or close the tree on
turning red.
* **Internal bot**: A bot that runs some team's set of tests somewhere
internal to that team. (Note for Googlers: see details about Google-specific
internal bots on the CQ
[here](https://g3doc.corp.google.com/company/teams/chrome/ops/engprod/browser_infra/cq/overview.md?cl=head#internal-builders-on-the-cq)).
Engineer Responsibility
-----------------------
### When making changes
* The engineer making a change is accountable for reasonably proactively ensuring
that change doesn't negatively impact officially supported platforms and products
using their code
* This is obviously always a cost/risk judgement call and the perfect balance
certainly does not mean elimination of all risk. But engineers should expect that
when they cause an issue of this type, they are the ones on the hook for
remediation (eg. immediate revert / merge), post-mortem and potentially post-
mortem action items and so should feel the incentive to use tools like experimentation
appropriately. In particular:
* Detected breakage of CQ/CI bots has a "revert first, ask later" policy.
Engineers should expect that any of their CLs causing such breakage may
freely be reverted without prior discussion, and their first priority in
resolving such breakage should be turning the bots green again ASAP.
* Detected breakage of FYI bots should *not* result in reverts a priori. The
team gardening that FYI bot may reach out to the engineer authoring the CL
to understand more about the impact of the CL, but as a general rule, the
challenge of keeping the FYI bot green is on the team gardening the FYI
bot.
* Detected breakage of internal bots should *not* result in reverts a priori.
The team gardening that internal bot may reach out to the engineer
authoring the CL to together determine the best path forward. That best
path forward may involve reverting the upstream CL, but that should be
done only (a) with the consensus of the engineer who authored the CL and
(b) with the commitment of the downstream team to do whatever necessary to
allow the engineer in question to advance their upstream work. Note: There
may be exceptions for engineers on the downstream team in question, for
whom there can be tighter policies as determined by the team itself (for
a concrete example, see the "Tast notes section" in [this document](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/testing/testing_in_chromium.md)).
### When introducing new features
In general, engineers adding a new feature are accountable for:
* Deciding which of the supported platforms their new feature will support
* Ensuring their feature works well on all such platforms, and is correctly
disabled (and so causes no regressions) on all other official Chromium platforms
* Adhering to Chromium's [flag guarding
guidelines](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/flag_guarding_guidelines.md)
* Informing platform owners appropriately in case they want to partner on
additional support earlier rather than later
* Some feature areas have additional processes to support this and promote
consistency: eg. for new web platform APIs we ask engineers to explain their
platform support decision and API owners may object when a decision lacks
suitable justification (eg. lacking WebView support for no good reason)
Supported Compilers
-------------------
The only officially supported C++ compiler is Chromium's hermetic clang.
This is upstream clang built at a specific upstream revision that's
periodically updated. (See "Cronet" below for a small asterisk.)
See docs/clang.md for more details.
The only officially supported Rust compiler is Chromium's hermetic rustc.
This is upstream rustc built at a fixed revision, built against the same
LLVM that Chromium's clang is built against (to make cross-language LTO work
well). It enables rustc nightly features.
On Linux, GCC is community-supported (per the definition in the [definitions of
terms](#definitions-of-terms)).
MSVC is not supported, and `base/compiler_specific.h` `#error`s out on it.
Supported Chromium Browser Platforms by OS
------------------------------------------
The Chromium browser (and its official counterpart Google Chrome) are produced
via the //chrome embedder (except for on iOS, where the embedder is
//ios/chrome). This section details officially supported Chromium browser
platforms.
Note: Googlers can see additional internal information
[here](https://g3doc.corp.google.com/company/teams/chrome/platform_support.md?cl=head).
### Android
Chrome on Android is supported on x86, x64, ARM, and ARM64. The current minimum
OS version supported is listed [here](https://support.google.com/chrome/a/answer/7100626).
The `is_desktop_android` GN arg configures a build of Chrome for Android that
is customized for a desktop form factor.
### ChromeOS
Chrome follows the [ChromeOS auto-update
policy](https://support.google.com/chrome/a/answer/6220366).
### Linux
[This page](https://support.google.com/chrome/a/answer/7100626) details
minimum operating system and hardware requirements.
### macOS
[This page](https://support.google.com/chrome/a/answer/7100626) details
minimum operating system requirements.
### iOS
Chrome on iOS is supported on ARM64. The minimum supported operating system
version changes roughly once a year. As of February 2026, the minimum OS
version supported is iOS 17.0.
### Windows
[This page](https://support.google.com/chrome/a/answer/7100626) details
minimum operating system and hardware requirements.
Other Upstream Embedders
------------------------
Besides the embedder for the Chromium browser, there are several other
upstream embedders in Chromium, which have their own CQ and CI bots that
Chromium engineers are responsible for keeping green. This section details
these embedders.
### Android WebView
Android WebView is an Android system component for displaying web content.
The embedder code for Android WebView lives in //android_webview. Details are
[here](https://chromium.googlesource.com/chromium/src/+/main/android_webview/README.md).
### Chromecast
The embedder code for Chromecast lives in //chromecast.
### Cronet
Cronet is an Android library that packages Chromium's network stack. The
embedder code for Cronet lives in //components/cronet. Details are [here](https://chromium.googlesource.com/chromium/src/+/main/components/cronet/README.md).
### Fuchsia WebEngine
The embedder code for Fuchsia WebEngine lives in //fuchsia_web. Details are
[here](https://chromium.googlesource.com/chromium/src/+/main/fuchsia_web/README.md).
### Headless
Headless Chromium allows running Chromium in a headless/server environment.
The embedder code for Headless lives in //headless. Details are
[here](https://chromium.googlesource.com/chromium/src/+/main/headless/README.md).
### iOS WebView
iOS WebView is an Objective-C framework that renders web content with
`[CWVWebView]`. The
embedder code for iOS WebView lives in //ios/web_view. Details are
[here](https://chromium.googlesource.com/chromium/src/+/main/ios/web_view/README.md).