首发于Fuchsia OS
为什么Google需要Fuchsia操作系统

为什么Google需要Fuchsia操作系统

Google正在密集开发Fuchsia操作系统。近日,Google刚刚上线了Fuchsia的开发者网站(fuchsia.dev)。这是一个非常明显的信号,谷歌要将这个全新的操作系统,从幕后带到台前了。

Google已经坐拥2个非常出名的操作系统了,Android和Chrome OS。其中的Android更是全球范围内使用最为广泛的移动操作系统。那么谷歌为何还需要开发第三个操作系统呢?

我给出的回答是:Android无法满足Google快速发展的业务的需要。

分裂的安卓生态

Tim Cook在每年的WWDC和秋季发布会上,最喜欢干的就是数落Android的碎片化。通常来说iOS的最新版本能取得70%以上的升级率,而Android只有可怜的个位数。

而生态的分裂会影响用户的体验和用户设备的安全。

Google每年都投入大量的人力、物力来开发、升级Android,以期在与iOS的竞争中取得优势(有时只是追赶)。Android每年会增加数以百计的API,但是在一个分裂的生态系统,开发者只能面向2、3年前的API版本进行开发。(根据statcounter的数据,截至19年6月为止,有大约81.5%的iOS设备运行的是iOS 12,而同时,Android 9 (Pie)只有18.6%的比例。如果想要支持85%的设备,能使用的API就只能是5年前的Android 5.1 (Lollipop)了。这就导致了Android生态中的App无法从一年一次的OS升级中获益。

此外,所有的软件都会存在Bug,Android也是一样。然而,Android操作系统是一体式的设计。你要不就是更新整个操作系统固件,要不就无法获得任何更新。所以,设备的制造商(比如小米)必须通过修改AOSP(Android Open-Source Project)的代码,才能发布他们修改过的OS版本。如果在Linux Kernel(Android基于Linux开发,并做了大量修改)中发现了安全漏洞(17年发现了454个,18年发现了176个),这个补丁需要先应用于Linux Kernel,然后再合并到Android的代码树中,然后SoC厂商(比如高通)再将代码合并到BSP中,然后设备制造商才能合并补丁到他们的Android发行版,最后再推送到终端用户手中。在这个链条上的每个玩家都需要经历开发、测试和发布流程。所以通常情况下,我们需要6~24个月才能收到新发现的漏洞的补丁,有时甚至根本收不到补丁。

安卓无法解决问题

在安卓的生态系统中,有一个很明显的链条:

Android生态链条

所以,如果Google想要升级终端客户的设备,他们只能祈祷在中间的SoC和设备制造商能够主动合并他的变更,并进行新的操作系统发布。

所以,Google随着版本的更迭,将越来越多的服务从AOSP中,移动到了GMS(Google Mobile Service)中,以期达到让Android更加模块化,以及更加容易升级。这样,Google可以跳过中间两级,直接给终端用户推送更新:

Google跳过SoC和设备制造商

但这个路径无法更新内核、驱动和底层的系统服务。

就如上文所言,Android是基于Linux内核开发的。而Linux内核(以及Linux社区)拒绝提供一个稳定的设备驱动二进制接口。

所以大家只要将代码整合到Linux Kernel的代码树,并将它合并到主线Linux内核中(有一些厂商是这么做的),也可能他们只是复制了一份Linux Kernel,然后修改并发布,并不向上游合并(大多数厂商其实是这么干的)。

通过复制与修改的方式使用Linux Kernel

由于设备驱动是内核的一部分,所以Google无法采用GMS相同的方式来更新。

Fuchsia的解决方案

Google决心从Fuchsia设计的源头上来避免Android的这些设计缺陷。

模块化设计。Fuchsia是完全模块化且层级化设计的。

你可以想象Fuchsia操作系统是一个蛋糕,由四层组成:

Fuchsia的分层蛋糕

Zircon内核是一个微内核。所有的设备驱动并不在内核内,而是在内核外作为独立的进程存在。设备驱动和内核之间通过IPC(inter-process call,一种消息通讯机制)来互相协作。而设备驱动的界面是精心设计过的、稳定的、并且是通过一种平台、语言无关的描述语言banjo描述的。因此,SoC 制造商可以独立基于稳定的接口开发和发布设备驱动,而且驱动可以跨不同的OS或内核版本使用。

同时,Google引入一个新的多仓库源代码管理工具jiri。它与Android中使用的repo之间最大的区别是,它允许引用另一个manifest文件作为基础,并替换其中的部分组件。这样SoC和设备制造商就无需复制上游的源代码,只需引用上游的代码即可。(事实上,在Fuchsia中,topaz层引用了peridot层,peridot 层引用了garnet层,garnet层又引用了zircon)。

基于引用的Fuchsia生态

这样就使得这个依赖的链条得到了解耦。所有的开发和更新可以并行进行:

产业链上下游各自向终端用户推送更新

超越Android

Fuchsia的模块化设计并不仅仅用于为手机创建定制的系统镜像。Google更进一步,使得Fuchsia实现了极大的可伸缩性。分层模块化的设计使得Fuchsia可以非常方便的剪裁定制操作系统,以用于手机、平板、笔记本电脑,以及路由器、智能音箱、机器人,甚至是Google的无人驾驶汽车。

它将成为第一个AI原生(内建深度学习、语音语义、人脸识别、图像分类等人工智能算法),云原生(与各种云服务无缝集成),适用于各种设备的超级操作系统。

-

本文翻译自作者本人的Medium文章,如需转载请与我联系。

延伸阅读

编辑于 2019-07-20 17:40