Как Snappy относится к Nix и Guix?

20

Я искал сравнение, но нашел non и недостаточно хорошо информирован, чтобы сделать это сам прямо сейчас.

Все они предоставляют транзакционные обновления, но разные уровни сдерживания.

  • Snappy статически компилируется в библиотеках для предоставления нескольких версий двоичных зависимостей. Он объявляет предоставленные (и необходимые?) Услуги в качестве метаданных. Пакет предоставляется как одно изображение?
  • Nix имеет дело с динамической связью, чтобы предоставить несколько версий бинарных зависимостей? Он объявляет предоставленные и необходимые услуги метаданные. Пакет предоставляется через репозиторий, занимающийся зависимостями.
  • Guix похож на Nix, но имеет интеграцию с GNU.

Более глубокое сравнение между Nix и Guix дается Sander van der Burg , который я не изучал подробно. Я бы предположил, что кто-то из Canonical провел анализ существующих решений. Существуют другие системы развертывания, основанные на изображениях, такие как CoreOS. Мне сказали.

Итак, как Snappy Ubuntu относится к Nix и Guix? Каковы основные отличия?

    
задан payload 10.02.2015 в 17:42
источник

1 ответ

27
Недавно я сделал оценку. Я на самом деле являюсь автором Nix / NixOS, а бывший исследователь заинтересован в технологии развертывания.

Я старался как можно больше придерживаться фактов, но, вероятно, невозможно оставаться полностью беспристрастным. Подводя итог моим выводам:

  • Оба подхода хранят пакеты в изоляции . Snappy хранит приложения и фреймворки в папках, используя следующее соглашение о названии: /app/name/version.vendor , тогда как Nix использует /nix/store/hash-name-version .

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

  • Чтобы пакет мог найти свои зависимости, Nix привязывает их статически к исполняемому файлу (например, путем изменения RPATH двоичного файла ELF) или путем их переноса в сценарии, которые устанавливают соответствующую среду переменные (например, CLASSPATH , PYTHONPATH , PERL5LIB и т. д.).

    Snappy содержит контейнеры , в которых исполняемые файлы могут находить свои зависимости в своих общих местоположениях FHS, например /lib и /bin

    Однако Nix также поддерживает контейнерный подход Snappy, но это используется только в очень редких случаях. Наиболее заметным пакетом Nix, использующим контейнерный подход, является Steam в NixOS, потому что Steam - это инструмент развертывания с конфликтующими свойствами.

  • В Snappy Ubuntu Core используется так называемая схема разделения «A / B» для обновления (и откат) базовой системы. Он поддерживает только ограниченное количество версий (обычно два) в то время.

    Напротив, NixOS (дистрибутив Linux на основе Nix) составляет базовую систему из пакетов Nix в магазине Nix, а также намного мощнее. Вы можете вернуться к любой предыдущей конфигурации, которая еще не была собрана мусором. Более того, аналогичные системные пакеты между поколениями могут быть разделены.

  • Оба инструмента поддерживают непривилегированные пользовательские установки . Однако Snappy хранит все файлы в домашнем каталоге пользователя. Если двум пользователям приходится устанавливать один и тот же пакет, они устанавливаются дважды в систему.

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

  • Snappy ограничивает поведение во время выполнения пакетов из коробки, тогда как Nix не

  • Snappy не помогает пользователям конструировать пакеты из исходного кода. Однако у Nix есть DSL, позволяющая людям делать это довольно легко и автоматически устанавливать все зависимости времени сборки (компиляторы, инструменты сборки, библиотеки и т. Д.) При необходимости

  • Snappy вряд ли поддерживает модуляцию и повторное использование . В примерах пакетов все зависимости библиотек связаны статически, потребляя гораздо больше дискового пространства и ОЗУ. Более того, документация, похоже, не предоставляет каких-либо средств, кроме рамок. Однако рамки не предназначены для повторного использования в соответствии с документацией

    С модульными пакетами Nix и безопасным управлением зависимостями есть некоторые его ключевые особенности.

Полную запись в блоге можно найти здесь: Ссылка

Надеюсь, вам будет интересно прочитать и, возможно, в нем есть некоторые вещи, о которых стоит подумать.

    
ответ дан Sander van der Burg 30.04.2015 в 22:29
источник