Sign in Join
Wiki copytemporary

Version Numbering: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## FPC, Lazarus combinations
22
33| Lazarus Release | Recommended FPC version | Notes |
44|----|----|----|
55| 0.9.24 - 0.9.99 | 2.2.4 | |
66| 1.0.0 - 1.0.6 | 2.6.0 | |
77| 1.0.8 - 1.2.2 | 2.6.2 | |
88| 1.2.4 - 1.4.2 | 2.6.4 | |
99| 1.6.0 - 1.6.2 | 3.0.0 | last version for Win98/ME using fpc 2.6.4 |
1010| 1.6.4 | 3.0.2 | |
1111| 1.8.0 - 2.0.8 | 3.0.4 | |
1212| 2.0.10 | 3.2.0 | |
1313| 2.2.0 and newer | 3.2.2 | |
1414
1515(See also: [[Free Pascal]])
1616
1717## Explanation of the different version numbers of Lazarus
1818
1919Internally, Lazarus version has the following structure:
2020
2121 Major.Minor.Release.Patch
2222
2323### The Lazarus release cycle
2424
2525The Lazarus project has 2 kind of releases: major and minor. Note: those do/did not always align with the names for the positions in the version number.
2626
2727Major releases
2828Include new features.
2929
3030Minor releases
3131Only bug fixes.
3232
3333When a major release preparation process starts, a new branch (git branch, earlier svn branch) is made from the "main" (aka "trunk" as it was called for svn) branch. The new branch will be called "fixes_nn", where "nn" is some numbering (see graph).
3434
3535Development continues on the main branch. Selected bug-fixes are merged to the fixes branch. Each major release is made from a newly created fixes branch. The subsequent minor releases are all made from the same fixes branch as their major release.
3636
3737In the past the first 2 numbers ("major.minor") were used for the major version, and the 3rd number ("release") indicated minor releases. There was no rule if a new major release would increase the "major" or "minor" number. It was therefore decided that major releases should always increase the "major" number. And minor releases should increase the "minor" number. The first major release with the new numbering is Lazarus 3.0.
3838
3939#### Odd numbers - "placeholder" aka "development" versions between releases
4040
4141There are special version numbers reserved for the code under development. Those versions do not indicate a fixed point (i.e. specific commit), but are used for all and any commits between releases.
4242
4343After a major release process was started (i.e. fixes branch has been created), new features continue to be added to "main" branch. The version number shared by every commit in the "main" branch will be set to one (one and the same for all commits) such "placeholder" version. E.g. "Lazarus 2.1" or "Lazarus 3.99" do not correspond to any specific commit for the IDE, they denote any commit on that branch. Usually, referring to such a version is used to say "the latest commit on that branch" (which can change hourly, daily, weekly, ... whatever).
4444
4545Similar "placeholder" versions exist for minor releases.
4646
4747All those "placeholder" versions are identified by an odd number, in either the "minor" or "release" position.
4848
4949- Prior to Lazarus 3.0 the odd number for the development version was either in the "minor" (1.1, 2.1, 2.3) or in the "release" (2.0.1, 2.0.3, 2.2.1) positions.
5050- Since Lazarus 3.0 the odd number will always be in the "minor" position (3.1, 3.3, ... 3.99, 4.1, ....).
5151
5252### Lazarus 3.0 and newer
5353
5454In Lazarus version 3.0 and up, the "release" number is always 0 (zero).\
5555"Major" and "minor" version numbers are used to identify a release or a fixes branch.\
5656
5757An even "minor" version number, like x.0 or x.2, represents a general availability release.\
5858An odd "minor" version number like x.1 or x.3 represents a fixes branch. For example: 3.1 would contain bug fixes for the 3.0 release and would be used as the basis for the 3.2 release.\
5959Development (or trunk) versions are always represented as "minor" version number 99; i.e. 3.99 is the development branch for the future 4.0 release. Also, selected commits from this branch are cherry picked to the 3.x family.\
6060
6161"Patch" numbers identify a release candidate or a general availability release. For example: 3.0.0 RC1 has the the full version value of 3.0.0.1. RC2 has the value 3.0.0.2, and the released product could be 3.0.0.3.
6262
6363### Pre 3.0 versioning
6464
6565In Lazarus preceding 3.0, versioning had the following differences:
6666
6767"Major", "minor" and "release" version numbers were used to identify a release or a fixes branch.\
6868An even "minor" and "release" version numbers, like x.2.0 or x.2.2, represented a general availability release.\
6969An odd "minor" version number indicated that it is a development (or trunk) version. Example: x.1.0.\
7070An odd "release" version number indicated fixes branch. Example: 1.4.1 in Lazarus 1.4 series. 1.4.1 would have eventually become 1.4.2 general availability release.
7171
7272### How about fixed bugs, in which version is the fix included?
7373
7474Take the issue [1](https://gitlab.com/freepascal.org/lazarus/lazarus/-/issues/30187) as an example.
7575
7676It has a "milestone" set ("version 3.0").
7777
7878- For open bugs the milestone indicates the currently planned target by which the issue should be fixed. It may however be rescheduled.
7979- For closed issues, it is set to the release that will contain the issue.
8080
8181Some issues also refer to the commit containing the fix. Usually the last "mentioned in commit" note. Or a dedicated comment by a developer. In this case [2](https://gitlab.com/freepascal.org/lazarus/lazarus/-/commit/6a84f7039d3a6f48be85a968eb8f68f8d7c46a5a)
8282
8383On that commit page is the following info (needs to be unfolded)
8484
85-`   Branches containing this commit`\
86-`   fixes_3_0 main`\
87-`   Tags containing this commit`\
88-`   lazarus_3_0_RC1 main_3_99 t-fixes-3`
85+```text
86+ Branches containing this commit
87+ fixes_3_0 main
88+ Tags containing this commit
89+ lazarus_3_0_RC1 main_3_99 t-fixes-3
90+```
8991
9092\`lazarus_3_0_RC1\` is the indicator that it will be in the 3.0 release (after the RC, in which it also is included)
9193
9294Some older issues, that were imported from mantis have tags named "target". [3](https://gitlab.com/freepascal.org/lazarus/lazarus/-/issues/34773)
9395
9496In the "mantis" block is the info "Fixed in revision" which links to a commit, as described above.
9597
9698## Version numbers in graph form
9799
98100Maybe this will help some users understand the version numbering a bit better.
99101
100-`o - main branch becomes version 3.99: development + experimental stuff, fixes branch 3.0 is created`\
101-`|`\
102-`|\`\
103-`| \`\
104-`|  |`\
105-`|  o - (branches\fixes_3_0) - feature freeze + release candidate`\
106-`|  |\ `\
107-`|  | o - (tags\release_3_0_RC1)`\
108-`|  |\ `\
109-`|  | o - (tags\release_3_0) - Release 3.0. After this release version in fixes branch is incremented to 3.1.`\
110-`|  |\ `\
111-`|  | o - (tags\release_3_2) - Release 3.2. After this release version in fixes branch is incremented to 3.3.`\
112-`|`\
113-`o - main branch becomes version 4.99: development + experimental stuff, fixes branch 4.0 is created`\
114-`|`\
115-`|\`\
116-`| \`\
117-`|  |`\
118-`|  o - (branches\fixes_4_0) - feature freeze + release candidate`\
119-`|  |\ `\
120-`|  | o - (tags\release_4_0_RC1)`\
121-`|  |\`\
122-`|  | o - (tags\release_4_0) - this will happen in the future`
102+```text
103+o - main branch becomes version 3.99: development + experimental stuff, fixes branch 3.0 is created
104+|
105+|\
106+| \
107+| |
108+| o - (branches\fixes_3_0) - feature freeze + release candidate
109+| |\
110+| | o - (tags\release_3_0_RC1)
111+| |\
112+| | o - (tags\release_3_0) - Release 3.0. After this release version in fixes branch is incremented to 3.1.
113+| |\
114+| | o - (tags\release_3_2) - Release 3.2. After this release version in fixes branch is incremented to 3.3.
115+|
116+o - main branch becomes version 4.99: development + experimental stuff, fixes branch 4.0 is created
117+|
118+|\
119+| \
120+| |
121+| o - (branches\fixes_4_0) - feature freeze + release candidate
122+| |\
123+| | o - (tags\release_4_0_RC1)
124+| |\
125+| | o - (tags\release_4_0) - this will happen in the future
126+```
123127
124128Note that main branch gets a new version right after branching. So version 3.99 from main branch exists at the same time as version 3.x in fixes_3_0 branch.
125129
126130---
127131*From the Free Pascal wiki, page "Version Numbering", as it stood on 2023-07-03 after a change by Mattias2, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
128132Category: Lazarus internals

Back to history