summaryrefslogtreecommitdiff
path: root/upstream-layers/yocto-docs/documentation/ref-manual/release-process.rst
blob: a7abb2fd65d86aab302247d51b995112cc05a6d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK

*****************************************************
Yocto Project Releases and the Stable Release Process
*****************************************************

The Yocto Project release process is predictable and consists of both
major and minor (point) releases. This brief chapter provides
information on how releases are named, their life cycle, and their
stability.

Major and Minor Release Cadence
===============================

The Yocto Project delivers major releases (e.g. &DISTRO;) using a six
month cadence roughly timed each April and October of the year.
Here are examples of some major YP releases with their codenames
also shown. See the ":ref:`ref-manual/release-process:major release codenames`"
section for information on codenames used with major releases.

  - 4.1 ("Langdale")
  - 4.0 ("Kirkstone")
  - 3.4 ("Honister")

While the cadence is never perfect, this timescale facilitates
regular releases that have strong QA cycles while not overwhelming users
with too many new releases. The cadence is predictable and avoids many
major holidays in various geographies.

The Yocto project delivers minor (point) releases on an unscheduled
basis and are usually driven by the accumulation of enough significant
fixes or enhancements to the associated major release.
Some example past point releases are:

  - 4.1.3
  - 4.0.8
  - 3.4.4

The point release
indicates a point in the major release branch where a full QA cycle and
release process validates the content of the new branch.

.. note::

   Realize that there can be patches merged onto the stable release
   branches as and when they become available.

.. _ref-yp-development-cycle:

Development Cycle
=================

As explained in the previous :ref:`ref-manual/release-process:Major and Minor
Release Cadence` section, a new release comes out every six months.

During this six-months period of time, the Yocto Project releases four
"Milestone" releases which represent distinct points of time. The milestone
releases are tested through the :ref:`ref-manual/release-process:Testing and
Quality Assurance` process and helps spotting issues before the actual release
is out.

The time span between milestone releases can vary, but they are in general
evenly spaced out during this six-months period of time.

These milestone releases are tagged with a capital "M" after the future release
tag name. For example, the milestone tags "&DISTRO_RELEASE_SERIES;M1",
"&DISTRO_RELEASE_SERIES;M2", and "&DISTRO_RELEASE_SERIES;M3" are released before
the actual "&DISTRO_RELEASE_SERIES;" release.

.. note::

   The fourth milestone (M4) is not actually released and announced, but
   represents a point of time for the Quality Assurance team to start the
   :ref:`ref-manual/release-process:Testing and Quality Assurance` process
   before tagging and delivering the final release.

After the third milestone release (M3), the Yocto Project enters **Feature
Freeze**. This means that the maintainers of :term:`OpenEmbedded-Core
(OE-Core)`, :term:`BitBake` and other core repositories stop accepting
significant changes on the "master" branch. Changes that may be accepted are
minor upgrades to core components and security/bug fixes.

During feature freeze, a new branch is created and maintained separately to
test new features and enhancements received from contributors, but these changes
will only make it to the master branch after the release is out.

Major Release Codenames
=======================

Each major release receives a codename that identifies the release in
the :ref:`overview-manual/development-environment:yocto project source repositories`.
The concept is that branches of :term:`Metadata` with the same
codename are likely to be compatible and thus work together.

.. note::

   Codenames are associated with major releases because a Yocto Project
   release number (e.g. &DISTRO;) could conflict with a given layer or
   company versioning scheme. Codenames are unique, interesting, and
   easily identifiable.

Releases are given a nominal release version as well but the codename is
used in repositories for this reason. You can find information on Yocto
Project releases and codenames in the :yocto_home:`Releases page
</development/releases/>`.

Our :doc:`/migration-guides/index` detail how to migrate from one release of
the Yocto Project to the next.

Stable Release Process
======================

Once released, the release enters the stable release process at which
time a person is assigned as the maintainer for that stable release.
This maintainer monitors activity for the release by investigating and
handling nominated patches and backport activity. Only fixes and
enhancements that have first been applied on the "master" branch (i.e.
the current, in-development branch) are considered for backporting to a
stable release.

.. note::

   The current Yocto Project policy regarding backporting is to consider
   bug fixes and security fixes only. Policy dictates that features are
   not backported to a stable release. This policy means generic recipe
   version upgrades are unlikely to be accepted for backporting. The
   exception to this policy occurs when there is a strong reason such as
   the fix happens to also be the preferred upstream approach.

.. _ref-stable-lts-patch-acceptance-policies:

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 support window.

**Acceptable:**

-  Security and CVE fixes
-  Fixes for bugs
-  Version updates which follow an upstream stable series or LTS that aligns with
   the original release (based on compatibility). See
   :ref:`ref-manual/release-process:stable point release upgrades` for details.

