docs/design.md
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.pygn gen with the GN flagsninjaout/Default)