RFC-0092 - 工作階段

RFC-0092:工作階段
狀態已接受
區域
  • 工作階段
說明

定義工作階段元件的角色。

Gerrit 變更
作者
審查人員
提交日期 (年-月-日)2021-04-08
審查日期 (年-月-日)2021-05-05

摘要

本文說明 Fuchsia 工作階段的角色和職責。

工作階段是元件,每個 Fuchsia 產品都會在工作階段中建構使用者體驗。舉例來說,工作站工作階段會例項化元件,以處理輸入內容、設定 Scenic 場景圖,以及算繪其 UI。

工作階段元件提供建立產品使用者體驗所需的所有功能,因此通常是產品中最具權限的非平台元件。因此,工作階段元件可做為 Fuchsia 平台與以 Fuchsia 建構產品之間的界線。session_manager 是工作階段的父項元件,可公開開發人員用來控制工作階段的偵錯通訊協定。產品子類 (例如 product_engproduct_userdebug) 可能會導致同一工作階段出現不同風味。

這份文件的目的是確認自 Modular Framework 淘汰以來所做的設計決策。

提振精神

Fuchsia 平台的目標是支援多項產品。這些產品是由產品專屬和平台元件組成。產品專屬元件必須位於元件執行個體樹狀結構中的某處。工作階段是產品專屬元件執行個體樹狀結構的根,可驅動使用者體驗。

工作階段是 Fuchsia 平台和產品之間的界線。因此,這項工作階段可用於改善產品開發週期。舉例來說,您可以銷毀並重新建立工作階段,藉此「重新啟動」產品的使用者體驗。

設計

本節將說明 Fuchsia 工作階段的現行設計,並指出目前設計與長期目標設計的差異。「替代方案」一節概略說明瞭幾種可能的長期做法。

啟動

core 是不可執行的元件,可提供各產品一致的功能。coresession_manager 的父項。 session_manager 是因應 startup 連線至 session_manager 公開的 fuchsia.sessionmanager/Startup 通訊協定而例項化的項目。

session_manager 會從 /config/data 中的設定檔讀取初始啟動工作階段。然後,將工作階段例項化為動態 collection 中的子項。雖然工作階段位於集合中,但這個集合最多只能有一個工作階段元件。也就是說,所有工作階段都會獲得相同的功能組合,因為提供的功能組合不會因產品而異。如要進一步探討,請參閱「工作階段管理員設定」。

然後,工作階段會例項化自己的產品專屬元件階層。 即使是簡單的產品,工作階段最終也會承擔許多責任。 例如,設定場景圖、連接輸入內容、整合無障礙功能等。

功能和元件

工作階段會使用提供的功能,例項化所需產品體驗的元件樹狀結構。工作階段必須提供工作階段元件階層中使用的所有平台功能。

即使功能僅適用於單一類別的產品,Fuchsia 平台也必須仔細考量提供給工作階段的功能。我們的目標是為產品提供所需的控制項和彈性,同時維持值得信賴的平台,確保產品體驗一致。

舉例來說,螢幕產品。Fuchsia 平台可能會決定提供工作階段與螢幕互動的能力,然後讓工作階段負責例項化圖形子系統 (例如 風景)。 這為工作階段帶來許多彈性和控制權,但也讓 Fuchsia 平台更難演進:如果 Fuchsia 平台為工作階段提供例項化 Scenic 所需的功能,也會讓工作階段能夠建立自己的 Scenic 替代項目。如果足夠多的產品定義自己的圖形通訊協定,「圖形元件」只會在具有相符圖形通訊協定的系統上執行。此外,由於任何產品都能規避場景圖,因此平台無法再提供相關保證。

Scenic 目前在 appmgr 下例項化為「v1」元件。將 Scenic 遷移至「v2」(component_manager) 元件階層時,必須決定要在元件階層中的哪個位置例項化。

如要判斷是否應在工作階段中例項化元件,請思考以下問題:「與這項能力互動時,是否應在各產品中保持一致」?舉例來說,產品應可選擇是否需要圖像,但如果需要圖像,則應使用 Scenic。 同樣地,產品應能決定支援的輸入裝置類型,但應使用輸入管線接收來自這些裝置的事件。這表示 Scenic 和輸入管道都應可透過產品設定,但必須在工作階段外例項化,因為這些元件需要特殊權限。

在目前的架構中,基於實務考量 (例如生命週期管理、缺乏 .cml 可設定性等),部分元件預計會存在於工作階段中。Fuchsia 目前有幾項持續進行的作業,會導入其他平台可設定機制,讓許多平台元件再次於工作階段外例項化:

  • 驅動程式已在工作階段外例項化,但並非所有 Fuchsia 產品都採用靜態驅動程式。
  • 核心領域中定義的功能需要根據安全性情境切換,例如在使用者建構時,為儲存空間啟用元件執行個體 ID 強制執行。
  • 溫度記錄器元件目前位於核心領域,但只會透過 RFC-0089 中定義的機制,納入特定開發板。

以下列舉幾個應在工作階段中清楚例項化的元件:

  • 圖形呈現 (「殼」) 元件。
  • 直接影響使用者體驗的元件 (例如影片播放器、終端機等)。

實作

session_manager 元件已實作,位於 session_manager 目錄中。

您可以在範例中找到一些簡單的範例工作階段。

參考 Fuchsia 產品使用的工作階段位於 tiles-session

效能

工作階段是第一個例項化的自有產品元件,但許多平台元件會在工作階段元件之前例項化。

安全性考量

session_manager會為工作階段提供所需的所有功能,以便例項化產品的使用者體驗。所有工作階段都會收到 session_manager 的同一組功能。這組功能涵蓋範圍廣泛,不過,與在未遷移至使用工作階段的產品設定上執行的元件 (即使用 Modular Framework 的產品) 相比,工作階段可用的功能較少,且更易於稽核。

請務必對提供給工作階段的功能進行安全審查。Fuchsia 團隊不太可能在日後對所有工作階段執行徹底的安全審查。因此,從平台角度來看,工作階段的安全性很大程度取決於工作階段可用的功能。

隱私權注意事項

session_manager 只會儲存目前工作階段的網址,這可能會記錄下來。相較於 `Modular Framework,這項功能可管理使用者啟動的元件,

每個工作階段都需要進行全面的隱私權審查。

測試

產品擁有者需要工具來測試及偵錯工作階段。

我們將建立測試架構,著重於會期開發人員的需求。舉例來說,開發人員可透過這個架構測試工作階段元件階層的設定,並驗證工作階段中元件之間的互動。

開發人員可以透過 ffx 指令與執行中的工作階段互動。 舉例來說,ffx session restart 會指示 session_manager 終止並重新建立工作階段。

說明文件

根據 RFC-194,概念文件已移除。

//src/session 中的每個二進位檔和程式庫也包含說明用途的 README。

缺點、替代方案和未知事項

平台是工作階段的子項

工作階段和 core 之間的關係可能會反轉,讓 core 成為工作階段的子項。這樣一來,產品就能全面掌控系統設定方式,但代價是穩定的平台基礎。

工作階段管理員設定

session_manager 設定目前只會切換要在啟動期間例項化的工作階段元件。session_manager.cml 沒有差異,因此每個工作階段都提供相同的功能。理想情況下,工作階段管理員設定會盡量減少提供的通訊協定數量。

既有技術和參考資料