ungoogled-chromium:彻底摆脱Google依赖的隐私浏览器
ungoogled-chromium是一个基于Chromium开源项目的隐私浏览器分支,专注于彻底移除所有与Google服务相关的代码和依赖。该项目通过系统化的技术手段,包括代码补丁、二进制文件清理和域名替换等,确保浏览器不会在后台与Google服务器通信或收集用户数据。同时,它保持了原生Chromium的用户体验和功能完整性,并提供了增强的隐私控制选项,所有额外功能都遵循“默认禁用,按需启用”的原则,为用户提供了一个既熟悉又安全的浏览环境。
项目背景与核心目标解析
在当今数字时代,浏览器已成为我们日常生活中不可或缺的工具,但大多数主流浏览器都与大型科技公司的生态系统深度绑定,特别是Google Chrome及其开源基础Chromium。虽然Chromium本身是开源的,但它仍然包含大量与Google服务相关的代码和依赖,这些组件在后台默默运行,收集用户数据并与Google服务器通信。
技术背景与隐私挑战
传统Chromium浏览器存在几个关键隐私问题:
- 后台服务调用:即使未登录Google账户,Chromium仍会向Google服务器发送各种请求
- 二进制依赖:包含预编译的Google二进制文件,无法验证其真实行为
- 服务集成:深度集成Google Cloud Messaging、Safe Browsing等专有服务
- 数据收集机制:内置多种数据收集和上报功能
这些问题催生了ungoogled-chromium项目的诞生——一个致力于彻底移除Google服务依赖的Chromium分支。
核心设计目标体系
ungoogled-chromium项目确立了三个层次分明的核心目标,按重要性降序排列:
首要目标:彻底移除Google服务依赖
这是项目的根本使命,通过以下技术手段实现:
关键技术组件:
| 组件类型 | 功能描述 | 技术实现 |
|---|---|---|
| 补丁系统 | 修改Chromium源代码 | GNU Quilt格式,patches/目录组织 |
| 二进制清理 | 移除预编译文件 | pruning.list配置,自动化清理工具 |
| 域名替换 | 防止意外连接 | domain_substitution.list,运行时请求拦截 |
| 构建配置 | 控制编译过程 | flags.gn,自定义构建参数 |
次要目标:保持原生Chromium体验
与许多具有自己设计理念的Chromium分支不同,ungoogled-chromium致力于尽可能保留标准的Chromium用户体验:
这种设计哲学确保用户从标准Chromium迁移到ungoogled-chromium时几乎感受不到差异,同时享受增强的隐私保护。
第三目标:增强隐私、控制和透明度
在移除Google依赖的基础上,项目还引入了大量增强功能:
隐私增强特性:
# 示例:域名替换技术的实现原理
def apply_domain_substitution(source_code):
"""
将Google域名替换为虚拟域名qjz9zk
防止任何意外的Google服务连接
"""
substitution_patterns = [
(r'google\.com', 'google.qjz9zk'),
(r'gstatic\.com', 'gstatic.qjz9zk'),
(r'googleapis\.com', 'googleapis.qjz9zk')
]
for pattern, replacement in substitution_patterns:
source_code = re.sub(pattern, replacement, source_code)
return source_code
控制权增强功能:
| 功能类别 | 具体特性 | 用户收益 |
|---|---|---|
| 网络行为控制 | 禁用Intranet重定向检测 | 减少不必要的DNS查询 |
| 数据收集限制 | 移除客户端提示(Client Hints) | 防止设备指纹识别 |
| 连接管理 | IPv6探测控制 | 更好的网络隐私保护 |
| 引用控制 | 可配置的Referrer策略 | 减少数据泄露风险 |
技术架构与实现策略
ungoogled-chromium采用模块化的技术架构,通过多个协同工作的组件实现其目标:
核心补丁分类:
- Core Patches (
patches/core/):处理后台请求、Google特定服务和二进制依赖的关键修改 - Extra Patches (
patches/extra/):增强控制性和透明度的可选功能 - ** borrowed Features**:从其他隐私浏览器项目(如Iridium、Bromite)借鉴的经过验证的功能
设计哲学与原则
ungoogled-chromium的设计遵循几个关键原则:
最小化修改原则:只在必要时修改Chromium代码,尽可能保持上游兼容性 可选性原则:大多数增强功能默认禁用,用户需要显式启用 透明度原则:所有修改都通过补丁文件明确记录,便于审查和验证 社区驱动原则:积极整合来自其他隐私保护项目的经过验证的改进
这种设计理念确保了项目既能够提供强大的隐私保护,又不会破坏Chromium的稳定性和兼容性,为用户提供了一个真正可信赖的浏览环境。
通过这种多层次的目标体系和严谨的技术实现,ungoogled-chromium成功地在保持Chromium所有优点的同时,彻底切断了与Google服务的所有不必要的连接,为用户提供了真正私密、可控的浏览体验。
三大设计原则:去Google化、保持Chromium体验、增强隐私控制
ungoogled-chromium作为一款专注于隐私保护的浏览器,其设计哲学建立在三个核心原则之上,这些原则不仅指导着项目的技术实现,也体现了开发者对用户隐私和自主控制权的深刻承诺。
去Google化:彻底切断与Google服务的连接
去Google化是ungoogled-chromium的首要设计原则,其目标是从Chromium源代码中彻底移除所有与Google网络服务的依赖关系。这一过程通过多层次的技术手段实现:
代码层面的深度清理
项目通过系统化的补丁机制,移除了超过50个与Google服务相关的组件,包括:
域名替换与请求拦截
项目采用创新的域名替换技术,将Google相关域名替换为虚构的qjz9zk顶级域名,作为最后的防护层:
# 域名替换配置示例(domain_regex.list)
google\.com#qjz9zk\.com
googleapis\.com#qjz9zkapis\.com
gstatic\.com#qjz9zkstatic\.com
# 运行时请求拦截机制
if request_domain.endswith('qjz9zk'):
block_request_and_notify_user()
二进制文件清理(Binary Pruning)
通过pruning.list配置文件,系统化地移除源代码中的预编译二进制文件:
| 文件类型 | 处理方式 | 示例 |
|---|---|---|
| 预编译可执行文件 | 完全移除 | third_party/win_build_output |
| 共享库文件 | 系统库替代 | third_party/ffmpeg |
| Google特定二进制 | 用户提供替代 | chrome/installer |
保持Chromium体验:无缝过渡与兼容性
第二个设计原则是最大限度地保留原生Chromium的用户体验,确保用户从官方Chromium切换到ungoogled-chromium时几乎感受不到差异。
界面与功能一致性
项目严格遵循"只移除,不修改"的原则:
- 用户界面保持原样,不添加额外UI元素
- 所有核心功能(渲染引擎、JavaScript引擎等)完整保留
- 扩展生态系统完全兼容
- 开发者工具功能无损
构建系统兼容性
ungoogled-chromium维护与官方Chromium构建系统的完全兼容:
版本同步策略
项目与官方Chromium版本保持严格同步:
- 每个ungoogled-chromium版本对应特定的Chromium版本
- 及时跟进Chromium安全更新
- 补丁机制确保新版本兼容性
增强隐私控制:精细化权限管理
第三个设计原则是通过大量新功能和配置选项增强用户的隐私控制能力,所有这些功能都遵循"默认禁用,按需启用"的理念。
丰富的命令行开关
项目引入了50多个新的命令行参数,涵盖各个隐私保护维度:
| 功能类别 | 开关示例 | 作用描述 |
|---|---|---|
| 网络隐私 | --disable-grease-tls | 禁用TLS GREASE扩展 |
| 数据控制 | --keep-old-history | 禁用90天历史记录自动删除 |
| 指纹防护 | --fingerprinting-canvas-noise | 画布指纹识别防护 |
| 界面定制 | --hide-tab-close-buttons | 隐藏标签页关闭按钮 |
chrome://flags集成
所有新功能都集成到标准的chrome://flags页面中,提供图形化配置界面:
// 标志注册示例
{
name: "disable-search-engine-collection",
description: "Disable automatic search engine scraping from webpages",
owners: ["ungoogled-chromium-team"],
supported_platforms: ["Windows", "Linux", "Mac"],
default_state: "disabled"
}
隐私增强功能特性
项目通过特性标志(Feature Flags)提供细粒度的隐私控制:
具体功能包括:
- MinimalReferrers: 最小化引用来源信息
- NoCrossOriginReferrers: 禁用跨域引用
- ReducedSystemInfo: 减少系统信息泄露
- RemoveClientHints: 移除客户端提示
- SpoofWebGLInfo: WebGL信息伪装
运行时保护机制
除了编译时的修改,项目还实现了强大的运行时保护:
// 运行时请求拦截示例
bool ShouldBlockRequest(const GURL& url) {
// 检查是否为Google相关域名
if (IsGoogleDomain(url.host())) {
LogBlockedRequest(url);
ShowInfoBar("Blocked request to Google service");
return true;
}
// 检查trk:协议(Iridium Browser特性)
if (url.scheme() == "trk") {
return true;
}
return false;
}
设计原则的协同作用
这三个设计原则不是孤立存在的,而是相互协同的整体:
去Google化为项目提供了技术基础,保持Chromium体验确保了可用性和兼容性,而增强隐私控制则提供了差异化的用户价值。这种多层次的设计理念使得ungoogled-chromium既能够提供企业级的隐私保护,又能够保持普通用户熟悉的浏览器体验。
通过这三大原则的有机结合,ungoogled-chromium成功地在强大的隐私保护与优秀的用户体验之间找到了最佳平衡点,为用户提供了一个真正可以信任的浏览环境。
与其他Chromium分叉项目的区别
ungoogled-chromium 在众多基于Chromium的分叉项目中独树一帜,其设计理念和技术实现与其他知名分叉项目存在显著差异。通过深入分析项目架构和代码实现,我们可以清晰地看到这些区别。
设计哲学的根本差异
与其他Chromium分叉项目相比,ungoogled-chromium 坚持三个核心设计目标:
- 保持Chromium原生体验 - 不像其他分叉项目那样重新定义浏览器体验
- 彻底移除Google服务依赖 - 不仅仅是禁用,而是完全移除相关代码
- 增强隐私和控制功能 - 但所有功能都需要手动启用
这种设计哲学体现在项目的技术架构中:
技术实现层面的对比分析
1. 代码修改策略对比
| 特性 | ungoogled-chromium | Bromite | Iridium Browser | Inox patchset |
|---|---|---|---|---|
| Google服务移除 | 完全移除代码 | 主要禁用 | 禁用并替换 | 选择性禁用 |
| 二进制清理 | 系统化二进制修剪 | 无系统化清理 | 无系统化清理 | 无系统化清理 |
| 域名替换 | 使用qjz9zk域名替换 | 无此机制 | 无此机制 | 无此机制 |
| 功能启用方式 | 全部手动启用 | 部分默认启用 | 部分默认启用 | 选择性启用 |
2. 补丁管理架构
ungoogled-chromium 采用高度结构化的补丁管理系统:
# 补丁目录结构示例
patches/
├── core/ # 核心补丁(必须应用)
│ ├── ungoogled-chromium/
│ ├── bromite/ # 从Bromite借用的补丁
│ ├── iridium-browser/
│ └── inox-patchset/
├── extra/ # 额外功能补丁(可选)
└── series # 补丁应用顺序定义
这种架构允许项目:
- 选择性集成其他项目的优秀补丁
- 保持补丁应用的严格顺序控制
- 区分核心功能和可选功能
3. 功能标志系统对比
ungoogled-chromium 的功能标志系统设计体现了其"默认禁用"理念:
// ungoogled-chromium 标志实现示例
const UNGOOGLED_FLAGS = {
// 隐私相关标志
'disable-beforeunload': {
description: '禁用beforeunload JavaScript对话框',
default: false // 默认禁用
},
// 从其他项目借用的功能
'fingerprinting-canvas-image-data-noise': {
description: '(来自Bromite) Canvas图像数据指纹欺骗',
default: false // 保持默认禁用
}
};
与其他项目的具体技术差异
与Bromite的区别
虽然ungoogled-chromium借用了Bromite的一些补丁,但两者存在根本区别:
- Android支持:Bromite专注于Android平台,而ungoogled-chromium主要面向桌面平台
- 默认配置:Bromite许多隐私功能默认启用,而ungoogled-chromium全部需要手动配置
- 构建系统:ungoogled-chromium提供跨平台构建配置,Bromite主要针对特定平台
与Iridium Browser的区别
Iridium Browser采用更激进的修改策略:
- 服务替换:Iridium将Google服务替换为自己的服务
- 品牌定制:包含大量品牌定制内容
- 默认配置:许多隐私保护功能默认启用
而ungoogled-chromium:
- 完全移除:不替换,直接移除Google服务代码
- 品牌中立:保持Chromium原始品牌
- 用户控制:所有功能由用户决定是否启用
技术实现细节对比
通过分析项目代码,我们可以看到具体的实现差异:
// ungoogled-chromium 的域名替换实现
void DomainSubstitution::ApplySubstitution() {
// 使用正则表达式替换Google域名
std::regex google_domains("(google|gstatic|googleapis)\\.(com|org|net)");
std
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



