Skip to content

Commit 199e02a

Browse files
committed
split terminology between slsa spec and build track, improve navbar
1 parent c646434 commit 199e02a

File tree

5 files changed

+259
-222
lines changed

5 files changed

+259
-222
lines changed

docs/_data/nav/main.yml

+10-6
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
url: /current-activities
99
description: What the SLSA community is currently working on
1010

11-
- title: SLSA Specification 1.1 Draft
11+
- title: SLSA 1.1 Draft
1212
description: >
1313
This section describes SLSA's security levels and requirements for each track.
1414
If you want to achieve SLSA a particular level, these are the requirements
@@ -109,7 +109,7 @@
109109
url: /spec/v1.1/onepage
110110
skip_next_prev: true # don't show as a next/prev link
111111

112-
- title: SLSA Specification 1.0
112+
- title: SLSA 1.0
113113
description: >
114114
This section describes SLSA's security levels and requirements for each track.
115115
If you want to achieve SLSA a particular level, these are the requirements
@@ -210,7 +210,7 @@
210210
url: /spec/v1.0/onepage
211211
skip_next_prev: true # don't show as a next/prev link
212212

213-
- title: SLSA Working Draft
213+
- title: SLSA Draft
214214
url: /spec/draft/
215215
children:
216216

@@ -256,6 +256,10 @@
256256
you'll need to meet.
257257
children:
258258

259+
- title: Terminology
260+
url: /spec/draft/terminology
261+
description: Terminology and model used by SLSA
262+
259263
- title: Security levels and tracks
260264
url: /spec/draft/levels
261265
description: Overview of SLSA's tracks and levels, intended for all audiences
@@ -286,7 +290,7 @@
286290
url: /spec/draft/onepage
287291
skip_next_prev: true # don't show as a next/prev link
288292

289-
- title: SLSA Build 1.0
293+
- title: Build Track 1.0
290294
url: /build/v1.0/
291295
children:
292296

@@ -313,7 +317,7 @@
313317
url: /build/v1.0/verifying-systems
314318
description: Guidelines for securing SLSA Build L3+ builders, intended for platform implementers
315319

316-
- title: SLSA Source WD
320+
- title: Source Track Draft
317321
url: /source/draft/
318322
children:
319323

@@ -325,7 +329,7 @@
325329
url: /source/draft/verifying-source
326330
description: Guidance for verifying properties of source revisions using SLSA source provenance attestations
327331

328-
- title: SLSA Build Env. WD
332+
- title: Build Env. Track Draft
329333
url: /build-env/draft/
330334

331335
- title: How to SLSA

docs/build/v1.0/levels.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -227,9 +227,9 @@ All of [Build L2], plus:
227227
[build l1]: #build-l1
228228
[build l2]: #build-l2
229229
[build l3]: #build-l3
230-
[future versions]: ../../spec/v1.0/future-directions.md
230+
[future versions]: /spec/v1.0/future-directions
231231
[hosted]: requirements.md#isolation-strength
232-
[previous version]: ../../spec/v0.1/levels.md
233-
[provenance]: terminology.md
232+
[previous version]: /spec/v0.1/levels
233+
[provenance]: /spec/v1.0/terminology
234234
[verification]: verifying-artifacts.md
235-
[suppy chain threats]: ../../spec/v1.0/threats.md
235+
[suppy chain threats]: /spec/v1.0/threats

docs/build/v1.0/terminology.md

+7-212
Original file line numberDiff line numberDiff line change
@@ -22,51 +22,12 @@ layout: specifications
2222
self-described services and systems can continue to be called by these terms.
2323
-->
2424

25-
Before diving into the [Build track levels](levels.md), we need to establish a core set
26-
of terminology and models to describe what we're protecting.
25+
Before diving into the [Build track levels](levels.md), we need to establish a
26+
core set of terminology and models to describe what we're protecting. This
27+
extends the [general terminology].
2728

2829
## Software supply chain
2930

