README.fuchsia 文件语法

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 都需要保留有关以下内容的最新信息:
    • URLRevision:如果是 Git 代码库,则这是必需的选项。 或
    • CPEPrefixVersion

此信息为漏洞扫描器提供了足够的信息,以便准确扫描这些依赖项。

  • 出于许可目的,每个 README.fuchsia 都需要保留有关以下内容的最新信息:
    • LicenseLicense 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

一个 yesno 标签,用于指明软件包是否对安全至关重要, 有助于评估软件包中的安全 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 作为补充参考。