1Release Cadence and Process
2===========================
3
4The project aims to do a release once every 9 months.
5The planned dates are listed in the :ref:`releases/index:Future release plans`
6
7The releases are to be performed and tagged on a dedicated release branch.
8The release process is initiated by an announcement in
9`TF-M mailing list <https://lists.trustedfirmware.org/mailman3/lists/tf-m.lists.trustedfirmware.org/>`_
10and followed by the creation of a release branch.
11Normal development on the main branch is not blocked and can be continued.
12The testing will be performed on release candidates and depending on
13issues found, additional candidates may be created to fix and retest the issues.
14
15:doc:`The Platform owners </contributing/maintainers>` are expected to
16verify their platforms and confirm the correct operations or provide fixes
17in a timely manner to include in the release. The release notes will list
18all verified platforms. The platforms in Trusted Firmware OpenCI are
19automatically tested and any issues found shall be fixed.
20
21After the final tag, the changes from the release branch will be back ported
22to the main branch.
23
24.. uml::
25
26    @startuml
27    hide time-axis
28
29    concise "main branch" as main
30    concise "release branch v1.1.x" as rel1
31    concise "release branch v1.2.x" as rel2
32
33    @main
34        -3 is development
35        @0 <-> @8 : release cadence: ~9 months
36
37    @rel1
38        0 is rc1
39        main -> rel1 : start
40        +1 is rc2
41        +1 is v1.1.0
42        +1 is {-}
43        rel1 -> main : back port
44        +1 is v1.1.1 #pink
45        +1 is {-}
46        rel1 -> main : cherry-pick
47        +3 is END #white
48        +1 is {hidden}
49
50    @rel2
51        8 is rc1
52        main -> rel2 : start
53        +1 is v1.2.0
54        +1 is {-}
55
56        rel2 -> main : back port
57
58        @0 <-> @3 : release process
59        @4 <-> @5 : hotfix
60
61    caption Release process
62
63    @enduml
64
65Although this document specifies the release cadence, this does not preclude
66an adhoc release for specific project requirements.
67
68.. note::
69  When a new release starts the previous release branch obsoletes and is
70  a subject for removal as shown for `v1.1.x` on the diagram above.
71  At any moment only the latest release branch is maintained.
72  The release tags will point to a commit in detached head state.
73
74Release Version Scheme
75----------------------
76
77Trusted Firmware-M uses a semantic versioning scheme. A version number is
78compiled as a dot separated set of numbers:
79
80**TF-Mv<MAJOR>.<MINOR>.<HOTFIX>**
81
82- <MAJOR>: Major release version for significant feature and API changes.
83- <MINOR>: Minor release version for incremental features and API changes.
84- <HOTFIX>: Used only for backporting **critical bug fix/security patches**.
85
86Long Term Support (LTS)
87-----------------------
88
89From v2.1.0, TF-M project will provide LTS branches. Every alternate release
90will be an LTS release maintained for 3 years.
91The LTS release will be synchronized with
92`Mbed TLS <https://www.trustedfirmware.org/projects/mbed-tls>`_
93project to be aligned with LTS releases cadence. Mbed TLS is used as the
94default cryptography library by the TF-M Crypto service.
95
96The main purpose of TF-M LTS is to offer a maintained and PSA certified TF-M
97codebase for the whole period of LTS. Without LTS, every TF-M based product
98has to recall or update PSA certification with changes (especially security
99fixes) to the codebase. Some changes like fixes for critical bugs or security
100vulnerabilities are essential to keep a product secure with valid
101PSA certificates. The recertification is a time and resource-consuming process,
102putting extra burden on the platform owners. Moreover, this procedure is inefficient
103and unscalable to be done on a huge number of PSA Certified TF-M platforms.
104
105TF-M intends to centralise PSA certification of the common code and carry it on
106for an LTS lifetime, ensuring that code is free from known bugs and security
107vulnerabilities. For this, each LTS branch will be initially PSA certified for
108a selected reference platform and recertified again on every TF-M release.
109Please see the process<link> below for the details. All platforms, based on LTS
110version can hold PSA certification obtained once without a need for
111recertification on updates if no vulnerability is found in a platform specific code.
112
113LTS content
114^^^^^^^^^^^
115
116On every TF-M release the following items are backported from the **release**
117branch to active LTS branches:
118
119- Critical bugs
120- Security vulnerability fixes
121- A new platform port with code changes restricted to the relevant platform folder only.
122
123A full release cycle is performed on each updated LTS branch. If no items above were
124delivered to the main branch since the last release, then LTS branches remain
125unchanged with valid PSA certificate for that version.
126
127Frequency and duration
128^^^^^^^^^^^^^^^^^^^^^^
129
130- A new LTS branch is created on every other TF-M release i.e. every 18 months.
131- Each LTS branch is maintained for 3 years.
132
133.. uml::
134
135    @startuml
136    hide time-axis
137
138    concise "main branch" as main
139    concise "release branch v2.1.x (LTS)" as lts21
140    concise "release branch v2.2.x" as rel22
141    concise "release branch v2.3.x (LTS)" as lts23
142    concise "release branch v2.4.x" as rel24
143    concise "release branch v2.5.x (LTS)" as lts25
144
145    @main
146        -1 is development
147        @0 <-> @6 : release cadence: ~9 months
148
149    @lts21
150        0 is v2.1.0
151        main -> lts21 : start
152        +1 is "PSA cert" #aquamarine
153        +2 is "v2.1.0-LTS"
154        +2 is {-}
155        +19 is END #white
156
157    @rel22
158        6 is v2.2.0
159        main -> rel22 : start
160        +1 is {-}
161        +1 is v2.2.1 #pink
162        +1 is {-}
163        rel22 -> main : back port
164        rel22 -> lts21 : back port
165        +3 is END #white
166        +1 is {hidden}
167
168    @lts23
169        12 is v2.3.0
170        main -> lts23 : start
171        +1 is "PSA cert" #aquamarine
172        +2 is "v2.3.0-LTS"
173        +2 is {-}
174
175        @8 <-> @9 : hotfix
176
177    @rel24
178        18 is v2.4.0
179        main -> rel24 : start
180        +1 is {-}
181        +2 is v2.4.1 #pink
182        +1 is {-}
183        rel24 -> main : back port
184        rel24 -> lts21 : back port
185        rel24 -> lts23 : back port
186        +2 is END #white
187
188        @0 <-> @12 : LTS release every 18 months
189
190    @lts25
191        24 is v2.5.0
192        main -> lts25 : start
193
194        @0 <-> @24 : LTS lifetime: 3 years
195
196    caption Long Time Support (LTS) process
197
198    @enduml
199
200LTS usage scenario
201^^^^^^^^^^^^^^^^^^
202
203- Once released, the code (ex:*TF-MvX.Y.Z*) is submitted for PSA certification
204  using the reference platform :ref:`platform/arm/musca_b1/readme:Musca-B1 Platform Specifics`.
205
206- After obtaining PSA certification the release branch is tagged
207  *TF-MvX.Y.Z-LTS* creating a base for PSA certification of downstream projects.
208
209- Ad hoc security fixes on the current **release** branch resulting in a new TF-M
210  release will be backported to LTS branches under maintenance with consequent
211  minor releases on them. Each LTS minor release may be a subject for PSA
212  recertification with evaluation of the code changes (delta certification).
213
214- Platform independent TF-M fixes are evaluated once & available to PSA Certified
215  platforms on the new LTS release for rebase without the need for individual recertification.
216
217- Bug fixes (other than security fixes) are backported from the main branch to active LTS branches
218  and made part of the next regular release. The LTS release will be subject to PSA Certification.
219
220Q&A
221---
222
2231. **What if the release (e.g. TF-MvX.Y.Z) fails PSA certification?**
224
225   A failure on PSA certification means a critical bug or vulnerability
226   and requires code modification in the form of a hot fix followed by
227   a new minor release.
228
2292. **What is time gap between release and LTS tag?**
230
231   It depends on PSA Lab Certification Body but is expected to be about 1 month.
232
2333. **What if a security vulnerability is found in platform-specific code?**
234
235   A vulnerable platform shall provide a fix for it and perform PSA
236   certification independently.
237
238--------------
239
240*Copyright (c) 2020-2024, Arm Limited. All rights reserved.*
241