linux的创始人Linus在2000年8月25日的一封电子邮件中写下了这句话:“空谈是廉价的,给我看看代码。”“我没打算给你看代码。”6月2日,鸿蒙系统2.0全尺寸代码灰度测试版正式开源。
与1.0版本相比,最大的变化是linux代码的开源。增加了22个子系统,以支持内存大于128MB的屏幕设备的开发。如果你看看代码,linux4.19内核被添加到内核中。prebulits中已经加入了AOSP的支持代码,你甚至可以在APEX中找到android运行时调试的相关文件。看到这里,我估计很多人都会热血沸腾。鸿蒙系统和安卓有什么关系?鸿蒙系统能离开安卓吗?鸿蒙系统有什么大动作吗?今天老王再来分析一下什么是鸿蒙系统?

第一个问题:鸿蒙系统和安卓有什么区别?
首先,安卓是什么?根据Android开发者平台的官方定义:Android是基于linux的开源软件站,是为各种设备和机型打造的。一定要记住这句话,Android是基于Linux的开源软件站!
整个Android平台分为五层,最底层的linux内核负责操作系统最基本的功能,比如现成的调度、内存管理等。提供硬件抽象层HAL,WiFi、GPS、蓝牙等硬件模块都属于HAL的管辖范围。
为什么是哈尔?
同样的wifi模块,高通和联发科的底层设计肯定是不一样的。哈尔:不行,开发者必须写两套代码来分别适应高通和联发科的硬件。有了HAL,开发者不用关心硬件设备的差异,只需要按照HAL提供的标准接口访问硬件即可。
HAL称为Android runtime和Native c/c++ Runtime,为程序运行提供必要的环境。例如,当许多程序运行时,它们必须将内容输出到屏幕上。没有必要每个开发者都重写这部分代码。系统将直接在运行时和运行时库中提供。比如Android运行时提供JIT即时编译,原生c/c++运行时提供WebKit OpenGL等框架。
下一级叫做嘉八Java API框架,提供创建一个Android程序所需的子模块,直接面向开发者。开发者可以调用API来构建自己的应用。大家平时写代码时调用的函数,其实就是调用API。
最后,顶层被称为系统应用层,它直接与用户打交道。我们使用的浏览器、短信、日历等软件都属于这一层。
现在我们来来回回看那句话:“Android是基于Linux的开源软件站”,那么Android是什么?无非就是HAL,Android运行时,Java,API框架,系统应用。内核中也有binder机制,这是Android特有的,这里就不展开了。
原生C/C++运行时不是Android中的框架,而是一些计算机领域的基础框架,不具备Android的特性。当我们有了Android的基本概念后,让我们来了解一下鸿蒙系统的逐层结构。
如果鸿蒙系统是安卓的外壳,最简单的办法就是在Java API框架层再和系统应用打包,改一下关键词,把安卓改成鸿蒙系统。但是鸿蒙系统是怎么做到的呢?我们一层一层的从下往上看。
对于手机和其他屏幕内存大于128MB的设备,鸿蒙系统和Android一样,使用Linux内核。对于128MB以下内存的物联网设备,使用liteos作为内核,类似于Android的HAL。鸿蒙系统还提供了一套名为HDF的硬件抽象框架,是鸿蒙系统OS硬件生态开放的基础,提供了统一的外设访问能力和驱动开发管理框架。
但是,注意,HDF不是哈尔的袖子,也不能套住,而是重新设计的。如果下载源代码,可以在drivers/adapter/uhdf2中看到相关代码,也可以看到hdf已经在处理osal目录中的Posix API,已经走得很远了。将HDF的代码与Android的libhardware代码进行比较,有许多代码服务于低功耗物联网设备领域。
再往上一层是系统服务层,为应用程序的运行提供各种服务,比如多设备调度定位、生物识别等。这一层非常重要,因为它可以表征这个操作系统。在我们谈论更多之前,让我们分析一下鸿蒙系统系统服务层的组件。鸿蒙2.0的更新包反编译后,在system/lib64目录下可以看到系统运行时需要加载的动态库,共有1161个动态链接文件。
这部分DLL文件可以看作是运行时状态,1161 DLL文件由三部分组成:鸿蒙系统和Android第三方库文件。我把导出的符号和文件名的关键词进行了匹配,其中第三方库中有123个文件,既不属于安卓,也不属于鸿蒙系统。
鸿蒙系统有445个动态链接库文件。这445个文件有两个关键特征,要么以。z.so或显示华为格式的出口符号。那么剩下的593个DLL文件就是纯Android了。然而,在鸿蒙系统的445个DLL文件中,有274个仍然包含Android出口符号。大部分是adapter适配器,用来和Android应用组件交互。毕竟,鸿蒙系统不可能兼容Android应用程序而不与Android交互。
通过这个分析,我们大概可以重建鸿蒙系统OS服务层的框架,除了公开的第三方库,一半是Android,一半是华为自己写的鸿蒙系统。从动态链接库的体积上看,鸿蒙系统有一定的规模,但为了无缝兼容Android应用,它仍然保留了Android运行时,你可以理解为AOSP。
说完服务层,再来说说Java API框架层。实际上,鸿蒙系统有自己的Java API框架,但基本上都继承了Android。所有Android开发者几乎可以无缝地开发新的鸿蒙系统应用。这也是系统架构中前端和后端分离的思想。前端开发人员不需要考虑底层的变化,可以继续使用相同的API进行开发。当x86迁移到ARM时,苹果采用了类似的想法。

