鸿蒙OS 2.0真的来了 国产操作系统就此崛起吗

鸿蒙 OS 1.0 出来的时候,笔者对它是不怎么乐观,毕竟操作系统这个东西要完全从 0 开始打造,做到真正的独立自主,是一项非常耗时间、耗人力、耗资金的浩大工程。

目前市面上很多国产系统本质上仍然只是 Linux 的某一种发行版罢了,尚还没有任何一个大规模应用的国产操作系统能够做到从内核这一层开始就完全自己造。

现有的 Linux、Windows 等知名的操作系统,其内核和整个上层的其他组件都是经历了漫长的时间、悠久的技术沉淀才发展到了现在我们所见的程度,纵然当下科技业界的技术实力以不同以往,有别人已经做好的技术成果可以参考,但这并不能改变研发操作系统这件事的难度,它仍然难度登天。

而且华为想要达到的目标还很宏大,他们希望鸿蒙 OS 能够直接和 Google 每年都在大力投入开发的 Android 直接抗衡,这进一步增大了系统本身的研发难度。

毕竟要知道,用于物联网设备的操作系统和用于手机的操作系统是两个完全不一样的东西,腾讯其实也有自己的操作系统 —— TencentOS tiny,这个操作系统是完全给物联网设备使用的,及其精简,对硬件的要求也极低,非常符合当下物联网设备的普遍硬件情况。
但它没办法用在手机上,同样是操作系统,它和 Android、Windows 产品完全是不一样的东西。同样是来自 ARM 的芯片,用途不同,决定了操作系统本身在内核设计、架构设计上的不同,物联网设备要实现的是对计算力要求极低的建议功能,追求的是极低的硬件占用和功耗。
这和手机的用途以及手机操作系统要实现的功能完全是不一样的方向,对于鸿蒙 OS 的研发人员来说,这任务,可不是一般的重。
起初鸿蒙 OS 只是一个概念,只是一个针对于众多物联网设备打造出来的操作系统。华为曾经也多次表示,没有确定鸿蒙 OS 最终会不会用在手机,它更有可能只是一个手表、电视之类设备用的系统。
然而,在各种阴差阳错下,华为内部最终还是决定要把这个东西做到手机上。那么最终的结果无非就是两种可能。

第一是华为真的自己炉灶,憋个三五年,完全从头打造一个操作系统,并不断打磨它的体验,然后再大规模砸钱砸出一个应用生态,成为真正的国产之光。
第二便是,借用各类现有的技术成果,把套壳美其名曰兼容,把自己的技术成果和现有的各种技术成果进行缝合,最后组装出一个能够被外界大众认可,同时又能够较快上线的产品。
华为之前为了借势炒作,是直接在 Android 的基础上套了一个壳,做出来了几款所谓的鸿蒙 OS产品,让人大失所望,也让更多的网友开始质疑鸿蒙 OS 的未来。

近期,华为在 HDC 大会上针对鸿蒙 OS 这一块的内容又有了新的动作,它们推出了鸿蒙 OS 2.0。
这一次,华为也没有再只是单纯地谈概念、放 PPT。背后的开发者爆肝了一年,让华为在今年多少还是拿出来了一些真东西。其中包括能够开发鸿蒙 OS 应用的 IDE,和鸿蒙 OS 的第一份全量源码包。

对于去年总是喊着没有源码、没有文档、没有 IDE 的开发者们来说,这都是实实在在的真东西。为了方便开发者开发,在鸿蒙 OS 的官网上,你也可以找到引导开发者下载 IDE、构建一个基本 HelloWorld 的文档,其中还包含了一大段的实例源码。
作为一名开发者,能用的东西都有了,接下来要看的就是这个货,它到底对不对版。

很有意思的是,鸿蒙 OS 在应用开发这一侧,很多东西很有 Android 的感觉,比如说 IDE,也就是 DevEco Studio,它本质上就是基于 JetBrain 开源的 IDEA 修改的,而 Android Studio 也是基于同样的一套东西,所以你可以一眼看出来二者在 IDE 方面是相似度较高的。

这并不是一件不好的事情,毕竟最终鸿蒙 OS 要用到手机上,它不得不去考虑降低现有应用移植过来的成本。把各种东西都做得和 Android 比较贴近其实有利于开发者后续加入这个生态。
就像一个应用的窗体一样,Android 叫 Activity,而鸿蒙 OS 这边则起名为 Ability,很显然华为是在有意地从开发这一层面拉拢开发者。
在华为给出的东西里,鸿蒙 OS 的应用可以用两种不同的开发语言开发,一个是 Java,另一个是 JavaScript。JavaScript 在 App 中更多是用来写视图,华为允许用户通过类似于开发小程序的那种方式来实现视图,门槛比较低,这对后续鸿蒙 OS 的应用生态发展来说是很利好的。

