| Manuel Pégourié-Gonnard | e699739 | 2021-02-25 11:40:08 +0100 | [diff] [blame] | 1 | # Maintained branches | 
|  | 2 |  | 
|  | 3 | At any point in time, we have a number of maintained branches consisting of: | 
|  | 4 |  | 
| Dave Rodgman | 52af769 | 2022-03-31 14:27:24 +0100 | [diff] [blame] | 5 | - The [`master`](https://github.com/Mbed-TLS/mbedtls/tree/master) branch: | 
| Gilles Peskine | 991bbe7 | 2021-03-16 12:05:16 +0100 | [diff] [blame] | 6 | this always contains the latest release, including all publicly available | 
|  | 7 | security fixes. | 
| Dave Rodgman | 52af769 | 2022-03-31 14:27:24 +0100 | [diff] [blame] | 8 | - The [`development`](https://github.com/Mbed-TLS/mbedtls/tree/development) branch: | 
| Gilles Peskine | a23df13 | 2021-03-16 12:04:44 +0100 | [diff] [blame] | 9 | this is where new features land, | 
|  | 10 | as well as bug fixes and security fixes. | 
|  | 11 | - One or more long-time support (LTS) branches: | 
|  | 12 | these only get bug fixes and security fixes. | 
| Manuel Pégourié-Gonnard | e699739 | 2021-02-25 11:40:08 +0100 | [diff] [blame] | 13 |  | 
|  | 14 | We use [Semantic Versioning](https://semver.org/). In particular, we maintain | 
| Gilles Peskine | 991bbe7 | 2021-03-16 12:05:16 +0100 | [diff] [blame] | 15 | API compatibility in the `master` branch between major version changes. We | 
| Manuel Pégourié-Gonnard | e699739 | 2021-02-25 11:40:08 +0100 | [diff] [blame] | 16 | also maintain ABI compatibility within LTS branches; see the next section for | 
|  | 17 | details. | 
|  | 18 |  | 
| Gilles Peskine | 6140d2e | 2022-06-20 18:48:52 +0200 | [diff] [blame] | 19 | ## Backwards Compatibility for application code | 
| Manuel Pégourié-Gonnard | e699739 | 2021-02-25 11:40:08 +0100 | [diff] [blame] | 20 |  | 
| Gilles Peskine | a23df13 | 2021-03-16 12:04:44 +0100 | [diff] [blame] | 21 | We maintain API compatibility in released versions of Mbed TLS. If you have | 
|  | 22 | code that's working and secure with Mbed TLS x.y.z and does not rely on | 
|  | 23 | undocumented features, then you should be able to re-compile it without | 
|  | 24 | modification with any later release x.y'.z' with the same major version | 
|  | 25 | number, and your code will still build, be secure, and work. | 
|  | 26 |  | 
| Gilles Peskine | 6bfc19a | 2022-06-20 18:48:06 +0200 | [diff] [blame] | 27 | Note that this guarantee only applies if you either use the default | 
|  | 28 | compile-time configuration (`mbedtls/config.h`) or the same modified | 
|  | 29 | compile-time configuration. Changing compile-time configuration options can | 
| Gilles Peskine | a6e71bf | 2022-06-27 23:02:58 +0200 | [diff] [blame] | 30 | result in an incompatible API or ABI, although features will generally not | 
| Gilles Peskine | fe84f38 | 2022-06-29 14:29:52 +0200 | [diff] [blame] | 31 | affect unrelated features (for example, enabling or disabling a | 
| Gilles Peskine | 6bfc19a | 2022-06-20 18:48:06 +0200 | [diff] [blame] | 32 | cryptographic algorithm does not break code that does not use that | 
|  | 33 | algorithm). | 
|  | 34 |  | 
| Gilles Peskine | a23df13 | 2021-03-16 12:04:44 +0100 | [diff] [blame] | 35 | There are rare exceptions: code that was relying on something that became | 
|  | 36 | insecure in the meantime (for example, crypto that was found to be weak) may | 
|  | 37 | need to be changed. In case security comes in conflict with backwards | 
|  | 38 | compatibility, we will put security first, but always attempt to provide a | 
|  | 39 | compatibility option. | 
| Manuel Pégourié-Gonnard | e699739 | 2021-02-25 11:40:08 +0100 | [diff] [blame] | 40 |  | 
|  | 41 | For the LTS branches, additionally we try very hard to also maintain ABI | 
|  | 42 | compatibility (same definition as API except with re-linking instead of | 
|  | 43 | re-compiling) and to avoid any increase in code size or RAM usage, or in the | 
|  | 44 | minimum version of tools needed to build the code. The only exception, as | 
|  | 45 | before, is in case those goals would conflict with fixing a security issue, we | 
|  | 46 | will put security first but provide a compatibility option. (So far we never | 
|  | 47 | had to break ABI compatibility in an LTS branch, but we occasionally had to | 
|  | 48 | increase code size for a security fix.) | 
|  | 49 |  | 
| Manuel Pégourié-Gonnard | 80c02af | 2021-02-25 12:34:58 +0100 | [diff] [blame] | 50 | For contributors, see the [Backwards Compatibility section of | 
| Dave Rodgman | 52af769 | 2022-03-31 14:27:24 +0100 | [diff] [blame] | 51 | CONTRIBUTING](CONTRIBUTING.md#backwards-compatibility). | 
| Manuel Pégourié-Gonnard | 80c02af | 2021-02-25 12:34:58 +0100 | [diff] [blame] | 52 |  | 
| Gilles Peskine | 6140d2e | 2022-06-20 18:48:52 +0200 | [diff] [blame] | 53 | ## Backward compatibility for the key store | 
|  | 54 |  | 
| Gilles Peskine | fe84f38 | 2022-06-29 14:29:52 +0200 | [diff] [blame] | 55 | We maintain backward compatibility with previous versions of the | 
| Gilles Peskine | 6140d2e | 2022-06-20 18:48:52 +0200 | [diff] [blame] | 56 | PSA Crypto persistent storage since Mbed TLS 2.25.0, provided that the | 
|  | 57 | storage backend (PSA ITS implementation) is configured in a compatible way. | 
| Gilles Peskine | a6e71bf | 2022-06-27 23:02:58 +0200 | [diff] [blame] | 58 | We intend to maintain this backward compatibility throughout a major version | 
| Gilles Peskine | 6140d2e | 2022-06-20 18:48:52 +0200 | [diff] [blame] | 59 | of Mbed TLS (for example, all Mbed TLS 3.y versions will be able to read | 
| Gilles Peskine | fe84f38 | 2022-06-29 14:29:52 +0200 | [diff] [blame] | 60 | keys written under any Mbed TLS 3.x with x <= y). | 
| Gilles Peskine | 6140d2e | 2022-06-20 18:48:52 +0200 | [diff] [blame] | 61 |  | 
|  | 62 | Mbed TLS 3.x can also read keys written by Mbed TLS 2.25.0 through 2.28.x | 
|  | 63 | LTS, but future major version upgrades (for example from 2.28.x/3.x to 4.y) | 
|  | 64 | may require the use of an upgrade tool. | 
|  | 65 |  | 
| Manuel Pégourié-Gonnard | 80c02af | 2021-02-25 12:34:58 +0100 | [diff] [blame] | 66 | ## Current Branches | 
| Manuel Pégourié-Gonnard | e699739 | 2021-02-25 11:40:08 +0100 | [diff] [blame] | 67 |  | 
|  | 68 | The following branches are currently maintained: | 
|  | 69 |  | 
| Dave Rodgman | 52af769 | 2022-03-31 14:27:24 +0100 | [diff] [blame] | 70 | - [master](https://github.com/Mbed-TLS/mbedtls/tree/master) | 
|  | 71 | - [`development`](https://github.com/Mbed-TLS/mbedtls/) | 
|  | 72 | - [`mbedtls-2.28`](https://github.com/Mbed-TLS/mbedtls/tree/mbedtls-2.28) | 
| Dave Rodgman | 29c3aee | 2021-12-13 18:47:16 +0000 | [diff] [blame] | 73 | maintained until at least the end of 2024. | 
| Manuel Pégourié-Gonnard | e699739 | 2021-02-25 11:40:08 +0100 | [diff] [blame] | 74 |  | 
|  | 75 | Users are urged to always use the latest version of a maintained branch. |