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

做者:虎游
连接:https://www.zhihu.com/question/328382980/answer/784629132
来源:知乎
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

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

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

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

因此,一个兼容安卓应用的系统不见得是安卓系统。程序员

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

这个“当前”的架构图看起来很像是一种妥协,相似于本身刚开发了一个内核,但用户空间运行时尚未开发完成,因而就把其余系统的用户空间运行时拿过来用。华为发布的鸿蒙路线图也印证了这一点:服务器

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

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

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

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

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

顺便一提,鸿蒙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功能的截图来看,鸿蒙应该支持运行安卓应用,因此应该包含安卓运行时(或者其兼容版本)。要怎么把这几部分像俄罗斯套娃同样组装起来呢?咱们能够作出如下两种假设:

  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图标
相关文章
相关标签/搜索