第三方原始碼管理

第三方程式碼是 Fuchsia 結帳程序的一部分,但不具著作權 而且不受 Fuchsia 的授權規範。也就是任何程式碼 而不屬於 Fuchsia 作者所擁有的 100%,則使用第三方程式碼來管理。

Fuchsia 專案會在 //third_party/ 目錄。這種做法也稱為供應商。 供應商可確保第三方程式碼是由 Fuchsia 擁有的來源提供 和存放區,並且會在已知與其他程式碼搭配使用的修訂版本中提供 Fuchsia 結帳頁面中的價格。

新增第三方程式碼時,請按照下列步驟操作,確保程式碼符合規定 與 Fuchsia 專案政策一同執行。

事前準備

所有外部程式碼都必須完成開放原始碼審查委員會 (OSRB) 程序,新增至 Fuchsia 平台來源樹狀結構。產生 OSRB 要求已獲準,請按照下列步驟操作。

特定語言指南

如要新增 Rust、Go 或 Python 依附元件,請按照下列指南操作:

如果是其他語言,請繼續按照下列步驟操作。

取得程式碼

所有外部程式碼都必須遵循下方的第三方來源版面配置 (使用 googletest 為範例):

root [fuchsia.googlesource.com/fuchsia]
  third_party/
    googletest/
      src/ [fuchsia.googlesource.com/third_party/github.com/google/googletest]
      BUILD.gn
      OWNERS
      README.fuchsia

//third_party/googletest/src/Fuchsia 擁有的鏡像的根 存放區,內含上游程式庫的副本 googletest 的存放區。(注意:在 Python 存放區中, 將 /src 替換為 /<module_name>,以便遵循 Python 的慣例。這個 慣例,常駐 pyright。)

//third_party/googletest/ 目錄是 fuchsia.git 的一部分 Cloud Storage 也提供目錄同步處理功能

//third_party/googletest/BUILD.gn 定義 googletest 的建構目標 資源庫。這個檔案屬於 fuchsia.git (而非 googletest 存放區),可在以下位置更新: 其他依附於 googletest 的 Fuchsia BUILD.gn 檔案含有 Lockstep。這個 可讓您更輕鬆地進行建構重構及其他大規模變更。

需要根據 Fuchsia 調整第三方程式碼所需的其他檔案 專案可能位於 //third_party/googletest 底下 (本例中為 0)。

新增 OWNERS

每個依附元件都必須有相關聯的 OWNERS 檔案。因為 定義於 fuchsia.git,可以包含其他檔案的擁有者 Fuchsia 專案中的其他部分。

OWNERS 檔案必須將兩個 Fuchsia 開發人員帳戶列為第一個 或在另一個 OWNERS 檔案中加入 file: 指令。這能確保 以及程式碼維護工作負責

除非使用依附元件,否則 OWNERS 通常是程式碼的擁有者 其他用途。

依附元件的 OWNERS 可透過以下方式保護 Fuchsia 及其使用者: * 移除不再需要的依附元件 * 在修正上游的安全性或穩定性錯誤時,更新依附元件 * 協助確保使用依附元件的 Fuchsia 功能持續使用 依附元件的最佳方式,因為功能和依附元件會隨時間變化。

新增 README.fuchsia

您需要一個包含專案相關資訊的 README.fuchsia 檔案 避免重複使用程式碼歡迎參考 README.fuchsia 的名單 必須包含所有必填欄位

申請評論

所有第三方新增和實質變更 (如重新授權) 都需要 下列單位的認可:

  • 依照 OSRB 核准指示審查程式碼。
  • 如果第三方專案具有重大安全性 (請參閱 README.fuchsia),請在 security-dev@fuchsia.dev查看變更。

特殊情況

大多數的第三方依附元件皆可遵循上述版面配置。不過, 出現罕見情況的一小部分依附元件 能以不同方式管理

擁有異國的依附元件會增加複雜性和維護成本, 是由第三方程式碼的直接依附元件所衍生此外,他們 這會成為常見全球維護任務的複雜度,例如:

  • 執行 Git 管理工作。
  • 更新及維護工具鍊。
  • 透過更新易受攻擊來回應揭露的安全漏洞 來自上游來源的第三方程式碼。
  • 重構建構規則,例如強制執行新的編譯時間檢查。

跳脫節拍方向時,請謹慎地思考。

將舊版第三方程式碼遷移至目前的版面配置

將現有的 //third_party 程式碼加入上述說明的版面配置 他們也可以捐款

如要將舊版第三方存放區遷移至這個版面配置,請按照下列步驟操作: 步驟:

  1. 將 Fuchsia 專用的 BUILD.gn 檔案移至 //build/secondary

    1. BUILD.gn檔案從 //third_party/<name>複製到 //build/secondary/third_party/<name>。如有多個 BUILD.gn 檔案,在 //build/secondary 下方保留相同的子樹狀結構。
    2. 在複製的 BUILD.gn 檔案中,更新第三方路徑參照 格式為 //third_party/<name>/ //third_party/<name>/src/
    3. OWNERS//third_party/<name> 複製到 //build/secondary/<name>, 或建立這個值區查看 OWNERS 檔案,確保 遵循最佳做法
    4. README.fuchsia//third_party/<name> 複製到 //build/secondary/<name>。查看這個檔案的內容,並確認 確認中繼資料正確無誤在罕見的情況下會修改 對第三方存放區中的第三方程式碼所做的變更,這類變更 列於README.fuchsia中。本機修改通常需要您 提出任何在本指南未涵蓋的特殊住宿設施。
    5. 檢查 //third_party/<name> 是否有任何其他第一方 .gni 檔案, 也把這些資源一併移至 //build/secondary/<name>
    6. 更新「//build/secondary/third_party/<name>/BUILD.gn」(和其他檔案) ,例如 .gni 檔案等來源路徑),這樣才能使用新來源 位置://third_party/<name>/src。您必須更新所有來源 包括目錄路徑等

    範例:https://fxrev.dev/622785

  2. 更新整合資訊清單。

    將現有第三方專案的 path (而非 name) 替換為以下位置: 使用//third_party/<name>/src //third_party/<name>,同時保留 先前的版本則未變更合併這項變更後,Fchsia 版本將改為 使用上一個步驟中的 BUILD.gn 檔案。

    範例:http://tqr/457911

  3. 將步驟 1 中新增的 Fuchsia 專屬檔案移至 //third_party/<name>

    現在第三方程式碼以巢狀形式嵌入 //third_party/<name>/src 底下, //third_party/<name>fuchsia.git的一部分,你可以復原 進行轉換步驟 1

    1. 等待整合資訊清單變更進行合併及擲回,然後執行 jiri update。或暫存先前的整合資訊清單變更 步驟,然後執行 jiri update -local-manifest

    2. 將「BUILD.gn」和其他 Fuchsia 特定檔案從 //build/secondary/<name>//third_party/<name>

    3. 更新 //.gitignore,讓 //third_party/<name> 已追蹤,但系統並未追蹤到 //third_party/<name>/src

    範例:https://fxrev.dev/622789

  4. //third_party/<name>/src 轉換成鏡子。

    變更 //third_party/<name>/src 以追蹤上游,使其只有 在 git log 中進行上游變更。您只要更新 來參照上游修訂版本雜湊碼。

    範例:http://tqr/427570

延伸閱讀