立即领取|华润集团、宁德核电、东风岚图等 20+ 标杆企业数字化人才培养实践案例 了解详情
写点什么

Firefox OS 的故事

  • 2017-04-13
  • 本文字数:15795 字

    阅读完需:约 52 分钟

本文最初发布于 Ben Francis 的博客,经原作者授权由InfoQ 中文站翻译并分享。

2013 年世界移动通信大会

我还记得在一次团队晚宴上,Mozilla 的女董事长兼“首席蜥蜴斗士(Chief Lizard Wrangler)” Mitchell Baker 曾谈到讲故事(Storytelling)的重要性。她谈了在开源软件社区中,如何通过讲故事帮助我们反思彼此分享的经验并从中学习。

我叫 Ben,是一位 Mozilla 人。我是一名软件工程师,过去五年来一直全职从事着“Boot to Gecko”项目,今天我想给你们讲个故事。

作为一名工程师,我对这个项目高层决策、财务情况,以及业务合作的认识可能并不完善。但我参与这个项目的时间已经足够长了,甚至比该项目任何共同创始人资历更老,在工程、设计,以及产品层面获得了很多见解。

所以我想以自己的视角讲讲 Firefox OS。从 Boot to Gecko 开源软件项目在 2011 年通过邮件列表中发布的一封邮件,以一个空的 GitHub 代码库闪亮登场,到后来以 Firefox OS 移动操作系统的形式商用发布,再到 2016 年将数百万行代码“转移”给社区,这个故事的跨度很大。

五年时间,Mozilla 社区的数百位成员因为一个共同目标走到一起,希望借助开放网络的力量颠覆应用生态。我希望借助本文对我们基于开源浏览器打造移动操作系统过程中所收获的成功、失败,以及学到的经验教训进行反思。

这个故事很长,如果你不想完整阅读,可以从下面的总结中了解相关重点。希望你不会认为这些仅仅是我的个人观点。

总结

最大的成就

  • 设计?—设计了一套操作简单、界面新颖、包含一些创新式功能的移动操作系统,例如用于切换窗口的边缘手势。尽管我们的愿景并未完全实现,但至少在基于浏览器的操作系统到底该如何实现这方面获得了一些不错的成果。
  • 工程?—从零开始打造了一个完全开放的移动操作系统,并在不到两年时间里成功上市。据我所知,能实现这种速度的团队仅此一家。借助足够精益的技术栈,我们在渲染 Web 内容时可以实现非常近似于移动设备裸机运行的性能,很多情况下甚至胜过了相同配置硬件上运行原生代码的性能。同时还通过 30 个实验性的全新 Web API 推动了 Web 技术进步,创造了一种全新的 Web 应用发展趋势。
  • 产品?—在超过 30 个国家和地区成功发布了 20 款设备,并动员 Mozilla 社区协助举办发布会,顺利举办了很多品牌和营销活动。尽管最终未能成功,但成功塑造了“Web 即平台”这一理念。
  • 合作?—? 赢得移动通信行业史无前例的支持。多次在全球最大移动通信行业活动 MWC 中大出风头,让大型电信公司认可 Mozilla 的使命,与竞争对手公司就共同的目标展开合作。

最大的失误

  • 设计?—? 从模仿已有技术着手,而非从更简单,更独特,并且更专注于 Web 的技术着手。我们本来以为稍后可以随时调转方向,但实际上这样做远非我们想象的那么容易。
  • 工程?—为了尽快上市,我们通过应用打包机制模仿了应用商店这种做法,但这为我们制造了大量困难。我们忽略了使得 Web 技术大获成功的关键特性(即 URL),过多专注于 Web 栈的客户端,而非服务器端。
  • 产品?—? 在意识到“开放”本身不足以成为一个卖点后,最终我们选择主要以价格取胜的战略,而这只是一种逐底竞争(Race to the bottom),导致首发后的产品缺乏领先优势和后续发展方向。
  • 合作?—? 将运营商和 OEM 厂商视作自己的客户,在功能优先级划分方面采取了“有坑必填”(Tick box)的方法使得我们错失对最终用户需求及自己最初使命的深入理解。同时也未能守住直接向最终用户分发更新的“权力”。

放在今天我会怎么做

  • 设计?—? 会以一个极为简单的,基于浏览器的设计着手,专注于 Web 内容本身,而非试图重建其他操作系统已经具备的每个功能。非必要功能可以狠心放弃,根本不要想着追赶对手。
  • 工程?—? 在“外壳”和 Web 内容之间建立明确的划分,而非试图迫使 Web 去做那些本就不适合的工作。使用 REST 和 WebSockets 在 Web 栈的服务器端创建设备 API,不要在客户端为 JavaScript DOM API 提供任何特殊待遇。围绕网上丰富的 Web 应用打造一个社区,而非提供一个供大家提交打包应用的应用商店。
  • 产品?—? 不要试着生产最廉价的智能手机。而是要生产中端级别的平板(甚至可以考虑生产智能电视棒),让所有产品专注于 Web 内容、游戏,以及娱乐。首先在发达市场赢得立足之地,而不是一头扎进新兴市场。
  • 合作?—? 围绕 Mozilla 制定的产品方向线路图,在合作伙伴面前表现出更有力的坚持,有勇气拒绝和发展战略不符的机会。直接向最终用户提供软件更新,远离所有妨碍我们分发自有操作系统的芯片供应商(当时要这样做非常困难,但现在已经容易多了)。

启动整个 Web

“Boot to Gecko”(B2G)开源项目最初在 2011 年 7 月公布,该项目的目标是打造“一个适用于开放式 Web 的完整、独立的操作系统。”

“Mozilla 相信,Web 可以取代各种专有技术,以及应用开发过程中使用的单一供应商技术栈。为了让开放的 Web 技术为以后在移动设备和桌面等处运行的应用程序奠定一个更好的基础,我们需要推动 Web 技术持续发展,容纳并最终超越现有计算栈所具备的能力。”

