This document contains a high-level technical description of ungoogled-chromium and its components.
ungoogled-chromium consists of the following major components:
The following sections describe each component.
Configuration is a broad term that refers to patches, build flags, and metadata about Chromium source code. It consists of the following components:
The following sections describe each component in more depth.
Configuration files (or config files) are files that store build configuration and source code changes for a build.
IMPORTANT: For consistency, all config files must be encoded in UTF-8.
List of configuration files:
chromium_version.txt- The Chromium version used by ungoogled-chromium
revision.txt- The revision of the changes on top of the given Chromium version.
pruning.list- See the Source File Processors section
domain_regex.list- See the Source File Processors section
domain_substitution.list- See the Source File Processors section
downloads.ini- Archives to download and unpack into the buildspace tree. This includes code not bundled in the Chromium source code archive that is specific to a non-Linux platform. On platforms such as macOS, this also includes a pre-built LLVM toolchain for convenience (which can be removed and built from source if desired).
flags.gn- GN arguments to set before building.
Source file processors are utilities that directly manipulate the Chromium source tree before building. Currently, there are two such utilities: binary pruning, and domain substitution.
Binary Pruning: Strips binaries from the source code. This includes pre-built executables, shared libraries, and other forms of machine code. Most are substituted with system or user-provided equivalents, or are built from source; those binaries that cannot be removed do not contain machine code.
The list of files to remove are determined by the config file
pruning.list. This config file is generated by
Domain Substitution: Replaces Google and several other web domain names in the Chromium source code with non-existent alternatives ending in
qjz9zk. These changes are mainly used as a backup measure to detect potentially unpatched requests to Google. Note that domain substitution is a crude process, and may not be easily undone.
With a few patches from ungoogled-chromium, any requests with these domain names sent via
net::URLRequest in the Chromium code are blocked and notify the user via a info bar.
Similar to binary pruning, the list of files to modify are listed in
domain_substitution.list; it is also updated with
The regular expressions to use are listed in
domain_regex.list; the search and replacement expressions are delimited with a pound (
#) symbol. The restrictions for the entries are as follows:
All of ungoogled-chromium's patches for the Chromium source code are located in
patches/. This directory conforms to the default GNU Quilt format. That is:
patches/seriestext file that defines the order to apply all the patches. These patches are listed as a relative path from the
#) are ignored
All patch files in ungoogled-chromium must satisfy these formatting requirements:
-p1for GNU patch).
b/prefixes, and a context of 3 (like the git default).
Patches are categorized into two directories directly under
Within each category, patches are grouped by the following:
debian/- Patches from Debian's Chromium
inox-patchset/- Contains a modified subset of patches from Inox patchset.
bromite/- Patches from Bromite
iridium-browser/- Contains a modified subset of patches from Iridium Browser.
patchviewbranch of Iridium's Git repository. Git webview of the patchview branch
opensuse/- Patches from openSUSE's Chromium
ubuntu/- Patches from Ubuntu's Chromium
ungoogled-chromium/- Patches by ungoogled-chromium developers
Packaging is the process of downloading, building, and producing a distributable package of ungoogled-chromium.
Packaging files use the code from this repository to build ungoogled-chromium. Each platform and configuration has an associated packaging repository under the ungoogled-software organization. For more information about each packaging repository, see the building documentation.
Packaging generally consists of the major steps:
gn genwith the GN flags