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

  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的更多相关文章

  1. 华为鸿蒙OS发布!方舟支持混合编译,终将可替换安卓?

    前言 有关于鸿蒙的消息之前也有说过,就在昨天下午,华为举行了2019开发大会,正式推出了鸿蒙os系统(Harmony).其相关负责人表示,也是基于微软内核的全场景分布式OS   鸿蒙凭借微内核的优势, ...

  2. 华为鸿蒙OS能取代安卓吗?

    先回答问题,不能,起码几年之内不存在这种可能.8月9日华为的开发者大会上,余承东说:鸿蒙是一款基于微内核的全场景分布式OS.鸿蒙OS的设计初衷是为满足全场景智慧体验的高标准的连接要求,为此华为提出了4 ...

  3. [github] 关于华为鸿蒙OS

    English Docs | 中文文档 | Türkçe Dökümanlar HarmonyOS Ⅰ. 鸿蒙系统简介 鸿蒙系统(HarmonyOS),是第一款基于微内核的全场景分布式OS,是华为自主 ...

  4. 鸿蒙OS与谷歌Fuchsia

    鸿蒙,意在“开天辟地”,它的征程是物联网.跨终端,是一款战略性产品.它真正对标的不是安卓,而是谷歌最新研发的操作系统Fuchsia. 根据Fuchsia中文社区的介绍,在安卓和 Chrome OS 两 ...

  5. 小米手机收到升级鸿蒙OS提示?官方回应

    虽然尚未得到官方确认,但华为“鸿蒙”OS已经成为网络热门话题,在机圈引发热议. 本周,互联网上出现了显示为MIUI 10手机被锁定,屏幕上出现“小米将于2020年9月15日全面停止服务,届时您所有设备 ...

  6. 【转帖】知乎关于鸿蒙OS的思考

    作者:bacon xu链接:https://www.zhihu.com/question/339567108/answer/782431141来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...

  7. 5G能带来什么改变-从鸿蒙OS说起

    背景 从5G投票事件开始,开始关注5G.许多文章都说到5G的特点有速度快.时延低,其中,时延低是最重要的特点.然而,时延低能给社会带来什么改变呢? 2G是短信的时代,3G促成了语音视频,4G促成了短视 ...

  8. 鸿蒙OS的系统调用是如何实现的? | 解读鸿蒙源码

    本文将首先带您回顾"系统调用"的概念以及它的作用,然后从经典的Hello World开始,逐行代码层层分析--鸿蒙OS的系统调用是如何实现的. 写在前面 9月10号 华为开发者大会 ...

  9. 终于有人把鸿蒙OS讲明白了,大佬讲解!快收藏!

    来自 | GitHub科技 本文面向的是开发人员,主要想通过科普让大家了解一下鸿蒙开发.接下来,我想给大家科普一下这个这么火的鸿蒙系统. 到底什么是鸿蒙 OS 在官网上看到鸿蒙 OS 的简介是,分布式 ...

随机推荐

  1. js上传整个文件夹

    文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...

  2. 修改Ubuntu国内镜像

    打开软件和更新:如下图 选择一个自己喜欢的镜像. 然后执行  sudo apt-get update    更新源. 结束 1.原文件备份 sudo cp /etc/apt/sources.list ...

  3. jQuery属性操作之DOM属性操作

    DOM属性操作是对DOM元素的属性进行读取.设置和移除操作, 比如prop(). removeProp(). 1. prop() 1.1 使用prop()获取返回值 prop() 用于返回属性值时, ...

  4. 网络流,设备、插头和转接器建图(简单map的应用)

    题意: 给你n个插座,m个设备,每台设备都有对应的插座,有k个转接器. 要求:求满足不能插上插座的用电器最少个数 solution: HINT:每种适配器都有无限个,所以建图的时候要改为INF. 答案 ...

  5. dubbo学习笔记(一)超时与重试

    dubbo提供在provider和consumer端,都提供了超时(timeout)和重试(retries)的参数配置. 配置方式 provider端在<dubbo:service>中配置 ...

  6. Linux 查看网卡速率及版本

    查看网卡速率:ethtool 网卡名  如ethtool eth0 查看网卡驱动版本号:ethtool -i 网卡名   如ethtool -i eth0 示例: [root@nt3 ~]# etht ...

  7. ORA-12899 导入失败

    主要是目标数据库的字符集与导入文件的字符集不符 SQL>SHUTDOWN IMMEDIATE SQL>STARTUP MOUNT SQL>ALTER SYSTEM ENABLE RE ...

  8. 只要你用atom修改后保存代码文件的时候,你在chrome上的页面就会自动刷新。

    学习html和css的时候Ctrl+s 以后预览网页需要手动刷新 现在不用了 给chrome安装安装LivePage这个插件. 只要你用atom修改后保存代码文件的时候,你在chrome上的页面就会自 ...

  9. LC 640. Solve the Equation

    Solve a given equation and return the value of x in the form of string "x=#value". The equ ...

  10. C++ STL内存池

    内存池出现原因:内存碎片 首先我们需要明确, 内存池的目的到底是什么?  首先你要知道的是, 我们每次使用new T来初始化类型T的时候, 其实发生了两步操作, 一个叫内存分配, 这一步使用的其实不是 ...