.. note::

   Once :term:`UPSTREAM_STABLE_RELEASE_REGEX` has been accepted for a recipe,
   version upgrades matching the accepted pattern are considered acceptable
   by default (with the usual ability to reject if upstream fails to follow
   their own stable guidelines).

**Potentially acceptable:**

-  Fixes so the codebase works with newly released distros, e.g.
   :ref:`ref-classes-uninative` tarball updates or build fixes for a new GCC
   version on the :term:`Build Host`.

**Unacceptable:**

-  General version upgrades
-  New features
-  ABI/API breakage
-  Metadata improvements and refactoring, unless this is a dependency of a
   required fix

.. note::

   Exceptions to these rules must be approved by the TSC.

.. _ref-stable-point-release-upgrades:

Stable Point Release Upgrades
=============================

Some upstream projects maintain stable branches that only collect bug fixes
and security patches --- similar to the Yocto Project's own stable release
policy. For recipes tracking such upstreams, it is possible to perform
*stable point release upgrades* (e.g. upgrading from 1.0.2 to 1.0.3) rather
than only accepting backported patches. This is the mechanism behind the
"acceptable: version updates which follow an upstream stable series" policy above.

Criteria for Qualifying Upstreams
---------------------------------

Setting :term:`UPSTREAM_STABLE_RELEASE_REGEX` for a recipe means that certain
version upgrades can be confidently treated as stable point upgrades under
OpenEmbedded's criteria. The
:ref:`Automated Upgrade Helper (AUH) <dev-manual/upgrading-recipes:Using the Auto Upgrade Helper (AUH)>`
will then automatically send patches to upgrade recipes with this variable
set during stable releases.

.. note::

   Patches to upgrade recipes without this variable may still be submitted
   for stable branches, but the barrier for acceptance is high. The commit
   message needs to justify that the version upgrade follows our stable
   branch policy or that there is an exceptional reason for taking the
   upgrade.

A recipe may have :term:`UPSTREAM_STABLE_RELEASE_REGEX` set based on the
following criteria:

1. **Upstream stable branches exist** --- the upstream project maintains
   branches named with a stable version component, and there is evidence
   that these branches only collect bug-fix and security-fix changes
   (no new features or ABI/API breakage). For example, util-linux version
   ``2.41.3`` has three parts in its version and upstream has branches like
   ``stable/v2.41`` with two parts. This demonstrates that bumps in the
   third part (e.g. ``2.41.3`` to ``2.41.4``) are stable point releases.
   Similarly, systemd maintains ``stable/v259-stable``.

2. **Upstream maintainer confirmation** --- the upstream project's maintainer
   explicitly confirms that a bump in a certain part of the version is
   bug-fix only.

3. **Clear historical or common-sense evidence** --- the project's change
   history clearly shows that a certain class of version bump is bug-fix
   only, or it is widely understood convention. For example, openssh's
   ``p`` suffix increments (``10.2p1`` to ``10.2p2``) and kmod's patch-level
   bumps are historically bug-fix only releases.

.. note::

   Patches to set :term:`UPSTREAM_STABLE_RELEASE_REGEX` are sent against the
   master branch first and follow the normal review process. Once accepted on
   master they may be backported to stable release branches. Exceptions may be
   made when necessary, e.g. setting :term:`UPSTREAM_STABLE_RELEASE_REGEX` on
   a stable branch for a recipe which has since been removed on master.

How Stable Release Regexes Work
-------------------------------

The stable point upgrade mechanism uses a *filter regex* to constrain the
upstream version check so that only versions within the same stable series
are considered. When a recipe sets :term:`UPSTREAM_STABLE_RELEASE_REGEX`, the
version-checking infrastructure in BitBake's fetchers (git, wget, crate)
applies that regex to filter discovered upstream versions. Only versions
matching the regex are considered as upgrade candidates.

For example, if a recipe is currently at version ``1.4.2`` and the regex is
``^1\.4(\.\d+)*$``, then version ``1.4.7`` would be a valid upgrade candidate
but ``1.5.0`` would not.

For recipes whose version uses a dot-separated scheme, the
:ref:`ref-classes-upstream-stable-release-point` class can automatically
generate this regex. For other versioning schemes, set
:term:`UPSTREAM_STABLE_RELEASE_REGEX` directly in the recipe.

.. _ref-long-term-support-releases:

Long Term Support Releases
==========================

While stable releases are supported for a duration of seven months,
some specific ones are now supported for a longer period by the Yocto
Project, and are called Long Term Support (:term:`LTS`) releases.

When significant issues are found, :term:`LTS` releases allow to publish
fixes not only for the current stable release, but also to the
:term:`LTS` releases that are still supported. Older stable releases which
have reached their End of Life (EOL) won't receive such updates.

This started with version 3.1 ("Dunfell"), released in April 2020, which
the project initially committed to supporting for two years, but this duration
was later extended to four years.

