RFC-0092:工作階段 | |
---|---|
狀態 | 已接受 |
區域 |
|
說明 | 定義工作階段元件的角色。 |
變更 | |
作者 | |
審查人員 | |
提交日期 (年/月) | 2021-04-08 |
審查日期 (年/月) | 2021-05-05 |
摘要
本文件說明 Fuchsia 課程的角色和責任。
工作階段是一種元件。每項 Fuchsia 產品都會在工作階段內建構使用者體驗。舉例來說,工作站工作階段會將元件執行個體化,以便處理輸入內容、設定景觀場景圖,以及算繪 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 平台可能會決定為工作階段提供與螢幕互動的能力,然後讓工作階段負責將圖形子系統執行個體化 (例如風景)。 這除了可以提供許多彈性和控制功能,也讓 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
中沒有任何差異,因此每個工作階段都會提供相同的功能組合。在理想情況下,工作階段管理員的設定可以盡量減少提供的通訊協定數量。