Nix — Менеджер Пакетов Нового Поколения

Всем привет, Сегодня мы поговорим о Никс — чисто функциональный менеджер пакетов.

Зачем создавать еще один велосипед, на этот раз с квадратными колесами и чисто функциональный? Существующие решения:

  • не может обрабатывать обновление пакетов (обновление может удалить старые пакеты, что означает, что вам придется либо удалить все программы, которые зависят от этих пакетов, либо получить несогласованное состояние системы)
  • не принимаются во внимание Все зависимости каждого отдельного пакета (и не могу этого сделать)
  • не знаете и не можете знать точную комбинацию версий ядра, библиотек и пакетов, доступных на компьютере
  • ориентированы на централизованные репозитории, каждый из которых будет иметь единую политику именования пакетов — в результате пакеты из этих репозиториев часто несовместимы, даже если используется одна и та же базовая технология (RPM, DEB)
В результате на плечи волонтеров, день и ночь несущих службу отечеству, ложится большой тяжелый труд. :) Как решить эту проблему? Очень просто, сказали ребята из Утрехтского университета: относитесь к пакетам так же, как вы относитесь к значениям оценки выражений в чисто функциональных языках! Как, как, спрашивает читатель? Как это:
  • пакет — это результат вычисления чистой функции, аргументами которой являются все зависимости пакета (то есть других пакетов)
  • Пакет, установленный в системе, не изменяется (нет побочных эффектов).

Два предложения выше означают только то, что Никс никогда не вносит изменения в файлы на диске, а только создает новые файлы.

"Как же так?! Мой диск всего 2 ГБ!» — наверняка у читателя возникла примерно такая мысль.

:) Дело в том, что некоторые пакеты можно смело удалить, если от них не зависят другие пакеты.

Это очень похоже на «сборку мусора» в современных языках программирования.

Перечислим наиболее заметные преимущества Никс по сравнению с другими менеджерами пакетов:

  • вполне возможно одновременно содержать несколько версий одного и того же пакета (например, это может быть полезно, если двум приложениям требуются две версии одной и той же библиотеки) Сразу отметим, что операции обновления или удаления не могут повредить другие приложения благодаря тому, что эти операции никогда не перезаписывают и не удаляют файлы, которые используются другими пакетами.

  • отслеживаются Все зависимости одного пакета — пакет, который работает на машине разработчика, будет работать и на машине пользователя.

  • атомарность операции обновления и возможность отката любой обновиться (даже если во время обновления выдернуть вилку из розетки, система от этого не пострадает - но делать этого, конечно, не следует по понятным причинам)
  • прозрачная поддержка пакетов, содержащих исходный код или скомпилированные двоичные файлы ( Никс может автоматически пропустить этап компиляции, если пакет уже доступен в скомпилированном виде)
  • бинарные патчи (помимо автоматической загрузки доступных двоичных файлов, Nix может загружать разницу между двумя двоичными файлами)
На этой оптимистичной ноте мы завершаем наш обзор.

обновление: форматирование обновление: перенесено в коллективный блог Теги: #Функциональное программирование #менеджер пакетов #*nix #открытый исходный код

Вместе с данным постом часто просматривают: