Nix 2.0

good-penguin.png

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

>>> Полный список изменений

©  Linux.org.ru