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 的元数据 proto 在此处列出的网址类型。 如果没有上游,请使用“This is the canonical public repository”。对于来自 Google 内部代码库的软件包,请使用“Google Internal”。 如有必要,可以重复此指令以包含多个网址。
示例:
URL: https://github.com/openssh/openssh-portable
URL: https://chromium.googlesource.com/chromium/src/
Revision
(对于将 Git 代码库作为上游的依赖项,此字段为必需;如果上游不是 Git 代码库,并且提供了 Version 或 Date,则此字段为可选)。 修订版本通常是 Git 哈希。如果依赖项由自动滚动器或脚本管理,您必须确保 uprev 流程也会使用正确的修订版本更新 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 标签,用于指明软件包是否对安全至关重要,
有助于评估软件包中的安全 bug 对 Fuchsia 的影响。
如果软件包用于生产用途,并且执行以下任何操作,则该软件包对安全至关重要:
- 接受来自互联网的不可信输入
- 解析或解释复杂的输入格式
- 将数据发送到互联网服务器
- 收集新数据
- 影响或设置与安全相关的政策(包括用户体验)
- 使用内存不安全的语言编写(例如:C/C++、带有不安全块的 Rust)
此指令是必需的。
Security Critical: yes
License Android Compatible
(如果软件包未发布或使用标准形式的许可,则为可选)
`yes` 或 `no`,具体取决于软件包是否使用与 Android 兼容的许可。yesno
License Android Compatible: yes
CPEPrefix
(可选,但如果未提供 网址 和修订版本,则为必需) 根据
搜索结果,表示上游
软件包的“通用
平台枚举”版本 2.3(首选)或 2.2。这将用于报告上游软件包中的已知漏洞,以便我们确保合并这些漏洞的修复程序。请确保您使用的是最接近的适用上游版本,并遵循该软件包的 CPE 的标准格式。例如,cpe:/a:xmlsoft:libxslt:1.0.10。如果软件包没有可用的 CPE,请指定“unknown”。如果您使用的是介于两个公开版本之间的修补或修改版本,请“向下舍入”到较低的公开版本。
Version
(如果使用 CPEPrefix 进行漏洞扫描,则为必需)这通常是 Git 标记。 如果不是 Git,则应该是软件包的可搜索版本号(如果软件包没有版本,或者按日期或修订版本进行版本控制,则此字段应为“N/A”,并且应在相应字段中枚举修订版本或日期)。如果依赖项由自动滚动器或脚本管理,您必须确保 uprev 流程也会使用正确的版本更新 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
作为补充参考。