Firefox OS

更新时间:2023-10-17 15:01

火狐移动操作系统 (Firefox OS )是由Mozilla公司主导开发的操作系统。

基本介绍

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 的智能手机。

架构

Firefox OS 架构主要由三层组成,分别为 Gonk、Gecko、Gaia,其组成关系如下图所示

开发

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 技术已经在现代的浏览器中久经考验与广泛使用,其应用开发与测试甚至可以直接在桌面浏览器中进行。

4.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 的差别所在。

4.3 针对 Firefox OS 本身的开发

如果想参与到 Firefox OS 本身的开发,或许是一个挑战的工作,因为它本身就充满挑战,再加上对 Android 系统的一点理解,外加上对浏览器引擎的一些了解,特别是对 Gecko 引擎的理解,则会比较轻松地介入到其中。因为它们毕竟是开源项目。一切可以从头开始,心动了吗,赶快行动吧。

4.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,愿意的话可以与作者进行探讨交流。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}