github.com/lalkh/containerd@v1.4.3/RELEASES.md (about)

     1  # Versioning and Release
     2  
     3  This document details the versioning and release plan for containerd. Stability
     4  is a top goal for this project and we hope that this document and the processes
     5  it entails will help to achieve that. It covers the release process, versioning
     6  numbering, backporting, API stability and support horizons.
     7  
     8  If you rely on containerd, it would be good to spend time understanding the
     9  areas of the API that are and are not supported and how they impact your
    10  project in the future.
    11  
    12  This document will be considered a living document. Supported timelines,
    13  backport targets and API stability guarantees will be updated here as they
    14  change.
    15  
    16  If there is something that you require or this document leaves out, please
    17  reach out by [filing an issue](https://github.com/containerd/containerd/issues).
    18  
    19  ## Releases
    20  
    21  Releases of containerd will be versioned using dotted triples, similar to
    22  [Semantic Version](http://semver.org/). For the purposes of this document, we
    23  will refer to the respective components of this triple as
    24  `<major>.<minor>.<patch>`. The version number may have additional information,
    25  such as alpha, beta and release candidate qualifications. Such releases will be
    26  considered "pre-releases".
    27  
    28  ### Major and Minor Releases
    29  
    30  Major and minor releases of containerd will be made from master. Releases of
    31  containerd will be marked with GPG signed tags and announced at
    32  https://github.com/containerd/containerd/releases. The tag will be of the
    33  format `v<major>.<minor>.<patch>` and should be made with the command `git tag
    34  -s v<major>.<minor>.<patch>`.
    35  
    36  After a minor release, a branch will be created, with the format
    37  `release/<major>.<minor>` from the minor tag. All further patch releases will
    38  be done from that branch. For example, once we release `v1.0.0`, a branch
    39  `release/1.0` will be created from that tag. All future patch releases will be
    40  done against that branch.
    41  
    42  ### Pre-releases
    43  
    44  Pre-releases, such as alphas, betas and release candidates will be conducted
    45  from their source branch. For major and minor releases, these releases will be
    46  done from master. For patch releases, these pre-releases should be done within
    47  the corresponding release branch.
    48  
    49  While pre-releases are done to assist in the stabilization process, no
    50  guarantees are provided.
    51  
    52  ### Upgrade Path
    53  
    54  The upgrade path for containerd is such that the 0.0.x patch releases are
    55  always backward compatible with its major and minor version. Minor (0.x.0)
    56  version will always be compatible with the previous minor release. i.e. 1.2.0
    57  is backwards compatible with 1.1.0 and 1.1.0 is compatible with 1.0.0. There is
    58  no compatibility guarantees for upgrades that span multiple, _minor_ releases.
    59  For example, 1.0.0 to 1.2.0 is not supported. One should first upgrade to 1.1,
    60  then 1.2.
    61  
    62  There are no compatibility guarantees with upgrades to _major_ versions. For
    63  example, upgrading from 1.0.0 to 2.0.0 may require resources to migrated or
    64  integrations to change. Each major version will be supported for at least 1
    65  year with bug fixes and security patches.
    66  
    67  ### Next Release
    68  
    69  The activity for the next release will be tracked in the
    70  [milestones](https://github.com/containerd/containerd/milestones). If your
    71  issue or PR is not present in a milestone, please reach out to the maintainers
    72  to create the milestone or add an issue or PR to an existing milestone.
    73  
    74  ### Support Horizon
    75  
    76  Support horizons will be defined corresponding to a release branch, identified
    77  by `<major>.<minor>`. Releases branches will be in one of several states:
    78  
    79  - __*Next*__: The next planned release branch.
    80  - __*Active*__: The release branch is currently supported and accepting patches.
    81  - __*Extended*__: The release branch is only accepting security patches.
    82  - __*End of Life*__: The release branch is no longer supported and no new patches will be accepted.
    83  
    84  Releases will be supported up to one year after a _minor_ release. This means that
    85  we will accept bug reports and backports to release branches until the end of
    86  life date. If no new _minor_ release has been made, that release will be
    87  considered supported until 6 months after the next _minor_ is released or one year,
    88  whichever is longer. Additionally, releases may have an extended security support
    89  period after the end of the active period to accept security backports. This
    90  timeframe will be decided by maintainers before the end of the active status.
    91  
    92  The current state is available in the following table:
    93  
    94  | Release | Status      | Start            | End of Life       |
    95  |---------|-------------|------------------|-------------------|
    96  | [0.0](https://github.com/containerd/containerd/releases/tag/0.0.5)   | End of Life | Dec 4, 2015  | - |
    97  | [0.1](https://github.com/containerd/containerd/releases/tag/v0.1.0)  | End of Life | Mar 21, 2016 | - |
    98  | [0.2](https://github.com/containerd/containerd/tree/v0.2.x)          | End of Life | Apr 21, 2016      | December 5, 2017 |
    99  | [1.0](https://github.com/containerd/containerd/releases/tag/v1.0.3)  | End of Life | December 5, 2017  | December 5, 2018 |
   100  | [1.1](https://github.com/containerd/containerd/releases/tag/v1.1.8)  | End of Life | April 23, 2018  | October 23, 2019 |
   101  | [1.2](https://github.com/containerd/containerd/releases/tag/v1.2.13) | Extended   | October 24, 2018 | September 26, 2020 |
   102  | [1.3](https://github.com/containerd/containerd/releases/tag/v1.3.7)  | Active   | September 26, 2019  | February 17, 2021 |
   103  | [1.4](https://github.com/containerd/containerd/releases/tag/v1.4.0)  | Active   | August 17, 2020 | max(August 17, 2021, release of 1.5.0 + 6 months) |
   104  | [1.5](https://github.com/containerd/containerd/milestone/30)         | Next   | TBD  | max(TBD+1 year, release of 1.6.0 + 6 months) |
   105  
   106  Note that branches and release from before 1.0 may not follow these rules.
   107  
   108  This table should be updated as part of the release preparation process.
   109  
   110  ### Backporting
   111  
   112  Backports in containerd are community driven. As maintainers, we'll try to
   113  ensure that sensible bugfixes make it into _active_ release, but our main focus
   114  will be features for the next _minor_ or _major_ release. For the most part,
   115  this process is straightforward and we are here to help make it as smooth as
   116  possible.
   117  
   118  If there are important fixes that need to be backported, please let use know in
   119  one of three ways:
   120  
   121  1. Open an issue.
   122  2. Open a PR with cherry-picked change from master.
   123  3. Open a PR with a ported fix.
   124  
   125  __If you are reporting a security issue, please reach out discreetly at security@containerd.io__.
   126  Remember that backported PRs must follow the versioning guidelines from this document.
   127  
   128  Any release that is "active" can accept backports. Opening a backport PR is
   129  fairly straightforward. The steps differ depending on whether you are pulling
   130  a fix from master or need to draft a new commit specific to a particular
   131  branch.
   132  
   133  To cherry pick a straightforward commit from master, simply use the cherry pick
   134  process:
   135  
   136  1. Pick the branch to which you want backported, usually in the format
   137     `release/<minor>.<major>`. The following will create a branch you can
   138     use to open a PR:
   139  
   140  	```console
   141  	$ git checkout -b my-backport-branch release/<major>.<minor>.
   142  	```
   143  
   144  2. Find the commit you want backported.
   145  3. Apply it to the release branch:
   146  
   147  	```console
   148  	$ git cherry-pick -xsS <commit>
   149  	```
   150  4. Push the branch and open up a PR against the _release branch_:
   151  
   152  	```
   153  	$ git push -u stevvooe my-backport-branch
   154  	```
   155  
   156     Make sure to replace `stevvooe` with whatever fork you are using to open
   157     the PR. When you open the PR, make sure to switch `master` with whatever
   158     release branch you are targeting with the fix.
   159  
   160  If there is no existing fix in master, you should first fix the bug in master,
   161  or ask us a maintainer or contributor to do it via an issue. Once that PR is
   162  completed, open a PR using the process above.
   163  
   164  Only when the bug is not seen in master and must be made for the specific
   165  release branch should you open a PR with new code.
   166  
   167  ## Public API Stability
   168  
   169  The following table provides an overview of the components covered by
   170  containerd versions:
   171  
   172  
   173  | Component        | Status   | Stabilized Version | Links         |
   174  |------------------|----------|--------------------|---------------|
   175  | GRPC API         | Stable   | 1.0                | [api/](api) |
   176  | Metrics API      | Stable   | 1.0                | - |
   177  | Runtime Shim API | Stable   | 1.2                | - |
   178  | Daemon Config    | Stable   | 1.0			       | - |
   179  | Go client API    | Unstable | _future_           | [godoc](https://godoc.org/github.com/containerd/containerd) |
   180  | CRI GRPC API     | Unstable | v1alpha2 _current_ | [cri-api](https://github.com/kubernetes/cri-api/tree/master/pkg/apis/runtime/v1alpha2) |
   181  | `ctr` tool       | Unstable | Out of scope       | - |
   182  
   183  From the version stated in the above table, that component must adhere to the
   184  stability constraints expected in release versions.
   185  
   186  Unless explicitly stated here, components that are called out as unstable or
   187  not covered may change in a future minor version. Breaking changes to
   188  "unstable" components will be avoided in patch versions.
   189  
   190  ### GRPC API
   191  
   192  The primary product of containerd is the GRPC API. As of the 1.0.0 release, the
   193  GRPC API will not have any backwards incompatible changes without a _major_
   194  version jump.
   195  
   196  To ensure compatibility, we have collected the entire GRPC API symbol set into
   197  a single file. At each _minor_ release of containerd, we will move the current
   198  `next.pb.txt` file to a file named for the minor version, such as `1.0.pb.txt`,
   199  enumerating the support services and messages. See [api/](api) for details.
   200  
   201  Note that new services may be added in _minor_ releases. New service methods
   202  and new fields on messages may be added if they are optional.
   203  
   204  `*.pb.txt` files are generated at each API release. They prevent unintentional changes
   205  to the API by having a diff that the CI can run. These files are not intended to be
   206  consumed or used by clients.
   207  
   208  ### Metrics API
   209  
   210  The metrics API that outputs prometheus style metrics will be versioned independently,
   211  prefixed with the API version. i.e. `/v1/metrics`, `/v2/metrics`.
   212  
   213  The metrics API version will be incremented when breaking changes are made to the prometheus
   214  output. New metrics can be added to the output in a backwards compatible manner without
   215  bumping the API version.
   216  
   217  ### Plugins API
   218  
   219  containerd is based on a modular design where plugins are implemented to provide the core functionality.
   220  Plugins implemented in tree are supported by the containerd community unless explicitly specified as non-stable.
   221  Out of tree plugins are not supported by the containerd maintainers.
   222  
   223  Currently, the Windows runtime and snapshot plugins are not stable and not supported.
   224  Please refer to the github milestones for Windows support in a future release.
   225  
   226  #### Error Codes
   227  
   228  Error codes will not change in a patch release, unless a missing error code
   229  causes a blocking bug. Error codes of type "unknown" may change to more
   230  specific types in the future. Any error code that is not "unknown" that is
   231  currently returned by a service will not change without a _major_ release or a
   232  new version of the service.
   233  
   234  If you find that an error code that is required by your application is not
   235  well-documented in the protobuf service description or tested explicitly,
   236  please file and issue and we will clarify.
   237  
   238  #### Opaque Fields
   239  
   240  Unless explicitly stated, the formats of certain fields may not be covered by
   241  this guarantee and should be treated opaquely. For example, don't rely on the
   242  format details of a URL field unless we explicitly say that the field will
   243  follow that format.
   244  
   245  ### Go client API
   246  
   247  The Go client API, documented in
   248  [godoc](https://godoc.org/github.com/containerd/containerd), is currently
   249  considered unstable. It is recommended to vendor the necessary components to
   250  stabilize your project build. Note that because the Go API interfaces with the
   251  GRPC API, clients written against a 1.0 Go API should remain compatible with
   252  future 1.x series releases.
   253  
   254  We intend to stabilize the API in a future release when more integrations have
   255  been carried out.
   256  
   257  Any changes to the API should be detectable at compile time, so upgrading will
   258  be a matter of fixing compilation errors and moving from there.
   259  
   260  ### CRI GRPC API
   261  
   262  The CRI (Container Runtime Interface) GRPC API is used by a Kubernetes kubelet
   263  to communicate with a container runtime. This interface is used to manage
   264  container lifecycles and container images. Currently this API is under
   265  development and unstable across Kubernetes releases. Each Kubernetes release
   266  only supports a single version of CRI and the CRI plugin only implements a
   267  single version of CRI.
   268  
   269  Each _minor_ release will support one version of CRI and at least one version
   270  of Kubernetes. Once this API is stable, a _minor_ will be compatible with any
   271  version of Kubernetes which supports that version of CRI.
   272  
   273  ### `ctr` tool
   274  
   275  The `ctr` tool provides the ability to introspect and understand the containerd
   276  API. It is not considered a primary offering of the project and is unsupported in
   277  that sense. While we understand it's value as a debug tool, it may be completely
   278  refactored or have breaking changes in _minor_ releases.
   279  
   280  Targeting `ctr` for feature additions reflects a misunderstanding of the containerd
   281  architecture. Feature addition should focus on the client Go API and additions to
   282  `ctr` may or may not be accepted at the discretion of the maintainers.
   283  
   284  We will do our best to not break compatibility in the tool in _patch_ releases.
   285  
   286  ### Daemon Configuration
   287  
   288  The daemon's configuration file, commonly located in `/etc/containerd/config.toml`
   289  is versioned and backwards compatible.  The `version` field in the config
   290  file specifies the config's version.  If no version number is specified inside
   291  the config file then it is assumed to be a version 1 config and parsed as such.
   292  Use `version = 2` to enable version 2 config.
   293  
   294  ### Not Covered
   295  
   296  As a general rule, anything not mentioned in this document is not covered by
   297  the stability guidelines and may change in any release. Explicitly, this
   298  pertains to this non-exhaustive list of components:
   299  
   300  - File System layout
   301  - Storage formats
   302  - Snapshot formats
   303  
   304  Between upgrades of subsequent, _minor_ versions, we may migrate these formats.
   305  Any outside processes relying on details of these file system layouts may break
   306  in that process. Container root file systems will be maintained on upgrade.
   307  
   308  ### Exceptions
   309  
   310  We may make exceptions in the interest of __security patches__. If a break is
   311  required, it will be communicated clearly and the solution will be considered
   312  against total impact.
   313  
   314  ## Deprecated features
   315  
   316  The deprecated features are shown in the following table:
   317  
   318  | Component                                                            | Deprecation release | Target release for removal |
   319  |----------------------------------------------------------------------|---------------------|----------------------------|
   320  | Runtime V1 API and implementation (`io.containerd.runtime.v1.linux`) | containerd v1.4     | containerd v2.0            |
   321  | Runc V1 implementation of Runtime V2 (`io.containerd.runc.v1`)       | containerd v1.4     | containerd v2.0            |