Nix — не только пакетный менеджер

Nix — не только пакетный менеджер

09.03.2023

Первый пакетный менеджер — SMIT — появился в операционной системе IBM AIX в 1989 году. Мы бы назвали его примитивным, но в своё время он оказался прорывом. Вместо загрузки и ручной сборки исходного кода программы, пользователь вводил команду установки — и всё.

Чуть позже пакетные менеджеры стали поддерживать зависимости между пакетами, и репозитории, где пакеты хранились.

Сейчас нам известны десятки менеджеров, которые работают как на уровне операционной системы (yum, pacman, dpkg, apt), так и на уровне отдельных языков/платформ (npm, pip, composer, nuget). Казалось бы: их и так много, зачем нужен ещё один?

Оказывается, Nix решает одну из важнейший проблем, появившихся у пакетных менеджеров вместе с поддержкой зависимостей, которая называется Ад Зависимостей (Dependency Hell). Дело в том, что пакеты со временем меняются: программисты исправляют ошибки, добавляют новые возможности, а из-за этого растут и версии пакетов. Не всегда удаётся сохранить обратную совместимость, так что мы не можем просто хранить самую последнюю версию пакета. Нам приходиться хранить все, но разные версии пакета называются одинаково и зачастую размещаются в одном и том же каталоге.

Разработчики Nix предложили интересное решение этой проблемы, которое не просто позволяет забыть про Ад Зависимостей, но даже защищает систему от случайных коллизий. Описание пакетов в Nix делается на чистом функциональном языке программирования. Зачем?

Об этом и многом другом нам рассказал программист Винсент Амбо. Он провёл воркшоп по Nix и показал примеры использования языка. Пакетный менеджер Nix работает на любых дистрибутивах Linux и на MacOS, но также на его основе построен дистрибутив NixOS. Мы поговорили и о нём, правда, совсем немного.

Винсент основал комьюнити и компанию TVL и разрабатывает альтернативную реализацию Nix — она называется Tvix. Tvix написан на языке Rust — интересном и перспективным. Мы поговорили, зачем нужен Tvix, если есть Nix и узнали, почему Винсент выбрал Rust в качестве языка разработки.