RFC-0194:附錄:工作階段

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

RFC-0092 的附錄,批准 RFC-0092 中未決定的事項。

Gerrit 變更
作者
審查人員
提交日期 (年-月-日)2022-08-09
審查日期 (年-月-日)2022-10-17

摘要

注意:本 RFC 是 RFC-0092 的附錄,並核准 RFC-0092 中未決的決策。

這份文件:

  • 淘汰「工作階段架構」一詞
  • 說明 Fuchsia 平台目前的狀態,與舊版「工作階段架構」概念相關
  • 定義「工作階段元件」及其在 Fuchsia 平台中的角色
  • 開始將 Fuchsia 安全性角色編碼到路由至產品元件的功能審查中

從舊版「工作階段架構」概念中,保留了下列項目:

  • 平台 session_manager 元件
  • 「工作階段元件」本身是 session_manager 的子項
  • 「工作階段元件」在平台中做為安全界線的角色
  • ffx session開發人員工具
  • fuchsia.element.GraphicalPresenter 通訊協定
  • fuchsia.element.Manager 通訊協定

下列項目會遭到捨棄,或擁有權轉移給特定產品擁有者:

  • 其他程序 (例如輸入管道管理) 的單點平台自有程式庫/元件概念
  • 目標是解決在多個執行階段 (例如 Flutter、Android、Chrome 等) 中,多個產品在單一團隊的單一保護傘下,複雜度暴增的問題。

下列項目會保留,且仍由平台擁有,但已規劃淘汰:

  • fuchsia.element.Manager 通訊協定
  • element_manager 元件

以下是原始 RFC-0092 中的開放式問題:

  • 平台會為工作階段提供哪些圖像功能?
  • 提供哪些輸入功能?
  • 哪些能力類別屬於敏感資訊,絕不會提供給工作階段?

提振精神

RFC-0092 導入工作階段元件的概念時,關於平台提供的工作階段功能,大多仍有待討論。自此之後,Fuchsia 平台設計人員已充分瞭解,可詳細說明提供給所有工作階段的功能,以及絕不會提供的功能類型。

做為平台軟體和產品軟體之間的重要安全界線之一,Fuchsia 平台設計人員非常重視要提供哪些功能給工作階段元件。如果為所有工作階段提供過於廣泛的功能集,平台就無法在所有產品中提供一致的行為。

最後,舊版「工作階段架構」概念造成部分開發人員混淆。這些概念有些並未明確納入 RFC-0092,但包含在工作階段架構概念文件中,最初包括:

  • 提供可在工作階段內使用的用戶端程式庫和可重複使用的元件,解決各種問題,包括:
    • 視窗管理
    • 使用者應用程式生命週期
    • 輸入處理
    • 通知
    • ... 等等
  • 定義元件角色和職責,例如 Element Proposer,以供工作階段內使用。
  • 導入「元素」概念,做為元件的新一流用法。

由於「Session Framework the project」的範圍不確定,這個詞彙也變得不確定且含糊不清。

利害關係人

主持人

hjfreyer@google.com

審查者

這個部分會在審查期間更新。

Graphics: emircan@google.com, dworsham@google.com Input: neelsa@google.com Product: yaar@google.com User Data Protection: jsankey@google.com Identity: jsankey@google.com Workstation: sanjayc@google.com

諮詢

neelsa@google.com

社交

草案文件已傳送至 Scenic、Input、Workstation 和 Trusted Platform Services 團隊,供討論之用。

設計

「工作階段元件」是指元件。每個 Fuchsia 產品都會將使用者體驗封裝在工作階段元件 (及其後代元件) 中。「使用者體驗」一詞的涵義很廣,包括透過觸控/滑鼠/鍵盤互動的傳統圖形體驗,以及只有單一 RGB LED 和幾個硬體按鈕的簡單體驗,或是只有網路 I/O 的體驗。

簡單產品可能會指定沒有子項的工作階段元件,而複雜產品則有許多工作階段元件的子項。舉例來說,工作站工作階段會例項化元件,以顯示系統使用者介面、指令列殼層和網頁瀏覽器,做為工作階段元件的後代。

目前,任何 Fuchsia 產品的元件拓撲中都有單一工作階段元件。未來預計會同時執行多個工作階段。工作階段元件的 ID (網址) 由產品擁有者選擇。拓撲中的位置由平台定義,產品擁有者無法變更。由於元件架構的性質,工作階段元件無法瞭解其在拓撲中的位置。

工作階段元件提供所有平台提供的功能,可建立該產品的使用者體驗。在元件拓撲中,工作階段元件是權限最高的非平台元件之一。因此,平台與工作階段元件之間的邊界定義,是 Fuchsia 的重要安全和控制層。

啟動和拓撲

工作階段元件是 session_manager.cml 的子項,而 session_manager.cml 則是 core.cml 的子項。session_manager.cml 是中介平台二進位檔,可啟用重要行為:

  • 無須編輯 core.cml 或任何其他平台 .cml 檔案,即可設定工作階段元件的網址
  • 在某些產品上,工作階段元件會在啟動時自動啟動 (按照慣例,這會用於使用者和 userdebug 建構版本)
  • 在其他裝置上,只要為 session_manager 設定空白工作階段網址,即可指示啟動程序在啟動工作階段元件前中斷 (按照慣例,這會用於工程建構的「已暫停」變體)
  • 在工程建構版本中,工作階段元件可在執行階段重新啟動或由其他元件取代

session_manager.cml 會設定可從平台傳遞至產品的功能的明確上限

功能

與任何元件一樣,工作階段元件的父項會定義工作階段元件的沙箱。以下是不完整的清單,列出平台提供給工作階段元件的超集功能。 視產品的平台設定而定,部分功能在執行階段無法使用。

目前,如要設定產品,進而決定特定產品上特定工作階段元件實際可用的功能組合,您必須在一組產品套件標籤上新增或移除建構時間套件依附元件。

系統生命週期控制

工作階段元件可以:

  • 指示平台重新啟動工作階段元件。
  • 要求重新啟動或暫停裝置硬體。
  • 將裝置恢復原廠設定。

圖形

如果產品有圖形使用者介面:

工作階段元件提供必要功能,可指定單一 View 做為使用者體驗的根 View。在工作階段的生命週期中,檢視畫面選項可能會變更。 舉例來說,如果因閒置而無法與工作階段互動,根檢視區塊可能會切換為鎖定畫面。

此外,工作階段可以在根層級的 View 中嵌入子檢視區塊,以便委派給其他軟體。嵌入子檢視區塊的功能並非工作階段專屬,而是 Fuchsia 系統合成器的屬性。

工作階段不需要指定檢視畫面。舉例來說,在無螢幕裝置上執行的無螢幕工作階段不會指定檢視畫面。

系統「不會」在工作階段中提供下列敏感功能:

  • 對顯示器硬體進行低階控制。Fuchsia 可確保 UI 合成作業透過系統合成器進行,在所有產品中提供最低效能和功能 (例如無障礙疊加層)。

輸入

工作階段元件提供多項功能,可觀察輸入事件。包括將重要事件路徑傳送至檢視畫面階層中聚焦的檢視畫面、傳送滑鼠和觸控事件,以及註冊鍵盤快速鍵通知。日後可能需要額外的輸入功能,才能支援與其他輸入裝置 (虛擬和實體) 互動。

系統「不會」在工作階段中提供下列敏感功能:

  • HID 輸入事件的低層級存取權。

系統設定

工作階段可以存取及管理系統設定,例如軟體更新管道和有效的 Wi-Fi 網路,包括:

  • 輸入政策,例如鍵盤按鍵對應和自動重複率
  • 顯示政策,例如光度感應器模式
  • 國際化
  • 軟體更新管道
  • 硬體設定,例如 WLAN (Wi-Fi)、藍牙或相機設定。

永久資料

工作階段會提供必要功能,將加密儲存空間提供給工作階段內的元件。包括加密裝置儲存空間功能和帳戶管理服務。帳戶管理服務可用於執行驗證,以及存取帳戶加密儲存空間。

實作

更新說明文件

  • 刪除工作階段架構概念文件。
  • 在詞彙中新增「工作階段元件」。

限制工作階段能力轉送

session_manager.cml 元件包含提供給工作階段的最終功能清單。如果 session_manager.cml 中包含會造成安全性或隱私權風險的功能,平台建構作業就會失敗。

禁止使用的功能清單將與 Fuchsia 安全性團隊合作產生及維護。候選人包括:

  • fuchsia.hardware.display.controller.*
  • /dev/class/input-report

安全性考量

總覽

平台提供給工作階段元件的功能會限制工作階段元件的能力。這項功能具有重要意義:如果工作階段元件獲准將第三方軟體做為自己的子項啟動,就能瞭解該軟體執行個體的許多資訊。舉例來說,它擁有子項例項的持續性儲存空間,且可設定為從該儲存空間讀取及寫入資料。還能瞭解軟體的身分 (網址) 等資訊。

稽核責任

平台 session_manager.cml 元件會設定可從平台授予工作階段元件的所有功能上限。Fuchsia 安全團隊有責任稽核這個超集,確保它適用於所有可能的產品。如要變更這些功能,必須通過安全審查

在工作階段元件界線的產品端,產品擁有者負責能力路徑的安全屬性:工作階段元件或其子項中做出的任何路徑決策,Fuchsia 平台安全團隊都無法查看。

目前已有部分稽核和強制執行工具。包括:

我們需要改良稽核和執法工具,才能支援產品專屬的安全團隊。元件架構團隊的目標是改善 scrutiny 和路由許可清單機制,以利遞迴,讓您更容易將工具套用至平台根目錄以外的元件子拓撲。不過,目前沒有具體的方案。

目前,如果 CL 變更了 session_manager.cml 或負責編譯 .cml 檔案的 BUILD.gn 檔案,系統會自動將安全團隊加入副本。

隱私權注意事項

擁有工作階段元件的隱私權影響與安全性類似。Fuchsia 平台可以向工作階段擁有者發布指南和最佳做法,但除了限制提供給工作階段元件的功能 (以及各自的支援實作項目) 之外,沒有任何機制可強制執行政策。

說明文件

現有的 Session Framework 說明文件將會更新或移除,以配合本文件內容。

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

除了預設的「不執行任何動作」外,沒有其他替代方案。這項風險包括延續過時的概念 (「工作階段架構」),導致混淆,且目前沒有專責團隊可減少模糊不清之處或解決技術問題。

既有技術和參考資料