来自Igalia的Yeunjoo Choi谈Chromium
摘要
对来自Igalia的Yeunjoo Choi的采访,关于她在Chromium和企业级浏览器方面的工作,涵盖rebase挑战和品牌定制。
暂无内容
查看缓存全文
缓存时间: 2026/05/23 09:30
# Yeunjoo Choi from Igalia on Chromium
Source: https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html
The Consensus Logo (https://theconsensus.dev/)
关于软件基础设施。
## Yeunjoo Choi from Igalia on Chromium
2026年5月20日 by Phil Eaton
您作为订阅者正在提前阅读本文。您的支持使这样的文章成为可能。谢谢。
*本文是一个系列的一部分,采访那些从事软件基础设施开发的开发者(不是创始人,不是高管),了解他们的工作、如何进入这个领域、他们引以为豪的项目、他们从中吸取教训的事故以及他们好奇的事物。*
Yeunjoo (LinkedIn (https://www.linkedin.com/in/duswnchl/), Website (https://duswnchl.github.io/)) 在过去15年中一直从事网页浏览器(WebKit 和 Chromium)的开发工作,最初是在LG Electronics (https://theconsensus.dev/company/lg-electronics.html),现在则在开源软件开发咨询公司Igalia (https://theconsensus.dev/company/igalia.html) 工作。
## 你最近在 Igalia 主要做些什么?\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#what-have-you-been-working-on-recently-at-igalia)
我是 Chromium 团队的成员,最近一直在从事企业级浏览器的开发。许多企业级浏览器厂商选择 Chromium,是因为它兼容 Web 标准、跨平台支持强、上游维护活跃、生态和工具链完善等。浏览器也已成为企业服务的主要控制点,因此 Igalia 与企业厂商合作的机会也更多了。
在与几家企业厂商合作时,我主要实现与策略控制、数据保护相关的企业功能,而不是布局、JavaScript 引擎或媒体功能等领域。Chromium 已经内置了通用浏览器控制的企业策略,但有些客户需要更特殊的行为,这需要添加新的代码路径和钩子,而不仅仅是在 JSON 文件中添加新的策略条目。此外,我还需要考虑他们独立的策略引擎,它具有各自的语法、协议和评估逻辑。
我在企业浏览器中另一个负责的领域是品牌化。品牌化通常是全新项目启动时的第一个任务。它不仅涉及更改图标和字符串,还涉及自定义设置页或新标签页的布局、启动画面等。在一个项目中,我直接与一位 UX 设计师合作,获取设计资源并就布局进行讨论。这对我来说是一次有趣的经历,因为它帮助我更好地理解了 UX 设计师的视角。
## 你说“企业浏览器”的时候……\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#when-you-say-enterprise-browsers)
我指的是企业解决方案厂商产品中使用的 Chromium 版本。这些浏览器通常作为企业解决方案出售给客户,但在很多情况下,公司也要求员工在内部使用这些浏览器。他们的员工往往是这些企业浏览器的第一批用户。
## 你是如何让所有这些企业分支保持同步更新的?这工作量不是很大吗?\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#how-do-you-keep-all-these-enterprise-forks-up-to-date-isnt-that-a-lot-of-work)
Rebasing 始终是个挑战,因为 Chromium 是一个庞大且快速变化的仓库,每个版本都有不少非平凡的提交。据我所知,使用 Chromium 的知名浏览器厂商都有自己的 rebase 策略来保持分支同步更新。
Igalia 也经常收到客户在这个领域的帮助和咨询请求。定义 rebase 策略时需要考虑几个重要因素:使用 Rebase 还是 Merge?何时更新?下游变更的大小和形态?自动化?QA 的团队能力?等等。我的同事 José Dapena Paz 发表了一系列关于下游维护 (https://blogs.igalia.com/dape/tags/downstream-maintenance/) 的有趣博文,我推荐一读。
就个人而言,在开发 Chromium 分支时,我尽量以下游变更结构化的方式来减少 rebase 时的合并冲突。例如,我更喜欢在隔离的层(如 `//igalia`)中实现新的下游功能,并重用上游组件(如 `//components`、`//content` 和 `//ui`),以保持我自己的增补量较小。重要的一点是尊重现有层的层次结构和边界。大多数上游重构都保持了清晰的层间依赖规则,因此遵循这些结构的下游变更在 rebase 时会产生更少的合并冲突和回归。
## Igalia 的项目是什么样的?\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#whats-a-project-like-at-igalia)
由于 Igalia 是一家开源咨询公司,我们的大部分项目都是由客户驱动的。有些项目涉及实现产品特定功能或维护下游 Chromium 分支,而另一些则专注于向上游贡献。在上游方面,我们有时会帮助开发为客户定制的上游功能,或者帮助加速 CSS 标准化工作。
我们不仅参与客户项目,还参与内部投资项目。Igalia 会将部分资源投入到我们认为有意义或具有战略重要性的开源项目中。由于我们长期与各种客户密切合作,Igalia 对开源项目和生态所需的内容有很好的理解。
其中一些投资项目源于我们反复看到的需求。例如,我的同事 Miyoung Shin 正在致力于将扩展相关代码从 `//chrome` 迁移到 `//extensions`,从而使 Chromium 能够通过组件化为嵌入式应用提供扩展支持。
当 Igalia 审查项目提案时,我们首先会检查是否有可用的资源以及人们是否对项目感兴趣。这也意味着我有机会参与符合我兴趣的项目。我通常会说“我想做那个项目!”,因为我喜欢在 Chromium 的不同领域工作,而不是专注于某个特定领域。
项目的规模和时间跨度取决于项目的目标。例如,如果目标是基于 Chromium 构建一个下游浏览器并实现新功能,那么项目在早期阶段可能很大,随着目标达成而逐渐变小。另一方面,一些维护项目规模不大但周期较长,可能跨越数年。
## 最近有什么事情是你正在学习或终于理解的?也许是你觉得之前竟然不知道或不明白,现在回想起来有点傻的事情?\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#whats-something-recently-youve-been-learning-about-or-finally-understand-maybe-something-you-feel-silly-you-didnt-know-about-or-understand-earlier)
我最终意识到的一件事是,开源项目比我想象的更容易接近。
在加入 Igalia 之前,我虽然已经与几种浏览器引擎打交道了近 10 年,但从未向开源项目贡献过代码。我可能有点懒,而且说实话,我对向如此庞大的开源项目贡献代码感到不知所措。我害怕在这些被无数人广泛使用的项目中搞坏什么东西。我还怀疑我的下游工作对上游来说是否有趣或有用,因为我觉得它太过产品特定。
另一个挑战是走出自己的舒适区。韩国一直是一个相对同质化的社会,过去我很少与不同文化背景的人交流。我不确定自己是否能在讨论和审查代码变更时用英语进行良好沟通。
但我其实不需要那么担心!开源社区欢迎来自不同背景的新贡献者,并愿意帮助初学者。我对 Chromium 的第一次上游贡献是一个小的重构提交,我惊讶地发现它比我想象的容易得多。通过提交小的变更来学习 Chromium 生态之后,即使是更大的提交也不再让人感到畏惧。
## 是什么让你进入编程领域?你大学学的是计算机科学吗?\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#what-got-you-into-programming-did-you-go-to-university-for-computer-science)
我主修电子工程,但与传统的半导体或电路设计等硬件领域相比,我对数字信号处理和嵌入式系统更感兴趣。
C 编程也是课程中的核心科目之一,所以我对编程已经有了一些了解。我越来越被软件开发所吸引,因为与硬件项目相比,我可以更快地看到可见的成果。
我的职业生涯始于一家大型工业企业,并加入了一个浏览器团队,从事纯软件开发。虽然我对编程感兴趣,但我没有太多正规的计算机科学背景,所以我在实际软件项目中边做边学。下班后,我会花时间阅读同事推荐的知名计算机科学书籍,例如《C++ 程序设计语言》、《设计模式》和《重构》。
最终,我意识到我真心喜欢用软件解决问题。
## 你是如何进入浏览器开发领域的?\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#how-did-you-get-into-browser-development)
我职业生涯一开始就被分配到了一个浏览器团队。那时我完全不知道什么是浏览器开发——这也很合理,因为我连计算机科学都基本不了解!我的第一个任务是在一款智能电视浏览器上为 WebGL 启用硬件加速。我能贡献的唯一部分是一个非常小的优化,利用 EGL API 减少 CPU 和 GPU 之间的不必要拷贝。那时我并没有考虑深入浏览器开发,因为我正忙于消化一大堆新知识。
我曾从事 WebKit 开发,后来在我之前的公司采用 Chromium 后转向了它。随着我的工作范围逐渐扩展到浏览器的不同部分,我突然意识到,我从成熟的、开源的浏览器引擎工作中学到了大量软件工程的知识。浏览器引擎是多种技术的熔炉,我通过阅读开源社区中优秀工程师编写的整洁、结构清晰的代码学到了很多。
这大概就是为什么我至今仍享受浏览器开发的原因。总有新东西可以学习,而且浏览器开发对我来说是成长为一名软件工程师的最佳场所。
## 你对 Chromium 最早的重要开源贡献之一是帮助 Google 做了一大堆重构。能谈谈那个项目吗?为什么 Google 需要 Google 之外的帮助?\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#one-of-the-first-big-open-source-contributions-you-made-to-chromium-was-helping-google-do-a-bunch-of-refactoring-can-you-tell-us-about-that-project-and-why-does-google-need-help-outside-of-google)
其中一个重要的重构项目是由 Google 领导的 多页面架构(MPArch) 项目 (https://blogs.igalia.com/gyuyoung/2022/10/13/mparchmultiple-page-architecture-project-in-chromium/),该项目引入了重大的架构变更,以全面支持向前/后退缓存、预渲染、门户和围栏帧等功能。
它修改了核心导航架构,并影响了 Chromium 的许多部分,因此变更无法一次性推出。Google 引入了 MPArch 的新导航路径,我则帮助逐步替换旧的路径。这项工作涉及验证不同平台上没有出现任何问题,有时还需要与代码所有者进行长时间的讨论。
我认为这种大规模重构需要许多贡献者共同努力,尤其是因为它触及了 Chromium 的核心部分。Igalia 已经是 Chromium 开源社区的主要贡献者,拥有许多经验丰富的贡献者协同工作有助于加速这个重构项目。
## 你造成的最严重的 bug 是什么?发生了什么?你是如何发现并修复它的?\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#what-was-the-worst-bug-you-caused-what-happened-howd-you-find-and-fix-it)
我在前一家公司从事数字标牌设备的视频功能实现。其中一个用例是持续播放视频广告而不关机,因此稳定性非常重要。
一个令人印象深刻的 bug 被报告为视频播放过程中间歇性黑屏,但很难复现。据我所记得,我花了相当长的时间试图缩小问题范围。
有一次我碰巧测试了一个纯白色背景的视频,注意到白色区域被渲染成了黑色。这给了我一个线索:问题与视频合成过程中 alpha 通道处理有关,导致下层图层暴露出来。我现在不记得具体的修复方法了,但我记得一旦弄明白了,它最终只是一个单行修复。
## C 还是 C++?(或者其他你最喜欢的语言?)\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#c-or-c-or-some-other-favorite-language-entirely)
绝对是 C++!我很难解释清楚,但编写现代 C++ 对我来说现在感觉非常自然,因为我整个职业生涯都在写 C++ 代码。
就个人而言,我认为每种语言都有自己的优势,当我能够按照语言设计的方式使用它时,比如使用 C++ 模板编写可重用代码和减少样板代码,会感到非常满足。
## 编译浏览器代码一定很花时间,毕竟是这么大的 C++ 项目。你的开发流程是怎样的?\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#it-must-take-forever-to-compile-browser-code-being-such-large-c-projects-whats-your-development-process-like)
好问题。我永远不会忘记,在我的旧笔记本上,对 Chromium for Android 进行一次干净构建需要 9 个小时。
买了一台全新的强力笔记本之后,现在干净构建不到 3 小时,而且我还使用 ccache 来加速本地构建。Ccache 在我不需要频繁更新基础代码时效果特别好,比如在下游项目上工作时。如果我正在做一个每日更新量大且改动很多文件的下游项目,我可能会设置一个每晚自动拉取和构建的环境。
在进行上游贡献时,我依赖 Google 的远程构建执行服务,因为作为 Chromium 提交者,我有“try job 访问权限”(即在 Google 共享基础设施上运行预合并测试构建的权限)。速度相当快,在我的笔记本上,对一个干净的 Android 构建通常只需要 10-15 分钟左右,尽管我有时想过尝试其他的 RBE 后端以减少对 Google 的依赖。
## Chromium 的测试是什么样的?\# (https://theconsensus.dev/p/2026/05/20/yeunjoo-choi-from-igalia-on-chromium.html#whats-testing-like-in-chromium)
我会说测试在 Chromium 中至关重要,因为它是一个支持众多功能并针对广泛平台的浏览器引擎。
Chromium 包含了成千上万(甚至更多!)的单元测试、集成测试、布局测试、平台特定测试等等。对于开发者来说,在本地运行所有测试非常困难。因此上游有一个 Commit Que
相似文章
@gregpr07: 我们构建了新的浏览器基础设施。比其他自定义Firecracker虚拟机便宜3-6倍。自定义Chromium分支。裸金属。>$0.02/小…
Greg pr07 宣布了一种新的浏览器基础设施,采用自定义Firecracker虚拟机、Chromium分支和裸金属,成本降低高达6倍,亚秒级冷启动,支持10,000个并发浏览器。
真 Chrome。实时 DOM。MCP 工具。多标签页控制。进度可见。
一款新工具,使 AI 代理能够通过真实的 Chrome 实例浏览网页,支持实时 DOM 访问、MCP 工具及多标签页控制。
Emacs 就是我的浏览器
Joshua Blais 分享自己如何用 Emacs 内置的 EWW 替代主流浏览器,完成 85–90% 的日常上网需求,称此举干扰更少、信噪比更高。
我可以推荐 Emacs 的创新 UI——eww 吗?
文章推荐使用 Emacs 的 eww 网页浏览器,强调其缺少 JavaScript 的特性改善了许多网站的体验,并指出 Emacs 提供了独特的 UI 创新,如逐张图片调整大小和键盘导航。
@Alezander907: Aitor @reformedot 是我们的100x工程师。他每周工作80小时,从零构建了新的浏览器基础设施:自定义…
Aitor 通过使用自定义的 Chromium 分支、Firecracker 虚拟机和自定义 Linux 内核,从零构建了新的浏览器基础设施,实现了成本降低3倍、无限扩展和最快的浏览器自动化性能。现在只需 $0.02/小时。