[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