当然,你也仍然可以使用 XML 去写视图层的内容,使用和 Android 开发比较接近的那一套模式。

目前来看 JavaScript 的应用还是比较局限,华为之前做的那一套 MapleJS 引擎并没有在鸿蒙 OS 中很好地体现出来。JavaScript 其实也可以做一些逻辑层面的东西,但是华为目前只把这一套用到了视图这一层中,剩下的基本还是基于 Java 去做的。
至于鸿蒙 OS 所谓的分布式概念,笔者大体从开发层面去解读了一下,其实这个东西概念比较生涩,但是技术上并不那么难理解。
华为会在系统内部起两个服务,第一个服务是轻量的 KV 数据库,多个设备之间会基于某种机制同步这个 KV 数据库中的内容,这种同步机制是可以由开发者去设定的。这其实就好比云计算的分布式数据库,概念是类似的,只不过华为实现的是轻量化的、基于局域网的、在终端设备之间实现同步的一个数据库。

另一个服务是文件系统服务,这个可以理解成是两个设备可以基于网络共享自己的某一块存储,在文件系统层同步这一块存储的元数据,但是文件本体分别是放在两个设备上的。
什么意思呢?这其实可以被看作是两个及以上的设备都各自抽出一块空间组了一个小网盘。
那么这两个服务的意义在哪呢?实际上华为去年所提到的所有设备的硬件都可以集中在一起,可以随意调用,也就是所谓的分布式软总线概念,基于这两个服务,外加一些网络通信层面的应用,就可以实现。

实际上我们并不需要直接把某一个设备的某个硬件直接通过网络暴露给其他设备,使其可以被网络内的其他设备直接使用,基于分布式的文件存储、分布式的数据库,外加一些通信,实际上我们可以安全地、有效地以一种间接的方式让某一个设备拥有直接调用网络内另一设备硬件的能力。

本质上传感器也好、计算结果也好,这一系列的东西归根结底都是「数据」,网络需要传输的也就是这么一些「数据」。从应用的角度来说,数据库 + 文件系统已经能够满足「分布式软总线」在传输数据层面的基本需要,设备并不需要把自己的所有硬件都暴露出去,对方也不需要编写特定的程序来对接。
而且在这种模式下,设备与设备之间可以不那么实时性地进行数据的通信,这对于物联网设备来说是尤为重要的,因为这在很多场景下更能够帮助物联网设备更好地控制好功耗。
不论是对于设备还是开发者来说,这一套方案通用、简单、高效,是一个不错的设计。只不过目前华为给出的只是 OS 这一层面的支持,还并没有提到上层应用具体要怎么去做,后续如果华为想进一步让开发者接纳这个概念,那么笔者认为华为应该针对这种特殊的「小分布式」概念给出一些比较完整的示例,而不是只有应用接口等难以在思维上给人起到启发作用的东西。
总体来看,这一次华为搬出来的 IDE 是可用的,虽然还有很多瑕疵和赶工痕迹,而且 DevEco Studio 本身也是基于华为现有的开发工具以及 IDEA 的开源代码修改而来的,所以这些东西目前来说算不上高质量,只能算是勉强能用。

模拟器这一块,不知道是不是因为华为不愿意放出模拟器环境,以免被外界挖掘大做文章,还是模拟器本身还不够完善,没有办法很好地在 Windows 下运行,华为采取了远程连接的形式来让开发者进行调试,而且使用还是限时的,模拟器每一次启动只能用一个小时。
虽然在云时代,这么做可以解决安装模拟器的麻烦,也可以保持模拟器的环境更干净、更稳定,但是这多少还是会给开发者带来减分的体验,毕竟远程连接对网络是有重依赖的,而且进行很多调试操作很可能也不如本地方便。

说到模拟器,我们就不得不来谈一谈这一次鸿蒙 OS 最最核心的地方 —— 系统内核。

首先华为确实是有一个自主的系统内核,不过它不是华为之前宣传的所谓鸿蒙微内核,而是华为之前很早就有做的一个适用于物联网系统的内核 —— LiteOS,在开源的内核代码包里,相关文件夹的命名也能看到liteos的字样。

说白了,华为是把之前的技术成果进行翻新升级,赶制出来了一个能够给鸿蒙 OS 使用的内核。
LiteOS 这个东西,它确实是完全自主的,而且华为很早的时候就已经放出了源代码。这一次鸿蒙 OS 放出来的新代码本质上更应该说是 LiteOS 的升级版。