这一举措的重点在于:

新的 Web API:能将设备和操作系统能力(电话通话、短信、USB、蓝牙、NFC 等)暴露给内容的原型 API。

特权模型:确保这些新的能力可以用安全的方式暴露给网页和应用程序。

启动:为兼容 Android 的设备构造一个底层基板(Substrate)原型。

应用程序:挑选并移植或构建应用,借此证明该系统的强大之处并据此划分工作优先级。

首个(非官方的)B2G 项目徽标,作者 Sean Martell

此时还没有考虑商业化智能手机或移动设备的市场份额,因为这一阶段的目标主要是“推动 Web 技术的进化”,并证明该系统的能力。

共同创始人

该项目的四位共同创始人分别是 Andreas Gal Chris Jones Brendan Eich 以及 Mike Shaver

B2G 项目的共同创始人(从左至右:Andreas、Chris、Brendan、Mike)

Andreas 是一位非常聪明的工程师,他的博士论文主题恰好是高级编程语言的即时编译,他在2008 年加入Mozilla,负责开发了TraceMonkey,有史以来第一个JavaScript 即时编译器。他最近还完成了PDF.js 的开发,这是一种使用JavaScript 编写的PDF 渲染器,此举是为了证明JavaScript 的强大之处。

Chris 在伯克利大学获得计算机科学的博士学位,于 2009 年加入 Mozilla,和 Andreas 一起负责 PDF.js 的开发。

Brendan 是 JavaScript 的发明人,与 Mitchell Baker 一起在 1998 年创立了 Mozilla。B2G 项目公布时 Brendan 担任 Mozilla 的 CTO,因而成为该项目的主要负责人。

Mike 是 1998 年 Mozilla 成立时的创始成员,当时担任工程副总裁和技术战略副总裁职务,但在 B2G 项目公布后不久从 Mozilla 离职。

Mozilla 公布 B2G 后我就申请了该项目的工作,但我的申请当时并未立刻获批,不过我明白这事情造成了一些人的困扰。部分原因在于这则消息未经任何正式的内部讨论就通过一个公开邮件列表发布了,另外部分原因是因为大部分人(包括公司高管)对这个项目并无太多了解,甚至没想过这则消息会公布出去。

感觉上这更像是很多初创公司进行的实验性项目,某种程度上甚至是在 Mozilla 公司的日常运作之外进行的。

搭建完成

从一个空白的GitHub 代码库开始,共同创始人们组建了一个小规模的初始团队,开始着手“ Gonk”(一种基于 Linux 内核和 Android 硬件抽象层的“底层基板”)、“Gecko”(一种在 Firefox 的 Web 引擎基础上建立的应用运行时和设备 API)以及“Gaia”(一种使用 HTML、CSS,以及 JavaScript 等 Web 技术构建的智能手机用户界面)的相关工作。

B2G 架构

一些代码重用了 Android 开源项目的代码,但这个架构的独特之处在于彻底去除了 Android 中的整个 Java 层,取而代之的是通过 Gecko 渲染 Web 内容,借此实现近乎裸机运行的性能表现。这种设计使得 B2G 在性能方面具备了非常先进的优势,可以让 Web 内容获得类似原生代码的运行表现。

这个成员分散各处的小团队开始快速成长,并于 2011 年 12 月,Mozilla 位于台湾地区,能俯瞰标志性的台北 101 大楼的办公室筹备过程中,在台北进行了首次线下面对面工作周活动。当时的工作周活动地点位于君悦酒店内,我们首次在不使用浏览器插件的情况下,通过网页拨打了有史以来的第一通电话通话。手机最基本的必要功能已经逐渐具备了。

2011 年 12 月,台北

原型机

随后我们还于 2012 年 2 月在巴黎举办了工作周活动,当时整个团队(包含来自高通公司的 Michael Vines 以及我们的“单枪匹马”UX 团队成员 Josh Carpenter)一直奋战到最后一分钟,组装了用于在那个月的巴塞罗那世界移动通信大会上展示的原型机。

2012 年 2 月,巴黎

我们不仅圆满完成了最初 B2G 新闻中所公布的组件,而且基于现有 Android 硬件提供了可实际运行的概念验证演示机。我们带着运行该原型系统的三星 Galaxy II 智能手机参加了 MWC。这则消息是与我们的第一个合作伙伴西班牙电信联合公布的,此外还得到了 Adobe、高通,以及德意志电信公司的支持。西班牙电信在媒体大会上演示了高通参考架构上运行的 B2G 软件。

B2G 原型机,MWC 2012,巴塞罗那

此举吸引了其他移动运营商的目光,他们当时正在寻找有望挑战 Android 的平台,希望借此在移动操作系统领域提供更丰富的选择,从处于支配地位的 Google 和 Apple 处夺回一些控制权。

作为一个非盈利,以“推动 Web 世界的开放、创新和机遇”为使命的项目,Mozilla 实际上是在贩卖一个独特的愿景:不是让我们自己的应用平台成为移动领域的“第三平台”,而是要将开放的 Web 推向这个地位。与桌面端类似,Web 的普遍性和规模性使其有望成为唯一可与现有应用平台竞争的对手,当然,这得是在 Mozilla 的领导下。

合作伙伴

得到新合作伙伴的支持后,Mozilla 承诺在第二年提供可上市销售的商业化设备。

作为我们的第一个合作伙伴,西班牙电信一直也在从事着自己的“Open Web Device”项目。他们最初的想法是由 Mozilla 提供基于 Gecko 的底层平台,西班牙电信自行添加自己的 Open Web Device 前端,借助自己的经验为设备提供认证并投放市场。

对于 Mozilla 这样的开源技术公司来说,与西班牙电信这种规模的通信巨头合作还是头一遭,不得不说,一开始还遇到了企业文化方面的冲突。双方在几个方面有些冲突,甚至 Mozilla 和西班牙电信一度曾各自开发自己的前端。

