blob: e3627c30d290fc4b316c3db0ce61d2b223f065cd [file] [log] [blame] [view]
# README.fuchsia file syntax
`README.fuchsia` files are used to annotate third-party source libraries
with some useful metadata, such as code origin, version, license, and security
critical label.
The format of these files consists of one or more directive lines,
followed by unstructured description and notes.
Directives consist of a directive keyword at the beginning of the line,
immediately followed by a colon and a value that extends to the end of
the line. The value may have surrounding whitespace, and blank lines may
appear before or between directives.
Several directives are described below, but other directives may appear
in `README.fuchsia` files and software that consumes them should not
treat the appearance of an unknown directive as an error. Similarly,
such software should match directive keywords case-insensitively.
Description lines are optional and follow a `Description` directive
that must appear on a line by itself prior to any unstructured
description text.
## Syntax
```
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
```
## Common directive keywords
Common directive keywords include:
* `Name`
Descriptive name of the component. This should be included if the name
is not obvious from context.
```
Name: OpenSSH
```
* `URL`
The URL where the component lives. If the component is based on a
specific release, then list that explicitly.
```
URL: https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/openssh-7.6.tar.gz
```
Otherwise, list the vendor's website.
```
URL: https://www.openssh.com/
```
This directive may be repeated to include multiple URLs if necessary.
* `Version`
Lists a version number or commit identifier for the software. If the
version is apparent from the *URL* or commit history, then this may be
omitted.
```
Version: 7.6
```
* `License`
The license under which the component is distributed. Only standard forms
are accepted, e.g. MIT/X11, BSD, Apache 2.0.
```
License: BSD
```
* `License File`
File that contains a copy of the component's license. This must name
an existing file in the repository, relative to the `README.fuchsia`
file.
```
License File: LICENSE
```
This directive may be repeated to include multiple files if necessary.
* `Upstream Git`
Links to the upstream Git repository from which this component has
been branched. This should be included for any software branched from
an external Git repository.
```
Upstream Git: https://github.com/openssh/openssh-portable
```
* `Security Critical`
A `yes` or `no` label indicating whether the package is security critical,
useful for assessing the impact security bugs in the package have on Fuchsia.
A package is security critical if it is for production use, and does any of
the following:
* Accepts untrustworthy inputs from the internet
* Parses or interprets complex input formats
* Sends data to internet servers
* Collects new data
* Influences or sets security-related policy (including the user experience)
* Is written in a memory-unsafe language (e.g.: C/C++, Rust with unsafe
blocks)
This directive is required.
```
Security Critical: yes
```
* `Description`
Marks the end of directives and the beginning of unstructured
description, it must appear on a line by itself.
```
Description:
A short description of what the package is and is used for.
```
* `Local Modifications`
Enumerate any changes that have been made locally to the package from the
shipping version listed above.
```
Local Modifications:
Added README.fuchsia.
Ported build rules from CMake to GN.
```