目前关于内核,最大的问题在于华为并没有公开适用于手机等功能更复杂的设备(也就是华为所划分的内存大小在 4GB 以上)的内核代码,目前我们所看到的这一套 LiteOS 代码(或者说这一套代码之前的版本)其实已经跑在了很多华为已经上线的产品上。
比如说华为旗下的手表、手环,它用的实际上就是 LiteOS。很显然的是,这样的系统内核直接用到手机上是不怎么现实的,即使是靠扩增内核的功能、接口,以及对接厂商各种驱动的能力,它在功能性上也较难达到 Linux 的那种程度,毕竟 LiteOS 的内核本身就不是往那个方向去做的,它只是一个适用于物联网设备的实时系统。

所以对于鸿蒙 OS 未来彻底摆脱 Linux 这件事,笔者还是不太看好的,至少在最近几年内华为还是不能够剔除掉 Linux 内核,让鸿蒙 OS 进化到真正完全独立自主的形态,而且在应用生态这一层面,华为也必须要考虑兼容 Android这件事。
从华为现在拿出来的东西看,他们并没有做所谓的 Android 套壳,网上传出所谓 SDK 调用栈有android字样,AOSP(Android 开源项目)相关文件的出现等本质上反映的是一个「兼容层」实现。
笔者个人推测,未来鸿蒙 OS 在手机和 TV 上的实现更可能是,设备运行的东西对于用户来说还是 Android,还是 Linux,但是系统也同时运行一个 LiteOS 内核或是其他内核,亦或是一套其他的、不同于 Android 的系统实现。
在应用这一层,用户看到的东西还是 Android,但实际上在背后,华为通过制作一个特别的 APK,使其能够允许用户通过运行在表层的 Android,拉起一个 Android 之外的、但是又同样跑在 Linux 内核之上的鸿蒙应用,这样华为就可以把 Android 和鸿蒙整合在一起。毕竟别说两个环境独立的系统了,即使是两套桌面,很多消费者在体验上也是完全不能接受的。
这在某种层面上也算是套壳,毕竟华为还是要把 Android 的运行时集成进来,甚至有可能展现给用户的表层也要用到 Android(移植 EMUI 并不是小工程,而华为赶着明年上线)。不过在笔者看来,为了保证兼容性,华为这一套做法还是有合理之处。
只要华为能够兑现未来纯粹针对鸿蒙 OS 开发的应用确实可以完全可以完全弃用 Android 那一套东西,在更远的未来能够做到在华为宣称正在开发的微内核上独立运行,那么这其实并不是什么问题,相反,这还是一套非常有效且意义重大的,实现现有系统、新系统、下一代系统过渡的良好解决方案。

什么意思呢?我们都知道,应用程序最终还是运行在操作系统上的,它们基本还是要和操作系统打交道,调用的还是操作系统的那一系列接口,就像浏览器一样,不管你用的是 Vue,还是 React,页面的渲染最终绕不开浏览器。
从架构图来说,华为通过对内核、对系统级 API 进行统一抽象,让所有的应用都运行在一个抽象层上,进而开发者并不需要关心自己的应用会运行在哪一个内核上,可以使用同一套开发模式给不同的系统内核、不同的应用框架开发应用。
最终使用哪个内核,是系统根据应用的类别,根据可用的内核来决定的。至少在华为花很长时间把自己的微内核打磨好之前,在真正的智能设备上,最终运行程序的仍然还是 Linux,因而对于手机,我们需要关注的区别更多是在上层的运行时上。

从长远看来,这个设计也有利于未来华为把针对 Linux 和 RTOS 开发的应用全部迁移到鸿蒙微内核上,毕竟上层的应用代码最终都需要通过抽象层才能到最终的系统内核,华为只需要改进这个抽象层,使其契合新内核,就能实现应用的无痛迁移。当然,现有的 Android 应用是不可能无痛迁移的。

至少在笔者的认知范围内,目前笔者所看到的鸿蒙 OS 2.0 这一整套设计方案是没有什么问题的,实现上目前并不完善,但是已经华为确实把这个东西做到了基本可用,也就是能够做个 Hello World,做个 Demo 的水平。
要验证这一套东西目前的状态下能够做到能用,那还需要更多的实践案例。目前华为没有公开模拟器,能够实际运行鸿蒙的也只是针对物联网这一领域的,重头戏还是明年的上手机。
届时华为进一步开源新的内容,消费者可以看到成品,开发者可以体验整个开发链路,所有的谜题也都将揭晓。目前网友会有质疑,对各种东西很敏感也很正常,毕竟华为此前有干过坏事,而且这个东西也确实被吹捧很高,且本身也是一个在逼迫下诞生出来的东西,某种意义上也是 KPI 产物。

不过既然华为做了,那笔者还是希望他们能把这个东西做强做好,这对于每一位中国用户来说至少不是坏事。