切換語言為:簡體
Linux 桌面、Android、ChromeOS 架構及 UI 實現方式的簡單對比

Linux 桌面、Android、ChromeOS 架構及 UI 實現方式的簡單對比

  • 爱糖宝
  • 2024-06-03
  • 2104
  • 0
  • 0

寫在前面

本人目前從事 Android 開發(應用層,非 Framework),有多年使用 Linux 發行版(主要是 Debian 和 RedHat 系)的經驗。本文內容由本人自網際網路收集、整合相關資料而來,作為個人技術學習補充知識,可能會有疏漏或錯誤。

提出疑問

使用 Ubuntu、Fedora 等常見的 Linux 發行版時,在遇到一些與圖形界面相關的問題並嘗試解決的過程中,常常會接觸到 X11、Wayland 等技術名詞。若同時在使用 Android 和 ChromeOS 這兩個同樣基於 Linux 的作業系統,基於使用體驗的對比,很容易產生如下疑問:

  1. 它們是否使用同樣的核心,上層部分的實現有什麼區別?

  2. Android、ChromeOS 及 Linux 發行版在 UI 部分的實現有何異同?

  3. 是否可以在 Android 或 ChromeOS 系統上原生執行 Linux 程式(或反之)?

下文的內容將主要圍繞著上述 3 個疑問點展開,只涉及概括性的架構簡析,不涉及具體的程式碼實現或更底層的原理。

架構示意

Linux 桌面、Android、ChromeOS 架構及 UI 實現方式的簡單對比

架構簡析

Android

Android 作為目前最廣泛使用的移動平臺,分層相較於另外兩個桌面系統要更復雜一些。其底層使用的是由 Google 進行了裁剪和定製的 Linux 核心,上層則包含以下幾個主要部分:

  • 硬體抽象層(HAL) :連線 Android Framework 與核心裝置驅動的重要橋樑,向下遮蔽裝置及其驅動的實現細節,向上為系統服務及 Framework 提供統一的裝置訪問介面。同時 Google 基於保護硬體廠商智慧財產權的考量,允許硬體廠商不公開原始碼,將裝置相關的實現放在 HAL 層中並以共享庫(.so)的形式提供。

  • Android 執行時:這一部分在 Android 5.0 以前採用的是 Dalvik,這是一種基於 JVM 的直譯器,基於解釋方式執行 Java 程式碼,後被採用 AOT 編譯方式的 ART 取代。Dalvik 和 ART 透過執行 DEX 檔案來執行 Java 程式碼,這是一種專為 Android 設計的位元組碼格式,類比於 JDK 的 .class 檔案。

  • 原生 C/C++ 庫:Android 平臺提供了 Java 框架 API 用於嚮應用提供一些原生庫的功能,如 Java OpenGL API。除此以外,也可以透過 NDK 直接從原生程式碼訪問這些平臺庫。

  • Java API 框架:這一層包含平常在編寫 Android 原生 App 時很常用到的基礎元件,Android 的四大元件 Activity、Service、BroadcastReceiver 和 ContentProvider 都屬於這一層。Framework 開發崗位的職責主要包含 Java API 框架(俗稱 Java Framework)、原生 C/C++ 庫(俗稱 Native Framework)和 Android 執行時這三層。

  • 應用程式:這一層包含電子郵件、簡訊等 Android 系統自帶的系統應用和使用者後續安裝的應用,Android 應用層開發崗位的職責主要屬於這一部分。

ChromeOS

這是一款由 Google 基於 Linux 核心設計的桌面作業系統,使用 Google Chrome 瀏覽器作為主要用戶界面,其開放原始碼版本為 Chromium OS。在大陸地區,有基於 Chromium OS 構建的符合大陸使用者使用習慣的發行版,名為 FydeOS。ChromeOS 的架構主要包含以下部分:

  • Linux 核心及系統庫:ChromeOS 的這一部分是基於 Gentoo Linux 構建的,但經過了 Google 的深度定製。

  • Freon:這是 Google 自定義的圖形堆疊,從 X11 演變而來。

  • 視窗管理器:負責處理使用者和多個客戶端視窗互動,控制視窗的擺放、輸入視窗聚焦以及快捷鍵操作等。這一部分也是由 Google 自研的。

  • Chromium:用於實現 Chrome OS 的桌面體驗,使用的是 Google Chromium 瀏覽器中的開源元件,包括 HTML5 排版引擎和執行 JavaScript 的 V8 引擎等。

  • 應用程式:Chrome OS 的原生應用即為 Web 應用(PWA),可以使用 React、Vue 等各種流行的前端框架進行開發,很多 PWA 應用也支援儲存到本地,在無網的條件下執行。

Linux 桌面發行版

許多廠商和 Linux 社羣在 Linux 核心之上開發了許多工具,如常用的 GNOME 桌面、Firefox 瀏覽器等,將 Linux 核心和這些應用一起打包後就被稱作 Linux 發行版本。常見的 Linux 發行版本有 Ubuntu、Fedora 等。對於有桌面的發行版,它們的架構大體可以分為以下部分:

  • Linux 核心:所有 Linux 發行版的核心都源自 Linus Torvalds 和其維護團隊釋出的上游核心(Mainline Kernel),根據具體發行版的不同,會基於上游核心進行一定程度的補丁和定製。

  • 系統庫:構成 Linux 作業系統核心功能的基礎部分,包含 C 標準庫(LibC)和許多其他關鍵的系統庫,例如動態連結器、安全和加密庫等。

  • X11 / Wayland:與 ChromeOS 的 Freon 同層,作為 Linux 桌面的圖形堆疊,用於標準化應用程式、桌面環境和顯示卡之間的資料交換過程。

  • 視窗管理器及桌面環境:用於實現 Linux 發行版的桌面體驗,不同桌面環境使用的技術棧有區別,如 GNOME 使用的是基於 C 的 GTK,KDE Plasma 使用基於 C++ 的 QT 等。

  • 應用程式:相比 Android 和 ChromeOS,Linux 的上層應用程式則非常自由。既可以直接使用 C / C++ 編寫程式並編譯為機器碼執行,也可以執行 Java、Dart 等虛擬機器,或使用 Electron 基於 Web 前端技術開發應用。

解答疑問

進行了上面的分析後,就可以解答前文提出的疑問了:

  1. 它們使用的均是 Linux 核心,但經過了不同程度的裁剪和定製,上層部分的實現參見「架構簡析」一節的內容。

  2. Android 的 UI 使用 SurfaceFlinger、WindowManager 等元件實現,專注於移動裝置的觸控體驗;ChromeOS 的 UI 使用定製的圖形堆疊(Freon)和基於 Web 技術的圖形界面;而 Linux 桌面發行版提供傳統的桌面體驗,使用標準的圖形堆疊(X11 / Wayland)和豐富的桌面環境,支援廣泛的應用生態。

  3. Android 中缺少許多標準的 GNU 庫,無法原生支援 Linux 應用;ChromeOS 更接近傳統意義上的 Linux 發行版,但被 Google 以安全性等原因施加了較多限制;同時,其他的 Linux 發行版沒有 Dalvik / ART,無法直接執行 Android 應用。而 ChromeOS 的原生應用大多是 PWA 形式的 Web App,在 Linux 發行版中可以直接執行。

參考內容

知乎專欄:Android 到底是不是 Linux?

知乎回答:Google 在 Android 和 ChromeOS 上使用的技術棧

Android Developers: Platform Architecture

Cloud Atlas Beta 文件:Chromium OS 架構


0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.