鸿蒙系统还在liteOS内核中针对低功耗设备做了很多修改,包括中断控制器gic、内存管理等等。
至此,鸿蒙系统和安卓的区别基本明确。接下来,我们来说说案情。
1000个人有1000种不同的封面。对于普通用户来说,之前的所有应用都可以完美运行。从体验上来看,似乎和之前的安卓没什么区别,一般用户很难感知它是否有鞘。对于面向终端用户的Android开发者来说,Java API基本和以前一样,很容易开发鸿蒙系统应用,看起来就像一个外壳。但是对于硬件适配、底层优化、低功耗器件的开发者来说,鸿蒙系统还是很不一样的,需要特别的适配。现在的鸿蒙系统就像一个得了80分的孩子。如果你用100分的观点去问他,他会错误百出。就算他用了一行安卓代码,也叫套件。但是如果你用60分的眼光看他,那么你会觉得他做得很好。我自己算出了相当多的原生代码,我是国内唯一一个80分的孩子。关于嵌套的争议完全取决于你个人对嵌套的定义,没有客观的指标来衡量。这个问题就失去了可证伪性,当一个问题失去了可证伪性,就不再是科学了。任何人对他的反驳都只是为了自己心中的一个信念,没必要讨论要不要出鞘的问题。
现在说第二个问题:为什么不抛弃Android和linx内核?答案很明确,因为时机还不够成熟。这个机会分为内部和外部两部分。
固有的时机是我们的技术还不够成熟。操作系统不同于其他应用软件,它决定着很多设备的生死。操作系统的安全甚至关系到一个社会系统的稳定。在信息安全中,有一种漏洞叫零日漏洞,是指被发现后立即被恶意利用的安全漏洞。如果一个操作系统存在大量的零日漏洞,那是非常危险的。攻击者甚至可以直接从用户态进入内核态攻击进程。这种对核心基础设施领域的攻击是一件了不起的事情。而且操作系统的安全性需要时间来检验。
Linux内核自1991年发布以来,经历了30年的风风雨雨。它的安全性和可靠性经过了时间的考验,现在有开源协议的保护。重写一个操作系统内核并不是很复杂,一个成绩好的大四学生能省一个就像猫画虎一样。但是重新编写一个比linux更稳定可靠的操作系统内核是非常困难的,经济成本和时间成本非常高。
今年6月,如果华为为了一个完全独立的品牌,将鸿蒙系统设备的核心全部换成新的,那将是一个不成熟的决定。
第二,外部时机。美国政府还没有启动开源协议,使用Android和Linux还是合法的。鸿蒙系统本身更像是美国政府的Plan B,而更换内核,彻底抛弃Android就是这个PlanB的PlanB,2020年,这个世界上发生了太多不可思议的事情。关键时刻,一纸开源协议不能成为华为的保护伞,这也是我在这里不太提aosp的原因。完全依赖开源协议作为公司发展的保护伞是一个危险的决定。
在孩子的世界里,只有价格和收益,而在成人的世界里,只有价格和收益。目前兼容Android,继续使用linux内核,是最便宜最赚钱的选择。
第三个问题,万物互联的下一个入口在哪里?发布会上我们一直在说万物互联,但为什么总给人一种听过的感觉?因为在我们现有的经验中,万物互联等于智能家居,我们关注的还是那些现有的屏幕。鸿蒙系统真正关注的是那些尚不存在的屏幕。就像iOS刚和iphone一起发布的时候,我们只能想象一个按键手机运行iOS的效果,甚至抱怨这个系统不一定好用。
万物互联的下一个入口一定会有智能驾驶舱,这也将是鸿蒙系统的下一个发力点。随着新能源汽车的普及,各种智能汽车进入千家万户。但是现在的汽车更像是一个大的车载蓝牙平板,没有融入手机生态,不好用,时间长了还是卡。现在的车载屏幕越来越多,越来越大。它们支持手势、肢体、智能、语音等不同的交互模式。如何高效利用这些屏幕,在保证安全的同时提供更好的乘坐体验,是下一代智能汽车,也是智能驾驶舱需要思考的问题。
华为去年10月在北京车展展出了智能驾驶舱的相关概念产品,今年4月上海车展又举办了一场鸿蒙系统OS发布会。
鸿蒙系统可以解决汽车和机器两个问题:第一,生态不统一。第二硬件很难更新。
目前除了苹果的CarPlay,大部分汽车都要通过蓝牙配对才能在手机上播放音乐,比家里的智能音箱还要差。此外,不同品牌的汽车有不同的应用程序,这与鸿蒙系统在发布会上提到的智能家居相同。通过鸿蒙系统,你正在听的音乐和正在看的电影可以快速扩展到汽车屏幕上,甚至你玩游戏的画面也可以投影到汽车屏幕上,只需用手机作为手柄。这套技术应用场景不仅仅是针对自己的车,也适用于滴滴打车、嘀嘀打车等第三方车。当你准备去机场时,你叫一辆快车。上车后,你可以把手机里的电影投射到后座的屏幕上。途中在大屏幕上看电影是不是很甜蜜?这就是生态统一的优势。毕竟汽车没有手机可以改考勤。买车五年,开起来没问题,但是车可以卡到你怀疑自己的人生。最后只能沦落到空调节遥控器。
鸿蒙系统的加入,将计算能力从车机转移到手机上,可以显著降低车机本身的成本,更适合大范围推广。另一方面,换个新的更容易,不用担心卡顿和数据丢失,让汽车的硬件在整个生命周期内不断更新。
未来可以猜测,大部分的汽车和机器都使用鸿蒙系统,它们的通信协议是一致的,因此可以互相通信。这对自动驾驶和智慧城市的发展很有帮助。就自动驾驶而言,依靠计算机视觉找到你面前的车辆,不如直接通过网络告诉你准确的地理坐标来得靠谱。
最后,什么是鸿蒙系统?按照华为自己的定义,鸿蒙系统是面向未来和所有场景的分布式操作系统,也就是鸿蒙系统是一个操作系统。

