编者按:本文来自微信公众号“”(ID:infoqchina),作者 Ben Francis,经原作者授权由 InfoQ 中文站翻译并分享。
在 Android、iOS 雄霸的时代,也有一批全新面貌的操作系统在两大巨头的夹缝中求生存。但即便是有微软庇荫的 WP 也行将死亡。这批市场份额「其他」的操作系统中就有 Firefox OS,虽然是个失败的操作系统,但它曾想改变点什么,这已经是我们必须报道它的理由。
2016 年 2 月 5 日,Mozilla 在给开发者的电子邮件中宣布,在 2.6 版本之后,将正式停止开发 Firefox OS 手机版操作系统,这一举措,也就意味着 Firefox OS 的失败。本文作者 Ben Francis 是 Firefox OS 操作系统的开发者之一,他从自身经历出发讲述了 Firefox OS 的前世今生。
Firefox OS 是个失败的操作系统,知道的人并不多,但它曾经想改变点什么,我们应该报道下这个内容,让它在国内的社区中,留点痕迹。
写在前面
我叫 Ben,是一位 Mozilla 人,一名软件工程师,过去五年来一直全职从事着“Boot to Gecko”(以下简称 B2G)项目,今天我想给你们讲个故事。
从 Boot to Gecko 开源软件项目在 2011 年通过邮件列表中发布的一封邮件,以一个空的 GitHub 代码库闪亮登场,到后来以 Firefox OS 移动操作系统的形式商用发布,再到 2016 年将数百万行代码“转移”给社区,这个故事的跨度很大。五年时间,Mozilla 社区的数百位成员因为一个共同目标走到一起,希望借助开放网络的力量颠覆应用生态。我希望借助本文对我们基于开源浏览器打造移动操作系统过程中所收获的成功、失败,以及学到的经验教训进行反思。
B2G 的搭建
从一个空白的 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 大楼的办公室筹备过程中,首次在不使用浏览器插件的情况下,通过网页拨打了有史以来的第一通电话通话。手机最基本的必要功能已经逐渐具备了。
Firefox OS 1.0
设计
在第一次迭代过程中,提供给 UX 团队的想法极为有限,基本上不可能产生让人惊艳的成果。当时依然沿用了类似于 Android 和 iOS 的应用图标网格设计方式,但尽可能进行了简化。首先我们需要证明使用现有的 Web 技术是可以构建出这种类型的 UI 的。
UX 团队的这个设计非常流畅,但现在回想起来,一开始就模仿现有产品,并假设随后如果必要可以调转方向,这是一个极大的错误。
实现
在工程这一块,我们证明了使用开放的 Web 技术是可以打造智能手机的,并且整个用户界面都可以用 HTML、CSS 和 JavaScript 来创建。
为了通过 JavaScript 与智能手机的底层硬件通信,我们需要在新 API 方面进行大量投入,并要研究一种可行的特权模型。Web 技术的现有安全模型可以通过沙箱限制让浏览器安全地执行不可信代码,为了让 Web 内容能够访问更多高特权功能,例如接打电话以及发送短信,还需要具备一套新的安全系统。
为了能按时发布 1.0 版 B2G,我们认为能同时满足脱机使用和安全需求的最简单方法是为 Gecko 引入打包应用的概念。打包的资源可以“安装”到设备上,进而可以脱机运行,并通过密码学签名验证代码是否可信。
2012 年 7 月在西班牙电信位于巴塞罗那的办公室举办的工作周活动中,我们决定先选择打包应用作为一种临时解决方案,直到能有其他更好的办法。我认为这个决策是另一个重大失误,因为随着技术债越欠越多,我们已经逐渐走上了一条不归路。
2013 年世界移动通信大会
2013 年 2 月,我们在巴塞罗那世界移动通信大会上公布了首个商业化设备,首发设备包括 ZTE Open 和 Alcatel One Touch。同时 LG 和华为也承诺会发布相关设备。
ZTE Open 和 Alcatel One Touch 智能手机
当时消息是在 MWC 召开前一天通过媒体大会公布的。我们本来估计会有大约 250 名与会者,结果当天来了超过 700 家媒体、传媒、分析师嘉宾。我们还设法达成了一项史无前例的壮举,18 个电信公司的 CEO 共同登台表达对该项目的支持,这样的盛况就算放在 GSMA(全球移动通信系统协会)也足够让人吃惊了。
CEO 出席媒体大会,MWC 2013
我认为完全可以说 Firefox OS 是那年活动上最耀眼的新星。大会杂志上每一天我们都上头版,我们在 Google News 上共产生 80,000 个媒体搜索结果,Firefox OS 甚至与奥斯卡一起登上了 Twitter 趋势榜!这几乎是所有公关人员梦寐以求的结果。
Firefox OS 1.x
Firefox OS 已经做好了上市的准备。但在举行 1.0 版发布会之前,我们就已经回到办公室开始继续对它进行完善。
最初我们主要专注于增加智能手机的基本功能,例如 1.0 版中缺乏的彩信功能,随后我们将工作重心放在为应用开发者提供更完善的开发工具,以及满足合作伙伴们千奇百怪的需求方面。
随着我们在 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 中的那几千个应用。
我们讨论过将关注的重心重新转向真正的 Web 内容(目前为止地球上规模最大的数字化内容集),面向 Web“互联”的这一本质,以及通过超级链接在页面之间进行导航的“流动”进行优化,打造创新的用户界面。从开放的 Web 世界自身优势入手可以让我们创造出与竞争对手截然不同的产品。
连接下一群十亿用户
思路二基于这样的一种假设:我们真正需要的是规模化,为了扩大规模,对我们来说最可行的办法是面向新兴市场。对移动行业来说,这种市场的增长潜力才是最大的。
我们在发展中国家进行了一些市场研究和用户调研,很快发现全球人口有很大比例根本无法承受价格高昂的智能手机。他们真正需要的是价格低廉的智能手机,是能让诸如印度和孟加拉国等地的人可以轻松负担的手机。
只要能在新兴市场站稳脚跟,就可以非常快速地实现 Firefox OS 所需的规模。随后至少在这些国家的市场份额统计图表中,我们会不再被归类到“其他”这个类别,开始得到大家的关注。
25 美元的智能手机
2013 年年中,宫力开始掌舵 Firefox OS。宫力极为赞同“廉价智能手机”这个想法,并提出了 25 美元智能手机这一概念,认为如果希望在新兴市场扩大规模,需要将手机价格降低至这个价位。
整个团队通过天才的工程设计,让 Firefox OS 成功地运行在基于 Spreadtrum 芯片组,只有 128MB RAM 的极低端硬件上,这一水平已经远远低于同时期 Android 的最低要求。我们带着“25 美元的智能手机”参加了 MWC 2014,与低成本掌上设备制造商 Intex 和 Spice 建立了合作关系,并提出了“连接下一群十亿用户”这样的口号。
25 美元智能手机概念原型机,MWC 2014
然而该项目的执行结果并不能让人满意。首先,25 美元智能手机上市时的最终成本约为 33 美元。此外,尽管 Firefox OS 可以在 128MB RAM 的设备上“运行”,但此时无法像其他智能手机那样实现多任务。关键应用的缺乏是另一个严重问题,例如 Whatsapp 是这些市场必不可少的。我们没能说服 WhatsApp 开发 Web 版本,甚至没能得到许可由我们代为开发。这些局限外加硬件质量(尤其是摄像头)方面的一些问题,导致廉价智能手机的市场表现并不怎么出色。
新兴市场的用户也许没有太多可支配收入,但这并不意味着他们就安于接受低质量产品。他们要的不是廉价的“精简版 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),可供用户随意浏览使用不同应用,并在需要时收藏应用,而不像单体应用那样,使用之前必须从一个集中的应用商店下载并安装。
如此剧烈的变化已经大到无法在一个版本中全部实现,因此我们将 Haida 的实现分为三个阶段。2.0 版实现了全新的视觉效果以及用于在窗口之间移动的边缘手势,2.1 版实现了浏览器与主系统 UI 的集成,借此我们开始创建这种基于浏览器的独一无二的体验。
但是在 2.2 版中,对于 Haida 中所含创新的重视程度开始下降。合作伙伴开始提出有关竞品功能的请求,他们希望我们开发能与 Android 比肩甚至更棒的功能,希望能优化性能并增添对“从右到左”语言的支持,借此合作伙伴才能将设备销售到更多国家。
Haida 的完整愿景从未完全实现过,因此大家开始探讨是否要在 3.0 版中再次调转方向。
Firefox OS 3.0
首发设备上市后,合作伙伴达成了远超预期的销量,但在这之后,25 美元智能手机的倡议开始受挫。对于该以怎样的差异化优势延续首发势头,我们还没有明确的答案,合作伙伴的销售数据开始变得不好看。大家开始丧失信心,在产品后续发展方向方面也开始出现分歧,最终导致几名重要高管离职。
随着几位高管先后离职并带走了很多研发工程师、团队元老,Firefox OS 团队开始面临高层领导层的真空期。
3. 0 版的构思过程
由于缺乏切实可行的产品发展方向,“3.0 版的构思过程”直到最后一刻,全公司员工于 2014 年 12 月在波特兰开碰头会时才拉开序幕。当时的想法是通过创意众包为 Firefox OS 寻求新的发展方向,我们希望从 Firefox OS 团队成员以及整个社区征集创意。遗憾的是直到最后也没有得出一个明确的方向,3.0 版被降级为“2.5”版,只提供了一些仓促赶工的功能。
Pivot 的发布
平淡无奇的 2.5 版发布,此时我们依然缺乏全套的领导班子,从 2015 年开始,Firefox OS 逐渐停摆了。最后 Firefox OS 团队改名为互联设备团队,随后在奥兰多召开的公司全员碰头会上公布了“Pivot”。
奥兰多会议的一个隐晦的结论是:“Firefox OS 已经准备好与 Android 和 iOS 展开竞争,但最终失败了。”实际上 Firefox OS 诞生太晚,应用商店未能流行起来,智能手机的战争已经分出了成败。是时候转向下一个战场:物联网了。
我所设想的一些互联设备产品
B2G 的最终失败
在奥兰多公布的信息很快被 Mozilla 内部一些人解读为“Firefox OS 已死”的征兆。考虑到过去多年来为 Firefox OS 付出了如此多的资源,Mozilla 的其他团队感觉自己不被重视。最重要的 Firefox 团队和支持平台团队在很长一段时间里都在抱怨无法获得足够的资源,他们开始指责是 Firefox OS 造成了 Firefox 市场份额的下滑。Firefox OS 很快成为 Mozilla 所有挫折的替罪羊。
我们启动了“B2G 过渡项目”,并借助了 Mozilla 社区的力量,这样如果有其他人希望继续维护,还可以将有关智能手机的代码转移给社区。社区很乐于接受这个挑战,并欣然参与其中。讽刺的是此时的 B2G 项目才开始获得最大程度的社区参与。
B2G OS 架构过渡
技术上,由社区接手的“B2G OS”依然是一个分支,但随着基础架构的陆续关闭,以及不再有 Mozilla 员工带薪维护代码,这样的分支绝对不可能最终落实。最巅峰时期,约有 300 名全职 Mozilla 员工参与了 Firefox OS 项目,社区根本无法提供近似数量,具备丰富技能的全职人手。Boot to Gecko 最终还是失败了。
复盘总结
成功该如何衡量
对于我们有关 Firefox OS 的成就,我倍感自豪。如果以最初的目标作为标准衡量该项目是否成功,我认为这个项目的成就远远超出预期。我们以技术原型机为基础,成功制造出包括智能手机和智能电视在内 20 种不同的商业性设备,并在超过 30 个国家和地区销售。抛开工程方面的壮举不谈,为 Web 平台打造的 30 个全新 API 原型,创建了可能是有史以来最复杂的 JavaScript 代码库,我们还从零开始打造了一个移动操作系统并顺利上市,这些工作都是在不到两年的时间里完成的。据我所知没有任何其他团队实现过类似的壮举。
到最后我也不知道一共售出了多少 Firefox OS 设备,合作伙伴并未与我们共享销售数据,我们也没问过。根据有限的了解来猜测,大概会有 5 百万部(约 1 百万的误差)。对我来说这是个了不起的成就,这样的表现已经远远好过其他“非主流”的移动操作系统,同时这无疑也是我所参与过的最成功的项目。但在这样一个年出货量超过 10 亿部的行业,市场份额甚至不到 0.5%!
对我来说,从未关心过 Firefox OS 能否成为第三大移动操作系统。我关注的重点在于推动 Web 技术突破极限,让 Web 成为一个更有竞争力的应用开发平台。我觉得我们无疑已经做到了,我认为我们的工作对于目前围绕渐进式 Web 应用(Progressive Web App)所进行的创新起到了巨大的推动作用。我依然坚信 Web 终将获胜。
最大的成就
设计 —设计了一套操作简单、界面新颖、包含一些创新式功能的移动操作系统,例如用于切换窗口的边缘手势。尽管我们的愿景并未完全实现,但至少在基于浏览器的操作系统到底该如何实现这方面获得了一些不错的成果。
工程 —从零开始打造了一个完全开放的移动操作系统,并在不到两年时间里成功上市。据我所知,能实现这种速度的团队仅此一家。借助足够精益的技术栈,我们在渲染 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 制定的产品方向线路图,在合作伙伴面前表现出更有力的坚持,有勇气拒绝和发展战略不符的机会。直接向最终用户提供软件更新,远离所有妨碍我们分发自有操作系统的芯片供应商(当时要这样做非常困难,但现在已经容易多了)。
说了有关 Firefox OS 的这么多事,我只希望在技术史中,除了一条“Mozilla 开发但最终失败的移动操作系统”的注脚之外,还能给大家留下一段回忆。
很多非常聪明有才的人对 Boot to Gecko 项目付诸了太多的热忱和努力。这一点让我倍感自豪,他们也会有这样的感觉。也许我们让曾经寄予厚望的外界失望了,但在我看来,Firefox OS 是成功的,也是我职业生涯至今最辉煌的成果!