聊一聊华为新发布的鸿蒙 OS
在 HDC 2019 上余承东正式发布了华为的鸿蒙系统(英文名 HarmonyOS)并且宣布了开源,本想着去知乎上看一下有没有大牛的技术解读,结果发现整个鸿蒙发布相关的问题中大多数答案都在沸腾,毫无干货。
看了一圈之后,抱着一个不是很好的心情在这个问题下写了一个吐槽,没想到获得了很多赞同,说明大家对沸腾还是挺反感的。所以今天,笔者就在这边跟大家来聊点关于鸿蒙 OS 的干货。
华为的 HDC 并非是一场「新品发布会」,而是一场「开发者大会」,它和 Google 的 I/O,苹果的 WWDC,微软的 Build 一样都是面向开发者召开的, 其中主题演讲的受众面会更广一些,在主题演讲上各家也会放出自家的一些新鲜的技术产物,华为的 HDC 也是如此。
但是本质上 HDC 还是一场开发者大会,所以我们更多地还是要结合技术去谈内容,而不是看完发布会就沸腾,高呼「华为牛逼」。
在发布会上,华为实际只用了很短的一段时间来介绍鸿蒙 OS,相较于整个主题演讲数小时的时长来说只是冰山一角。
华为给鸿蒙 OS 的定义是「基于微内核的全场景分布式 OS」,在大会上华为也提到鸿蒙 OS 将会在未来开源,这或许和华为想要借开源来加速鸿蒙 OS 生态建设以及现有鸿蒙 OS 有集成 Linux 内核有关。
现阶段华为对鸿蒙 OS 的定位非常清晰,这个操作系统的架构是「微内核」,其次这个操作系统在应用上是「全场景」的,由于它能够用于很多设备,所以这个操作系统是「分布式」的。一上来,华为就抛出了 3 个名词,看得普通看客是云里雾里。
鸿蒙 OS 的微内核架构是非常值得一说的东西,目前全球市场仍然是宏内核的天下,其中 Linux、Unix 就是典型的宏内核 OS,Windows 的 Windows NT 最初有打算设计成一个微内核 OS,但是在微软这么多年来不断的更新、修补之后 Windows NT 也变得很庞大,已经脱离了微内核的范畴(例如据说他们把 GUI 方面的实现也放到了内核里),苹果的 OS 号称是微内核但实际争议还是很大,和 Windows NT 类似,这两个系统内核更倾向于是「混合内核」。
微内核这个技术由于在很多年前被业内普遍不看好,加上 Unix、Linux 等宏内核操作系统的成功而一度未能发展起来,直到物联网成为科技的热门发展趋势之后,微内核才逐渐被科技行业的头部公司重视起来。例如 Google 正在开发的 Fuchsia 就是一个基于 Zircon 微内核的操作系统。
比较巧合的是 Google 对 Fuchsia 的定位是「一个能够运行在 IoT 设备以及便携移动设备上的操作系统」,这一点和鸿蒙 OS 似乎有一些异曲同工。
这就要提到微内核 OS 的优势了,微内核本身代码量很少、体积很小,只拥有操作系统管理硬件资源的基础功能,其他诸如对接应用的 IPC、硬件的驱动、文件系统等等都是基于微内核上层的、运行于用户态的服务来实现的。
这使得一个微内核的操作系统中各个部分的耦合度很低,系统的可移植性很高。除此之外,由于服务运行在用户态内,不能直接接触到内核,所以系统总体的安全性更高,而且系统本身也具有更强的稳定性,因为不同的服务模块是相互独立的,某一个模块出了问题崩溃了只需要对某一个模块进行重启即可,不会引发整个系统的全面崩溃。
微内核的优势使其非常适用于多种多样的 IoT 设备、便携移动设备,这刚好符合华为期望用鸿蒙 OS 实现「万物互联」的一个目标,这也就解释了鸿蒙 OS 定义的第二个名词 —— 「全场景」。鸿蒙 OS 可以基于其强大的移植性在各种各样的设备上运行,适用于各种应用场景,且能够通过网络实现互联。
然而,微内核架构的效率问题却阻碍了微内核的发展,这也是 Windows NT、Mac OS X 最终走向混合内核这条路的一个重要原因。
微内核系统的每个服务模块是独立的,如果他们之间要相互合作,那么中间就会涉及到服务之间的通信,在微内核系统中,一个很简单的系统调用可能也会涉及到比较复杂的底层服务通信,而在宏内核中,这只是内核内部简单的函数调用而已。
如果要把微内核的效率提上去,微内核系统的架构就会变得更加复杂,而且效率也仍然不理想。
这也是为什么在大会上华为重点提到了 IPC 性能的提升,这是鸿蒙 OS 采用微内核架构必须要面对的问题,具体鸿蒙 OS 能把 IPC 性能提升到什么程度还不是很好评估,但是从上海交大陈海波教授的团队加入华为来看,鸿蒙 OS 在 IPC 性能的提升上确实能有两把刷子。
这个团队有两个独有的提升 IPC 性能的方法,一个是 XPC,另一个是 SkyBridge,具体有相关的论文可查。
其中 SkyBridge 就能够对微内核的性能起到一个明显的提升作用,上图的文字截取自相关论文。
「微内核」架构除了内核体积小、精简、可移植性高外还有其他的优势,例如微内核的形式化验证、实时性、安全性等,其中内核的形式化验证是一个。
目前的鸿蒙 OS 并非是一个「纯粹的微内核系统」,因为鸿蒙 OS 的底层拥有 3 个不同的内核,分别是 Linux 内核、鸿蒙微内核以及 LiteOS,其中 LiteOS 是华为面向物联网设备打造的一个低功耗、超轻量的操作系统。
显然,一个操作系统内有三个内核是非常不合理的事情,这也是为什么在结构图中华为重点提到未来鸿蒙 OS 只有鸿蒙微内核。至于为什么现在一个 OS 的基础服务要对接三个不一样的内核,笔者个人认为应该是鸿蒙 OS 的内核现在本身还不够成熟,还处于一个较早期的架构阶段,所以用于实际产品上内核还是要用 Linux 或者是 LiteOS。
从后续 LiteOS 的演讲来看,未来 LiteOS 会合并到鸿蒙微内核内,两个 OS 之间的内核拉通,而 Linux 内核本身是一个宏内核,如果鸿蒙 OS 进展顺利,它后续肯定不会在被鸿蒙 OS 囊括在内。
基于华为的 RoadMap,我们可以看到现有的、实装在产品上的鸿蒙 OS 1.0 是「基于开源框架,关键模块自研」的操作系统,所以它大概率是基于 Linux 魔改而来的。
而鸿蒙 OS 2.0 才会实现整个内核的自研和应用,也就是上面结构图中底层只有鸿蒙微内核这一个内核的鸿蒙 OS。到了鸿蒙 OS 3.0,华为才会开始做高性能 IPC,也就是上文我们提到的内容。
这个 RoadMap 表明华为在今年 HDC 上公开的内容更多还是画饼,实际上现在鸿蒙 OS 仍然一个是比较早期的阶段。值得关注的是华为在 RoadMap 上还是很克制的,他们并没有提到鸿蒙 OS 会用在手机上,虽然余承东说如果需要在手机上启用,他们随时都可以启用,但是实际上鸿蒙 OS 如果真的到了 2.0 去掉了 Linux 内核,那么它用在手机上可能是灾难性的,因为抛弃掉 Linux 内核之后,鸿蒙 OS 将难以实现对 Android 生态的兼容。
华为自己也清晰地意识到了「生态」这个问题,所以他们表示只要 Android 能用,那么手机肯定是优先用 Android 的。
在鸿蒙 OS 的结构图上我们能注意到一个比较有意思的东西,它叫「分布式软总线」。这就来到了华为对鸿蒙 OS 定义的第三个名词,「分布式」。
这一个部分其实很有意思,但是很遗憾的是华为并没有在大会上讲好这一部分,给出的细节也很有限。
华为这里用「分布式」这个词或许有一些不太恰当,因为分布式指的是某一组设备对外呈现的是「统一的整体」,这组设备拥有一个全局的方法来管理资源,设备与设备之间过网络实现信息交换。
在实际应用中,就是一个总体的系统拆分成不同的子系统(或是一个业务拆分成不同的子业务),不同的子系统部署在分散的服务器上,这些子系统之间能够通过网络基于某种方式交换数据。
例如上图就是一个很简单的分布式系统,对于浏览器来说,他们看到的都是同样的网页,但实际上这个网页服务背后是负载均衡、缓存、多个 Web 服务器组成,这些服务都分散在不同的设备上。
这也就相当于一个应用被拆分成了多个模块放在多个设备上来部署运行,不同的模块负责不同的功能,这是「分布式」的概念。
华为在鸿蒙 OS 中用「分布式」这个词不当的地方在于,鸿蒙 OS 本身是完整的,它并没有某些模块拆分出去在别的设备运行,而对于用户来说这个操作系统还是一个统一的整体这样的情况存在。
相较而言,这里的「分布式」替换为「设备互联」这一个概念更为准确。之所以成为分布式,主要是因为鸿蒙 OS 的设备 A 可以基于网络连到设备 B,通过软总线将这个设备 B 的某一部分虚拟成设备 A 自己的,对外看起来好似 A 和 B 是一个一体的、完整的设备,但是实际上 A 和 B 两个独立的设备,亦或是连接到一起的功能实际上是运行在两个不同的设备上。
这一段话在理解上可能会有点困难,举个例子。比如说打视频电话,我用手机拨打电话,但是使用电视的摄像头来采集画面,这个操作中手机和摄像头就连接到了一起,看似手机和电视的摄像头是一起的,但是实际上这属于两个不同的设备。
这就是鸿蒙 OS 中「分布式」的概念,即把别的设备上的东西当成自己的来用,我在一个设备上可以接触或使用到网络内其他设备的众多功能。
这个技术和「分布式」概念类似的地方在于,在软总线下,某一网络内所有的硬件资源会汇聚成一个虚拟的资源池供上层的应用使用,对外(上层应用)来看这个虚拟的硬件资源池就是一个整体,类似于一个虚拟的、完整的设备,应用则运行在这个虚拟的设备上。
应用调用这些虚拟硬件资源的时候,软总线实际会根据某一策略在调用位于不同设备上的不同硬件资源,实现各个终端之间的所谓「互助共享」。
这和「分布式」的概念是类似的,但是二者还是有明显差别,因为这明显不是「整体拆分为部分」,而是「部分组成虚拟整体」,所以套「分布式」这个概念笔者个人认为还是略有牵强。
但总的来说,这个分布式软总线是鸿蒙 OS 最有意思的地方之一,只是很遗憾华为公开的技术细节还是太少。
关于分布式软总线,笔者很在意的一个细节是华为有提到原本的网络协议栈被华为缩减为了一层,华为的极简协议中他们甚至把网络通信基本的 TCP/UDP 以及 IP 都给压缩掉了,这确实让人觉得很神奇。
由于这个协议是分布式软总线中的重要一环,所以它应该会随着鸿蒙 OS 一起开源,届时我们就能够看到华为到底在网络通信上做了什么样的创新。
在结构图中还有另一个值得注意的点 —— 多 Runtime。这里我们注意到方舟编译器本身确实是有一套 Runtime 的,这说明方舟编译器编译出来的东西必须要配套 Runtime 才能运行,同时这也说明鸿蒙 OS 上的应用生态和方舟编译器之间会有很大的关联,方舟编译器是一步非常重要的棋。
除此之外,还有一套 Runtime 是「Web」,这也是一个很值得关注的点。Web 本身就有跨平台的特性,现在也被广为用来开发各种业务逻辑不是很复杂、性能要求不是很高的跨平台应用。
Web 相关 Runtime 的加入在笔者看来可以给鸿蒙 OS 的发展带来更多的可能,例如基于这一套 Runtime 华为甚至可以基于鸿蒙微内核直接打造一个上层界面、应用都完全基于 Web 的云操作系统。
总体来看,HDC 上鸿蒙 OS 部分的信息量很足,但是感觉画饼居多,干货居少。可以确定的是鸿蒙 OS 目前还只是一个相对早期的阶段,很多东西还有待华为后续推进开发。
作为一个自主的 OS,鸿蒙 OS 的具有很好的发展前景,国家也肯定十分支持华为推动鸿蒙 OS 的研发。对华为来说,他们现阶段要面对的最大问题就是生态,虽然鸿蒙 OS 决定开源,但是开源是否能够让这个 OS 的生态蓬勃发展还不好说。
对于我们这些消费者来说,我们更需要关心的是鸿蒙 OS 是否能够迈出华为硬件的圈子,如果鸿蒙 OS 只是一个限定在华为硬件圈内的操作系统,那么它注定会和苹果的操作系统一样很难走进千家万户,当然,这并不是很影响鸿蒙 OS 做大做强罢了。