RFC-0092 - 工作階段

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

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

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

摘要

本文件說明 Fuchsia 課程的角色和責任。

工作階段是一種元件。每項 Fuchsia 產品都會在工作階段內建構使用者體驗。舉例來說,工作站工作階段會將元件執行個體化,以便處理輸入內容、設定景觀場景圖,以及算繪 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 平台提供了將 View 例項化所需的功能,也會讓工作階段能夠建立專屬的景觀取代項目。如果足夠的產品自行定義圖形通訊協定,則「圖形元件」只會在具有相符圖形通訊協定的系統上執行。此外,由於任何產品都可以規避場景圖,因此平台無法再提供場景圖的保證。

風景目前在 appmgr 中會執行個體化為「v1」元件。將 View 遷移至「v2」(component_manager) 元件階層時,必須決定元件階層中要執行個體化的位置。

如要判斷元件是否應在工作階段中執行個體化,請考慮以下問題:「應在各項產品間與此能力的互動是否應保持一致」?舉例來說,產品應能選擇是否需要圖像,但如果需要圖像,則應使用「風景」。同樣地,產品也應要能決定其支援的輸入裝置類型,但應使用輸入管道從上述裝置接收事件。這表示 View 和輸入管道都應可設定產品,但應在工作階段外執行個體化,因為這些元件需要的功能具有特殊權限。

以目前架構中的某些元件來說,為實際原因 (例如生命週期管理、缺少 .cml 設定能力等) 規劃在工作階段內使用中的部分元件。我們一直致力在 Fuchsia 身上導入其他平台設定的機制,以便讓許多平台元件在工作階段外再次執行個體化:

  • 驅動程式已在工作階段以外執行個體化,但在所有 Fuchsia 產品中,都不是靜態的。
  • 您需要根據安全性情境切換核心領域中定義的功能,例如針對使用者建構作業啟用元件執行個體 ID 強制執行功能。
  • 目前核心領域中存在溫度-記錄器元件,但僅透過 RFC-0089 中定義的機制將其納入特定板板上。

以下列舉幾個應在工作階段中明確執行個體化的元件:

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

實作

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

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

您可以在圖塊工作階段中找到參照 Fuchsia 產品使用的工作階段。

效能

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

安全性考量

session_manager 提供工作階段執行個體化產品使用者體驗所需的所有功能。所有工作階段都會收到 session_manager 所提供的一組相同功能。這個組合包含許多功能。不過,與在產品設定上執行的元件 (也就是使用 Modular Framework 的產品) 搭配使用的元件組合,該工作階段可用的功能組合都比較少,也更易於稽核。

課程提供的功能必須通過安全性審查。Fchsia 團隊在未來的所有工作階段都不太可能進行全面的安全性審查。因此,從平台的角度來看,工作階段的安全性極為仰賴工作階段提供的功能組合。

隱私權注意事項

session_manager 只會儲存目前工作階段的網址,且可能會記錄此網址。以上是「模組化架構」的改善措施,該架構可管理使用者啟動的元件。

每個會議都必須個別接受全方位的隱私權審查。

測試

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

將建立著重於工作階段開發人員需求的測試架構。例如,此架構可讓開發人員測試工作階段元件階層的設定,並驗證工作階段中元件之間的互動。

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

說明文件

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

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

缺點、替代方案和未知

做為工作階段子項的平台

您可以反轉工作階段和 core 之間的關係,因此 core 是工作階段的子項。如此一來,產品就能完全控管系統設定方式,不過所需成本也能用於平台穩定。

工作階段管理員設定

session_manager 設定目前只能切換啟動時要執行個體化的工作階段元件。session_manager.cml 中沒有任何差異,因此每個工作階段都會提供相同的功能組合。在理想情況下,工作階段管理員的設定可以盡量減少提供的通訊協定數量。

先前的圖片和參考資料