Как Снейппи относится к Nix и Guix?

22

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

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

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

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

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

полезная нагрузка
источник
1
Итак, вы просите нас прочитать то, что вы не хотите читать ??? «Более глубокое сравнение между Nix и Guix дает Сандер ван дер Бург, который я не читал» ... «Как Snappy Ubuntu соотносится с Nix и Guix? Каковы основные различия?»
don.joey
Я спрашивал здесь, потому что я думаю, что кто-то из этого сообщества уже думал об этом или знает статью, которую я не нашел. Сегодня я наткнулся на Снейппи, прочитал об этом, но я не считаю себя достаточно осведомленным о Снейппи, чтобы решить, как он позиционируется между этими зрелыми менеджерами пакетов. В статьях Snappy вообще не упоминаются эти системы, и мне грустно молчать о других свободных программах, имеющих дело с подобными проблемами. Также связанная статья блога не называет snappy и не сделана человеком, вовлеченным в snappy.
полезная нагрузка
1
Справедливо. Downvote вернулся.
don.joey
Snappy не компилируется статически в библиотеках. Он позволяет вам хранить библиотеки в той же папке, что и ваш двоичный файл, так что вам не нужно зависеть от системных библиотек, но также позволяет вам полагаться на системные библиотеки, если вам не нужен независимый от выпуска пакет. Таким образом, Snappy не снимает преимущества стабильной версии LTS. Это просто делает все намного проще.
Джо-Эрленд Шинстад

Ответы:

29

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Модульные пакеты Nix и безопасное управление зависимостями - вот некоторые из его основных функций.

Полный пост в блоге можно найти здесь: http://sandervanderburg.blogspot.com/2015/04/an-evaluation-and-comparison-of-snappy.html

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

Сандер ван дер Бург
источник
3
Хотя ваш ответ на 100% правильный, он также может стать на 100% бесполезным, если эта ссылка будет перемещена, изменена, объединена в другую или основной сайт просто исчезнет ... :-( Поэтому, пожалуйста, отредактируйте свой ответ и скопируйте соответствующую ссылку. переходя от ссылки к вашему ответу, тем самым гарантируя ваш ответ в течение 100% срока жизни этого сайта! ;-) Вы всегда можете оставить ссылку внизу вашего ответа в качестве источника для вашего материала ...
Fabby
3
Хорошо, я только что пересмотрел свой ответ. Надеюсь, это поможет!
Сандер ван дер Бург