[Development] Changing Qt's Binary Compatibility policy

Giuseppe D'Angelo giuseppe.dangelo at kdab.com
Fri May 24 18:29:41 CEST 2024


Hi,

One of the discussions at the past Qt Contributors' Summit was about our 
BC policy:

https://wiki.qt.io/Two-way_BC_in_Patch_Releases

We had a consensus for implementing some changes, but I don't remember 
the action points have been taken, so here we are.


We propose to change Qt's BC policy as follows:


1) Qt continues to promise backwards binary compatibility for end-users 
within the same major version. Specifically, user code that is linked 
against a given Qt version will continue to work when linked against a 
version of Qt which
a) is higher, and
b) has been released later than the one used to originally link the code.

Details:

* "Qt" means the essential modules, except for QtTest. Addon modules may 
or may not promise BC (or even SC).

* "continue to work" just means that user code will be able to load and 
run with the newer version of Qt. We're not making any behavioural 
guarantees in this policy.

* "a higher version of Qt" means to follow semantic versioning 
(lexicographic / component-wise) ordering. For instance, 6.6.1 is higher 
than 6.5.5.

* "that has been released later": due to the branching policy / LTS / 
etc., it is perfectly possible that a higher version of Qt has actually 
been released *before* one with a lower version number.

In the example above, 6.6.1 has been released on 27/Nov/2023, and 6.5.5 
on 4/Mar/2024. Therefore, we _do not support_ upgrading from 6.5.5 to 
6.6.1: 6.5.5 is allowed to have new symbols that are not present in 
6.6.1, and would cause user code to fail to dynamically link/load.

(6.5.5 is also allowed to have some minor SICs, like the list of 
countries/languages in QLocale. 6.6.1 may have bugs that have been fixed 
in 6.5.5, thus causing regressions user code.)



2) We stop guaranteeing forward binary compatibility within the same 
minor version.

In other words, code compiled against Qt X.Y.Z may or may not work if at 
runtime Qt X.Y.W is used, with W<Z.

Details: no user downgrades Qt and therefore has ever needed this. This 
is something that only Qt developers themselves have possibly needed -- 
seems to be a historical remnant at this point.

Concretely, this means that we can make our lives easier; for instance, 
when backporting fixes, we'll allow new symbols to appear in patch 
releases.




Does this sound good?

Thank you,
-- 
Giuseppe D'Angelo | giuseppe.dangelo at kdab.com | Senior Software Engineer
KDAB (France) S.A.S., a KDAB Group company
Tel. France +33 (0)4 90 84 08 53, http://www.kdab.com
KDAB - Trusted Software Excellence
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4244 bytes
Desc: Firma crittografica S/MIME
URL: <http://lists.qt-project.org/pipermail/development/attachments/20240524/38bd8e00/attachment.bin>


More information about the Development mailing list