30-
**TODO:** Update the text to match the new diagram.
31-
32-
SLSA's framework addresses every step of the software supply chain - the
33-
sequence of steps resulting in the creation of an artifact. We represent a
34-
supply chain as a [directed acyclic graph] of sources, builds, dependencies, and
35-
packages. One artifact's supply chain is a combination of its dependencies'
36-
supply chains plus its own sources and builds.
37-
38-
[directed acyclic graph]: https://en.wikipedia.org/wiki/Directed_acyclic_graph
39-
40-
![Software Supply Chain Model](images/supply-chain-model.svg)
41-
42-
| Term | Description | Example
43-
| --- | --- | ---
44-
| Artifact | An immutable blob of data; primarily refers to software, but SLSA can be used for any artifact. | A file, a git commit, a directory of files (serialized in some way), a container image, a firmware image.
45-
| Attestation | An authenticated statement (metadata) about a software artifact or collection of software artifacts. | A signed [SLSA Provenance] file.
46-
| Source | Artifact that was directly authored or reviewed by persons, without modification. It is the beginning of the supply chain; we do not trace the provenance back any further. | Git commit (source) hosted on GitHub (platform).
47-
| [Build] | Process that transforms a set of input artifacts into a set of output artifacts. The inputs may be sources, dependencies, or ephemeral build outputs. | .travis.yml (process) run by Travis CI (platform).
48-
| [Package] | Artifact that is "published" for use by others. In the model, it is always the output of a build process, though that build process can be a no-op. | Docker image (package) distributed on DockerHub (platform). A ZIP file containing source code is a package, not a source, because it is built from some other source, such as a git commit.
49-
| Dependency | Artifact that is an input to a build process but that is not a source. In the model, it is always a package. | Alpine package (package) distributed on Alpine Linux (platform).
50-
51-
[build]: #build-model
52-
[package]: #package-model
53-
[SLSA Provenance]: /provenance/v1
54-
55-
### Roles
56-
57-
Throughout the specification, you will see reference to the following roles
58-
that take part in the software supply chain. Note that in practice a role may
59-
be filled by more than one person or an organization. Similarly, a person or
60-
organization may act as more than one role in a particular software supply
61-
chain.
62-
63-
| Role | Description | Examples
64-
| --- | --- | ---
65-
| Producer | A party who creates software and provides it to others. Producers are often also consumers. | An open source project's maintainers. A software vendor.
66-
| Verifier | A party who inspect an artifact's provenance to determine the artifact's authenticity. | A business's software ingestion system. A programming language ecosystem's package registry.
67-
| Consumer | A party who uses software provided by a producer. The consumer may verify provenance for software they consume or delegate that responsibility to a separate verifier. | A developer who uses open source software distributions. A business that uses a point of sale system.
68-
| Infrastructure provider | A party who provides software or services to other roles. | A package registry's maintainers. A build platform's maintainers.
69-
7031
### Build model
7132

7233
<p align="center"><img src="images/build-model.svg" alt="Model Build"></p>
@@ -177,176 +138,6 @@ A typical build environment will go through the following lifecycle:
177138
4. *Build execution*: Finally, the build agent within the environment executes
178139
the tenant's build definition.
179140

