安卓到底是不是Linux

Coding十日談發表於2020-05-29

有人說安卓就是 Linux,也有人說安卓是安卓、Linux 是 Linux,兩者沒什麼關係,還有人說安卓用的是 Linux 的核心,那麼它們之間到底是什麼關係呢。要想得到這個問題的答案,我們要先弄清楚幾個概念。

 

Linux 與 Linux 核心

 

Linux 與 Linux 核心其實是不一樣的,關於這個問題,我在之前的一篇文章中講過(《Linux,Unix,GNU 到底有什麼樣的淵源?》)。Linux 的核心是由 Linus Torvalds 在1991年首次編寫。它是作業系統的核心,包括裝置驅動、檔案系統、程式管理、網路通訊等。但是作業系統光有核心,使用者是沒有辦法操作的,所以很多廠商和 Linux 社群就在核心之上開發了很多工具,比如我們常用的 GNome桌面,FireFox瀏覽器、GIMP 圖片編輯器等等。Linux 核心和這些應用一起打包後就被稱作 Linux 發行版本。Linux 有很多的發行版本,我在之前的文章中(《這麼多Linux版本,你究竟該怎麼選擇?》),對不同的版本做過比較。

所以我們常說的 Linux 有兩個含義:

1) Linux 核心,這個嚴格來說應該叫 GNU/Linux,因為它是 GNU 計劃的一部分

2) Linux 發行版本,比如 Debian、Ubuntu、Mint、RedHat等等

 

那麼安卓和 Linux 核心或者 Linux 發行版本有什麼關係嗎?

 

安卓與 Linux 的關係

 

安卓實際上用到的是 Linux 的核心。因為 Linux 本身是開源的,所以谷歌的工程師們選擇了在 Linux 核心基礎之上做裁剪定製,這樣他們就不需要從頭開始來開發一個全新的系統。BTW,這在大廠當中也是一種比較常用的做法,比如 Playstation 的作業系統用的是 FreeBSD的核心,XBox 用的是 Windows NT 的核心。在安卓的手機上,在系統資訊中你可以看到 Linux 核心的版本。

既然安卓用的是 Linux 的核心,那是不是可以說它就是 Linux的一個發行版本呢?先看一下安卓和其他 Linux 發行版本開發架構上有何不同。

 

大家都知道 Linux 核心是用 C語言開發的,安卓在 Linux 的核心之上用 C/C++ 開發了Dalvik ,後來改叫 Android Run Time,其實本身就是安卓的 Java 虛擬機器。我們做的安卓應用都要用 Java開發,執行在 ART 上面。Linux 其他發行版本也可以用 Java 開發應用,只要執行在 Linux 的 Java 虛擬機器上就可以了。除此之外我們也可以在 Linux 核心之上使用其他框架開發,比如 GTK 框架的 Gnome、QT 框架的 LXQT,這些跟 ART 都是一個層次的東西。所以我覺得安卓和其他 Linux 發行版本本質上沒有太大區別,只不過安卓對 Linux 的核心做了一些裁減,並且在上面跑了一個 Dalvik / ART,而其他 Linux 發行版本跑了很多個 “Dalvik / ART”而已。

 

解釋清楚了安卓與 Linux 核心的關係以及與 Linux 其他發行版本的區別後,我們再來看下小夥伴們經常問到的兩個問題:

 

1) 可以在安卓上執行 Linux 的桌面應用嗎?

因為安卓有很多標準的 GNU 庫沒有安裝,也沒有安裝圖形 X server,所以答案是不能。不過有一些應用嘗試讓我們在安卓環境中使用 Shell,安卓終端模擬器還有busybox,感興趣的同學可以去了解一下。

 

2) 可以在Linux 桌面上執行安卓的應用嗎?

因為其他 Linux 發行版本也沒有 Dalvik / ART,所以安卓的應用在 Linux 桌面上不能直接執行。不過我們只需要將 Dalvik / ART 移植到 Linux 桌面環境就可以了。正是基於這個原理,市場上有很多安卓手機模擬器,不僅可以用在 Linux 桌面,還可以用在 Windows 以及 Mac 上。

 

總結

 

安卓的作業系統核心是在 Linux 核心上做了一些裁減和定製,並且在核心之上執行了一個 Dalvik / ART 虛擬機器,所有的應用必須執行在這個虛擬機器上,所以安卓的應用都是用 Java 來開發的。在 Linux 的發行版本中,我們可以使用 Java 虛擬機器,也可以使用其他框架,比如 GTK, QT等等,它們編譯出來的二進位制程式碼可以直接執行在 Linux 核心上,它們和 Dalvik / ART 是一個層次上的東西,所以安卓和 Linux 的發行版本本質上是一樣的。

 

 

 

 

推薦閱讀:

《在 Linux 系統中如何管理 systemd 服務》

《Linux的執行級別與目標》

《軟連結 vs. 硬連結》

《Linux 目錄詳解》

《虛擬機器安裝 Linux 最完整攻略》

《Xshell 與 Xftp 的安裝與使用》

 

 

 

 

- The End -

相關文章