有人說安卓就是 Linux,也有人說安卓是安卓、Linux 是 Linux,兩者沒什麼關係,還有人說安卓用的是 Linux 的內核,那麼它們之間到底是什麼關係呢。要想得到這個問題的答案,我們要先弄清楚幾個概念。 Linux 與 Linux 內核 Linux 與 Linux 內核其實是不一樣的,關於這 ...
有人說安卓就是 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 的發行版本本質上是一樣的。
推薦閱讀:
- The End -