[devel] переработанный документ SharedLibsPolicy (update 1)
Ivan A. Melnikov
iv на altlinux.org
Чт Авг 14 13:33:47 MSK 2025
On Thu, Aug 07, 2025 at 05:20:26PM +0300, Anton Farygin wrote:
[...]
> * Каждая несовместимая версия библиотеки должна быть в отдельном бинарном
> пакете.
> * Название пакета: `libfoo%abiversion`
> * Если имя библиотеки заканчивается на цифру, то используется подчёркивание:
> `libfoo_%abiversion`
> * В пакете не должно быть файлов с путями, не содержащими номер ABI.
Странная формулировка.
[...]
> == Как выбирать %abiversion ==
>
> Если библиотека использует `soversion` — используем его как %abiversion.
>
> Если `soversion` отсутствует или нестабилен — используем:
>
> * возрастающее число: `libfoo0`, `libfoo1`
> * major-версию: `libqt3`, `libqt4`
> * major.minor: `libdb4.0`, `libdb4.1`
> * часть soname: `libcurl4`, `libflac8`
[...]
> * Если два пакета конфликтуют по путям, они не смогут сосуществовать — тогда
> старую версию нужно удалить, а все зависимости — пересобрать.
[...]
Здесь не очень понятно описано, что делать, если апстрим не задаёт
никакого soname для библиотеки. Ну то есть, очевидно, надо идти
в апстрим и заниматься просветительской работой, сопровождаемой
pull request'ами, но пока эта работа движется, библиотеку как-то
же можно запаковать.
Чаще всего такие библиотеки окажутся установлеными во что-то
похожее на %_libdir/libfoo.so. Переименоввывать её странно,
да и динамический компоновщик кажется не найдёт такую
библиотеку по какому-то другому имени. Значит, в разных
сборках такой библиотеки будет один и тот же файл.
А это уже противоречит требованию предложенного policy.
На мой взгляд, разумнее всего такие библиотеки паковать
в пакет с именем libfoo и надеятся на лучшее, так как
пакет libfooN, набирающий со временем кофликты
с libfoo0, libfoo1, ..., libfoo$((N-1)) технически
ничем не лучше.
Можно конечно пытаться задать свой soname патчем. Это
решило бы многие проблемы, но есть опасность пересечься
со схемой формирования soname, которую рано или поздно
выберет апстрим.
В общем, я не могу ничего рекомендовать для такой ситуации,
однако мне кажется SharedLibsPolicy должна явно описать
случай отсутствия soname.
--
wbr,
iv m.
Подробная информация о списке рассылки Devel