|
| 1 | +Tarantool Legacy Release Policy |
| 2 | +=============================== |
| 3 | + |
| 4 | + |
| 5 | +A Tarantool release is identified by three digits, for example, 2.6.2 or 1.10.9: |
| 6 | + |
| 7 | +* The first digit stands for a MAJOR release series that introduces |
| 8 | + some *major changes*. Up to now, there has been only one major release jump |
| 9 | + when we delivered the 2.x release series with the SQL support. |
| 10 | +* The second digit stands for a MINOR release series that is used for |
| 11 | + introducing new *features*. |
| 12 | + :ref:`Backward incompatible changes <backward-incompatible>` |
| 13 | + are possible between these release series. |
| 14 | +* The third digit is for PATCH releases by which we reflect how stable |
| 15 | + the MINOR release series is: |
| 16 | + |
| 17 | + * ``0`` meaning **alpha** |
| 18 | + * ``1`` meaning **beta** |
| 19 | + * ``2`` and above meaning **release** (earlier known as **stable**). |
| 20 | + |
| 21 | +So, each MINOR release series goes through a development-maturity life cycle |
| 22 | +as follows: |
| 23 | + |
| 24 | +1. **Alpha**. Once a quarter, we start off with a new alpha version, |
| 25 | + such as 2.3.0, 2.4.0, and so on. This is not what an alpha release usually |
| 26 | + means in the typical software release life cycle but rather the current trunk |
| 27 | + version which is under heavy development and can be unstable. |
| 28 | + The current alpha version always lives in the master branch. |
| 29 | + |
| 30 | +2. **Beta**. When all the features planned are implemented, we fork a new branch |
| 31 | + from the master branch and tag it as a new beta version. |
| 32 | + It contains ``1`` for the PATCH digit, e.g., 2.3.1, 2.4.1, and so on. |
| 33 | + This version cannot be called stable yet (feature freeze has just been done) |
| 34 | + although there are no known critical regressions in it since |
| 35 | + the last stable release. |
| 36 | + |
| 37 | +3. **Release** (earlier known as **stable**). |
| 38 | + Finally, after we see our beta version runs successfully in |
| 39 | + a production or development environment during another quarter while we fix |
| 40 | + incoming bugs, we declare this version stable. It is tagged with ``2`` for |
| 41 | + the PATCH digit, e.g., 2.3.2, 2.4.2, and so on. |
| 42 | + |
| 43 | + We support such version for 3 months while making another stable release |
| 44 | + by fixing all bugs found. We release it in a quarter. This last tag |
| 45 | + contains ``3`` for the PATCH digit, e.g., 2.3.3, 2.4.3, and so on. |
| 46 | + After the tag is set, no new changes are allowed to the release branch, |
| 47 | + and it is declared deprecated and superseded by a newer MINOR version. |
| 48 | + |
| 49 | + Release versions don't receive any new features and only get backward |
| 50 | + compatible fixes. |
| 51 | + |
| 52 | +Like Ubuntu, in terms of support, we distinguish between two kinds of stable |
| 53 | +release series: |
| 54 | + |
| 55 | +* **LTS (Long Term Support)** is a release series that is supported |
| 56 | + for 3 years (community) and up to 5 years (paying customers). |
| 57 | + Current LTS release series is 1.10, and it receives only PATCH level |
| 58 | + releases. |
| 59 | + |
| 60 | +* **Standard** is a release series that is supported only for a few months |
| 61 | + until the next release series enters the stable state. |
| 62 | + |
| 63 | +Below is a diagram that illustrates the release sequence issuing described above |
| 64 | +by an example of some latest releases and release series: |
| 65 | + |
| 66 | +.. _release-diagram: |
| 67 | + |
| 68 | +.. code-block:: text |
| 69 | +
|
| 70 | + 1.10 series -- 1.10.4 -- 1.10.5 -- 1.10.6 -- 1.10.7 |
| 71 | + (LTS) |
| 72 | +
|
| 73 | + .... |
| 74 | +
|
| 75 | + 2.2 series --- 2.2.1 --- 2.2.2 --- 2.2.3 (end of support) |
| 76 | + | |
| 77 | + V |
| 78 | + 2.3 series ... 2.3.0 --- 2.3.1 --- 2.3.2 --- 2.3.3 (end of support) |
| 79 | + | |
| 80 | + V |
| 81 | + 2.4 series ............. 2.4.0 --- 2.4.1 --- 2.4.2 |
| 82 | + | |
| 83 | + V |
| 84 | + 2.5 series ....................... 2.5.0 --- 2.5.1 |
| 85 | + | |
| 86 | + V |
| 87 | + 2.6 series ................................. 2.6.0 |
| 88 | +
|
| 89 | + -----------------|---------|---------|---------|------> (time) |
| 90 | + 1/4 yr. 1/4 yr. 1/4 yr. |
| 91 | +
|
| 92 | +*Support* means that we continue fixing bugs. We add bug fixes simultaneously |
| 93 | +into the following release series: LTS, last stable, beta, and alpha. |
| 94 | +If we look at the release diagram above, it means that the bug fixes are to be |
| 95 | +added into 1.10, 2.4, 2.5, and 2.6 release series. |
| 96 | + |
| 97 | +To sum it up, once a quarter we release (see the release diagram above for |
| 98 | +reference): |
| 99 | + |
| 100 | +* next LTS release, e.g., 1.10.9 |
| 101 | +* two stable releases, e.g., 2.5.3 and 2.6.2 |
| 102 | +* beta version of the next release series, e.g., 2.7.1. |
| 103 | + |
| 104 | +In all supported releases, when we find and fix an outstanding CVE/vulnerability, |
| 105 | +we deliver a patch for that but do not tag a new PATCH level version. |
| 106 | +Users will be informed about such critical patches via the official Tarantool news |
| 107 | +channel (`tarantool_news <https://t.me/tarantool_news>`_). |
| 108 | + |
| 109 | +We also publish nightly builds, and use the fourth slot in the version |
| 110 | +identifier to designate the nightly build number. |
| 111 | + |
| 112 | +.. _backward-incompatible: |
| 113 | + |
| 114 | +.. note:: |
| 115 | + |
| 116 | + A release series may introduce backward incompatible changes in a sense that |
| 117 | + existing Lua, SQL or C code that are run on a current release series |
| 118 | + may not be run with the same effect on a future series. |
| 119 | + However, we don't exploit this rule and don't make incompatible changes |
| 120 | + without appropriate reason. We usually deliver information how mature |
| 121 | + a functionality is via release notes. |
| 122 | + |
| 123 | + Please note that binary data layout |
| 124 | + is always compatible with the previous series as well as with the LTS series |
| 125 | + (an instance of ``X.Y`` version can be started on top of ``X.(Y+1)`` |
| 126 | + or ``1.10.z`` data); binary protocol is compatible too |
| 127 | + (client-server as well as replication protocol). |
0 commit comments