西班牙电信和 Mozilla 各自开发的 B2G 前端

大家很快发现将手头资源聚集在一起,共同开发一个移动前端是一种更合理的做法。很快,Mozilla 和西班牙电信的工程师开始并肩工作。两个团队的工程师对这种方式很适应,很快就变得亲如一家。

德意志电信是另一家很早就投身该项目的合作伙伴,随着移动运营商的加入,想要获得 OEM 厂商的兴趣就更简单了。最初的两家 OEM 厂商是来自中国的生产商中兴通讯和 TCL。

这些合作关系之所以如此重要,原因之一在于高通。高通是与我们合作的第一家芯片制造商,但他们不能直接将自己的固件和设备驱动授权给我们,必需绕道运营商或 OEM 厂商。这意味着我们无法以合法的方式将操作系统完工后的版本或更新直接分发给用户,移动操作系统更新方面的经济因素为我们造成了严峻的问题。

Firefox OS 1.0

接下来的一年里,Mozilla 与合作伙伴密切合作开发了整套达到可投产质量的移动操作系统。

设计

在第一次迭代过程中,提供给 UX 团队的想法极为有限,基本上不可能产生让人惊艳的成果。当时依然沿用了类似于 Android 和 iOS 的应用图标网格设计方式,但尽可能进行了简化,下文还将介绍这个用户体验的独特之处。首先我们需要证明使用现有的 Web 技术是可以构建出这种类型的 UI 的。

UX 团队的这个设计非常流畅,但现在回想起来,一开始就模仿现有产品,并假设随后如果必要可以调转方向,这是一个极大的错误。

实现

在工程这一块,我们证明了使用开放的 Web 技术是可以打造智能手机的,并且整个用户界面都可以用 HTML、CSS 和 JavaScript 来创建。

在互联网连接不可靠或不可用时,所有内置的 Gaia 应用都必需能脱机使用,对我们来说这是个必需实现的条件,这样用户才可以继续接打电话,拍照,听音乐,或执行其他操作。一开始我们针对这个需求使用了 AppCache ,这是 Web 技术领域首次试图让 Web 应用能够脱机使用而做的尝试。然而我们很快开始面临该技术的一些常见问题和局限,发现这个技术并不能完全满足我们的所有需求。

为了通过JavaScript 与智能手机的底层硬件通信,我们还需要在新API 方面进行大量投入,并要研究一种可行的特权模型。Web 技术的现有安全模型可以通过沙箱限制让浏览器安全地执行不可信代码,为了让Web 内容能够访问更多高特权功能,例如接打电话以及发送短信,还需要具备一套新的安全系统。

为了能按时发布1.0 版B2G,我们认为能同时满足脱机使用和安全需求的最简单方法是为Gecko 引入打包应用的概念。打包的资源可以“安装”到设备上,进而可以脱机运行,并通过密码学签名验证代码是否可信。

打包应用的做法虽然解决了当时最迫切的问题,但并不是真正的Web 应用,因为这种应用并不具备Web 的一大特征:真正的URL,并且最终需要由一个中央的权威机构(例如Mozilla)进行签名才能证明其安全性。当时我就打包应用的方法“并不Web”这个问题提出了自己的意见,但大家找不到其他能确保如期实现并交付的更可行的办法。

2012 年 7 月在西班牙电信位于巴塞罗那的办公室举办的工作周活动中,我们决定先选择打包应用作为一种临时解决方案,直到能有其他更好的办法。我认为这个决策是另一个重大失误,因为随着技术债越欠越多,我们已经逐渐走上了一条不归路。

向着终点狂奔

无论如何,所有这些努力让我们于 2013 年 1 月在柏林度过了一个忙碌的工作周,Mozilla 与芯片制造商高通、移动运营商西班牙电信和德意志电信,以及设备制造商中兴通讯和 TCL 一起,向着 1.0 版的顺利发布共同努力着。

由德意志电信举办的这场活动是 B2G 开发过程中最令人难忘的回忆之一。大家在一个有着超快网速的大房间里亲密合作,前端与后端团队之间还进行了一场友好的竞赛,大家在比谁能首先修复自己的所有 Bug。竞赛结果会实时显示在投影屏上,大家可以一起监督整个过程。整整一周里大家都干劲十足,共修复了超过 200 个 Bug。

柏林工作周,2013 年 1 月

待到周末时,Andreas Gal 宣布“Zarro boogs”和 Firefox OS 1.0 版正式诞生(另外,前端团队赢了!)。

2013 年世界移动通信大会

我们发布的第一个商业化版本 Firefox OS 实际上是 1.0.1 版,所有必要的测试和认证均已完成。2013 年 2 月,我们在巴塞罗那世界移动通信大会(全球最大规模的移动通信技术大会)上公布了首个商业化设备,首发设备包括 ZTE Open 和 Alcatel One Touch,这两款机型会通过西班牙电信和德意志电信在巴西、哥伦比亚、匈牙利、墨西哥、黑山共和国、波兰、塞尔维亚,以及委内瑞拉销售。同时 LG 和华为也承诺会发布相关设备。

ZTE Open 和 Alcatel One Touch 智能手机

当时消息是在 MWC 召开前一天通过媒体大会公布的。我们本来估计会有大约 250 名与会者,结果当天来了超过 700 家媒体、传媒、分析师嘉宾。

