Skip to content

Commit 71e0f8b

Browse files
authored
Merge pull request #1633 from kernelkit/policy
doc: release and maintenance policy
2 parents 48ecaf4 + 8223f70 commit 71e0f8b

9 files changed

Lines changed: 309 additions & 9 deletions

File tree

‎.github/CHECKLIST.md‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,17 @@ Recommended checkpoints, use at your own discretion:
3939
- Ensure the markdown link for the release diff is updated
4040
- Ensure subrepos are tagged (can be automated, see kernelkit/infix#393)
4141
- Sync tags for all repo. sync activities
42+
43+
Patch Releases
44+
--------------
45+
46+
For a patch release on a `vYY.MM.x` branch, see the policy in
47+
[Releases & Support](../doc/releases.md):
48+
49+
- Port the latest Linux kernel LTS patch level from main
50+
- Port the latest Buildroot LTS patch level from main
51+
- Patch level only, the branch stays on its own kernel and Buildroot
52+
LTS line
53+
- Verify no features or YANG model changes came along with the fixes
54+
- Upgrading to a patch release must never require a config migration
55+
- ChangeLog entry describes this release only, not the series

‎.github/SECURITY.md‎

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
## Reporting a Vulnerability
44

5-
If you discover a security vulnerability in Infix, please use GitHub's built-in
6-
[Report a Vulnerability](https://github.com/kernelkit/infix/security/advisories/new)
7-
feature for a private and secure disclosure.
5+
If you discover a security vulnerability in Infix, please use GitHub's
6+
built-in [Report a Vulnerability][report] feature for a private and secure
7+
disclosure.
88

99
When reporting, include:
1010

@@ -14,13 +14,34 @@ When reporting, include:
1414

1515
## Supported Versions
1616

17-
We provide security updates only for the main branch.
17+
Security fixes are made on `main` and reach users in the next release,
18+
roughly once a month. The supported version of the project is therefore
19+
the latest release. Each release also carries the latest Linux kernel
20+
LTS and Buildroot LTS patch level, so following the releases keeps the
21+
whole foundation current.
1822

19-
Individual support contracts are provided by _Wires_. See
20-
[Support](https://github.com/kernelkit/infix/blob/main/.github/SUPPORT.md)
21-
for more information.
23+
Older release series live on their `vYY.MM.x` branches. They receive a
24+
patch release only when there is a reason to make one, and when that
25+
happens the kernel and Buildroot LTS patch bumps are ported from `main`
26+
along with the fix. A branch that exists is not the same as a branch
27+
that is maintained -- there is no promise of updates for a series once
28+
the next one is out.
29+
30+
Products that must stay on one version for years need a support contract.
31+
The company [*Wires*][wires] maintains individual release series on a
32+
schedule, with security fixes backported to the series a product shipped
33+
on.
34+
35+
The full policy, including what may and may not go into a patch release,
36+
is documented in [Releases & Support][releases]. Contract options are
37+
described in [Support][support].
2238

2339
## Acknowledgments
2440

2541
We appreciate the efforts of the security community to help improve the security
2642
of Infix. Thank you for your responsible disclosure.
43+
44+
[report]: https://github.com/kernelkit/infix/security/advisories/new
45+
[releases]: https://github.com/kernelkit/infix/blob/main/doc/releases.md
46+
[support]: https://github.com/kernelkit/infix/blob/main/.github/SUPPORT.md
47+
[wires]: https://wires.se

‎.github/SUPPORT.md‎

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,22 @@ project on GitHub, and Discord, see <https://github.com/kernelkit/infix>:
66
&nbsp;&nbsp; :speech_balloon: <https://github.com/orgs/kernelkit/discussions>
77
&nbsp;&nbsp; :bug: <https://github.com/kernelkit/infix/issues>
88

9+
The supported version of the project is the latest release. Older
10+
release series get a patch release only when there is a reason to make
11+
one, see [Releases & Support][releases] for the full policy.
12+
913
Support contracts, development of new features, fast-tracking of reviews
1014
and contributions, customer branding of Infix, and even customer specific
11-
features for dedicated products is provided by _Wires_.
15+
features for dedicated products is provided by the company
16+
[_Wires_][wires], which also sponsors Infix development.
17+
18+
This includes **Infix LTS**, a commercial support contract for products
19+
that must stay on one version for years: scheduled maintenance of the
20+
release series the product shipped on, with kernel and Buildroot LTS
21+
patch bumps and backported fixes.
1222

13-
&nbsp;&nbsp; :globe_with_meridians: <https://www.wires.se>
23+
&nbsp;&nbsp; :globe_with_meridians: <https://wires.se>
1424
&nbsp;&nbsp; :e-mail: <mailto:infix@wires.se>
25+
26+
[releases]: https://github.com/kernelkit/infix/blob/main/doc/releases.md
27+
[wires]: https://wires.se

‎README.md‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,9 @@ Bug reports, ideas, and pull requests are welcome. Start with
172172
security issue? Follow the [security policy][security]. Need a hand?
173173
See [support options][support] or [join us on Discord][discord-url].
174174

175+
Wondering how long a given version keeps receiving updates, and what
176+
goes into a patch release? See [releases & support][releases].
177+
175178
---
176179

177180
<div align="center">
@@ -194,6 +197,7 @@ See [support options][support] or [join us on Discord][discord-url].
194197
[coc]: .github/CODE_OF_CONDUCT.md
195198
[security]: .github/SECURITY.md
196199
[support]: .github/SUPPORT.md
200+
[releases]: doc/releases.md
197201
[Latest Build]: https://github.com/kernelkit/infix/releases/tag/latest "Latest build"
198202
[License]: https://en.wikipedia.org/wiki/GPL_license
199203
[License Badge]: https://img.shields.io/badge/License-GPL%20v2-blue.svg

‎doc/ChangeLog.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ All notable changes to the project are documented in this file.
1313
- Upgrade FRR to 10.5.5
1414
- Add per-server `minpoll` and `maxpoll` options to the NTP client
1515
configuration, for tuning how often each server is polled
16+
- Document the release and maintenance policy: which versions receive
17+
updates, what may go into a patch release, and the levels of long-term
18+
maintenance available, see [Releases & Support][relsup]
1619

1720
### Added
1821

@@ -41,6 +44,8 @@ All notable changes to the project are documented in this file.
4144

4245
- Fix #1619: Raspberry Pi kernel panic when configure Wi-Fi
4346

47+
[relsup]: https://github.com/kernelkit/infix/blob/main/doc/releases.md
48+
4449

4550
[v26.08.0][] - 2026-09-01
4651
-------------------------

‎doc/developers-guide.md‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,11 @@ issues without direct access to the DUT.
319319

320320
## Upgrading Packages
321321

322+
The steps below describe upgrading on `main`. Maintained release
323+
branches take the same kernel and Buildroot patch bumps, ported from
324+
`main` when a patch release is scheduled. See [Releases &
325+
Support](releases.md) for what may go into such a release.
326+
322327
### Buildroot
323328

324329
The Kernelkit team maintains an internal [fork of Buildroot][9], with

‎doc/img/release-branches.svg‎

Lines changed: 83 additions & 0 deletions
Loading

‎doc/releases.md‎

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
# Releases & Support
2+
3+
This page answers a question that comes up in every deployment: *how
4+
long will this version keep getting updates, and who makes them?* It
5+
describes how releases are numbered and branched, what goes into a
6+
patch release, and the levels of maintenance available for products
7+
that must stay on one version for years.
8+
9+
## Version Numbers
10+
11+
Releases are tagged `vYY.MM.z`:
12+
13+
- `YY.MM` identifies the release *series*, e.g., `v26.08`
14+
- `z` is the patch level within that series, starting at `0`
15+
16+
Release candidates leading up to a release are tagged `-rcN`, e.g.,
17+
`v26.08.0-rc1`. They exist to flush out issues before the final tag
18+
and are not intended for production.
19+
20+
A series starts on `main` and is tagged `vYY.MM.0`. Every patch release
21+
in that series is made on the branch `vYY.MM.x`, e.g., `v26.08.x`. The
22+
branch is never rebased and never gains features -- it only moves
23+
forward, one patch release at a time.
24+
25+
## The Foundation: Kernel & Buildroot LTS
26+
27+
Every release builds on a Linux kernel LTS series and a Buildroot LTS
28+
series, e.g., Linux 6.18.y and Buildroot 2025.02.x. Both upstream
29+
projects publish patch releases on their own schedule, carrying security
30+
and stability fixes. The team tracks them closely, and `main` moves to
31+
the latest patch level of both as soon as it is available.
32+
33+
Within a release series, the LTS *line* never changes. A device on
34+
v26.08.z stays on the same kernel and Buildroot generation for the life
35+
of the series; what moves is the patch level, e.g., Linux 6.18.48 →
36+
6.18.49 → 6.18.51. Changing to a new kernel or Buildroot LTS brings new
37+
drivers, new behavior, and new regressions, so it only ever happens on
38+
`main`, in a new series.
39+
40+
![Where kernel and Buildroot LTS updates go](img/release-branches.svg)
41+
42+
## Levels of Maintenance
43+
44+
The first two levels are what the open source project itself provides,
45+
free of charge and without commitment. The last two are commercial
46+
services from [*Wires*][wires], the company sponsoring Infix
47+
development. They exist because some products cannot follow a monthly
48+
release train, and someone still has to do the work.
49+
50+
| **Level** | **Provided by** | **Contains** | **When** |
51+
|-----------------------------|------------------------------|--------------------------------------------------------|------------------------------|
52+
| Latest release | The project, free | Features, fixes, latest kernel & Buildroot LTS patches | Roughly monthly |
53+
| Patch release on `vYY.MM.x` | The project, free | The fix that motivated it, plus LTS patch bumps | Only when one is scheduled |
54+
| Infix LTS | [*Wires*][wires], commercial | LTS patch bumps and backported fixes | Schedule set in the contract |
55+
| Custom agreement | [*Wires*][wires], commercial | Whatever the product needs | Per agreement |
56+
57+
### Latest Release
58+
59+
The supported version of the open source project is the latest release.
60+
New releases come roughly once a month and carry the same kernel and
61+
Buildroot LTS patch level as every other level below -- together with
62+
new features, refactoring, and everything else that landed on `main`
63+
since the previous series.
64+
65+
For a lab, an evaluation, or any deployment that can follow the project,
66+
this is the recommended track: upgrade to the latest release, and the
67+
foundation stays current by itself.
68+
69+
### Patch Release on a Release Branch
70+
71+
Patch releases happen when there is a concrete reason, typically a fix
72+
someone needs on a version that has already shipped. There is no
73+
schedule, and no promise that a given series will ever see another patch
74+
release. Old branches remain on GitHub, but a branch with no patch
75+
release is not the same as a maintained branch.
76+
77+
When a patch release *is* scheduled, the same recipe applies every time:
78+
79+
1. The fix, or fixes, that motivated the release
80+
2. The latest kernel LTS patch level, ported from `main`
81+
3. The latest Buildroot LTS patch level, ported from `main`
82+
83+
The last two are the important part. Someone who takes v26.08.2 for a
84+
single file permission fix also receives every kernel and Buildroot
85+
security fix published since v26.08.1, which is usually the larger part
86+
of their exposure.
87+
88+
> [!IMPORTANT]
89+
> Ported means the *patch level* only: 6.18.49 → 6.18.51 and 2025.02.17
90+
> → 2025.02.18. A patch release never moves to another LTS line, never
91+
> adds features, and never changes the YANG models, so a device can take
92+
> it without a configuration migration.
93+
94+
### Infix LTS (Commercial)
95+
96+
For products that have to stay on one version for years,
97+
[*Wires*][wires] offers *Infix LTS*: maintenance of one release series,
98+
sold as a support contract. No series is designated LTS up front -- the
99+
series a product shipped on is the series that gets maintained.
100+
101+
> [!IMPORTANT]
102+
> Infix LTS is a commercial service from [*Wires*][wires], not a
103+
> promise made by the open source project. A release series is
104+
> maintained this way only for as long as a contract covers it.
105+
106+
Compared to the level above, what changes is the trigger and the scope:
107+
108+
- **Trigger:** updates are made on a schedule of their own, not in
109+
response to a request. Nobody has to notice a problem first, and the
110+
interval is agreed in the contract
111+
- **Scope:** besides the kernel and Buildroot LTS patch bumps, important
112+
fixes are backported from `main` -- security fixes first, then
113+
stability fixes relevant to the hardware and the feature set in use
114+
- **Work:** a dedicated team does the porting, testing, and release
115+
notes, and the result is regression tested on the hardware the
116+
contract covers
117+
118+
### Custom Agreement (Commercial)
119+
120+
Requirements differ, and some cannot be met by any of the above: a
121+
kernel held at a fixed version for a certification, a longer support
122+
period than the upstream LTS provides, extra hardware, or a private
123+
branch with customer-specific features. [*Wires*][wires] handles these
124+
case by case, see [Support][support] for how to get in touch.
125+
126+
## Support Periods for Products
127+
128+
Whoever ships the product is its manufacturer, and the support period
129+
promised to end users -- along with the vulnerability handling behind it
130+
-- belongs to them. This is what the EU Cyber Resilience Act (CRA) has
131+
made concrete for anyone selling into the European market. What this
132+
page defines is the operating system underneath: how long it keeps
133+
receiving fixes, and who produces them.
134+
135+
Two things are worth settling before a product ships, not after:
136+
137+
- **Which series it ships on**, and which level of maintenance covers
138+
that series. Building on the latest release and following it is a
139+
valid answer; so is an Infix LTS contract with [*Wires*][wires].
140+
Shipping on an old series with no maintenance arrangement is the one
141+
combination that leaves nobody responsible for the next kernel CVE
142+
- **Whether the device can be updated in the field.** Updates that
143+
cannot be delivered are not updates. See [Upgrading the
144+
System](upgrade.md) for the update mechanism and rollback behavior
145+
146+
## Questions
147+
148+
For the open source project, use the [community resources][support]:
149+
GitHub issues and discussions, or Discord. For support contracts, Infix
150+
LTS, and custom agreements, contact [*Wires*][wires] -- by email at
151+
<infix@wires.se>.
152+
153+
[support]: https://github.com/kernelkit/infix/blob/main/.github/SUPPORT.md
154+
[wires]: https://wires.se

‎mkdocs.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ nav:
7474
- Test System Architecture: test-arch.md
7575
- Virtual Environments: virtual.md
7676
- Vital Product Data (VPD): vpd.md
77+
- Releases & Support: releases.md
7778
- Origin & Licensing: license.md
7879

7980
theme:

0 commit comments

Comments
 (0)