什么是操作系统?我把维基百科的定义放在这里。说人类语言,就是向下驱动硬件,向上提供应用,是人和计算机硬件之间的桥梁。这样,鸿蒙系统确实是一个操作系统。其实现在的操作系统已经不单纯是一个软件系统了,它更像是一个品牌。
Windows也经历了从9x到NT内核的变化过程。MacOS9在WWDC2002上被乔布斯送进了棺材,因为它糟糕的设计和疲软的性能,迎来了Mac OS X的时代,在2008年Android发布的时候,并不被外界看好,甚至谷歌一度表示要放弃Android。如果把1956年诞生的通用-NAA IO作为历史上第一个操作系统,五十年间诞生了不下100个应用于不同场景的操作系统。最后活到2021年,能真正进入大众视野的,才是英雄。
工业操作系统几乎是我们能设计的最复杂的软件。任何工业操作系统的发展都是曲折的,需要大量用户的支持,数百亿的资源,无数人力物力的整合。能否真正面向未来,面向全局,取决于鸿蒙系统的后续努力。我希望鸿蒙系统有一个光明的未来。
——————
原文:老王和鸿蒙系统hms开发商高级认证持有者!提供鸿蒙系统关键技术分析、软件开发相关的技术干货~【微信官方账号:鸿蒙系统开发者老王】


