Jak Snappy odnosi się do Nix i Guix?

20

Szukałem porównania, ale nie znalazłem go i nie jestem dostatecznie poinformowany, aby zrobić to teraz.

Wszystkie z nich dostarczają aktualizacje transakcyjne, ale różne poziomy ograniczania.

  • Snappy kompiluje statycznie w bibliotekach, aby zapewnić wiele wersji zależności binarnych. Deklaruje świadczone (i potrzebne?) Usługi jako metadane. Pakiet jest dostarczany jako pojedynczy obraz?
  • Nix zajmuje się dynamicznym łączeniem, aby zapewnić wiele wersji zależności binarnych? Deklaruje świadczone i potrzebne usługi jako metadane. Pakiet jest dostarczany przez repozytorium dotyczące zależności.
  • Guix jest jak Nix, ale zawiera integrację z GNU.

Bardziej dogłębne porównanie Nix i Guix daje: Sander van der Burg , którego nie studiowałem szczegółowo. Zgaduję, że ktoś w Canonical dokonał analizy istniejących rozwiązań. Istnieją inne systemy wdrażania oparte na obrazach, takie jak CoreOS, o którym mi powiedziano.

A więc, w jaki sposób Snappy Ubuntu ma związek z Nix i Guix? Jakie są główne różnice?

    
zadawane payload 10.02.2015, 17:42
źródło

1 odpowiedź

27

Ostatnio dokonałem oceny osobiście. W rzeczywistości jestem współpracownikiem Nix / NixOS i byłym badaczem zainteresowanym technologią wdrażania.

Starałem się trzymać faktów w jak największym stopniu, ale prawdopodobnie nie można pozostać w pełni bezstronnym. Podsumowując moje wnioski:

  • Oba podejścia przechowują pakiety w izolacji . Snappy przechowuje aplikacje i frameworki w folderach przy użyciu następującej konwencji nazw: /app/name/version.vendor , natomiast Nix używa /nix/store/hash-name-version .

    Konwencja nazewnictwa Nix jest bardziej wydajna, ponieważ używa prefiksów hash, które pochodzą od wszystkich zależności buildtime . Dzięki Nix możesz łatwo rozróżnić dowolny wariant pakietu i przechowywać je obok siebie. Każda zmiana (na przykład inna procedura kompilacji, uaktualnienie biblioteki, aktualizacja kompilatora) daje nowy skrót, umożliwiający przechowywanie dowolnego możliwego wariantu obok siebie.

  • Aby umożliwić pakietowi znalezienie jego zależności, Nix wiąże je statycznie z plikiem wykonywalnym (np. modyfikując RPATH pliku binarnego ELF) lub zawijając je w skrypty ustawiające odpowiednie środowisko zmienne (np. CLASSPATH , PYTHONPATH , PERL5LIB , itd.).

    Snappy komponuje kontenery , w których pliki wykonywalne mogą znajdować swoje zależności we wspólnych lokalizacjach FHS, takich jak /lib i /bin

    Jednak Nix obsługuje również metodę kontenerową Snappy, ale jest ona używana tylko w bardzo rzadkich przypadkach. Najbardziej znanym pakietem Nix, wykorzystującym podejście kontenerowe, jest Steam w NixOS, ponieważ Steam to narzędzie do rozmieszczania ze sprzecznymi właściwościami.

  • Snappy Ubuntu Core używa tak zwanego schematu partycjonowania "A / B", aby uaktualnić (i przywrócić) system podstawowy. Obsługuje tylko ograniczoną liczbę wersji (zazwyczaj dwie) w tym czasie.

    W przeciwieństwie do NixOS (dystrybucji opartej na Nix Linux) komponuje podstawowy system z pakietów Nix w sklepie Nix i jest znacznie bardziej wydajny. Możesz przywrócić poprzednią konfigurację, która nie została jeszcze usunięta. Ponadto można udostępniać podobne pakiety systemowe między pokoleniami.

  • Oba narzędzia obsługują nieuprawnione instalacje użytkowników . Jednak Snappy przechowuje wszystkie pliki w katalogu domowym użytkownika. Jeśli dwóch użytkowników zainstaluje ten sam pakiet, zostaną oni dwa razy zainstalowani w systemie.

    Natomiast pakiety Nix umożliwiają zwykłym użytkownikom instalowanie pakietów w centralnym magazynie Nix, dzięki czemu identyczne pakiety mogą być udostępnione wśród użytkowników. Częściowo ze względu na konwencję nazewnictwa (za pomocą skrótu) można to zrobić w bezpieczny sposób.

  • Snappy ogranicza zachowanie środowiska wykonawczego pakietów po instalacji, podczas gdy Nix nie ma

  • Snappy nie pomaga użytkownikom budować pakietów z kodu źródłowego. Nix ma jednak DSL, który pozwala ludziom to zrobić dość łatwo i automatycznie instaluje wszystkie zależności buildtime (kompilatory, narzędzia do kompilacji, biblioteki itp.) W razie potrzeby

  • Snappy prawie nie obsługuje modularyzacji i ponownego użycia . W przykładowych pakietach wszystkie zależności bibliotek są łączone statycznie, zużywając znacznie więcej przestrzeni dyskowej i pamięci RAM. Co więcej, wydaje się, że dokumentacja nie zapewnia żadnych udogodnień poza ramami. Jednak ramy nie są przeznaczone do ponownego użycia zgodnie z dokumentacją

    Dzięki pakietom modułowym Nix i bezpiecznym zarządzaniu zależnościami niektóre z jego kluczowych funkcji.

Pełny wpis na blogu można znaleźć tutaj: link

Mam nadzieję, że przeczytanie tego jest dla ciebie interesujące, a może są w nim pewne rzeczy, o których warto pamiętać.

    
odpowiedział Sander van der Burg 30.04.2015, 22:29
źródło

Przeczytaj inne pytania na temat tagów