作者:虎游
链接: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. 从斐波那契数列看java方法的调用过程

    先看斐波那契数列的定义: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为 ...

  2. 【线性代数】3-5:独立性,基和维度(Independence,Basis and Dimension)

    title: [线性代数]3-5:独立性,基和维度(Independence,Basis and Dimension) categories: Mathematic Linear Algebra ke ...

  3. [python]有中文字符程序异常的解决方案

    一. 含有中文字符无法运行 在python3中用的是Unicode编码,Unicode号称万国码,可以向所有的编码进行兼容.不会出现这种问题. Python2中使用的是ASCII编码,会出现这种问题. ...

  4. Java关键字volatile的实现原理(四)

    简述 volatile 是轻量级的synchronized,在多线程开发中保证了共享变量的可见性.可见性就是当一个线程修改一个共享变量时,另一个线程可以读到修改的值.如果volatile变量使用恰当, ...

  5. Java中可变参数

    从java5开始出现了可变参数,这是对java方法及数组的拓展! 方法中可以接受的参数不再是固定个数的,而是随着具体需求传递的多少来决定. 定义格式: 返回值类型  方法名(参数类型 ... 形式参数 ...

  6. node.js获取ip及mac

    ; (function (win) { var os = require('os'); var ifaces = os.networkInterfaces(); function NetworkUti ...

  7. DDCTF-2019-writeup(7web+5misc)

    一年前第一次参加了DDCTF,再次参加简单记录下web与misc的writeup Web Web1 滴~ 1.jpg参数可以包含文件,参数经过两次base64和一次16进制编码,将index.php编 ...

  8. QList和QVector等容器的区别

    QList和QVector等容器的区别. 1.大多数情况下可以用QList.像prepend()和insert()这种操作,通常QList比QVector快的多.这是因为QList是基于index标签 ...

  9. ZT:在mybatis的Mapping文件写入表名 出现异常ORA-00903: 表名无效 的解决

    简而言之,把#{tablename}换成${tablename}就能解决问题. 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:htt ...

  10. Oracle 中的进制转换

    Oracle 中的进制转换 */--> Oracle 中的进制转换 Table of Contents 1. 进制名 2. 10进制与16进制互相转换 2.1. 10进制转换为16进制 2.2. ...