LINUX.ORG.RU

История изменений

Исправление t184256, (текущая версия) :

Всегда пожалуйста, почту за честь с тобой посраться =)

Временно забудем, что версионирование либ в линуксе уже немного адекватно и предположим, что совместимость с shared library почему-то ломается даже в пределах одной мажорной версии. Поехали.

В Nix с деривацией тянутся все ее деривации-зависимости, но это и в других дистрах так, ничего особенного.

В Nix деривация зависит от конкретных версий дериваций-зависимостей, но у этой фразы два смысла. Это не апогей бессмысленного и беспощадного pinning'а как в случае с Cargo.lock! Cмена версии библиотеки вызовет (вместо молитв богам совместимости) радостную, массовую и безотлагательную пересборку/тестирование всех ее зависимостей (cue головняк мэйнтейнеров бинарного кеша и волны пересборки). Деривация может заморочиться и продолжить зависеть и от старой версии. Но абстрактные деривации от каких-то особых версий без уважительной причины не зависят и зоопарка либ в системе без повода не разводится. После прохода garbage collector'а большинство либ в /nix/store остается в единственной версии. Так что и к словосочетанию «это необходимость бандлить» есть претензия - возможность потребовать старую, конкретную или экзотически собранную версию библиотеки в Nix есть, но это - исключение, а не правило, так обычно не делают.

В мире Nix есть возможность зависеть от конкретных версий, в том числе и разных для разных «одновременно установленных» дериваций, но это не приведет к конфликту, а даже наоборот. В этом смысле это полная противоположность DLL Hell, так как выражение «в системе попадется DLL чуть не той версии» теряет смысл вместе со словами «DLL в системе». В профиле должны стоять приложения, а не либы, и разные приложения вольны юзать разные версии либ. Даже больше, в идеальном мире Nix они понятия не имеют о существовании каких-то других версий этих либ. Как в этом можно было вообще увидеть DLL Hell?

Ну и, самое дикое, «необходимость бандлить по копии DLL с каждым приложением», ага. Чего-чего, а «по копии» и «с каждым» - это точно не про Nix. nix-store --optimize не оставит в твоем /store ни единой пары одинаковый файлов. «С каждым» так вообще ни в каком нормальном PM нет, преступления против PM типа flatpak'ов не в счет.

Итого: бандлинга нет, копий нет, «с каждым» - нет, «DLL в системе» - нет, «приложение не взлетит» - нет, а так прям почти DLL Hell.

Исходная версия t184256, :

Всегда пожалуйста, почту за честь с тобой посраться =)

Временно забудем, что версионирование либ в линуксе уже немного адекватно и предположим, что совместимость с shared library почему-то ломается даже в пределах одной мажорной версии. Поехали.

В Nix с деривацией тянутся все ее деривации-зависимости, но это и в других дистрах так, ничего особенного.

В мире Nix есть возможность зависеть от конкретных версий, в том числе и разных для разных «одновременно установленных» дериваций, но это не приведет к конфликту, а даже наоборот. В этом смысле это полная противоположность DLL Hell, так как выражение «в системе попадется DLL чуть не той версии» теряет смысл вместе со словами «DLL в системе». В профиле должны стоять приложения, а не либы, и разные приложения вольны юзать разные версии либ. Даже больше, в идеальном мире Nix они понятия не имеют о существовании каких-то других версий этих либ. Как в этом можно было вообще увидеть DLL Hell?

В Nix деривация зависит от конкретных версий дериваций-зависимостей, но у этой фразы два смысла. Это не апогей pinning'а как в случае с Cargo.lock! Cмена версии библиотеки вызовет (вместо молитв богам совместимости) радостную, массовую и безотлагательную пересборку/тестирование всех ее зависимостей (cue головняк мэйнтейнеров бинарного кеша и волны пересборки). Деривация может заморочиться и продолжить зависеть и от старой версии. Но абстрактные деривации от каких-то особых версий без уважительной причины не зависят и зоопарка либ в системе без повода не разводится. После прохода garbage collector'а большинство либ в /nix/store остается в единственной версии. Так что и к словосочетанию «это необходимость бандлить» есть претензия - возможность потребовать старую, конкретную или экзотически собранную версию библиотеки в Nix есть, но это - исключение, а не правило, так обычно не делают.

Ну и, самое дикое, «необходимость бандлить по копии DLL с каждым приложением», ага. Чего-чего, а «по копии» и «с каждым» - это точно не про Nix. nix-store --optimize не оставит в твоем /store ни единой пары одинаковый файлов. «С каждым» так вообще ни в каком нормальном PM нет, преступления против PM типа flatpak'ов не в счет.

Итого: бандлинга нет, копий нет, «с каждым» - нет, «DLL в системе» - нет, «приложение не взлетит» - нет, а так прям почти DLL Hell.