-
Notifications
You must be signed in to change notification settings - Fork 553
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
config: Clarify ociVersion covering the configuration <-> runtime API #523
Conversation
@@ -12,7 +12,7 @@ Below is a detailed description of each field defined in the configuration forma | |||
|
|||
* **`ociVersion`** (string, required) MUST be in [SemVer v2.0.0](http://semver.org/spec/v2.0.0.html) format and specifies the version of the OpenContainer specification with which the bundle complies. | |||
The OpenContainer spec follows semantic versioning and retains forward and backward compatibility within major versions. | |||
For example, if an implementation is compliant with version 1.0.1 of the spec, it is compatible with the complete 1.x series. | |||
For example, if a configuration is compliant with version 1.1 of this specification, it is compatible with all runtimes that support any 1.1 or later release of this specification, but it not compatible with a runtime that supports 1.0 and not 1.1. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doesn't this break our ability to have breaking changes on major releases? Especially the wording "or any later relase of this specification".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On Tue, Jul 26, 2016 at 03:00:34PM -0700, Aleksa Sarai wrote:
-For example, if an implementation is compliant with version 1.0.1 of the spec, it is compatible with the complete 1.x series.
+For example, if a configuration is compliant with version 1.1 of this specification, it is compatible with all runtimes that support any 1.1 or later release of this specification, but it not compatible with a runtime that supports 1.0 and not 1.1.Doesn't this break our ability to have breaking changes on major
releases? I prefer the 1.x series wording for this.
Neither line mentions major bumps at all. If we want a major-bump
line, I suggest something like:
Once a 2.0 spec is cut, a 1.x configuration will not be compatible
runtimes that only support 2.x configurations (and nothing in the
1.x line).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"but it not" -> "but it is not"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On Thu, Sep 08, 2016 at 10:31:52AM -0700, Vincent Batts wrote:
-For example, if an implementation is compliant with version 1.0.1 of the spec, it is compatible with the complete 1.x series.
+For example, if a configuration is compliant with version 1.1 of this specification, it is compatible with all runtimes that support any 1.1 or later release of this specification, but it not compatible with a runtime that supports 1.0 and not 1.1."but it not" -> "but it is not"
This one has been quiet for a while, so I thought I'd give it a bump. There seem to be other versioning interpretations floating around as
So breaking the configuration ↔ runtime API interface makes life And breaking the configuration ↔ runtime interface makes life I'm personally more concerned about the configuration ↔ runtime API As @philips points out 1, there's a lot of mass behind runtime
|
dd79e12
to
bd51886
Compare
needs a rebase |
There are other APIs described in this specification (e.g. the state JSON format, and the in-flight command-line API [1]), but this string covers the configuration file and referenced objects (e.g. the filesystem at root.path). As additional, backwards compatible features are added to the spec (leading to 1.1, 1.2, etc. releases) and supported by runtimes, those runtimes will *still* stupport 1.0 configs. Once a 2.0 spec is cut, runtimes that only support 2.0 (and nothing in the 1.0 line) will no longer support the 1.0 config. My preferred approach here would be to use JSON-LD [2,3,4] to explicitly document the intended semantics for each field, which would allow us to drop the config-wide version and version each field independently. That would mean a breaking change on a particular field would only break compatibility for folks who were using that field. Unfortunately, I haven't had much luck pushing the consensus in that direction. This commit does not add wording about how the runtime and other consumers should handle an incompatible version. We can address that once the command-line API lands. [1]: opencontainers#513 [2]: opencontainers#371 (comment) [3]: opencontainers/image-spec#111 (comment) [4]: opencontainers#510 (comment) Signed-off-by: W. Trevor King <wking@tremily.us>
bd51886
to
c94e7c0
Compare
There are other APIs described in this specification (e.g. the state JSON format, and the in-flight command-line API), but this string covers the configuration file and referenced objects (e.g. the filesystem at root.path). As additional, backwards compatible features are added to the spec (leading to 1.1, 1.2, etc. releases) and supported by runtimes, those runtimes will still stupport 1.0 configs. Once a 2.0 spec is cut, runtimes that only support 2.0 (and nothing in the 1.0 line) will no longer support the 1.0 config.
My preferred approach here would be to use JSON-LD to explicitly document the intended semantics for each field, which would allow us to drop the config-wide version and version each field independently. That would mean a breaking change on a particular field would only break compatibility for folks who were using that field. Unfortunately, I haven't had much luck pushing the consensus in that direction.
This commit does not add wording about how the runtime and other consumers should handle an incompatible version. We can address that once the command-line API lands.
@duglin was slated to file a PR for this, but it's been a while since that meeting so I thought I'd work one up myself ;). There is also some discussion on this issue in opencontainers/tob#16.