blob: 0ed209983e29a834fd247465a4d9ae5e561ef5f1 [file] [log] [blame] [view]
Manuel Pégourié-Gonnarde6997392021-02-25 11:40:08 +01001# Maintained branches
2
Dave Rodgman9b4d9ae2022-01-05 18:46:17 +00003At any point in time, we have a number of maintained branches, currently consisting of:
Manuel Pégourié-Gonnarde6997392021-02-25 11:40:08 +01004
Dave Rodgman017a1992022-03-31 14:07:01 +01005- The [`master`](https://github.com/Mbed-TLS/mbedtls/tree/master) branch:
Gilles Peskine991bbe72021-03-16 12:05:16 +01006 this always contains the latest release, including all publicly available
7 security fixes.
Dave Rodgman017a1992022-03-31 14:07:01 +01008- The [`development`](https://github.com/Mbed-TLS/mbedtls/tree/development) branch:
Dave Rodgman1fdf9d02024-03-18 14:37:16 +00009 this is where the next major version of Mbed TLS (version 4.0) is being
10 prepared. It has API changes that make it incompatible with Mbed TLS 3.x,
Dave Rodgmana00e8502021-04-23 16:43:13 +010011 as well as all the new features and bug fixes and security fixes.
Dave Rodgman9b4d9ae2022-01-05 18:46:17 +000012- One or more long-time support (LTS) branches: these only get bug fixes and
Dave Rodgman1fdf9d02024-03-18 14:37:16 +000013 security fixes. Currently, the supported LTS branches are:
14- [`mbedtls-2.28`](https://github.com/Mbed-TLS/mbedtls/tree/mbedtls-2.28).
15- [`mbedtls-3.6`](https://github.com/Mbed-TLS/mbedtls/tree/mbedtls-3.6).
Dave Rodgman9b4d9ae2022-01-05 18:46:17 +000016
17We retain a number of historical branches, whose names are prefixed by `archive/`,
Dave Rodgman017a1992022-03-31 14:07:01 +010018such as [`archive/mbedtls-2.7`](https://github.com/Mbed-TLS/mbedtls/tree/archive/mbedtls-2.7).
Dave Rodgman9b4d9ae2022-01-05 18:46:17 +000019These branches will not receive any changes or updates.
Manuel Pégourié-Gonnarde6997392021-02-25 11:40:08 +010020
21We use [Semantic Versioning](https://semver.org/). In particular, we maintain
Gilles Peskine73876cf2021-06-08 15:33:53 +020022API compatibility in the `master` branch across minor version changes (e.g.
23the API of 3.(x+1) is backward compatible with 3.x). We only break API
24compatibility on major version changes (e.g. from 3.x to 4.0). We also maintain
25ABI compatibility within LTS branches; see the next section for details.
Manuel Pégourié-Gonnarde6997392021-02-25 11:40:08 +010026
Dave Rodgman1fdf9d02024-03-18 14:37:16 +000027We will make regular LTS releases on an 18-month cycle, each of which will have
28a 3 year support lifetime. On this basis, 3.6 LTS (released March 2024) will be
29supported until March 2027. The next LTS release will be a 4.x release, which is
30planned for September 2025.
Janos Follathe6c0fd02023-03-30 14:59:31 +010031
Gilles Peskine9956efa2022-06-20 18:48:52 +020032## Backwards Compatibility for application code
Manuel Pégourié-Gonnarde6997392021-02-25 11:40:08 +010033
Gilles Peskinea23df132021-03-16 12:04:44 +010034We maintain API compatibility in released versions of Mbed TLS. If you have
35code that's working and secure with Mbed TLS x.y.z and does not rely on
36undocumented features, then you should be able to re-compile it without
37modification with any later release x.y'.z' with the same major version
38number, and your code will still build, be secure, and work.
39
Gilles Peskine43e51fa2022-06-20 18:48:06 +020040Note that this guarantee only applies if you either use the default
41compile-time configuration (`mbedtls/mbedtls_config.h`) or the same modified
42compile-time configuration. Changing compile-time configuration options can
Gilles Peskine3dc9ac92022-06-27 23:02:58 +020043result in an incompatible API or ABI, although features will generally not
Gilles Peskine4fd898e2022-06-29 14:29:52 +020044affect unrelated features (for example, enabling or disabling a
Gilles Peskine43e51fa2022-06-20 18:48:06 +020045cryptographic algorithm does not break code that does not use that
46algorithm).
47
Gilles Peskine6dd92c32021-06-07 20:44:47 +020048Note that new releases of Mbed TLS may extend the API. Here are some
49examples of changes that are common in minor releases of Mbed TLS, and are
50not considered API compatibility breaks:
Gilles Peskine1483fe42021-06-01 22:29:06 +020051
52* Adding or reordering fields in a structure or union.
53* Removing a field from a structure, unless the field is documented as public.
54* Adding items to an enum.
Gilles Peskine6dd92c32021-06-07 20:44:47 +020055* Returning an error code that was not previously documented for a function
56 when a new error condition arises.
57* Changing which error code is returned in a case where multiple error
58 conditions apply.
59* Changing the behavior of a function from failing to succeeding, when the
60 change is a reasonable extension of the current behavior, i.e. the
61 addition of a new feature.
Gilles Peskine1483fe42021-06-01 22:29:06 +020062
Gilles Peskined1a8cd52021-06-07 20:42:40 +020063There are rare exceptions where we break API compatibility: code that was
64relying on something that became insecure in the meantime (for example,
65crypto that was found to be weak) may need to be changed. In case security
66comes in conflict with backwards compatibility, we will put security first,
67but always attempt to provide a compatibility option.
Manuel Pégourié-Gonnarde6997392021-02-25 11:40:08 +010068
Gilles Peskine9956efa2022-06-20 18:48:52 +020069## Backward compatibility for the key store
70
Gilles Peskine4fd898e2022-06-29 14:29:52 +020071We maintain backward compatibility with previous versions of the
Gilles Peskine9956efa2022-06-20 18:48:52 +020072PSA Crypto persistent storage since Mbed TLS 2.25.0, provided that the
73storage backend (PSA ITS implementation) is configured in a compatible way.
Gilles Peskine3dc9ac92022-06-27 23:02:58 +020074We intend to maintain this backward compatibility throughout a major version
Gilles Peskine9956efa2022-06-20 18:48:52 +020075of Mbed TLS (for example, all Mbed TLS 3.y versions will be able to read
Gilles Peskine4fd898e2022-06-29 14:29:52 +020076keys written under any Mbed TLS 3.x with x <= y).
Gilles Peskine9956efa2022-06-20 18:48:52 +020077
78Mbed TLS 3.x can also read keys written by Mbed TLS 2.25.0 through 2.28.x
79LTS, but future major version upgrades (for example from 2.28.x/3.x to 4.y)
80may require the use of an upgrade tool.
81
Gilles Peskine4b873872022-06-20 18:50:09 +020082Note that this guarantee does not currently fully extend to drivers, which
83are an experimental feature. We intend to maintain compatibility with the
84basic use of drivers from Mbed TLS 2.28.0 onwards, even if driver APIs
85change. However, for more experimental parts of the driver interface, such
86as the use of driver state, we do not yet guarantee backward compatibility.
87
Gilles Peskine87d36e32021-06-07 20:42:50 +020088## Long-time support branches
89
Manuel Pégourié-Gonnarde6997392021-02-25 11:40:08 +010090For the LTS branches, additionally we try very hard to also maintain ABI
91compatibility (same definition as API except with re-linking instead of
92re-compiling) and to avoid any increase in code size or RAM usage, or in the
93minimum version of tools needed to build the code. The only exception, as
94before, is in case those goals would conflict with fixing a security issue, we
95will put security first but provide a compatibility option. (So far we never
96had to break ABI compatibility in an LTS branch, but we occasionally had to
97increase code size for a security fix.)
98
Manuel Pégourié-Gonnard80c02af2021-02-25 12:34:58 +010099For contributors, see the [Backwards Compatibility section of
Tom Cosgrovefff613a2021-11-15 13:54:59 +0000100CONTRIBUTING](CONTRIBUTING.md#backwards-compatibility).
Manuel Pégourié-Gonnard80c02af2021-02-25 12:34:58 +0100101
102## Current Branches
Manuel Pégourié-Gonnarde6997392021-02-25 11:40:08 +0100103
104The following branches are currently maintained:
105
Dave Rodgman017a1992022-03-31 14:07:01 +0100106- [master](https://github.com/Mbed-TLS/mbedtls/tree/master)
107- [`development`](https://github.com/Mbed-TLS/mbedtls/)
Dave Rodgman1fdf9d02024-03-18 14:37:16 +0000108- [`mbedtls-3.6`](https://github.com/Mbed-TLS/mbedtls/tree/mbedtls-3.6)
109 maintained until March 2027, see
110 <https://github.com/Mbed-TLS/mbedtls/releases/tag/v3.6.0>.
Dave Rodgman017a1992022-03-31 14:07:01 +0100111- [`mbedtls-2.28`](https://github.com/Mbed-TLS/mbedtls/tree/mbedtls-2.28)
Dave Rodgman1fdf9d02024-03-18 14:37:16 +0000112 maintained until the end of 2024, see
113 <https://github.com/Mbed-TLS/mbedtls/releases/tag/v2.28.8>.
Manuel Pégourié-Gonnarde6997392021-02-25 11:40:08 +0100114
115Users are urged to always use the latest version of a maintained branch.