180-
### Package model
181-
182-
Software is distributed in identifiable units called <dfn>packages</dfn>
183-
according to the rules and conventions of a <dfn>package ecosystem</dfn>.
184-
Examples of formal ecosystems include [Python/PyPA](https://www.pypa.io),
185-
[Debian/Apt](https://wiki.debian.org/DebianRepository/Format), and
186-
[OCI](https://github.com/opencontainers/distribution-spec), while examples of
187-
informal ecosystems include links to files on a website or distribution of
188-
first-party software within a company.
189-
190-
Abstractly, a consumer locates software within an ecosystem by asking a
191-
<dfn>package registry</dfn> to resolve a mutable <dfn>package name</dfn> into an
192-
immutable <dfn>package artifact</dfn>.[^label] To <dfn>publish</dfn> a package
193-
artifact, the software producer asks the registry to update this mapping to
194-
resolve to the new artifact. The registry represents the entity or entities with
195-
the power to alter what artifacts are accepted by consumers for a given package
196-
name. For example, if consumers only accept packages signed by a particular
197-
public key, then it is access to that public key that serves as the registry.
198-
199-
The package name is the primary security boundary within a package ecosystem.
200-
Different package names represent materially different pieces of
201-
software---different owners, behaviors, security properties, and so on.
202-
Therefore, **the package name is the primary unit being protected in SLSA**.
203-
It is the primary identifier to which consumers attach expectations.
204-
205-
[^label]: This resolution might include a version number, label, or some other
206-
selector in addition to the package name, but that is not important to SLSA.
207-
208-
| Term | Description
209-
| ---- | -----------
210-
| Package | An identifiable unit of software intended for distribution, ambiguously meaning either an "artifact" or a "package name". Only use this term when the ambiguity is acceptable or desirable.
211-
| Package artifact | A file or other immutable object that is intended for distribution.
212-
| Package ecosystem | A set of rules and conventions governing how packages are distributed, including how clients resolve a package name into one or more specific artifacts.
213-
| Package manager client | Client-side tooling to interact with a package ecosystem.
214-
| Package name | <p>The primary identifier for a mutable collection of artifacts that all represent different versions of the same software. This is the primary identifier that consumers use to obtain the software.<p>A package name is specific to an ecosystem + registry, has a maintainer, is more general than a specific hash or version, and has a "correct" source location. A package ecosystem may group package names into some sort of hierarchy, such as the Group ID in Maven, though SLSA does not have a special term for this.
215-
| Package registry | An entity responsible for mapping package names to artifacts within a packaging ecosystem. Most ecosystems support multiple registries, usually a single global registry and multiple private registries.
216-
| Publish [a package] | Make an artifact available for use by registering it with the package registry. In technical terms, this means associating an artifact to a package name. This does not necessarily mean making the artifact fully public; an artifact may be published for only a subset of users, such as internal testing or a closed beta.
217-
218-
<details><summary>Ambiguous terms to avoid</summary>
219-
220-
- *Package repository:* Could mean either package registry or package name,
221-
depending on the ecosystem. To avoid confusion, we always use "repository"
222-
exclusively to mean "source repository", where there is no ambiguity.
223-
- *Package manager* (without "client"): Could mean either package ecosystem,
224-
package registry, or client-side tooling.
225-
226-
</details>
227-
228-
### Mapping to real-world ecosystems
229-
230-
Most real-world ecosystems fit the package model above but use different terms.
231-
The table below attempts to document how various ecosystems map to the SLSA
232-
Package model. There are likely mistakes and omissions; corrections and
233-
additions are welcome!
234-
235-
<!-- Please keep this list sorted alphabetically within each section. -->
236-
237-
<table>
238-
<tr>
239-
<th>Package ecosystem
240-
<th>Package registry
241-
<th>Package name
242-
<th>Package artifact
243-
<tr>
244-
<td colspan=4><em>Languages</em>
245-
<tr>
246-
<td><a href="https://doc.rust-lang.org/cargo/appendix/glossary.html">Cargo</a> (Rust)
247-
<td><a href="https://doc.rust-lang.org/cargo/appendix/glossary.html#registry">Registry</a>
248-
<td><a href="https://doc.rust-lang.org/cargo/appendix/glossary.html#crate">Crate name</a>
249-
<td><a href="https://doc.rust-lang.org/cargo/appendix/glossary.html#artifact">Artifact</a>
250-
<tr>
251-
<td><a href="http://neilb.org/2015/09/05/cpan-glossary.html">CPAN</a> (Perl)
252-
<td>Upload server
253-
<td>Distribution
254-
<td>Release (or Distribution)
255-
<tr>
256-
<td><a href="https://go.dev/ref/mod">Go</a>
257-
<td><a href="https://go.dev/ref/mod#glos-module-proxy">Module proxy</a>
258-
<td><a href="https://go.dev/ref/mod#glos-module-path">Module path</a>
259-
<td><a href="https://go.dev/ref/mod#glos-module">Module</a>
260-
<tr>
261-
<td><a href="https://maven.apache.org/glossary">Maven</a> (Java)
262-
<td>Repository
263-
<td>Group ID + Artifact ID
264-
<td>Artifact
265-
<tr>
266-
<td><a href="https://www.npmjs.com/">npm</a> (JavaScript)
267-
<td><a href="https://docs.npmjs.com/about-the-public-npm-registry">Registry</a>
268-
<td><a href="https://docs.npmjs.com/package-name-guidelines">Package Name</a>
269-
<td><a href="https://docs.npmjs.com/about-packages-and-modules">Package</a>
270-
<tr>
271-
<td><a href="https://docs.microsoft.com/en-us/nuget/nuget-org/overview-nuget-org">NuGet</a> (C#)
272-
<td>Host
273-
<td>Project
274-
<td>Package
275-
<tr>
276-
<td><a href="https://packaging.python.org/en/latest/specifications/binary-distribution-format/#file-name-convention">PyPA</a> (Python)
277-
<td><a href="https://packaging.python.org/en/latest/glossary/#term-Package-Index">Index</a>
278-
<td><a href="https://packaging.python.org/en/latest/glossary/#term-Project">Project Name</a>
279-
<td><a href="https://packaging.python.org/en/latest/glossary/#term-Distribution-Package">Distribution</a>
280-
<tr>
281-
<td colspan=4><em>Operating systems</em>
282-
<tr>
283-
<td><a href="https://wiki.debian.org/Teams/Dpkg">Dpkg </a> (e.g. Debian)
284-
<td><em>?</em>
285-
<td>Package name
286-
<td>Package
287-
<tr>
288-
<td><a href="https://docs.flatpak.org/en/latest/introduction.html#terminology">Flatpak</a>
289-
<td>Repository
290-
<td>Application
291-
<td>Bundle
292-
<tr>
293-
<td><a href="https://docs.brew.sh/Manpage">Homebrew</a> (e.g. Mac)
294-
<td>Repository (Tap)
295-
<td>Package name (Formula)
296-
<td>Binary package (Bottle)
297-
<tr>
298-
<td><a href="https://wiki.archlinux.org/title/Pacman">Pacman</a> (e.g. Arch)
299-
<td>Repository
300-
<td>Package name
301-
<td>Package
302-
<tr>
303-
<td><a href="https://rpm.org">RPM</a> (e.g. Red Hat)
304-
<td>Repository
305-
<td>Package name
306-
<td>Package
307-
<tr>
308-
<td><a href="https://nixos.org/manual/nix">Nix</a> (e.g. <a href="https://nixos.org/">NixOS</a>)
309-
<td>Repository (e.g. <a href="https://github.com/NixOS/nixpkgs">Nixpkgs</a>) or <a href="https://nixos.org/manual/nix/stable/glossary.html#gloss-binary-cache">binary cache</a>
310-
<td><a href="https://nixos.org/manual/nix/stable/language/derivations.html">Derivation name</a>
311-
<td><a href="https://nixos.org/manual/nix/stable/language/derivations.html">Derivation</a> or <a href="https://nixos.org/manual/nix/stable/glossary.html#gloss-store-object">store object</a>
312-
<tr>
313-
<td colspan=4><em>Storage systems</em>
314-
<tr>
315-
<td><a href="https://cloud.google.com/storage/docs/key-terms">GCS</a>
316-
<td><em>n/a</em>
317-
<td>Object name
318-
<td>Object
319-
<tr>
320-
<td><a href="https://github.com/opencontainers/distribution-spec/blob/main/spec.md#definitions">OCI</a>/Docker
321-
<td>Registry
322-
<td>Repository
323-
<td>Object
324-
<tr>
325-
<td colspan=4><em>Meta</em>
326-
<tr>
327-
<td><a href="https://deps.dev/glossary">deps.dev</a>: <a href="https://deps.dev/glossary#system">System</a>
328-
<td><a href="https://deps.dev/glossary#packaging-authority">Packaging authority</a>
329-
<td><a href="https://deps.dev/glossary#package">Package</a>
330-
<td><em>n/a</em>
331-
<tr>
332-
<td><a href="https://github.com/package-url/purl-spec/blob/master/PURL-SPECIFICATION.rst">purl</a>: type
333-
<td>Namespace
334-
<td>Name
335-
<td><em>n/a</em>
336-
</table>
337-
338-
Notes:
339-
340-
- Go uses a significantly different distribution model than other ecosystems.
341-
In go, the package name is a source repository URL. While clients can fetch
342-
directly from that URL---in which case there is no "package" or
343-
"registry"---they usually fetch a zip file from a *module proxy*. The module
344-
proxy acts as both a builder (by constructing the package artifact from
345-
source) and a registry (by mapping package name to package artifact). People
346-
trust the module proxy because builds are independently reproducible and a
347-
*checksum database* guarantees that all clients receive the same artifact
348-
for a given URL.
349-
350141
### Verification model
351142

352143
Verification in SLSA is performed in two ways. Firstly, the build platform is
@@ -389,3 +180,7 @@ implemented for different, broadly defined, package ecosystems.
389180
| Build platform certification | Performed by the language ecosystem packaging authority.
390181

391182
</details>
183+
184+
<!-- Links definition -->
185+
186+
[general terminology]: ../../spec/v1.0/terminology

0 commit comments

Comments
 (0)