Firefox OS 媒体大会,MWC 2013,巴塞罗那(来源

我们还设法达成了一项史无前例的壮举,18 个电信公司的CEO 共同登台表达对该项目的支持,这样的盛况就算放在GSMA(全球移动通信系统协会)也足够让人吃惊了。

CEO 出席媒体大会,MWC 2013,巴塞罗那(来源

我认为完全可以说Firefox OS 是那年活动上最耀眼的新星。大会杂志上每一天我们都上头版,我们在Google News 上共产生80,000 个媒体搜索结果,Firefox OS 甚至与奥斯卡一起登上了Twitter 趋势榜!这几乎是所有公关人员梦寐以求的结果。

MWC 杂志,MWC 2013,巴塞罗那(来源

我们在大会上的展位设计非常酷(当然在西班牙电信和德意志电信的展位上也露了脸),有前台,有一个巨大的狐狸尾巴悬挂在头顶上,还提供了大量体验机。

Firefox OS 展位,MWC 2013,巴塞罗那(来源

我在活动中负责进行演示并接受媒体采访,我可以告诉你,当时的场面实在是火热到不行。大量运营商、OEM 厂商,以及媒体都对我们的成果表现出极大的关注。

乱入抢镜的Android 吉祥物!

在这样一个以“展台女郎”(参展公司雇来展示自家设备的专业模特)而声名狼藉的活动中,我觉得真正让Firefox OS 展位与众不同的原因在于,大部分工作人员是真正参与过这个项目的,其中很多人甚至还是志愿者。这一点出乎很多与会者意料,人们竟然会因为对这个项目的满腔热忱而免费贡献自己的时间帮助推广这个项目。

世界移动通信大会,巴塞罗那,2013 年2 月(来源

MWC 结束后,当我们的设备开始陆续在首发国家上市后很长一段时间里,人们依然在积极参与这个志愿者社区。在西班牙、波兰、委内瑞拉、哥伦比亚以及其他国家的发布会都涌现出本地 Mozilla 社区成员的身影。

这是一段拍摄于 2014 年的视频,介绍了 Firefox OS 截至 1.0 版的诞生过程。

视频: https://youtu.be/LizAjaOXi4U

Firefox OS 的旅途,v1 版背后的故事

Firefox OS 1.x

Firefox OS 已经做好了上市的准备。但在举行 1.0 版发布会之前,我们就已经回到办公室开始继续对它进行完善。

最初我们主要专注于增加智能手机的基本功能,例如 1.0 版中缺乏的彩信功能,随后我们将工作重心放在为应用开发者提供更完善的开发工具,以及满足合作伙伴们千奇百怪的需求方面。

因而我们的工作很快陷入了这样一种怪圈:开始将移动运营商和 OEM 厂商视作自己的客户。他们的需求无穷无尽,而那些需求基本就是照搬各种 Android 设备上已经具备的功能。他们希望 Firefox OS 在功能方面与 Android 保持一致。

我还记得 2013 年,我曾在高通位于美国圣地亚哥的办公室里,用了整整一周时间和一群来自韩国 LG 的工程师闭门工作,以确保 Firefox OS 的所有内建应用能在相同硬件上实现比 Android 平台类似应用更快的启动速度。出于保密的原因,他们不能告诉我们 Android 应用在他们设备上启动到底要花多少毫秒,只能告诉我们 Firefox OS 应用的启动速度到底是更快还是更慢。我们只能不断进行优化,直到实现更快的启动速度。运行 Firefox OS 1.1 的 LG Fireweb 终于在 2013 年 10 月发布了。

预装 Firefox OS 1.1 的 LG Fireweb,2013 年 10 月

随着我们在 2013 和 2014 年陆续发布 1.1 1.2 1.3 以及 1.4 版 Firefox OS,事实证明我们只是在不断追逐 Android 的尾灯,而 Android 比我们有着五年的先发优势,我们根本赶不上。如果希望 Firefox OS 能赢得市场并获得更大市场占有率,必需另辟蹊径。

“蹊径”到底在哪

几乎所有人都赞同,我们无法按照 Android 和 iOS 的路子战胜这两个操作系统。功能方面,我们赢不了 Google;设计方面,当然也赢不了 Apple。Mozilla 曾经以小博大战胜过其他巨头,但如果按照他们制定的规则来玩,我们是赢不了的,我们必需制定自己的规则。

Firefox OS 的蹊径到底在哪,我觉得主要有两个思路。

以 Web 为平台

思路一:我们不应在功能方面努力追赶竞争对手,而是可以考虑在用户界面方面发力。我们可以打造一种更简单的 UI,借助这种 UI 强化 Web 本身的优势。

但这就会面临一个挑战:媒体经常会通过应用商店内的应用数量对 Firefox OS 和竞争对手进行比较。Firefox OS 从一开始就没考虑过使用一个统一的应用商店,而是要以整个 Web 作为自己的平台。然而我们在早期作出的一些有关应用打包的技术决策把我们逼到了角落,使得我们只能继续依赖开发者提交到由 Mozilla 运营的 Firefox Marketplace 中的那几千个应用。

我们尝试过与一家名为 Everything.me 的初创公司合作解决这个问题,这家公司建立了一个 Web 应用目录,我们可以借助他们的服务扩大自己的内容覆盖面。但这种依赖某一个集中目录的做法,相比我们试图解决的依赖某一个集中应用商店的问题,实际上是换汤不换药。

我们讨论过将关注的重心重新转向真正的 Web 内容(目前为止地球上规模最大的数字化内容集),面向 Web“互联”的这一本质,以及通过超级链接在页面之间进行导航的“流动”进行优化,打造创新的用户界面。从开放的 Web 世界自身优势入手可以让我们创造出与竞争对手截然不同的产品。

连接下一群十亿用户

思路二基于这样的一种假设:我们真正需要的是规模化,为了扩大规模,对我们来说最可行的办法是面向新兴市场。对移动行业来说,这种市场的增长潜力才是最大的。

我们在发展中国家进行了一些市场研究和用户调研,很快发现全球人口有很大比例根本无法承受价格高昂的智能手机。他们真正需要的是价格低廉的智能手机,是能让诸如印度和孟加拉国等地的人可以轻松负担的手机。

只要能在新兴市场站稳脚跟,就可以非常快速地实现 Firefox OS 所需的规模。随后至少在这些国家的市场份额统计图表中,我们会不再被归类到“其他”这个类别,开始得到大家的关注。

25 美元的智能手机

2013 年年中,宫力开始掌舵 Firefox OS。他主要负责启动并经营 Mozilla 在中国大陆和台湾地区的业务,同时还担任“移动设备资深副总裁”的角色。

宫力,MWC 2014,巴塞罗那(来源: CNET

宫力极为赞同“廉价智能手机”这个想法,并提出了 25 美元智能手机这一概念,认为如果希望在新兴市场扩大规模,需要将手机价格降低至这个价位。

整个团队通过天才的工程设计,让 Firefox OS 成功地运行在基于 Spreadtrum 芯片组,只有 128MB RAM 的极低端硬件上,这一水平已经远远低于同时期 Android 的最低要求。

我们带着“25 美元的智能手机”参加了 MWC 2014,与低成本掌上设备制造商 Intex 和 Spice 建立了合作关系,并提出了“连接下一群十亿用户(Connecting the next billion)”这样的口号。这个口号与 Mozilla 的使命似乎不谋而合,在 MWC 上引起了巨大反响,整个移动行业都在纳闷我们接下来会做什么。

25 美元智能手机概念原型机,MWC 2014,巴塞罗那(来源

Firefox OS 借助廉价智能手机开始在亚洲(印度、孟加拉国)、拉丁美洲(萨尔瓦多、巴拿马、尼加拉瓜、危地马拉)以及东欧(捷克共和国)攻城略地。

Firefox OS 公交车,印度

然而该项目的执行结果并不能让人满意。首先,25 美元智能手机上市时的最终成本约为 33 美元。此外,尽管 Firefox OS 可以在 128MB RAM 的设备上“运行”,但此时无法像其他智能手机那样实现多任务。关键应用的缺乏是另一个严重问题,例如 Whatsapp 是这些市场必不可少的。我们没能说服 WhatsApp 开发 Web 版本,甚至没能得到许可由我们代为开发。这些局限外加硬件质量(尤其是摄像头)方面的一些问题,导致廉价智能手机的市场表现并不怎么出色。

通过价格进行竞争,意味着很快就会见底,最终只能由实现最大化规模经济的厂商获胜。Google 很快发现了这个缺口并推出 Android One 这款以新兴市场为目标的廉价设备。可以说 Android One 的市场表现也没有好到哪里去,但足以让我们明白单纯通过价格竞争是无法获胜的。

新兴市场的用户也许没有太多可支配收入,但这并不意味着他们就安于接受低质量产品。他们要的不是廉价的“精简版 iPhone”,他们要的是 iPhone。如果买不起 iPhone,他们宁愿继续使用功能机。功能机更便宜,很实用,电池续航超长。

Firefox OS 2.0

25 美元智能手机的大部分研发工作是由台北办公室的工程师负责的,他们还发布了一个特殊的 1.3t 版 Firefox OS。与此同时,其他团队已经在开始考虑 2.0 版会是什么样的。

2013 年 4 月,UX 团队在伦敦举办了一场峰会,大家共聚一堂讨论 Firefox OS 用户体验的未来方向。我很荣幸能受邀参加。我们集思广益探讨了 Web 体验的独特之处,以及该如何借助这些优势打造与众不同的用户体验。

UX 峰会,伦敦,2013 年 4 月

“流动”是当时的一大重心,我们可以顺着超级链接在不同 Web 内容之间流动。Web 世界并非由相互之间存在明显界限的单体应用组成的,而是一种在不同页面之间通过五花八门的内容流动的体验。

Haida

随后几周里,UX 团队为这种概念打造了一些初期设计(最终的开发代号为“Haida”),这些设计弱化了 Web 应用和网站之间的界限,创建出一种犹如 Web 那样可以流动的独特用户体验。

这个项目最终不仅包含通用的“Rocketbar 任务栏”,还可跨越整个操作系统访问,无缝适应不同类型的 Web 内容,并能通过“Sheets”将单页 Web 应用拆分为多个页面,让用户通过直观的边缘手势切换浏览不同页面。该项目最后还提供了一种基于内容模式的实时应用(Live App),可供用户随意浏览使用不同应用,并在需要时收藏应用,而不像单体应用那样,使用之前必须从一个集中的应用商店下载并安装。

2013 年 6 月,一群设计师和工程师在巴黎碰头,共同开发了 Haida 的抛弃型原型(Throwaway prototype),借此对一些激进的概念进行快速迭代,并进行用户测试。

Haida 团队碰头会,巴黎,2013 年 6 月

下面是一段 Josh Carpenter 在 2013 年 10 月拍摄的,大家就 Haida 的设计概念进行交流的视频。

视频: https://youtu.be/n3f5mMK5P-k

如此剧烈的变化已经大到无法在一个版本中全部实现,因此我们将 Haida 的实现分为三个阶段。2.0 版实现了全新的视觉效果以及用于在窗口之间移动的边缘手势,2.1 版实现了浏览器与主系统UI 的集成,借此我们开始创建这种基于浏览器的独一无二的体验。

Firefox OS 2.x

但是在 2.2 版中,对于 Haida 中所含创新的重视程度开始下降。合作伙伴开始提出有关竞品功能的请求,他们希望我们开发能与 Android 比肩甚至更棒的功能,希望能优化性能并增添对“从右到左”语言的支持,借此合作伙伴才能将设备销售到更多国家。

Haida 的完整愿景从未完全实现过,因此大家开始探讨是否要在 3.0 版中再次调转方向。

Firefox OS 3.0

首发设备上市后,合作伙伴达成了远超预期的销量,但在这之后,25 美元智能手机的倡议开始受挫。对于该以怎样的差异化优势延续首发势头,我们还没有明确的答案,合作伙伴的销售数据开始变得不好看。大家开始丧失信心,在产品后续发展方向方面也开始出现分歧,最终导致几名重要高管离职。

宫力离开 Mozilla 后成立了一家名为 Acadine Technologies 的初创公司,该公司创建了 Firefox OS 的分支(Fork),并从几家有中国政府背景的机构获得了一亿美元投资。他离职时还带走了 Mozilla 台北办公室的很多工程师,此举对 Mozilla 造成了极大影响,并产生了一些芥蒂。这做法真是得不偿失,1 亿美元的投资最终没能落实,而 Acadine 也逐渐淡出了我们的视野。

Andreas Gal 离职后创建了 Silk Labs ,并带走了 Chris Jones 以及 B2G 团队几名重要的元老级成员。后来产品主管 Chris Lee 也走了,导致 Firefox OS 团队开始面临高层领导层的真空期。

这些事情发生在 Chris Beard 接任 Mozilla CEO 期间,因此当时只能由他暂时负责管理 Firefox OS 团队,同时尽快补充新鲜血液。Chris 是一位很棒的 CEO,作为一名长期的 Mozilla 人,他对 Mozilla 的理念有着更直观的理解,但作为 CEO,他根本没有时间或精力积极领导 Firefox OS 的产品开发。

3.0 版的构思过程

由于缺乏切实可行的产品发展方向,“3.0 版的构思过程”直到最后一刻,全公司员工于 2014 年 12 月在波特兰开碰头会时才拉开序幕。当时的想法是通过创意众包为 Firefox OS 寻求新的发展方向,我们希望从 Firefox OS 团队成员以及整个社区征集创意。

3.0 版构思过程,波特兰,2014 年 12 月

表面上,像我这样的人对应该选择什么方向继续开发有着清晰的想法,这似乎是一个很好的机会。但随着我们随意组建了 36 个小组开始集思广益征集想法,好的创意逐渐被各种杂音淹没了。整个构思过程完全没有任何限制,也没有足够的流程对不同创意进行评估,人们开始天马行空地提出各种建议,从智能手表到货币概念的再造不一而足!

到最后也没有得出一个明确的方向,3.0 版被降级为“2.5”版,只提供了一些仓促赶工的功能。

Pivot

平淡无奇的 2.5 版发布,但此时我们依然缺乏全套的领导班子,从 2015 年开始,Firefox OS 逐渐停摆了。

最后我们雇佣了 Ari Jaaksi 担任新的“互联设备”主管。Firefox OS 团队改名为互联设备团队,随后在奥兰多召开的公司全员碰头会上公布了“ Pivot ”。

Ari Jaaksi,Orlando All Hands 活动,2015 年 12 月

Mozilla 大概会叫停我们通过运营商合作伙伴生产和销售智能手机的做法,而我们大概会转为围绕互联设备和物联网打造新的用户体验原型。我们可以将原本为 Firefox OS 开发的各种技术作为新的起点,而 Firefox OS 也许可以在诸如智能电视等设备上重获新生(与松下的合作就是一个证据),但我们的重心已经不再是智能手机了。

最后我们在大屏幕上播放了一段 Ari 激励我们的视频(见下方)。

视频: https://youtu.be/0KtOp5IFW38

Firefox OS?—新篇章,曾在 2015 年 12 月举行的 Orlando All Hands 活动中播放

根本没人在意。他们都在忙着谈天说地,消化这则新闻并理解其背后的含义。

Ari 的讲话基于这样一种前提:Firefox OS 已经准备好与 Android 和 iOS 展开竞争,但最终失败了。实际上 Firefox OS 诞生太晚,应用商店未能流行起来,智能手机的战争已经分出了成败。是时候转向下一个战场:物联网了。

这个结论让我觉得有些受挫,因为我从来没想过我们的目标是让 Firefox OS 成为第三大移动应用平台,我们的目标应该是推动开放 Web 的进化,使其成为一个有竞争力的应用开发平台。这个项目虽然已经停顿,但我们确实在 Haida 中提出了一些绝佳的想法,但最缺乏的是专注。

然而我也在设法接受这个新方向,长久以来我自己也觉得相比一开始选择智能手机,平板电脑也许是更适合 Firefox OS 的设备类型,而智能电视也是个不错的方向。毕竟这些也都算是“互联设备”。

我所设想的一些互联设备产品

产品创新流程(Product Innovation Process)”正式拉开序幕,这是另一个为了获得产品创意而进行的自下至上的构思过程,只不过这一次更有条理(因为争吵了太多次)。互联设备团队的运营从本质来看更像是一种初创公司孵化器,团队成员需要接受“精益创业”培训,随着将产品创意介绍给“产品创新委员会”,我们每个人都成为了物联网技术各种新兴领域的专家。

过渡期

在奥兰多公布的信息很快被Mozilla 内部一些人解读为“Firefox OS 已死”的征兆。考虑到过去多年来为Firefox OS 付出了如此多的资源,Mozilla 的其他团队感觉自己不被重视。最重要的Firefox 团队和支持平台团队在很长一段时间里都在抱怨无法获得足够的资源,他们开始指责是Firefox OS 造成了Firefox 市场份额的下滑。

要我说,部分怨恨也许是合理的,但事态开始快速失控,Firefox OS 很快成为Mozilla 所有挫折的替罪羊。大家普遍认为Mozilla 把“全部家当”押赌在Firefox OS 身上的做法得不偿失。巨大的政治压力开始在Mozilla 内部蔓延,有人要求将B2G 的所有记录从代码库中移除,将这些资源重新分配给我们的旗舰产品Firefox。

互联设备团队开始减员,减少了大约40 人。大家开会评估按照新方向现有B2G 代码库还有多少剩余价值,有多少内容可以移除。一些人认为B2G 代码已经拖累了Firefox 的开发,没必要付出成本继续维护这些代码。

一些互联设备项目(例如平板和智能电视项目)依然计划使用B2G 的部分代码,因此我们最后达成的计划是大幅精简B2G 架构。我们彻底移除了有望成为全新Web 标准的mozApps 打包应用运行时,并移除了之前采取以全新Web 服务为基准的方法时为Gecko 增加的约30 个设备API,很明显这些东西绝对不可能成为Web 标准了。

B2G OS 架构过渡

我们启动了“B2G 过渡项目”,并借助了 Mozilla 社区的力量,这样如果有其他人希望继续维护,还可以将有关智能手机的代码转移给社区。社区很乐于接受这个挑战,并欣然参与其中。讽刺的是此时的 B2G 项目才开始获得最大程度的社区参与。

虽然我们很快移除了 mozApps 运行时,以及 Gecko 30 个设备 API 中的 10 个 API,但内部政治压力有增无减,他们要求我们从 Mozilla 代码库中彻底移除所有关于 B2G 的记录。平板和智能电视项目已经彻底停工,互联设备团队开始将精力转投他处。

从技术角度来看,Mozilla 项目采取的模块化所有权机制完全独立于 Mozilla 公司的汇报结构。作为最后的努力,B2G 的模块所有者(当时是 Fabrice Desré)就将 B2G 模块从 Mozilla 项目中移除提出过争议,这件事甚至吵到了公司最高管理层,但最终决策依然是:移除。

技术上,由社区接手的“B2G OS”依然是一个分支,但随着基础架构的陆续关闭,以及不再有 Mozilla 员工带薪维护代码,这样的分支绝对不可能最终落实。最巅峰时期,约有 300 名全职 Mozilla 员工参与了 Firefox OS 项目,社区根本无法提供近似数量,具备丰富技能的全职人手。

Boot to Gecko 最终还是失败了。

结论

成功该如何衡量

对于我们有关 Firefox OS 的成就,我倍感自豪。如果以最初的目标作为标准衡量该项目是否成功,我认为这个项目的成就远远超出预期。我们以技术原型机为基础,成功制造出包括智能手机和智能电视在内 20 种不同的商业性设备,并在超过 30 个国家和地区销售。抛开工程方面的壮举不谈,为 Web 平台打造的 30 个全新 API 原型,创建了可能是有史以来最复杂的 JavaScript 代码库,我们还从零开始打造了一个移动操作系统并顺利上市,这些工作都是在不到两年的时间里完成的。据我所知没有任何其他团队实现过类似的壮举。

成功上市的 20 款 Firefox OS 产品中的一部分

到最后我也不知道一共售出了多少 Firefox OS 设备,合作伙伴并未与我们共享销售数据,我们也没问过。根据有限的了解来猜测,大概会有 5 百万部(约 1 百万的误差)。对我来说这是个了不起的成就,这样的表现已经远远好过其他“非主流”的移动操作系统,同时这无疑也是我所参与过的最成功的项目。但在这样一个年出货量超过 10 亿部的行业,市场份额甚至不到 0.5%!

对我来说,从未关心过 Firefox OS 能否成为第三大移动操作系统。我关注的重点在于推动 Web 技术突破极限,让 Web 成为一个更有竞争力的应用开发平台。我觉得我们无疑已经做到了,我认为我们的工作对于目前围绕渐进式 Web 应用(Progressive Web App)所进行的创新起到了巨大的推动作用。我依然坚信 Web 终将获胜。

曾经有一段时间,整个团队偏离了最初的目标,不知何故竟然想要成为 Android 和 iOS 之外的第三大智能手机平台,并以市场份额作为衡量成功与否的唯一标准。在很短的时间里,B2G 团队从最初的四位共同创始人发展成上百位成员的规模,初创公司因为成长太快而失去使命和专注的情况已经司空见惯了(在我眼中,Firefox OS 就是 Mozilla 内部的一家初创公司)。

时机问题

有一种常见的看法认为,Firefox OS 只是因为上市太晚。在与中国深圳的一些专家谈过之后,我已经不太确信这种说法。他们向我建议说,如果我们从今天才开始开发 Firefox OS,曾经为我们制造了不少麻烦,使得我们必需借助移动运营商,而非直接向最终用户发布软件更新的许可问题就不再是问题了。随着移动设备的硬件商品化程度越来越高,现在很容易就能找到可以运行我们软件的白标硬件。很多 OEM 厂商有一种切实的意愿,希望摆脱对 Google 的依赖,让自己获得差异化的竞争优势。也许 Firefox OS 的问题不在于晚了五年,而在于早了五年!

像我们这些从事 Web 技术的人倾向于认为自己正在做各种非常前沿的工作。但 Web 的标准化需要极长时间的沉淀。新的功能和特性始终会首先以原生代码的形式出现,随后才会通过标准化过程变身为跨平台解决方案。要我说,Web 实际上更适合成熟度和商品化程度更高的硬件平台,并且最终会通过一种与桌面端类似的做法在移动端取得胜利。只有当这一天尽快到来之后,面向 Web 的移动操作系统才能成功。

正确的决策是什么?

奥兰多活动中公布的消息到现在已经超过一年了,我有足够的时间经历 Firefox OS 死亡之后的不同阶段:拒绝、愤怒、挣扎、沮丧,最终接受!

至此,尘埃落定,我可以坦然承认,我依然觉得全面叫停 Firefox OS 是一个错误的决策。由于在很长一段时间里缺乏领导,这个项目逐渐丧失了动力,但我依然认为作出彻底叫停这一决策,主要是出于内部的政治原因,而非业务或技术原因。

随着移动设备市场愈加成熟,商品化程度越来越高,Web 技术也在逐渐成熟。机遇依然存在,实际上现在也许是更好的时机。虽然我理解该项目被叫停的原因,但我依然认为停得太早了,早到它还没机会展现自己的全部潜力。如果能够重新启动,并确定一个严格但清晰的方向呢?很可惜没有这样的机会。

很多人会争辩说我这是妄想,嘴上说说固然简单,毕竟为了确保一个如此大规模的项目顺利运转,所需的资金并不是我提供的。他们会说,我们本来有机会的,但是搞砸了,而 Mozilla 应该将所有精力用于自己的旗舰产品 Firefox 上。在我看来,这样的看法太过局限。Web 技术已经在很多方面超越了浏览器的范畴,是时候眺望未来,考虑整个互联网所面临的全新挑战了。

学到的经验

很遗憾,出于政治方面的原因,目前在 Mozilla 内部重启 B2G 已经不可能了,但如果有机会再来一遍,这次我会怎么做?

  • 设计?—会以一个极为简单的,基于浏览器的设计着手,专注于 Web 内容本身,而非试图重建其他操作系统已经具备的每个功能。
  • 工程?—? 在“外壳”和 Web 内容之间建立明确的划分,而非试图迫使 Web 去做那些本就不适合的工作。使用 REST 和 WebSockets 在 Web 栈的服务器端创建设备 API,不要在客户端为 JavaScript DOM API 提供任何特殊待遇(成就 Web 的不是 JavaScript,而是 URL)。围绕网上丰富的 Web 应用打造一个社区,而非提供一个供大家提交打包应用的应用商店。
  • 产品?—? 不要试着生产最廉价的智能手机。而是要生产中端级别的平板(甚至随后可以考虑生产智能电视棒),让所有产品专注于 Web 内容、游戏,以及娱乐。首先在发达市场赢得立足之地,而不是一头扎进新兴市场。
  • 合作?—? 围绕 Mozilla 制定的产品方向线路图,在合作伙伴面前表现出更有力的坚持,有勇气拒绝和发展战略不符的机会。直接向最终用户提供软件更新,远离所有妨碍我们分发自有操作系统的芯片供应商(当时要这样做非常困难,但现在已经容易多了)。

脚注

这就是我要讲的故事。故事很长,如果你没有跳过上文某些无聊内容读到这里,我表示万分钦佩!

说了有关 Firefox OS 的这么多事,我只希望在技术史中,除了一条“Mozilla 开发但最终失败的移动操作系统”的注脚之外,还能给大家留下一段回忆。

很多非常聪明有才的人对 Boot to Gecko 项目付诸了太多的热忱和努力。这一点让我倍感自豪,他们也会有这样的感觉。也许我们让曾经寄予厚望的外界失望了,但在我看来,Firefox OS 是成功的,也是我职业生涯至今最辉煌的成果!(Google 在 2008 年发布首款 Android 智能手机时,我还在 Google 做实习生,但在我看来,Firefox OS 带给我的成就感远胜 Google 的实习生职位)。

Firefox OS 背后的一些天才(以及我),惠斯勒,2015 年 6 月

现在我依然对 Mozilla 的使命深信不疑,同时也觉得 Mozilla 即将迎来一个激动人心的全新篇章,我已经迫不及待想跟你讲讲一些新兴技术了。不过还是改天再说吧。

最后,请原谅我任性地用我和妻子在 2014 年拍摄的一段视频作为本文的结尾,其中包含了鲍勃·迪伦的模仿秀,以及开发 Firefox OS 的美妙过程中拍摄的一系列照片。(看看你能不能找到在发布会上体验 Firefox OS 的伯纳斯·李爵士!)。

视频: https://youtu.be/ujNCOdslzH4

变革的时代(The Times They Are a Changin’),Open Web 混音版,作者 Ben 和 Siobhan

谢谢 Siobhan Currell。

作者 Ben Francis 阅读英文原文 The Story of Firefox OS


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-04-13 17:322115
用户头像

发布了 283 篇内容, 共 106.3 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

为什么考研,考研能给你带来什么?说说我的感受!

我是程序员小贱

Spring如何选择类构造器

申屠鹏会

翻译 Go 语言

1 学习性能优化的要点

我是程序员小贱

Docker搭建PHP+Nginx+MySQL+Redis

书旅

Docker 镜像 lnmp

华为的“少年天才”攀登者,出发向智能存储的“奥林帕斯山”

脑极体

【DevOps】我们忽视了Daily Build(每日构建)吗?

Man

DevOps jenkins 每日构建

阿里、力扣、政采云的15位专家分享前端面试与招聘视角

三钻

面试 大前端

Rust特征与泛型区别点

编号94530

rust 泛型 封装、继承、多态

鲲鹏一粤,智算万里

脑极体

1 时间复杂度总结

我是程序员小贱

翻译: Effective Go (7)

申屠鹏会

翻译 Go 语言

如何隐藏你的数据库密码

Rayjun

安全 服务器

troubleshoot之:使用JFR分析性能问题

程序那些事

Java 性能分析 jfr

MEDO 项目开发中遇到的问题汇总

陈皮

解析 hashMap 源码之基本操作 get

shengjk1

Java hashmap

如何学习一个框架?

云帆

翻译: Effective Go (6)

申屠鹏会

翻译 Go 语言

解析 HashMap 源码概括

shengjk1

Java hashmap

敏捷到底是个什么鬼?

刘华Kenneth

程序员 敏捷 change

解析 HashMap 源码之基本操作 put

shengjk1

Java hashmap

你生日那天的宇宙什么样子知道?我全部给你吧!

我是程序员小贱

学习技术先从学会使用搜索引擎开始

我是程序员小贱

MySQL 基准测试

多选参数

MySQL

Apache Mina和Netty的历史

dinstone

docker入个门

书旅

Docker 容器 Dockerfile

让你起飞的20个Linux命令骚操作

我是程序员小贱

平均负载是什么?

我是程序员小贱

高效程序员的45个习惯:敏捷开发修炼之道(1)

石云升

读书笔记 敏捷开发

毕玄大佬的分享以及给我的感悟

白色蜗牛

Java 程序员 技术 职场 架构师

真正的异步API网关Agate

dinstone

Async API Gateway

Elasticsearch学习

张明森

Firefox OS的故事_语言 & 开发_Ben Francis_InfoQ精选文章