[devel] Shared Libs Policy: версия ABI до суффикса -qt6/-gtk4 в имени пакета
Vitaly Lipatov
lav на altlinux.ru
Вс Окт 18 12:26:32 MSK 2026
Здравствуйте, давай обсудим место для прибавки soname.
Shared Libs Policy предписывает имя пакета libfoo%abiversion, а для
имени,
оканчивающегося на цифру, — libfoo_%abiversion. Для библиотек с
суффиксом
тулкита (-qt5, -qt6, -gtk3, -gtk4) это даёт имена вида libfoo-qt6_1, но
на
практике в Sisyphus их называют кто как. Посмотрел пакеты с такими
библиотеками (имя пакета и soname по собранным rpm):
1. В конце через подчёркивание (буква политики), 10 пакетов:
libaccounts-qt6_1 libaccounts-qt6.so.1
libgio-qt6_0 libgio-qt6.so.0
libgsettings-qt6_1 libgsettings-qt6.so.1
libkddockwidgets-qt6_3 libkddockwidgets-qt6.so.3
libkdsingleapplication-qt6_1.2 libkdsingleapplication-qt6.so.1.2
libkdsoap-qt6_2, libkdsoap-server-qt6_2
libmarblewidget-qt6_28 libmarblewidget-qt6.so.28
libquazip1-qt5_1.0.0 libquazip1-qt5.so.1.0.0
libsignon-qt6_1 libsignon-qt6.so.1
2. В конце слитно — читается как версия Qt:
libaccounts-qt51 libaccounts-qt5.so.1
libdbusmenu-qt52 libdbusmenu-qt5.so.2
libtelepathy-qt50 libtelepathy-qt5.so.0
3. В конце через дефис:
libudisks2-qt6-1 libudisks2-qt6.so.1
4. До суффикса:
libpoppler1-qt5 libpoppler-qt5.so.1
libpoppler3-qt6 libpoppler-qt6.so.3
(и libpoppler8-glib libpoppler-glib.so.8)
5. Без версии вовсе — около двадцати пакетов, например libqca-qt6
(so.2), libfm-qt6 (so.17), libportal-qt6 (so.1), libqtspell-qt6,
libudisks2-qt5 (so.5), libcanberra-gtk3, libnma-gtk4, libportal-gtk4.
При смене soname им всё равно придётся выбирать одну из схем выше.
Предлагаю для библиотек с суффиксом тулкита ставить версию ABI до
суффикса, как, например, сделано в poppler:
libfoo-qt6.so.N -> libfooN-qt6
libfoo-gtk4.so.N -> libfooN-gtk4
Почему так:
- суффикс -qt6/-gtk4 обозначает вариант сборки, а не часть версии; имя
читается как «библиотека foo ABI N для Qt6», как libpoppler3-qt6;
- исчезает неоднозначность libaccounts-qt51 (Qt 5.1?) и некрасивое
подчёркивание, нужное только из-за цифры в имени тулкита;
- варианты одной библиотеки для разных тулкитов получают одинаковую
версионную часть: libaccounts1-qt5 и libaccounts1-qt6.
Отдельный случай — когда upstream вписывает major-версию в имя файла.
QuaZip называет библиотеку quazip${MAJOR}-qt${QT} с SOVERSION
MAJOR.MINOR, отсюда libquazip1-qt6.so.1.7: единица в имени — та же
major, что в 1.7. По предложенной схеме версия ABI встаёт на её место:
libquazip1.7-qt6 (а не libquazip1-qt6_1.7 с повтором).
Существующие пакеты переименовывать не предлагаю — только новые и при
очередной смене soname (с Provides/Obsoletes старого имени, как обычно).
--
Vitaly Lipatov
Подробная информация о списке рассылки Devel