Stable Release and LTS

From Yocto Project
Jump to navigationJump to search

Yocto Project Stable Branch Maintenance and Long Term Support (LTS)

Background on how the project's LTS plans came about can be found here. The document below details the current project release lifecycle and LTS plans. The aim is to have a stable series maintenance policy which allows for different stages of maintenance including standard "stable" series, LTS series and community support.

Release Lifecycle

The project releases every six months in April and October (spring and fall). This is necessary to bring development together to a focus point and provide points of increased testing and focus on stability. There are two possible lifecycles a release may follow:

Initial Release -> Stable -> Community -> EOL

or

Initial Release -> LTS -> Community -> EOL

The change in status of a given release series should be announced in the weekly status report and reflected on the “Releases” wiki page.

The stages have the following properties:

Stable/LTS common properties:

  • Has point release tarballs created
  • Has release artefacts
  • Patches merged to the main repository branch
  • Requires autobuilder testing
  • The project will appoint someone to act as the maintainer to coordinate and handle patch testing and merging
  • Strict “backport only”, master first policy

Stable/LTS differences:

  • Stable releases are maintained for seven months
  • LTS releases are maintained initially for two years
  • LTS releases are preannounced and known to be LTS in advance (usually every two years)
  • LTS tested only on a subset of supported native build platforms (announced at time of LTS)

Community status properties:

  • Branches only have community support status if there is an active community member willing to step into the maintainer role for that series
  • Patches merge to the main repository but in a community/XXX namespace
  • Automated testing is on a best effort basis, some autobuilder cycles may be available but not guaranteed.
  • The maintainer is required to publish a testing plan to show what testing will be made for patches to merge to the community branch.
  • No point releases version and no release artefacts
  • Master first policy recommended

EOL (End of life):

  • When there is no longer any active community maintainer, branches become EOL


LTS “Mixin” repositories

We realise that a given LTS may need other versions of some components within its lifetime as no “one size” fits everyone’s needs. Rather than adding potentially invasive changes to older releases (such as new gcc versions), the project proposes the use of “mixin” layers. These would be thin specific purpose layers which can be stacked with an LTS release to mix a specific feature into that build. These are to be created on an as needed basis and maintained by the people who need them. The structure would be to create them in the repository oecore-backport-mixin with the branch naming scheme <releaseseries>/<mixin name>. We expect this may be used for gcc and possibly for rapidly changing languages like go/nodejs/rust. Policies on testing these layers will depend on how widespread their usage is and determined on a case by case basis. There may be other 'mixin' layers within the wider community too.

The layers should have a single purpose and be Yocto Project Compatible (passing the test script) allowing them to be selected by users as needed. The maintainer should be listed in the README and note when the layer is no longer maintained.

Stable/LTS Patch Acceptance Policies

All changes must have already been accepted into the current master release and any other release still within its “stable” seven month support window.

Patches must pass testing on the project’s automated test infrastructure.

Acceptable:

  • Security and CVE fixes
  • Fixes for bugs
  • Changes to follow an upstream stable series or LTS that aligns with the original release (based on compatibility)

Potentially Acceptable:

  • Fixes so codebase works with newly released distros (only in the first six months after a given release series first releases)
  • Bug fix only version upgrades for upstreams with a good stable process

Unacceptable:

  • General version upgrades
  • New features
  • ABI/API breakage

Components (layers) to be covered

The project LTS covers:

  • Bitbake
  • OE-Core
  • Meta-yocto
  • yocto-docs

The project LTS does not cover:

  • meta-mingw
  • meta-gplv2
  • vendor layers

Other layers can and will have their own LTS processes.

Testing

The project releases are only tested using the automated testing based on virtual environments. The build host OSes used to run these tests are determined at the initial release time. For LTS releases only some subset of native OSes maybe supported, particularly where the lifetime of the OS would be shorter than the LTS.

Further testing of releases, e.g. on real hardware platforms is encouraged and there is a process to allow these results to be merged into the release test results but the process for making the release no longer depends upon this happening.

Process ( TOC)

  • Need to document the following processes:
  • How maintainer is selected
  • How are patches proposed - Done
  • How are patches queued/tested/reviewed/merged - Done
  • When are point releases made? - Done
  • How to trigger and run a point release - Done
  • Release process itself
  • Transferring stable/LTS release to community/EOL status
  • New maintainer training

Requesting a fix in a stable branch

With reference to the above policies, if you would like to request a backport of a commit in a newer release, you can either (a) do the backport yourself and send the patch marked with [branchname] to the appropriate mailing list; or alternatively (b) you can send a simple request giving commit hashes / URLs that you would like to be backported. In both cases it helps to CC the maintainer - refer to the table above.

For information on which mailing list you should send these to see the README file in the Poky repository.

Maintainer Procedures

Normal process

