在去年的8月份,华为PPT发布了鸿蒙操作系统,我根据华为分享的为数不多的几页PPT,写下了这篇文章:
在2020年的9月,华为发布了鸿蒙2.0的同时,终于开始开源了一部分代码。
在本文中,我将按照去年的脉络,对去年我的猜测做进一步的验证,并针对华为开源的代码进行初步的分析:
如何获得鸿蒙OS的源代码?
鸿蒙的开源代码均托管在OpenHarmony的Gitee账户上,大家可以在如下地址进行访问:
官方推荐的代码获取方式是直接下载已经打包好的源代码包;不过经过我的观察,鸿蒙跟Android一样,采用了repo来做多repo的代码组织,如果有Android开发环境的朋友,可以直接通过repo来获取最新的代码:
mkdir openharmony
cd openharmony
repo init -u https://openharmony.gitee.com/openharmony/manifest -b OpenHarmony-1.0
repo sync分布式软总线
在去年的分析中,我猜测分布式软总线中的极简协议是一台替代TCP/IP或者UDP/IP的三层协议。而所谓的应用框架指的是主要是在此基础上提供的一台SDK,用于局域网内的自发现、消息的单播、多播、广播。
随着代码的开放,我们可以从这里看到,所谓的分布式软总线,就是在标准的COAP协议[1](一种针对嵌入式设备的应用层(七层)协议)之上实现了一些子协议,并在各个性能不同的计算平台上提供了相应的SDK(softbuskit和softbus_lite)。
所以基本与我的猜测一致(当然我没想到它只是个7层协议),不过我看不出来这个方案和Apple及Google使用的mDNS + DNS SD(aka Apple Bonjour)有什么显著的优势。毕竟,就算是嵌入式设备使用的TCPIP协议栈LwIP中,都已经内置了这两者的支持。
调度引擎
在华为开源的代码里面,针对两种不同级别的处理器提供了两个内核,分别是kernel_liteos_a和kernel_liteos_m,按照官方文档[2],它们分别针对的是ARM Cortex A系列处理器内核(通常用于AP[3],也就是手机、平板、电视机等的主处理器),以及ARM Cortex M系列处理器内核(通常用于MCU,也就是一些IoT设备的微控制器,以及AP中的Sensor Hub)。
这两者最本质的差别有两个,其一是内存容量的差别,使用Cortex A系列内核的处理器,通常具有256MB以上的内容(对于目前的旗舰手机,甚至会多达12GB);而Cortex M系列内核的处理器,通常只有几十到几百KB的内存。
其二是,Cortex A系列内核的处理器,通常具有MMU,而Cortex M系列内核的处理器,通常只有MPU;后者不具备内存虚拟化的能力。所以,这个限制对于内核的内存子系统的设计,以及进程/线程子系统的设计的影响是巨大的;让两者使用完全相同的code base是不经济的,所以华为选择了直接使用两个不同的repo来存放他们的代码。
这也可以直接从代码的结构中得到印证。比如liteos_m的kernel/base中,缺少vm目录。
架构图
在之前的文章中,我分析过鸿蒙1.0的架构。基本上可以认为鸿蒙1.0只是AOSP改名字而已,底层运行的或是Linux Kernel。
从这次鸿蒙开源出来的代码中,可以看到专门针对Cortex A系列的内核liteos_a。这说明华为正在走向原本ppt中所描述的鸿蒙2.0的蓝图,即把底层的内核换成华为自个的liteos的微内核。
对于这个技术选择,我认为需要辩证的看:
- 从技术上说,这确实将整个操作系统的核心换成了完全自主知识产权的内核;
- 从兼容性上来说,大家应该清楚,大量的App并不是单纯的依赖于Android的Java层框架,而是深度使用了JNI和Android NDK来提高性能,访问Java API无法访问的东西等等。而这些对于ABI的兼容性有非常高的要求,特别是libc的ABI兼容性以及syscall的ABI兼容性。(在Fuchsia中,解决这个问题的方案是,直接开了个虚拟机运行Android内核,orz)。
所以这个技术选择最终会导致怎样的结果,我们还需要拭目以待。
更多?
我也希望能够跟大家聊更多,但是就像华为在发布会上自个说的,目前开源的部分是针对内存128K~128M的设备的。它们主要是嵌入式的IoT设备、智能音箱、WiFi摄像头之类的东西。而针对更大内存容量的设备(也就是电视机、平板、手机等)的Harmony OS,预期是在明年4月开源。
所以目前能跟大家聊的内容是非常有限的,毕竟目前开源的部分,连OpenGL ES都不支持,更不用说Vulkan了。
这个进度实际上是要落后于去年PPT宣称的进度的(应该说是远远落后),所以跟全网的“欢呼雀跃”相比,我更多的是担忧。
总结
余总是个营销的高手,把一些很基本的技术,稍加包装就变成了“独家”,“领先”的“黑科技”。坦白的说,从技术视角是有一些言过其实的。
但反观整个开源出来的项目代码,从设计、到实现、到代码组织可以看到是非常扎实的一台项目。华为确实投入了很大的人力物力来做这件事情。可以看到团队的专业、野心,但一台操作系统的开发需要投入的资源和时间实在不是一朝一夕一家公司能够做好的,我们应该更有耐心。毕竟如Google这样强大的公司,在Fuchsia上投入了数百名顶尖的工程师,做到目前离第一台正式版本发布还有很远的距离。
后记
很多人,包括很多知友在分析了华为发布出来的应用开发环境,以及模拟器之后,发现了诸多Android的痕迹,就立马高潮了,说明明就是Android换皮,装什么国产OS。
但是从商业角度来说,这很可能是唯一的路径:其一是,如此规模的基础库,全部从头开发一遍的开销是任何一家企业不可接受的,就算让Google自个再来一次也是如此;其二是,当今既有的App对于这些接口和基础库的行为,是有非常强的依赖的(所以每次iOS和Android升级,都有一堆的App要重新做适配,发新版本),保证行为一致的最明智的做法就是直接使用AOSP的实现。
对于API重命名这件事情(比如把原本的android.*开头的包改成harmony.*)这件事情,我虽不是非常认同,但也明白其中可能存在的法律风险(可以看Oracle告Google侵犯Java API的版权)。
<hr/>一家之言,欢迎在评论中一起讨论。
参考
- ^COAP协议 https://en.wikipedia.org/wiki/Constrained_Application_Protocol
- ^内核子系统 https://gitee.com/openharmony/docs/blob/master/readme/%E5%86%85%E6%A0%B8%E5%AD%90%E7%B3%BB%E7%BB%9FREADME.md
- ^Application Processor
|