【轉帖】知乎管理華爲鴻蒙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圖標
相關文章
相關標籤/搜索