README.fuchsia 檔案用於註解第三方來源程式庫,並提供一些實用的中繼資料,例如程式碼來源、版本、授權和安全性重要標籤。
這些檔案的格式包含一或多個指令行,後接非結構化說明和附註。
指令由行首的指令關鍵字組成,後面緊接著半形冒號和值,值會延伸至行尾。值可能含有周圍的空白字元,且指令前後或之間可能會出現空白行。
下文將說明多項指令,但 README.fuchsia 檔案中可能會出現其他指令,而使用這些檔案的軟體不應將不明指令視為錯誤。同樣地,這類軟體應不區分大小寫,比對指令關鍵字。
說明行是選用項目,且須遵循 Description 指令,該指令必須出現在任何非結構化說明文字之前,且不得與其他文字共用一行。
語法
file := directive-line* description?
directive-line := directive | blank-line
directive := keyword ":" SPACE* value SPACE* EOL
value := NONBLANK ANYCHAR*
description := description-directive description-line*
description-directive := "Description:" SPACE* EOL
description-line := ANYCHAR* EOL
keyword := [A-Za-z0-9][A-Za-z0-9 ]*
blank-line := SPACE* EOL
SPACE := any whitespace character
EOL := end of line character
NONBLANK := any non-whitespace, non-EOL character
ANYCHAR := any character but EOL
需求條件
指令關鍵字及其定義如下。本節會綜合說明每個 README.fuchsia 應有的內容,並隨著時間推移持續更新:
- 為進行安全漏洞掃描,每個 README.fuchsia 都必須提供下列最新資訊:
URL和Revision:如果是 Git 存放區,就必須選擇這個選項。 或CPEPrefix和Version
這項資訊可為安全漏洞掃描器提供足夠資訊,以便準確掃描這些依附元件。
- 為進行授權,每個 README.fuchsia 都必須保留以下最新資訊:
License和License File
常見指令關鍵字
常見的指令關鍵字包括:
Name
套件的描述性名稱。
Name: OpenSSH
Short Name
(選用) 套件的發布名稱 (例如 libxml、openssl 等)。
Short Name: openssh
URL
(必要) 套件所在的網址,也就是 Git 存放區的可複製網址、套件管理工具中套件的套件管理工具網址,或此處列出的網址類型 (如 AutoVM 的中繼資料原型所示)。 如果沒有上游,請使用「這是標準公開存放區」。如果是來自 Google 內部存放區的套件,請使用「Google Internal」。如有需要,這項指令可以重複使用,納入多個網址。
示例:
URL: https://github.com/openssh/openssh-portable
URL: https://chromium.googlesource.com/chromium/src/
Revision
(如果依附元件的上游是 Git 存放區,則為必要;如果上游不是 Git 存放區,且提供版本或日期,則為選用)。修訂版本通常是 git 雜湊。如果依附元件是由自動捲動器或指令碼管理,請務必確保升級程序也會更新 README.fuchsia 檔案,並使用正確的修訂版本。
Revision: 8950d99ba1ba67280fbd1e5445214d2cebe966bb
Date
套件更新日期,格式為 YYYY-MM-DD。
Date: 2018-02-14
License
套件的發布授權。如需允許的授權條款和其他指引相關政策,請參閱 Fuchsia 開放原始碼授權政策。
License: BSD
License File
從 README.fuchsia 檔案到授權檔案的相對路徑。檔案應包含套件授權的副本,並與上方提供的授權相符。所有套件都應包含有效授權,無論是否出貨。
如有需要,可以重複使用這項指令,納入多個檔案。
License File: LICENSE
Security Critical
yes 或 no 標籤,指出套件是否攸關安全性,有助於評估套件中的安全性錯誤對 Fuchsia 的影響。
如果套件用於正式環境,且執行下列任一動作,即屬於安全關鍵套件:
- 接受來自網際網路的不可信輸入內容
- 剖析或解讀複雜的輸入格式
- 將資料傳送至網際網路伺服器
- 收集新資料
- 影響或設定安全性相關政策 (包括使用者體驗)
- 以記憶體不安全的語言編寫 (例如:C/C++、Rust (含不安全區塊)
這是必要指令。
Security Critical: yes
License Android Compatible
(如果套件未隨附或使用標準表單授權,則為選用)
視套件是否使用與 Android 相容的授權而定,可以是 yes 或 no。
License Android Compatible: yes
CPEPrefix
(選填,但如未提供網址和修訂版本,則為必填)。根據搜尋,這是「通用平台列舉」版本 2.3 (建議) 或 2.2,代表上游套件。這項資訊會用於回報上游軟體套件中的已知安全漏洞,確保我們能合併這些安全漏洞的修正程式。請務必根據該套件的 CPE 標準格式,使用最接近的適用上游版本。例如:cpe:/a:xmlsoft:libxslt:1.0.10。如果套件沒有 CPE,請指定「unknown」。如果您使用介於兩個公開版本之間的修補或修改版本,請「向下捨入」至較低的公開版本。
Version
(如果使用 CPEPrefix 進行安全漏洞掃描,則為必要項目) 這通常是 Git 標記。如果不是 Git,則應為可搜尋的套件版本號碼 (如果套件沒有版本,或版本是依日期或修訂版本而定,這個欄位應為「不適用」,且修訂版本或日期應列舉在適當的欄位中)。如果依附元件是由自動捲動器或指令碼管理,請務必確保升級程序也會更新 README.fuchsia 檔案,並使用正確的版本。
Version: 7.6
Description
簡短說明套件內容和用途。
Description:
This package does x, y, and z.
Local Modifications
列舉對上述出貨版本套件所做的任何本機變更。
如果第三方套件中的檔案 (例如在 Git 簽出期間擷取的檔案) 未經修改,請在此處輸入「None」(不含外圍引號)。
Local Modifications:
Added README.fuchsia.
Ported build rules from CMake to GN.
參考資料
README.fuchsia 格式是以 Chromium 的 README.chromium 格式為準。
請參閱 Chromium 的 adding_to_third_party.md 做為補充參考資料。