Google Chrome:跨平台浏览器的诞生
这篇关于 Google Chrome 跨平台浏览器开发的文章一开始就像任何其他采访一样。我通过电子邮件和电话与 Google 互动,并开始整理对我问题的回复。结果发现,“官方”回复比我通常遇到的要简短得多。“为什么这些人这么害羞?”,我想。在采访中,我通常不得不删减受访者的回答,因为他们喜欢详细地讲述他们的故事!
因此,我回到 Google 看看发生了什么事。“让你们的开发人员自由发言!”,我惊呼。“我们想知道关于 Google Chrome 开发的内部人士的真实看法!” 我在那里的联系人告诉我,采访很有挑战性,因为直接引用就像“记录在案”,需要经过多个管理层(甚至可能是律师?)的审查。而且,当你是池塘里的大鱼时,你必须小心你说的话。我不习惯这种谨慎,我当然不喜欢它,但我确实理解它。
经过这次和随后的讨论,我意识到我们对 Google Chrome 的全部内容有了一个相当完整的了解。唯一的障碍是,一部分材料来自直接采访,另一部分来自更非正式的讨论和电子邮件。因此,我们达成一致,虽然我可以自由谈论 Google Chrome,但只有授权的材料才能被引用。接下来是我的 Google 讨论总结,然后是对 Google Chrome 开发人员 Evan Martin 和 Mads Ager 的采访。Martin 是 Google 高级软件工程师,也是 Linux 爱好者,致力于 Google Chrome 的所有平台。在从事 Chrome 工作之前,Martin 曾在 Google 的搜索结果排名方面工作。Mads Ager 是 V8 JavaScript 引擎项目及其在 Google Chrome 浏览器中集成的技术主管;他在丹麦奥胡斯办公室工作。
在我们付印时,Google 刚刚宣布了其 Chrome 操作系统。Chrome OS 将主要基于 Web 应用程序,并将为“Google 世界”增加一个有趣的维度,因为它将有可能运行一个完全基于 Google 的桌面环境。虽然 Chrome OS 将是一个独立的操作系统,但它将在底层运行 Linux。我们并不感到惊讶。请继续阅读LJ的在线和纸质内容,以获取有关 Chrome OS 及其对 Linux 用户意味着什么的更多信息。
在我和 Google 的一些最早的对话中,我们谈到了该公司构建 Chrome 的动机。在开发了一系列丰富而复杂的 Web 应用程序之后,该公司意识到是时候从头开始构建一个浏览器,以便更好地处理“今天的 Web”。从一开始,他们就专注于在四个关键领域进行创新的浏览器,即速度、简洁性、安全性和稳定性。早期,Google Chrome 团队意识到,在这些关键方面进行创新以及处理新的 Web 应用程序的关键将是更高效地处理 JavaScript。因此,V8 JavaScript 引擎(在下面进一步解释)被构思出来,并成为 Google Chrome 项目的核心。
Google 希望像 V8 这样的创新能够改变桌面的感觉,使我们越来越多使用的 Web 应用程序感觉更像原生应用程序。除了实现高效 JavaScript 处理所需的内部代码外,Google Chrome 希望通过保持 UI 的最小化来最大化这种原生感觉,包括“应用程序模式”,该模式允许创建一个桌面图标,该图标链接到 URL,周围只有一个很小的 UI 边缘。
从开发的角度来看,Google 注意到在具有非常不同功能和约定的平台上使这种用户体验可接受的难度。Google Chrome 团队并没有仅仅进行强力移植,而是经常从代码中退后一步,查看代码的某个部分为用户完成了什么更大的画面,然后将其转化为各自 Linux、Mac OS 或 Windows 用户的更抽象的好处。在某些平台上,核心功能(例如沙盒进程)的本机功能全部或部分存在,但在其他平台上则不存在。这一事实需要根据各个平台上找到的现有功能,进行广泛的重构或编写新代码。
使 Google Chrome 在 Mac 平台上表现良好的一个例子是该公司对 WebKit 所做的工作。该团队首先必须弄清楚使用 WebKit for Chrome 意味着什么,并确定它可以提供什么。有趣的是,Google 表示,在 Chrome 或 Safari 的示例中,只有大约一半的代码是 WebKit。此外,WebKit 从未真正设计为与浏览器 UI 的其余部分分开的进程中运行。为了实现这一点,Google 不得不编写自己的大部分绘图和事件处理“管道”,而不是简单地将 WebView 拖放到 Interface Builder 中的窗口中。但是,开发人员已经能够借鉴为 Windows 版本所做的许多工作来解决这个问题。
当然,鉴于 Google Chrome 的开源性质,它的整个开发过程效率更高,更强大。该公司认为,与传统的“浏览器战争”——即让人们使用 Google Chrome 作为他们的主要浏览器——相比,更重要的是,Google 在 Chrome 上的开源努力已经刺激和播下了大量的创新,并使其他浏览器比在没有 Google Chrome 的情况下更好。事实上,Google 至少在一定程度上将过去一年中其他浏览器中发生的速度改进和安全增强归功于自己,这对每个人都有利。
鉴于 Google Chrome 是开源的,我们很好奇想知道外部开发人员在多大程度上参与了其开发。虽然我的联系人无法给我具体的数字,但我被告知外部参与度非常高,尤其是在早期浏览器开发版本的用户提交的错误报告方面。Google 还与 WebKit 团队密切合作,因此 Apple 或 WebKit 社区中的其他 WebKit 开发人员所做的更改也会集成到 Google Chrome 中。
现在,进入对 Evan Martin 和 Mads Ager 的采访。
JG: 简而言之,是什么启发 Google 创建 Chrome,它是如何产生的?
EM:我们构建 Google Chrome 是因为我们相信我们可以为用户增加真正的价值,并帮助推动 Web 上的创新。Google Chrome 的构建是为了速度,具有非常简单的界面,并使用创新技术来确保它始终安全稳定,为用户浏览 Web 提供出色的体验。但更重要的是,通过使 Google Chrome 开源并开发强大的新 JavaScript 引擎 V8,我们相信我们可以帮助刺激行业创新,并为开发人员提供平台来构建下一代 Web 应用程序。这对用户有利,对 Google 也有利,因为当 Web 变得更好时,我们直接受益。
LJ:什么是 Google Chromium 项目?
EM:在我们编写了 Google Chrome 的代码后,我们以 Chromium 的名称将其开源。就像 Firefox 是 Mozilla 的商标一样,Google Chrome 是 Google 的商标;Chromium 这个名称不是,因此发行版可以自由使用它来指代同一个项目。我们希望开发人员和浏览器供应商查看 Chromium 源代码,并且它对开源社区未来构建的新项目有用。
JG: 这期是我们的跨平台开发特刊,我们很想探讨该领域的挑战和创新。在使 Chrome 在所有平台上都表现出色方面,主要问题是什么?
EM:我们在 Linux 上遇到的大部分挑战都源于用户群体的异构性——当然,这也是 Linux 的优势所在。这包括如何移植简单的 UI 决策(Chrome 的蓝色阴影被选择为在每台 Windows 计算机上看到的蓝色旁边看起来不错),到获得枯燥的技术细节(在 Ubuntu 上构建的二进制文件在 Fedora 机器上无法工作),再到需要工程工作来解决的实际问题。
后者一个很好的例子是调整我们在 Linux 上的沙盒模型。以对我们有用的方式对进程进行沙盒化在 Windows 上具有挑战性,相关源代码包含 100 多个文件,但只需要实现一次即可在任何地方工作。在 Linux 上,有各种更易于使用但不同的沙盒系统可用,并且不同的 Linux 发行版附带不同的(或没有)沙盒 API。这是一篇关于我们为讨论目的而提出的内核补丁的文章:lwn.net/Articles/332974。
JG: Chrome 为浏览带来了哪些创新?
EM:我们在构建 Google Chrome 时做了很多有趣的事情。首先,它简单易用——我们设计 Google Chrome 尽可能不引人注目,占用屏幕的最小空间,并允许您从地址栏搜索和浏览所有内容。其多进程架构还确保 Google Chrome 快速稳定。此外,我们从一开始就为速度设计了 Google Chrome,包括从头开始构建一个新的 JavaScript 引擎 V8,以处理丰富而复杂的 Web 应用程序。
JG: 您能详细介绍一下 V8、它的历史、您开发它的理由以及背后的关键人物吗?
MA:V8 项目始于 2006 年末。当时,现有的 JavaScript 引擎性能不佳。V8 项目的目标是通过构建一个新的 JavaScript 引擎来提高 JavaScript 引擎的性能,大型面向对象的程序可以在该引擎上快速运行。V8 项目由连续虚拟机构建者 Lars Bak 和 Kasper Lund 在丹麦奥胡斯郊外的一个农舍中率先发起。
JG: V8 为浏览器带来了哪些创新和新方法?
MA:V8 使用隐藏类和隐藏类转换的概念,结合本机代码生成和称为内联缓存的技术,使属性访问和函数调用快速。V8 使用精确的世代垃圾回收来使引擎扩展到使用大量对象的面向对象的大型程序。此外,V8 还包含一个从头开发的 JavaScript 正则表达式引擎,该引擎基于自动机,并为正则表达式生成本机代码。
JG: Chrome/V8 是用什么语言编写的?
MA:V8 主要用 C++ 编写,但一些基本的 JavaScript 库是用 JavaScript 本身实现的。
JG: V8 支持哪些平台?
MA:V8 在 Windows、Linux 和 Mac 上运行。
JG: 它支持哪些 CPU 架构用于 JavaScript 的本机代码编译?
MA:V8 支持 IA32 和 ARM。
JG: 是否有计划将其扩展到其他 CPU 架构?
MA:我们正在开发 64 位版本。
JG: 代码生成在某些架构上是否比其他架构更好?
MA:不同的架构有不同的权衡,我们努力使不同架构的代码生成器尽可能好。IA32 的代码生成器执行寄存器分配,并且比 ARM 上的代码生成器执行更多的内联。总的来说,IA32 代码生成器比 ARM 代码生成器调整得更多。
JG: 你们是以内燃机还是蔬菜饮料命名的?
MA:内燃机。它是在 Google Chrome 的背景下开发的,我们认为在“chrome”下应该有一个强大的 V8 引擎。
JG: 为什么 Google 选择开发新的 JavaScript 引擎并使用 WebKit,而不是使用 Mozilla 的代码?
EM:我们一直并将继续大力支持 Firefox——Mozilla 在过去几年我们在浏览器领域看到的许多创新中发挥了带头作用,包括标签页、浏览器 chrome 中的搜索框和扩展程序等功能。他们还证明了您可以使用开源技术和开放协作开发来构建大众市场软件产品。但是,我们最初认为我们在这方面的工作是一项实验,并且不想将我们的想法强加给任何人。相反,我们考虑开发一个新的 JavaScript 引擎并将其开源,以便其他浏览器开发人员可以从中受益。
我们认为,众多的开源项目对整个领域都有好处,因为它们允许开发人员取得进步并快速分享。我们继续与 Mozilla 保持良好的关系,我们的许多工程师通过 Mozilla 的公共参与流程积极参与 Firefox 的功能开发。
JG: 您能告诉我们有关 Linux 版本的状态、路线图和挑战吗?我们在这里垂涎三尺。
EM:开发者版本已经适用于一些 Linux 发行版。虽然这是一个早期版本,尚未为您的普通用户做好准备,但我们希望您了解 Linux 版 Google Chrome 的样子,并在我们开发 beta 版和稳定版时继续关注我们在开源方面的开发进展。
JG: 有多少开发人员在多少个地点致力于 Chrome 开发,有多少人专门致力于 Linux 版本?
EM:虽然我们不详细说明任何特定产品上的 Google 员工人数,但我们有一个核心工程师团队正在努力使 Linux 版 Google Chrome 启动并运行。作为一个团队,为了防止碎片化,我们努力让所有开发人员在所有平台上工作——我重构 Windows 上的代码以使其在 Linux 上工作,如果 Mac 团队的某个人破坏了 Linux 构建,那么修复它是他或她的责任。像网络堆栈这样的部分可以从任何平台进行开发,因此开发人员可以只选择他们的偏好。
有一次,我统计了来自十几个不同地点的 Google 开发人员的贡献(有些人在家工作);如果您计算我们从其他开发人员那里收到的贡献,我们甚至更多。我最喜欢的这个项目的经历之一是,在一个晚上提交了一个错误,然后在第二天醒来时看到来自欧洲某人的修补程序来修复它。
我们还收到了许多来自 Google 外部的补丁,甚至将我们一些最好的贡献者提升为提交者本身。
JG: 是否有特定的 Google 应用程序促使 Google 决定需要一个更大/更快的浏览器?
EM:我认为 Google Chrome 更多的是让整个 Web 更快,而不是让 Google 应用程序更快。
JG: 构建 Chrome 使用了哪些工具包?而且,是否有任何关于工具的有趣问题值得一提?
EM:Linux 版 Google Chrome 依赖于大量的自由软件——about:credits 列出了我们包含源代码的 15 多个子项目——以及标准的系统库,如 FreeType、NSS(Mozilla SSL/TLS 实现)和 GTK+。关于工具包的选择,网上已经有很多讨论;在团队内部选择 Firefox 和 Flash 依赖的工具包以及我们更有经验的工具包,这出奇地没有争议。我认为其他选择也一样好,我特别希望看到一些了解 Qt 的人贡献补丁。
关于工具,我想特别指出 gold,这个鲜为人知但对我们来说是救命稻草的快速链接器。
JG: Linux 版 Google Chrome 的开发进展如何?您能否分享一下迄今为止您经历的一些起伏?
EM:我在家只运行 Linux。对我个人而言,最大的进步是在 Windows 上工作了这么长时间之后,终于能够自己安装和使用它。
JG: Linux 的 beta 版本何时可以准备好是否有暂定日期?
EM:还没有,但我们正在努力。您可以通过运行在 dev.chromium.org/getting-involved/dev-channel 上提供的正在开发中的版本,或通过在 Chromium 开发人员站点 chromium.org 上找到的邮件列表和源代码来跟踪我们在 Linux 开发方面的进展。
JG: Linux 和 Mac OS 版本有一天会赶上 Windows 版本并享有相同的功能吗?
EM:是的,这是我们目前最重要的优先事项之一。
JG: 感谢您两位对 Google Chrome 的精彩见解!
James Gray 是Linux Journal产品编辑,也是密歇根州立大学环境科学与管理专业的研究生。自 20 世纪 90 年代中期以来,他一直是 Linux 爱好者,目前与妻子和猫住在密歇根州兰辛市。