Вышел мажорный релиз пакетного менеджера 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 были вынесены в отдельный пакет.