1. 前言
Firefox OS 是由 Mozilla 主导开发的新一代开源移动操作系统,它采用Linux 内核以及基于 Gecko 的运行环境, 它为用户提供完全基于 HTML/JavaScript技术以及其他开放 Web 应用接口的应用程序。
Mozilla 是一家非盈利性的组织机构,组织开发了著名的 Firefox 浏览器以及 Gecko 浏览器引擎。
本文的分析主要基于互联网上已公开资料以及个人目前对 Firefox OS 的理解与试验,希望能对大家初步认识了解 Firefox OS 提供一个参考。
2. 简介
2.1 概况
Firefox OS 是由 Mozllia 于 2011.7 发起的 B2G(Boot to Gecko)项目发展而来,2012.7 正式命名为 Firefox OS。该项目基于 Linux 以及 Gecko 引擎技术,从一开始就完全采取开放开源的方式进行开发,其核心理念是用户可接触到的应用都是基于 Web 的应用,这些应用使用高级 HTML5 技术和硬件设备接口,可通过JavaScript 直接访问手机的硬件设备。
对开发者来讲,最需要了解的是 Firefox OS 整个用户界面是一个 Web 应用,它能显示和激活其他 Web 应用。任何对用户界面的修改以及可以在 Firefox OS上运行的应用都是 Web 页面,只不过这些页面提供了可以直接访问硬件设备以及服务的能力。
项目发展动力在于 Mozilla 相信 Web 能够替代基于单个厂商的,带有授权的应用开发生态系统。为了让开放的 Web 技术成为未来移动和桌面应用发展的基础,需要持续地推动 Web 的发展,去拥有并在某些方面甚至要超越与其竞争的生态系统的能力。
2.2 初期完成的工作
◆ 提供新的 Web 接口原型,以暴露设备和操作系统的能力(包括电话、 短信、摄像、蓝牙、NFC 等)。
◆ 建立安全权限模型,确保这些新接口安全地暴露给上层的页面与应用。
◆ 为智能手机和平板提供一个底层的基础框架。
◆ 选择移植或构建应用,以证明或突出系统拥有的能力。
2.3 当前开发状态及发展
◆ 项目目前正全力的开发当中,主要开发人员为 Firefox 专职开发人员和部分厂商人员,再加部分开源爱好者。
◆ 2012 年初,为初始合作厂商提供了一套原型系统,主要吸引了部分电信运营商的关注与青睐。
◆ ZTE 和 TCL 计划于 2012 年底或 2013 年初推出基于 Firefox OS 的智能手机。
3. Firefox OS 架构
Firefox OS 架构主要由三层组成,分别为 Gonk、Gecko、Gaia,其组成关系如下图所示:
3.1 Gonk 层
Gonk 层是指 Firefox OS 的底层,它由 Linux 内核以及用户态硬件抽象层组成,它往往来源于通用的开源项目比如 Linux 内核、libusb 等,其中部分与android 硬件抽象层共享,比如 GPS、Camera 等,也可能包括部分硬件厂商提供的需要授权的代码或库如 ril、OpenGLES、Fm 等。
3.2 Gecko 层
Gecko 层是指 Firefox OS 的应用运行环境,这一层提供对公开标准的支持如HTML/CSS/JavaScript。同时为了确保对这些接口的有力支持,这一层还包括其他内容如网络处理、图形图像处理、 布局引擎、JavaScript 虚拟机和对 Gonk HAL的支持等。
3.3 Gaia 层
Gaia 层是指 Firefox OS 的用户界面层,当 Firefox OS 启动后任何可以显示在屏幕上的内容都可看成该层的一个应用。Gaia 层实现了 HomeScreen、ScreenLock 乃至一个现代智能手机所具备的标准应用。Gaia 应用完全使用 HTML、CSS 和 JavaScript 来实现。它通过开放的 Web 接口访问潜在的操作系统功能,它由 Gecko 层提供实现支持。
第三方应用可以通过 Web 应用市场安装在 Gaia 层,与其他应用一起供用户使用。
4. Firefox OS 运行态分析
4.1 BootStrap 阶段
当打开安装 Firefox OS 设备电源时,Bootloader 程序开始执行,从显示启动画面及 Logo,直到装载完成操作系统内核镜像到设备中。
4.2 Linux 内核启动阶段
这一阶段与主流 Linux 系统的内核启动一致,特别是 Android 内核的启动过程。
4.3 Init 初始化
这一阶段在 Linux 内核完成启动后用于加载系统服务和核心进程。
4.4 用户态核心进程交互状态
由 Init 阶段加载的主要进程有 b2g、rild、rildproxy、mediaserver、netd、wpa_supplicant、dbus-daemon 等。
其中 b2g 为主要运行环境进程,它们之间的运行关系图如下:
4.5 b2g 多进程运行模型
为了保证不同 Web 应用的独立性与安全性等,Firefox OS 采取了类似于Chrome 浏览器和 WebKit2 的多进程模型。如下图三所示:
主进程主要负责主 UI 的显示、事件的接收分发、层的合成以及屏幕的最终输出、网络处理等;主进程(称为 b2g 进程)与内容子进程(称为 content 进程)之间的通讯是基于Mozilla 自己定义的 IPDL 来实现的;
内容子进程负责指定 Web 应用的逻辑处理以及内容渲染,需要显示时通知主进程进行合成进而屏幕输出;
主要运行逻辑如下图四所示:
5. Firefox OS 开发
5.1 开发背景
◆基于开源和开放的技术实现
由于 Firefox OS 的开发从一开始就基于开放开源的方式在进行,同时它的应用主要是基于 Web 技术,不同的开发人员特别是 Web 开发,都可以很快介入其应用的开发中。
另外由于它完全基于开放的 HTML/JavaScript 来实现应用的开发,与 Java完全不相干,从而导致其生态系统也与 Android 有本质的差别,也许这一点正是Firefox OS 与 Android 应用堆栈的最大差别。
◆基于通用的硬件以及公开的硬件抽象层
Mozilla 出于坚持开放的 Web 精神以及本身的优势与劣势,结合当前开源社区的情况特别是 Android 的快速普及,Firefox OS 的开发一开始是基于 Android来启动的, 甚至其整个编译打包刷机工具也是直接利用 Android 系统现有方式来实现的。
那 Mozilla 为什么会选择这样一种做法呢?也许最根本的原因是便于不同硬件的适配。不同厂商提供了不同硬件平台的Bootloader、FashBoot、内核驱动的更新以及针对 Android 平台的电话、短信、Camera、Sensor、视频图像显示处理等的底层支持。有了这些基础功能的底层支持,对 Firefox OS 的开发提供了极大的方便,从技术实现的角度看,Firefox OS 的底层实现可以基于 Android的底层实现来完成其架构中的 Gonk 层,以及对应的 Gecko 层。
从将 Firefox OS 移植到不同的平台来看,它采取了类似于 Android 的硬件抽象层,并且其中很多接口与 Android 相一致。这样在推广和建立 Firefox OS的生态系统时,则可以借力 Android 平台进行加速推动与普及。
从上面的分析看来,这是 Firefox OS 与 Android 实现的最大共同点,而这个共同点的形成,也许关键在于它们都是基于开源和开放的心态在进行操作系统开发。
◆拥有开放的开发测试平台
由于 Firefox OS 是基于 Web 技术开发应用,而 Web 技术已经在现代的浏览器中久经考验与广泛使用,其应用开发与测试甚至可以直接在桌面浏览器中进行。
有兴趣的朋友可以使用 Firefox 浏览器安装一个 r2d2b2g 扩展 http://www.mozfans.com/thread-385-1-2.html来试试它运行的样子,试玩一下或许会发现一些好玩的东西,不过如果出现崩溃还应该多多包涵,毕竟该扩展还在试验阶段。
5.2 Web 应用开发
基于上面提到的开发背景, 作为 Web 应用开发者,可以方便地介入到 FirefoxOS 应用开发中来,不过下面几点还是需要 Web 应用开发者有一定的认识:
◆Web 应用是个全新的尝试
虽然基于相同的技术,但 Web 应用从本质上讲与 Web 页面是有很大差别的。作者个人和魔智论坛的理解是,Web 页面最大的好处能根据页面内 URL 链接随意跳转到不同的页面,而 Web 应用本质上应该是强调内容的专注化、应用化,像一个本地应用一样(如魔智论坛手机版)要专注于完成某种功能,尽可能地让用户停留在该应用内,如游戏类、社交类应用。
有了这样基础的认识,需要对在 Web 页面的元素布局以及操作上进行一定的调整,才能够成为一款优秀的 Web 应用。
◆ Web 应用移动化的挑战
由于 Firefox OS 是一款针对移动的操作系统,必然会带上许多移动设备的特性如触摸操作、屏幕较小、可定位、Camera 等,这样就提供了许多新的设备或移动相关的 Web 接口,需要 Web 应用开发者学习和使用。
主要的新 Web 接口有:
◆Running Offline
◆Online and Offline Events
◆Drawing Graphics with Canvas
◆Drawing 3D Graphics with WebGL
◆Using Files from Web App
◆Detecting Device Orientation
◆Using Camera
◆Customing Phone
具体可以参考附录提供的参考资料。
Web 应用与本地应用的性能挑战
目前在 IOS、 Android 平台上, 应用相对本地应用来讲性能上有一定差距,Web也许这跟技术实现方案的选择有关, 但也很可能与这两个平台从一开始就不是针对 Web 应用而开发相关。试想为什么 iOS 平台上使用 Safari 浏览页面与使用
WebView 来浏览页面性能与体验有很大的差别。其根本原因在于 Safari 浏览器的独特性,而其独特性往往体现在其渲染方式和 JavaScript 引擎的性能等。而 Firefox OS 特别在渲染方式与 JavaScript 引擎性能上进行了特别的优化与调整,主要体现在:
◆ 使用新的 Azure 库来实现 Canvas 2D;
◆ 增强多进程架构,提供并行渲染合成的能力;
◆ 完善 WebWorker/WebSocket/WebStorage 的支持。
这应该只是开始,Web 应用的优点会随着时间的积累会凸现出来,而本地应用的局限会越来越令人不满,这也正是 Mozilla 发起 Firefox OS 项目的根本出发点也是它的使命所在,这正是魔智论坛一直支持B2G项目的原因,也正是它与 HP webOS 的差别所在。
5.3 针对 Firefox OS 本身的开发
如果想参与到 Firefox OS 本身的开发,或许是一个挑战的工作,因为它本身就充满挑战,但是如果有一点激情(因为目前参与开发的就是一帮很有激情的家伙),再加上对 Android 系统的一点理解,外加上对浏览器引擎的一些了解,特别是对 Gecko 引擎的理解,则会比较轻松地介入到其中。因为它们毕竟是开源项目。一切可以从头开始,心动了吗,赶快行动吧。
参考 B2G build prerequisites、Preparing for your first B2G build 、Building Boot to Gecko ,获取源代码,然后运行./config.sh,./build.sh,./flash.sh 就可以编译出一个模拟器或指定Android 机型的 Rom,并刷机。
5.4 Firefox OS 移植
基于上面的分析,若要将 Firefox OS 移植到其他硬件平台,如果该平台提供了 Android BSP,应该还是比较容易的。其工作的关键在于,对 Android 硬件抽象层与 Firefox OS 硬件抽象层进行对比与移植,也就是完善 Gonk 层的适配,对上层的 Gecko、Gaia 只需做稍小的改动即可。
总结
◆Firefox OS 项目从启动到现在一年多一点时间,起步较快,目前还在快速迭代中,正准备在市场上推出首款手机。
◆Firefox OS 有 Mozilla 的大力支持,本着开放开源的精神进行开发,可充分发挥其对 Web 核心技术的理解能力,能引导并得到部分 Web 社区的认可与支持,有利于生态系统的建立。
◆但 Web 应用平台在移动市场上还没得到全面认可,存在一定的市场风险,并有 Chrome OS、HP webOS 的前车之鉴,这同样需要时间来获得市场的认可。
◆Mozilla 开发人员本身对硬件平台或系统底层的理解还是相对比较薄弱,需要与硬件厂商有更加紧密的磨合,幸运的是,他们选择了 Android 的硬件抽象层,减少了 Firefox OS 起步阶段的阻力。
◆Firefox OS 中的 Gecko 引擎在移动浏览器的竞争中目前处于劣势,包括其多进程模型、新的渲染合成架构、内存管理、操作上的顺滑度都需进一步加强与验证, Mozilla 拥有天才般的工程师以及独特的 Hack 精神, 但让世界见证过 Firefox 浏览器的横空出世,现在他们敢勇于面对这一切,并正在努力攻关中,相信他们会给世界带来又一次惊喜,让我们拭目以待。
◆文中内容只是对 Firefox OS 进行一个初步分析,由于时间以及个人原因,可能有误,仅供参考,希望大家能谅解与指正,如果想进一步了解和关注 Firefox OS,愿意的话可以与作者进行探讨交流。
参考资料
1.https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS
2.https://wiki.mozilla.org/B2G
3.http://www.mozilla.org/en-US/b2g/
4.https://developer.mozilla.org/en-US/docs/Apps/Getting_Started
________________________________________
作者:钟学书 (sukzhong@gmail.com)
修改:潘爱民
单位:盛大创新院
时间:2012.10