第三方程式碼是 Fuchsia 結帳程序的一部分,但不具著作權 而且不受 Fuchsia 的授權規範。也就是任何程式碼 而不屬於 Fuchsia 作者所擁有的 100%,則使用第三方程式碼來管理。
Fuchsia 專案會在
//third_party/
目錄。這種做法也稱為供應商。
供應商可確保第三方程式碼是由 Fuchsia 擁有的來源提供
和存放區,並且會在已知與其他程式碼搭配使用的修訂版本中提供
Fuchsia 結帳頁面中的價格。
新增第三方程式碼時,請按照下列步驟操作,確保程式碼符合規定 與 Fuchsia 專案政策一同執行。
事前準備
所有外部程式碼都必須完成開放原始碼審查委員會 (OSRB) 程序,新增至 Fuchsia 平台來源樹狀結構。產生 OSRB 要求已獲準,請按照下列步驟操作。
特定語言指南
如要新增 Rust、Go 或 Python 依附元件,請按照下列指南操作:
Rust:遵循外部 Rust Crate 指南。
前往:請參閱
//third_party/golibs/
。Python:按照外部 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 程式碼加入上述說明的版面配置 他們也可以捐款
如要將舊版第三方存放區遷移至這個版面配置,請按照下列步驟操作: 步驟:
將 Fuchsia 專用的
BUILD.gn
檔案移至//build/secondary
。- 將
BUILD.gn
檔案從//third_party/<name>
複製到//build/secondary/third_party/<name>
。如有多個BUILD.gn
檔案,在//build/secondary
下方保留相同的子樹狀結構。 - 在複製的
BUILD.gn
檔案中,更新第三方路徑參照 格式為//third_party/<name>/
//third_party/<name>/src/
。 - 將
OWNERS
從//third_party/<name>
複製到//build/secondary/<name>
, 或建立這個值區查看OWNERS
檔案,確保 遵循最佳做法。 - 將
README.fuchsia
從//third_party/<name>
複製到//build/secondary/<name>
。查看這個檔案的內容,並確認 確認中繼資料正確無誤在罕見的情況下會修改 對第三方存放區中的第三方程式碼所做的變更,這類變更 列於README.fuchsia
中。本機修改通常需要您 提出任何在本指南未涵蓋的特殊住宿設施。 - 檢查
//third_party/<name>
是否有任何其他第一方.gni
檔案, 也把這些資源一併移至//build/secondary/<name>
。 - 更新「
//build/secondary/third_party/<name>/BUILD.gn
」(和其他檔案) ,例如.gni
檔案等來源路徑),這樣才能使用新來源 位置://third_party/<name>/src
。您必須更新所有來源 包括目錄路徑等
- 將
更新整合資訊清單。
將現有第三方專案的
path
(而非name
) 替換為以下位置: 使用//third_party/<name>/src
//third_party/<name>
,同時保留 先前的版本則未變更合併這項變更後,Fchsia 版本將改為 使用上一個步驟中的BUILD.gn
檔案。將步驟 1 中新增的 Fuchsia 專屬檔案移至
//third_party/<name>
。現在第三方程式碼以巢狀形式嵌入
//third_party/<name>/src
底下,//third_party/<name>
是fuchsia.git
的一部分,你可以復原 進行轉換步驟 1等待整合資訊清單變更進行合併及擲回,然後執行
jiri update
。或暫存先前的整合資訊清單變更 步驟,然後執行jiri update -local-manifest
。將「
BUILD.gn
」和其他 Fuchsia 特定檔案從//build/secondary/<name>
到//third_party/<name>
。更新
//.gitignore
,讓//third_party/<name>
已追蹤,但系統並未追蹤到//third_party/<name>/src
。
將
//third_party/<name>/src
轉換成鏡子。變更
//third_party/<name>/src
以追蹤上游,使其只有 在git log
中進行上游變更。您只要更新 來參照上游修訂版本雜湊碼。