Skip to content

Commit 35b0e9e

Browse files
committed
config: Clarify MUST for platform.os and .arch
The old platform.os text had two MUST conditions. The first could have been read "the runtime MUST generate an error if invoked with a config.json whose platform.os is incompatible with the host platform" (which is the direction I'm going with this commit). However, it could also have been read "the bundle-validator MUST generate an error if platform.os is incompatible with the content the bundle's other content (e.g. 'linux' in platform.os, but only Windows binaries in the bundle's rootfs). For the second MUST, I doubt we want to require a compliant runtime support all Go architectures itself. And there is a benefit to pointing runtime/bundle authors at the Go set, but not much benefit in making that a hard limit [1,2]. The rewording here follows [2] in acknowledging that process.arch-matching is something that the config author and runtime caller have to sort out between themselves and pointing them at the Go docs and a registration process to avoid fragmenting the community. [1]: opencontainers/image-spec#29 [2]: opencontainers/image-spec#60 Signed-off-by: W. Trevor King <wking@tremily.us>
1 parent 5d27f3a commit 35b0e9e

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

config.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,14 @@ _Note: For Solaris, uid and gid specify the uid and gid of the process inside th
190190

191191
## Platform
192192

193-
* **`os`** (string, required) specifies the operating system family this image MUST run on. Values for os MUST be in the list specified by the Go Language document for [`$GOOS`](https://golang.org/doc/install/source#environment).
194-
* **`arch`** (string, required) specifies the instruction set for which the binaries in the image have been compiled. Values for arch MUST be in the list specified by the Go Language document for [`$GOARCH`](https://golang.org/doc/install/source#environment).
193+
* **`os`** (string, required) specifies the operating system family this image targets.
194+
The runtime MUST generate an error if it does not support the configured **`os`**.
195+
Bundles SHOULD use, and runtimes SHOULD understand, **`os`** entries listed in the Go Language document for [`$GOOS`][go-environment].
196+
If an operating system is not included in the `$GOOS` documentation, it SHOULD be submitted to this specification for standardization.
197+
* **`arch`** (string, required) specifies the instruction set for which the binaries in the image have been compiled.
198+
The runtime MUST generate an error if it does not support the configured **`arch`**.
199+
Values for **`arch`** SHOULD use, and runtimes SHOULD understand, **`arch`** entries listed in the Go Language document for [`$GOARCH`][go-environment].
200+
If an architecture is not included in the `$GOARCH` documentation, it SHOULD be submitted to this specification for standardization.
195201

196202
### Example
197203

@@ -664,3 +670,4 @@ Here is a full example `config.json` for reference.
664670

665671
[runtime-namespace]: glossary.md#runtime-namespace
666672
[uts-namespace]: http://man7.org/linux/man-pages/man7/namespaces.7.html
673+
[go-environment]: https://golang.org/doc/install/source#environment

0 commit comments

Comments
 (0)