A new :term:`LTS` release is made every two years and is supported for four
years. This offers more stability to project users and leaves more time to
upgrade to the following :term:`LTS` release.

The currently supported :term:`LTS` releases are:

-  Version 5.0 ("Scarthgap"), released in April 2024 and supported until April 2028.
-  Version 4.0 ("Kirkstone"), released in May 2022 and supported until May 2026.

See :yocto_wiki:`/Stable_Release_and_LTS` for details about the management
of stable and :term:`LTS` releases.

This documentation was built for the &DISTRO_NAME; release.

.. image:: svg/releases.*
   :width: 100%

.. note::

   In some circumstances, a layer can be created by the community in order to
   add a specific feature or support a new version of some package for an :term:`LTS`
   release. This is called a :term:`Mixin` layer. These are thin and specific
   purpose layers which can be stacked with an :term:`LTS` release to "mix" a specific
   feature into that build. These are created on an as-needed basis and
   maintained by the people who need them.

   Policies on testing these layers depend on how widespread their usage is and
   determined on a case-by-case basis. You can find some :term:`Mixin` layers in the
   :yocto_git:`meta-lts-mixins </meta-lts-mixins>` repository. While the Yocto
   Project provides hosting for those repositories, it does not provide
   testing on them. Other :term:`Mixin` layers may be released elsewhere by the wider
   community.

Testing and Quality Assurance
=============================

Part of the Yocto Project development and release process is quality
assurance through the execution of test strategies. Test strategies
provide the Yocto Project team a way to ensure a release is validated.
Additionally, because the test strategies are visible to you as a
developer, you can validate your projects. This section overviews the
available test infrastructure used in the Yocto Project. For information
on how to run available tests on your projects, see the
":ref:`test-manual/runtime-testing:performing automated runtime testing`"
section in the Yocto Project Test Environment Manual.

The QA/testing infrastructure is woven into the project to the point
where core developers take some of it for granted. The infrastructure
consists of the following pieces:

-  ``bitbake-selftest``: A standalone command that runs unit tests on
   key pieces of BitBake and its fetchers.

-  :ref:`ref-classes-sanity`: This automatically
   included class checks the build environment for missing tools (e.g.
   ``gcc``) or common misconfigurations such as
   :term:`MACHINE` set incorrectly.

-  :ref:`ref-classes-insane`: This class checks the
   generated output from builds for sanity. For example, if building for
   an ARM target, did the build produce ARM binaries. If, for example,
   the build produced PPC binaries then there is a problem.

-  :ref:`ref-classes-testimage`: This class
   performs runtime testing of images after they are built. The tests
   are usually used with :doc:`QEMU </dev-manual/qemu>`
   to boot the images and check the combined runtime result boot
   operation and functions. However, the test can also use the IP
   address of a machine to test.

-  :ref:`ptest <test-manual/ptest:testing packages with ptest>`:
   Runs tests against packages produced during the build for a given
   piece of software. The test allows the packages to be run within a
   target image.

-  ``oe-selftest``: Tests combinations of BitBake invocations. These tests
   operate outside the OpenEmbedded build system itself. The
   ``oe-selftest`` can run all tests by default or can run selected
   tests or test suites.

Originally, much of this testing was done manually. However, significant
effort has been made to automate the tests so that more people can use
them and the Yocto Project development team can run them faster and more
efficiently.

The Yocto Project's main :yocto_ab:`Autobuilder <>` publicly tests each Yocto
Project release's code in the :oe_git:`openembedded-core </openembedded-core>`,
:yocto_git:`meta-yocto </meta-yocto>` and :oe_git:`bitbake </bitbake>` repositories. The
testing occurs for both the current state of the "master" branch and also for
submitted patches. Testing for submitted patches usually occurs
in the "master-next" branch in the :oe_git:`openembedded-core
</openembedded-core>`, :yocto_git:`meta-yocto </meta-yocto>` and
:oe_git:`bitbake </bitbake>` repository.

.. note::

   You can find all these branches in the
   :ref:`overview-manual/development-environment:yocto project source repositories`.

Testing within these public branches ensures in a publicly visible way
that all of the main supposed architectures and recipes in OE-Core
successfully build and behave properly.

Various features such as ``multilib``, sub architectures (e.g. ``x32``,
``poky-tiny``, ``musl``, ``no-x11`` and so forth),
``bitbake-selftest``, and ``oe-selftest`` are tested as part of the QA
process of a release. Complete testing and validation for a release
takes the Autobuilder workers several hours.

.. note::

   The Autobuilder workers are non-homogeneous, which means regular
   testing across a variety of Linux distributions occurs. The
   Autobuilder is limited to only testing QEMU-based setups and not real
   hardware.

Finally, in addition to the Autobuilder's tests, the Yocto Project QA
team also performs testing on a variety of platforms, which includes
actual hardware, to ensure expected results.