当前位置:   article > 正文

鸿蒙os开源知乎,【转帖】知乎管理华为鸿蒙OS的介绍2

鸿蒙知乎

从软件工程角度来说,安卓运行时是运行在Linux内核用户空间的应用程序,而安卓软件包是运行在安卓运行时用户空间的应用程序,关系类似于俄罗斯套娃(Linux中套入了安卓运行时,然后安卓运行时里面再套入安卓APP)。

不过,在套娃的里层不变的情况下,外层是可以换的,只要找到大小合适的即可。操作系统也一样,把安卓运行时换成与安卓兼容的运行时(比如黑莓曾经实现过的运行时),安卓应用依然可以运行,只是运行速度可能有变化罢了。

此外,还可以用一个大盒子把几个不同的套娃装在一起。对于软件工程来说,就是在同一系统内实现多套不同的软件运行时,这样就可以运行来自不同系统的软件了。目前最著名的例子,就是在Windows中可以运行Linux原生软件的WSL了(Windows Subsystem of Linux,适用于Windows的Linux子系统。备注:这里说的是WSL1,不是WSL2。WSL2使用虚拟机运行原生Linux内核)。不过Windows显然不是Linux,并且WSL甚至没有使用Linux的代码,微软开发人员只是在NT内核里实现了与Linux系统调用兼容的子系统而已。

所以,一个兼容安卓应用的系统不见得是安卓系统。

不过用于荣耀智慧屏的鸿蒙1.0系统,情况可能有所不同。华为的PPT中说鸿蒙目前的架构是这样的:

fd5a5e0dd0344813dc8aaf568f41e720.png

这个“当前”的架构图看起来很像是一种妥协,类似于自己刚开发了一个内核,但用户空间运行时还没有开发完成,于是就把其他系统的用户空间运行时拿过来用。华为发布的鸿蒙路线图也印证了这一点:

dade3c27714c7167fe3901737437672e.png

鸿蒙OS 1.0:基于开源框架,关键模块自研。

鸿蒙OS 2.0:内核及应用框架自研。

根据这个路线图,鸿蒙操作系统到2.0才算真正完成,系统底层完全由鸿蒙微内核及其外核服务接管。而在此之前,在应用于荣耀智慧屏的鸿蒙1.0系统中,安卓成分占比较高是非常有可能的。当然了,如果安卓运行时占比为100%,没有其他运行时,或者虽然有其他运行时,但是系统基础服务(比如视频播放、应用商店等)是安卓APP,则可以说鸿蒙1.0是安卓修改版。

如果上述假设不成立(比如视频播放和应用商店等系统自带应用不使用安卓运行时),则鸿蒙1.0不是安卓修改版。

————————————

顺便一提,鸿蒙OS 1.0的情况非常类似于当年的GNU/Linux操作系统。

GNU工程官方网站的《Linux和GNU系统》一文中有这样的描述:

程序员一般知道Linux是一个内核。但是他们一般也听到整个系统叫“Linux”,他们通常会设想的历史是整个系统要以内核命名。例如,许多人相信一旦Linus Torvalds完成了Linux内核,其用户就试着找一些自由软件来和内核一起工作,此时他们发现(不知道为什么)构成一个类似Unix系统的大多数必要组件已经有了。

他们的发现不是巧合——它正是还没有全部完成的GNU系统。这些已经完成的自由软件加在一起就构成了完整的系统,因为GNU工程从1984年起就在做这件事。在GNU宣言中,我们已经阐明了开发一个自由的类似Unix的系统的目标,它叫做GNU。GNU工程的初始声明也勾画了GNU系统的一些原始计划。在Linux开始时,GNU几乎已经完成。

到了90年代初期,我们曾经把除了内核以外的东西放到一起组成了一个系统。我们也在开始开发一个内核,称为GNU Hurd,运行在Mach1之上。开发这个内核比我们的预期要难得多;GNU Hurd在2001年开始可以稳定工作,但是距离能够被人们正常使用还有很长的路要走。

