RFC-0092 - 工作階段

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

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

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

摘要

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

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

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

本文旨在確認自 Modular Framework 淘汰後所做的設計決策。

提振精神

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

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

設計

本節概述 Fuchsia 工作階段目前的設計,並強調目前設計並非預期的長期設計。「替代方案」一節則會概略說明一些可能的長期做法。

啟動

core 是非執行元件,可提供各產品一致的功能。core 是 session_manager 的父項。 session_manager 會在 startup 連線至 session_manager 公開的 fuchsia.sessionmanager/Startup 通訊協定時例項化。

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

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

功能和元件

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

Fuchsia 平台必須仔細考量提供給工作階段的功能,即使這些功能僅適用於單一類別的產品。我們的目標是提供產品所需的控制權和彈性,同時維持各產品一致的可靠平台。

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

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

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

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

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

以下列舉一些應在工作階段中明確例項化的元件:

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

實作

session_manager 元件已實作,可在 session_manager 目錄中找到。

如需簡單的工作階段範例,請參閱範例。

如要查看 Fuchsia 參考產品使用的工作階段,請前往 workbench_session 和 terminal_session。

效能

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

安全性考量

session_manager 提供工作階段所需的所有功能,以便例項化產品的使用者體驗。所有工作階段都會從 session_manager 接收同一組功能。這組工具包含多種功能。不過,與在尚未遷移至使用工作階段的產品設定上執行的元件 (即使用 Modular Framework 的產品) 相比,工作階段可用的功能組合較小,且更易於稽核。

請務必對提供給工作階段的功能進行安全性審查。Fuchsia 團隊日後不太可能對所有工作階段進行徹底的安全審查。因此,從平台的角度來看,工作階段的安全性高度仰賴提供給工作階段的功能組合。

隱私權注意事項

session_manager 只會儲存目前工作階段的網址,系統可能會記錄該網址。這項功能比「模組化架構」更進步,後者管理的是使用者啟動的元件。

每場會議都必須經過全面的隱私權審查。

測試

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

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

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

說明文件

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

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

缺點、替代方案和未知因素

工作階段的子項平台

工作階段和 core 之間的關係可以反轉,讓 core 成為工作階段的子項。這可讓產品完全控管系統設定方式,但會犧牲穩定的平台基礎。

工作階段管理工具設定

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

既有技術和參考資料