[MDEV-21732] libmariadb3 symbols changed in stable release (10.3), breaks ABI compatiblity Created: 2020-02-13 Updated: 2022-01-16 Resolved: 2020-02-19 |
|
| Status: | Closed |
| Project: | MariaDB Server |
| Component/s: | libmariadb |
| Affects Version/s: | 10.3 |
| Fix Version/s: | N/A |
| Type: | Bug | Priority: | Major |
| Reporter: | Otto Kekäläinen | Assignee: | Georg Richter |
| Resolution: | Not a Bug | Votes: | 0 |
| Labels: | None | ||
| Issue Links: |
|
||||||||
| Description |
|
In Debian we use a libmariadb3.symbols file to track if and what symbols change in each release. The history for 10.3 has had now several symbol changes in last 6 months: Examples: Full history: https://salsa.debian.org/mariadb-team/mariadb-10.3/commits/buster/debian/libmariadb3.symbols Question 1) What is the policy on this? Is this intentional or a bug? Were there decisions to ship new libmariadb3 versions in a stable release so that it is not fully backwards compatible or did it just happen? WIll you continue to do this? Question 2) How to mitigate issues? Should we just hope that the symbols changed are not consumed by anybody? So far I've seen only one complaint: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=951210 Should libmariadb3 be split out from the server package so that it would in the future be released independently with it's own version numbers (3.0.x, 3.1.x etc)? |
| Comments |
| Comment by Sergei Golubchik [ 2020-02-18 ] | |||||||
|
I think that the first change is fine, new symbols were added, they have a newer version that follows semantic versioning rules. The second is strange. georg, could you please comment on that? | |||||||
| Comment by Georg Richter [ 2020-02-19 ] | |||||||
|
2nd issue is caused by fix for | |||||||
| Comment by Sergei Golubchik [ 2020-02-19 ] | |||||||
|
otto, so, if I understand georg correctly, adding new symbols with a new library version is fine (as long as semver rules are being followed) and removing symbols is generally not fine, but in this case the symbols were added as a mistake — they shouldn't have been there in the first place and no application could be using them, because they were never in the libmysqlclient_18 library, so removal was safe. | |||||||
| Comment by Sergei Golubchik [ 2020-02-19 ] | |||||||
|
In other words, neither change breaks ABI | |||||||
| Comment by Otto Kekäläinen [ 2020-02-20 ] | |||||||
|
For at least one user it did break the ABI: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=951210 Related to this, I opened a PR against mariadb-10.2 to ship a libmariadb3.symbols file upstream, so that these symbol changes are easier to track and will be clearly noticed already during upstream development and not post-release when it is too late to: https://github.com/MariaDB/server/pull/1449 Also, I noticed that currently the latest releases of MariaDB 10.2, 10.3, 10.4 and 10.5 all ship the MariaDB Connector C version 3.1.7:
This is however not reflected in the Debian packaging. The libmariadb3 package is shipped with version 10.2.31, 10.3.22, 10.4.12 and 10.5.1 respectively using the server version (not 3.1.7). This means that at some point in the 10.2 stable release cycle the library version was bumped from 3.0.x to 3.1.x. Is this safe to do in a stable release? At what point does the MariaDB Connector C versions need to start to diverge (if ever)? Should we be prepared to ship the library with package name libmariadb31 or libmariadb32 at some point? Or is there just an assumption that we have the same version everywhere and it does not matter since the ABI is always backwards compatible? There is the server ABI also to consider. In upstream packaging the version is not separated in any way, but in downstream Debian packaging the server plugins are placed in the directory /usr/lib/<arch>/mariadb19/*.so, eg:
Use of mariadb18 started in https://salsa.debian.org/mariadb-team/mariadb-10.1/commit/5aecef81f774e245f60e8c3f70f44190f7473537 and was bumped to maraidb19 in https://salsa.debian.org/mariadb-team/mariadb-10.3/commit/b4a5e7b2e2ab6bff42edfc9317cfa1c61980dea3 The versions in package names and paths exists to facilitate a migration from old to new, so that for some period of time both versions can co-exists at least on some level while all binaries that used a certain ABI version are recompiled for the new version. I don't have a clear picture how all of this will work in the future, so I decided to spell out what the situation is and maybe you have some comments.. | |||||||
| Comment by Otto Kekäläinen [ 2020-02-24 ] | |||||||
| Comment by Otto Kekäläinen [ 2020-02-27 ] | |||||||
|
To summarize status:
I suggest this issue would be closed when:
|