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-chromiumrevision.txt
- The revision of the changes on top of the given Chromium version.pruning.list
- See the Source File Processors sectiondomain_regex.list
- See the Source File Processors sectiondomain_substitution.list
- See the Source File Processors sectiondownloads.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 devutils/update_lists.py
.
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 devutils/update_lists.py
.
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:
qjz9zk
.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/
patches/series
text file that defines the order to apply all the patches. These patches are listed as a relative path from the patches
directory.
#
) are ignoredAll patch files in ungoogled-chromium must satisfy these formatting requirements:
.patch
-p1
for GNU patch).a/
and b/
prefixes, and a context of 3 (like the git default).Patches are categorized into two directories directly under patches/
:
Within each category, patches are grouped by the following:
debian/
- Patches from Debian's Chromium
debian/patches
directoryinox-patchset/
- Contains a modified subset of patches from Inox patchset.
bromite/
- Patches from Bromiteiridium-browser/
- Contains a modified subset of patches from Iridium Browser.
patchview
branch of Iridium's Git repository. Git webview of the patchview branchopensuse/
- Patches from openSUSE's Chromiumubuntu/
- Patches from Ubuntu's Chromiumungoogled-chromium/
- Patches by ungoogled-chromium developersPackaging 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:
tools/gn/bootstrap/bootstrap.py
gn gen
with the GN flagsninja
out/Default
)