Вышел мажорный релиз пакетного менеджера Nix, основной целью которого является предоставление воспроизводимых сборок.
Одной из особенностей данного пакетного менеджера является то, что для описания пакетов в нём используется функциональный язык nix. Набор пакетов nixpkgs, описанный на этом языке, на данный момент содержит более 8 тысяч пакетов применимых для широкого круга задач. Все пакеты с их зависимостями образуют Merkle tree, в котором уникальный хэш каждого пакета зависит от его собственного описания и от хешей всех его зависимостей, также огромное внимание уделяется изоляции сборок друг от друга (используется множество разных механизмов), всё это позволяет окончательно решить проблему так называемого «DLL hell». Nix также является сердцем декларативного дистрибутива Linux под названием NixOS. Nix 2.0 будет использован в следующем релизе NixOS 18.03 Impala.
Нововведения в релизе:
- Обновлённый интерфейс командной строки на базе единой команды
nixдолжен стать более удобным и однородным (интерфейсыnix-env,nix-buildи другие сохранены для обратной совместимости)-
nix buildпришел на заменуnix-build -
nix runслужит для запуска программ в окружении заданных пакетов (в чём-то похож на старыйnix-shell -p ... --run ...) -
nix searchзаменяетnix-env -qa. В отличии от последнего,nix searchумеет кэшировать список пакетов для быстрого поиска -
nix copyпозволит копировать пакеты между произвольными хранилищами пакетов, является обобщениемnix-copy-closureиnix-push -
nix verifyпроверяет, что файлы пакета не были модифицированы -
nix repl— встроенный REPL для языка nix -
nix why-dependsдемонстрирует каким образом один пакет зависит от другого. Помогает мейнтейнерам бороться с «распуханием» дерева зависимостей
-
- Улучшения безопасности
- Nix теперь сохраняет цифровые подписи к пакетам в локальном хранилище. Подписи также копируются автоматически вместе с пакетами при копировании между хранилищами.
- Цифровые подписи больше не требуются для содержимого с фиксированным хешем
- Команда
nix verifyпозволяет проверять наличие необходимых цифровых подписей - Цифровые подписи теперь по-умолчанию требуются для бинарных сборок (раньше так было только в NixOS)
- В сборках в песочнице на платформе Linux теперь в качестве временной директории используется
/buildвместо/tmp
- Режим чистого выполнения выражений на языке nix в котором не доступны некоторые функции позволяющие получать переменные окружения, скачивать файлы с недетерминированным содержимым.
- Добавлены несколько фич для поддержки бинарной воспроизводимости (проверки на то, что независимые сборки одного и того же пакета имеют одинаковый результат). Если флаг
enforce-determinismустановлен вfalse, то различие в промежуточных сборках (например, зависимостей) приведёт всего лишь к предупреждению, а не к фатальной ошибке. Также параметрdiff-hookпозволяет задать приложение, такое какdiffoscope, которое будет запущено в случае обнаружения несовпадений. - Унифицирована внутренняя логика работы с локальными хранилищами пакетов (место, куда пакеты устанавливаются) и удалёнными хранилищами (для передачи бинарных сборок). На данный момент поддерживаются следующие протоколы: http://, https://, file://, s3://, ssh://, ssh-ng://. Добавленная поддержка HTTP/2 позволит немного быстрее работать с бинарными кэшами.
- Новые встроенные функции языка nix такие как
builtins.fetchGit,builtins.fetchMercurial,builtins.path,builtins.split,builtins.partition. Поддержка значений типа float. - Избавление от зависимости от Perl. Компоненты зависящие от него либо были переписаны на C++ либо удалены. Биндинги к Perl были вынесены в отдельный пакет.

