Всем привет,
Сегодня мы поговорим о Nix — чисто функциональном менеджере пакетов.
Зачем создавать еще один велосипед, в этот разс квадратными колесами чисто функциональный?
Существующие решения:
В результате много тяжелой работы сваливается на добровольцев, которые день и ночь бдят на службе отечества. :)
Как решить эту проблему? Очень просто, сказали ребята из университета Утрехта: обращаться с пакетами также, как со значениями вычисления выражений в чисто функциональных языках! Как-как, переспросит читатель?
Примерно так:
Два предложения сверху означают только то, что Nix никогда не вносит изменения в файлы на диске, а только создает новые файлы.
«Как так?! У меня ж диск всего на 2 Гб!» — наверное, читателя посетила примерно такая мысль. :) Дело в том, что некоторые пакеты можно спокойненько удалить, если от них не зависят другие пакеты. Это очень похоже на «сборку мусора» в современных языках программирования.
Перечислим самые заметные преимущества Nix над другими менеджерами пакетов:
На этой оптимистической ноте мы завершаем наш обзорчик.
update: форматирование
update: перенесено в коллективный блог
Сегодня мы поговорим о Nix — чисто функциональном менеджере пакетов.
Зачем создавать еще один велосипед, в этот раз
Существующие решения:
- не справляются с обновлением пакетов (обновление может удалить старые пакеты, из-за чего либо придется удалять все программы, зависимые от этих пакетов, либо так и смириться с противоречивым состоянием системы)
- не учитывают все зависимости каждого отдельного пакета (и не могут этого сделать)
- не знают и не могут знать точную комбинацию версий ядра, библиотек и пакетов, имеющихся на компьютере
- ориентированы на централизованные репозитарии, у каждого их которых будет единая политика именования пакетов — вследствие чего, пакеты этих репозитариев часто несовместимы, даже если используется одна и та же нижележащая технология (RPM, DEB)
В результате много тяжелой работы сваливается на добровольцев, которые день и ночь бдят на службе отечества. :)
Как решить эту проблему? Очень просто, сказали ребята из университета Утрехта: обращаться с пакетами также, как со значениями вычисления выражений в чисто функциональных языках! Как-как, переспросит читатель?
Примерно так:
- пакет это результат вычисления чистой функции, аргументами которой являются все зависимости пакета (другие пакеты, то есть)
- пакет, будучи единожды установленным в системе, не меняется (никаких побочных эффектов)
Два предложения сверху означают только то, что Nix никогда не вносит изменения в файлы на диске, а только создает новые файлы.
«Как так?! У меня ж диск всего на 2 Гб!» — наверное, читателя посетила примерно такая мысль. :) Дело в том, что некоторые пакеты можно спокойненько удалить, если от них не зависят другие пакеты. Это очень похоже на «сборку мусора» в современных языках программирования.
Перечислим самые заметные преимущества Nix над другими менеджерами пакетов:
- вполне допускается содержать несколько версий одного пакета одновременно (например, это может пригодиться, если двум каким-то приложениям требуются две версии одной и той же библиотеки)
Сразу отметим, что операции обновления или удаления не могут повредить другие приложения вследствие того, что эти операции никогда не перезаписывают и не удаляют файлы, которые используются другими пакетами. - отслеживаются все зависимости отдельно взятого пакета — пакет, который заработавший на машине разработчика, заработает и на машине пользователя
- атомарность операций обновления и возможность откатить любое обновление (даже если выдернете вилку из розетки во время обновления, система от этого не пострадает — но это, конечно, делать не следует по понятным причинам)
- прозрачная поддержка пакетов, содержащих исходный код или откомпилированные бинарники (Nix может автоматически пропустить фазу компиляции, если пакет уже доступен в откомпилированным виде)
- бинарные патчи (в дополнение к загрузке доступных бинарников автоматически, Nix может скачать разницу между двумя бинарниками)
На этой оптимистической ноте мы завершаем наш обзорчик.
update: форматирование
update: перенесено в коллективный блог