作者:虎游
链接:https://www.zhihu.com/question/328382980/answer/784629132
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

从软件工程角度来说,安卓运行时是运行在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中说鸿蒙目前的架构是这样的:

【转帖】知乎管理华为鸿蒙OS的介绍2-LMLPHP 【转帖】知乎管理华为鸿蒙OS的介绍2-LMLPHP

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

【转帖】知乎管理华为鸿蒙OS的介绍2-LMLPHP 【转帖】知乎管理华为鸿蒙OS的介绍2-LMLPHP

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

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

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

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

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

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

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

简单的描述一下这段往事:最开始,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功能的截图来看,鸿蒙应该支持运行安卓应用,所以应该包含安卓运行时(或者其兼容版本)。要怎么把这几部分像俄罗斯套娃一样组装起来呢?我们可以做出以下两种假设:

  1. 系统底层运行Linux内核,其上运行安卓运行时(或者其兼容版本),然后运行安卓应用。鸿蒙微内核并未直接参与APP运行,而是做为可信执行环境的操作系统存在(用于支付安全模块等)。
  2. 系统底层运行鸿蒙微内核,其上运行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.com【转帖】知乎管理华为鸿蒙OS的介绍2-LMLPHP
03-25 23:29