When there are enough changes (or a few critical ones), the stable/LTS maintainer should follow this procedure:

  1. Look out for patches on the mailing list marked with the appropriate branch name in the subject
  2. Look through recently merged patches in master that are suitable for backporting
  3. Collect patches together on a branch
    • If a submitted patch is a backport from master, rather than taking the patch as submitted, it is preferable to backport the patch from master so that the original commit message is preserved.
    • If you do the backporting from poky you will get the original commit ID in the commit message which is useful for reference.
    • It is beneficial to change the original commit ID line to say "OE-Core master rev" instead of "OE-Core rev" to distinguish it from the OE-Core branch revision that will be added when the commit is merged
  4. Run a local build or two to pick up any obvious problems
    1. The Autobuilder requires changes to reside in poky, bitbake and openembedded-core
  5. # Bitbake change should be in the bitbake-contrib repo
    1. https://git.openembedded.org/bitbake-contrib stable/{branch}-nut
  6. Openembedded-core changes should be be in the openembedded-core-contrib stable/{branch}-nut
    1. https://git.openembedded.org/openembedded-core-contrib
  7. Meta-yocto changes should be in poky-contrib meta-yocto/stable/{branch}-nut
    1. git://git.yoctoproject.org/poky-contrib
  8. yocto-docs changes should be in poky-contrib yocto-docs/stable/{branch}-nut
    1. git://git.yoctoproject.org/poky-contrib
  9. Now create your Poky distro for testing.
    1. Combine bitabke, core, meta-yocto and yocto-docs into one repo.
    2. Push the changes to poky-contrib stable/{branch}-nut
    3. git://git.yoctoproject.org/poky-contrib
  10. Test the changes on the autobuilder (see How to start a build on the Autobuilder)
    • Make sure you check directly for the results of the build as these won't be reported to the yocto-builds mailing list.

There will very likely be a number of these cycles during the lifetime of the stable branch.

Patch review

  1. When collating patches for review, Make sure of the following:
    1. Subject indicates "Patch review"
    2. Provide a deadline for any comments included in the body of the email
    3. Use the appropriate branch reference.
  1. Bitbake change should be in the bitbake-contrib repo
    1. https://git.openembedded.org/bitbake-contrib stable/{branch}-nut
    2. Send any bitbake changes bitbake-devel mailing list
  2. Openembedded-core changes should be be in the openembedded-core-contrib stable/{branch}-nut
    1. https://git.openembedded.org/openembedded-core-contrib
    2. Send any OE-Core changes openembedded-core mailing list.
  3. Meta-yocto changes should be in poky-contrib meta-yocto/stable/{branch}-nut
    1. git://git.yoctoproject.org/poky-contrib
    2. Send any meta-yocto changes to the poky#lists.yoctoproject.org mailing list.
  4. yocto-docs changes should be in poky-contrib yocto-docs/stable/{branch}-nut
    1. Send any yocto-docs changes the docs@lists.yoctoproject.org mailing list.
  5. Wait for any feedback
    1. If there are changes make any necessary adjustments
      1. rebuild if necessary
  6. Push any changes to the appropriate repo and branch.

Merge request

  1. Changes should be in the stable/{branch}-next branch
  2. When preparing patches for merge, Make sure of the following:
    1. Subject indicates "Merge Request"
    2. Use the appropriate branch reference.
  1. Bitbake changes shoud
  2. Send any bitbake changes bitbake-devel mailing list
  3. Send any OE-Core changes openembedded-core mailing list.
  4. Send any meta-yocto changes to the poky#lists.yoctoproject.org mailing list.
  5. Send any yocto-docs changes the docs@lists.yoctoproject.org mailing list.
  1. When the patches are merged, mark any bugs specific to the stable branch as resolved as appropriate

Point release

Normally point releases are scheduled in advance as appropriate - contact Stephen Jolley <sjolley.yp.pm@gmail.com> and CC: Ricard Purdie <richard.purdie@linuxfoundation.org> about scheduling point releases.

  1. Send a patch to update the stable version in meta-yocto/conf/distro/poky.conf for the release
  2. Once that is merged, ask Richard to run the release candidate build
    • The stable branch or LTS maintainer should monitor the build and follow up on any failures
  3. When the release candidate build completes successfully, The stable branch or LTS maintainer should notify the QA team to start the release QA process.
  4. Gather together changes in the form needed for a release notes and send them Yocto Project TSC, Branch or LTS maintainer so they can incorporate them in final release notes and to Stephen Jolley <sjolley.yp.pm@gmail.com> so he can have them in preparation for the release meeting.

Other

  • It is useful to provide status updates on the Yocto Project technical call, particularly coming up to a stable release. If you're not able to be on the call, send the status update information to Stephen Jolley <sjolley.yp.pm@gmail.com> and he will present it.

Kernel LTS

Kernel cadence

Decision Makers

Decisions are expected to be handled by the maintainers. The TSC holds the ultimate decision making authority in case of disagreement. The TSC makes the final release go/nogo decisions.