庆幸的是,我们不必再等Hurd了,因为有了Linux。当Linus Torvalds在1992年使Linux成了自由软件,它填补了GNU系统的一个重要空白。人们可以把Linux和GNU系统结合起来组成一个完整的自由系统——一个带有Linux的GNU系统。换句话说,就是GNU/Linux系统。

简单的描述一下这段往事:最开始,GNU工程的开发者们想打造一个完整的新操作系统,于是他们开发了编译器、运行时库,以及一些应用程序。但是,他们在开发自己的内核时遇到了困难。

与此同时,林纳斯·托瓦兹和其他一群人开发了Linux内核,但是他们缺乏用户空间运行时库、编译器和很多必要的应用程序。

于是两边的人互相发现了对方的工作成果(或者一边先发现,这不重要),把两者一组合——“简直完美”。于是,目前我们在桌面/服务器领域见到的Linux系统,就这样诞生了。不过准确的来说,它应该被称为“GNU/Linux系统”,因为它是由Linux内核与GNU运行时组合在一起形成的完整操作系统,缺一不可。

顺便一提,虽然使用Linux内核,但安卓运行时不含任何GNU成分,安卓(由于许可问题而故意)使用Bionic库为应用程序暴露Linux系统调用,而不是GNU/Linux中使用的glibc。并且安卓中也没有任何GUN项目开发的应用程序(常见的Linux命令要么被谷歌重写,要么被其他开源项目如busybox/toolbox替换)。所以安卓不是“GNU/Linux系统”,而是“安卓/Linux系统”,即由Linux内核与安卓运行时组成的操作系统。

至于鸿蒙1.0的情况,目前还不得而知。不过从华为目前给出的信息来看,他们使用了鸿蒙微内核,也使用了Linux内核,并且使用了“开源框架”。而且根据鸿蒙包含ADB功能的截图来看,鸿蒙应该支持运行安卓应用,所以应该包含安卓运行时(或者其兼容版本)。要怎么把这几部分像俄罗斯套娃一样组装起来呢?我们可以做出以下两种假设:

系统底层运行Linux内核,其上运行安卓运行时(或者其兼容版本),然后运行安卓应用。鸿蒙微内核并未直接参与APP运行,而是做为可信执行环境的操作系统存在(用于支付安全模块等)。

系统底层运行鸿蒙微内核,其上运行Linux内核,然后在Linux内核里面再运行安卓运行时(或者其兼容版本),其中可以运行安卓APP。与此同时,系统中可能还存在另一组运行时,用于运行鸿蒙原生APP。

不过仔细思考一下,假设1与华为手机上现在运行着的EMUI没有任何区别(华为表示他们在手机的可信执行环境中使用了鸿蒙微内核,用于指纹验证模块)。那么华为为什么还要把现在发布的系统叫做“鸿蒙OS”,而不是直接称其为“EMUI TV版”呢?

至于假设2,从技术上来说是完全可行的。在不使用虚拟化的情况下,在另一个操作系统内核之上运行Linux内核的技术早已有之,并且有多种方案(可以搜索“User Mode Linux”、“CoLinux”、“AndLinux”等)。这里要特别提一下CoLinux,这是一个非常有趣的技术,它可以在Windows中运行经过修改的Linux内核,并且不需要虚拟化。两个操作系统实际上都运行在CPU的特权级别,拥有各自不同的内核空间,并且都有能力直接控制硬件(不过由于硬件通常没有设计为供两个操作系统交替控制,所以CoLinux通常使用虚拟硬件)。

当然,华为也有可能使用了我没想到的其他方案。他们具体采用了什么方案,只能等荣耀智慧屏到货之后再由各位探索了。

参考链接:

User-mode Linux (简体中文)?wiki.archlinux.org

https://zh.m.wikipedia.org/wiki/Cooperative_Linux?zh.m.wikipedia.org

andlinux_百度百科?baike.baidu.comdb19089bbb708c095a4665cd95b0140e.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/488106
推荐阅读
相关标签
  

闽ICP备14008679号