Czy przystawki są przenośne w innych systemach UNIX (np. MacOS)?

10

Podoba mi się pomysł snapu i grałem z nim na maszynie Wirtualnej Ubuntu.

Omówienie Snapcraft

Snapcraft to narzędzie do kompilacji i pakowania, które pomaga w szybkim pakowaniu oprogramowania. Ułatwia to włączanie komponentów z różnych źródeł i tworzenie technologii lub rozwiązań. Kluczowe idee

Pakiet .snap dla systemu Ubuntu Core zawiera wszystkie jego zależności. Ma to kilka zalet w porównaniu z tradycyjną obsługą zależności opartych na deb lub rpm, przy czym najważniejsze jest to, że deweloper zawsze może mieć pewność, że nie ma żadnych regresji wywołanych przez zmiany w systemie pod ich aplikacją.

Snapcraft ułatwia wiązanie tych zależności, umożliwiając określenie ich jako „części” w pliku snapcraft.yaml. Żwawy

Snappy Ubuntu Core to nowa wersja Ubuntu z aktualizacjami transakcyjnymi - minimalny obraz serwera z tymi samymi bibliotekami, co dzisiejsze Ubuntu, ale aplikacje są dostarczane przez prostszy mechanizm.

Aplikacje Snappy i sam Ubuntu Core można uaktualnić atomowo i w razie potrzeby wycofać. Aplikacje są również ściśle ograniczone i piaskownicowane w celu ochrony danych i systemu.

IoT ›Twórz aplikacje

Na jakich technologiach działa Snap? Jak wygląda architektura i zestawy narzędzi? Czy snap zależy od funkcji jądra Linux?

Pytam, bo zastanawiam się, czy w przyszłości będę mógł używać tych samych pakietów Snap także na MacOS?

Wyjaśnienie, po pierwszym komentarzu:

Wiem, że macOS i Ubuntu nie są kompatybilne binarnie. Konieczna jest rekompilacja. Prawie każde oprogramowanie Open Source jest już dostępne dla systemu macOS z Homebrew . Deweloper może opracować na macOS i wdrożyć na Ubuntu, kiedy snap będzie (w przyszłości) dostępny dla macOS.

Iwanow
źródło
1
Nawet jeśli nie byłyby zaangażowane żadne funkcje jądra, nie spodziewałbym się, że żadna nietrywialna aplikacja, nawet skompilowana statycznie, będzie działać bez ponownej kompilacji na macOS i Linux - formaty plików wykonywalnych są różne, ABI będą różne dla bazowego systemu POSIX wywołania byłyby inne, a zwłaszcza dla aplikacji wykraczających poza POSIX, równoważne wywołania systemowe byłyby różne. Nie są to bariery, które, jak sądzę, mogą pokonać wszelkie opakowania . W przeciwnym razie projekty takie jak Wine and Darling odniosłyby sukces dawno temu.
muru
Więc chcesz zainstalować przystawki na macOS lub utworzyć przystawki na macOS? Twoje pytanie początkowo wyglądało jak pierwsze, a teraz wygląda jak drugie.
muru
W każdym razie, ponieważ snapy wciąż nie zostały całkowicie przeniesione do innych dystrybucji Linuksa , oczekiwałbym, że jakakolwiek akcja na macOS będzie snem marzeń.
muru

Odpowiedzi:

20

Tak, dzięki stabilności interfejsu systemowego Linux syscall jest to możliwe.

Jednym z wielkich zobowiązań Linusa Torvaldsa wobec użytkowników Linuksa jest to, że zestaw interfejsów oferowanych przez jądro jest stabilny. Wiele osób nie docenia tej wartości ani tego, jak trudne jest jako lider otwartego projektu, aby osiągnąć to zobowiązanie. Zastanówmy się na przykład, jak nieprzewidywalne są zmiany w interfejsach API GNOME! Kiedy słyszysz, że Linus zaczyna intensywnie pracować na liście mailingowej, prawie zawsze dzieje się tak, ponieważ niektórzy programiści jądra postanowili zmienić taki interfejs „ponieważ mieli lepszy pomysł”. Linus mówi, że możesz szalenie wprowadzać innowacje w jądrze, ale nie psuj aplikacji „przestrzeni użytkownika”, które zależą od istniejących wywołań systemowych.

W wyniku tej stabilności inne jądra mogą oferować te same wywołania systemowe, umożliwiając aplikacjom zbudowanym na Linuksie działanie na tych innych jądrach.

Jednym z przykładów jest projekt Joyent Triton, który oferuje kompatybilne z Linuksem syscalls w kontenerach na SmartOS (potomek IllumOS, potomek Solaris).

Bardziej znanym przykładem jest nowy podsystem Linux w systemie Windows .

Oczywiście, ile jest oferowanych połączeń systemowych i jak są one kompatybilne z błędami, to prawdziwe pytanie. Przynajmniej na razie nie ma innego środowiska, w którym istnieją wszystkie niezbędne wywołania systemowe, ponieważ te, które używają przystawek, są stosunkowo nowe i głębokie w sposobie myślenia jądra o zarządzanych przez niego elementach.

Ale z pewnością nadejdą z czasem i myślę, że dzięki temu zatrzaski będą użyteczne w szerokim zakresie kontekstów.

Co jest bardzo fajne, łatki mile widziane :)

Mark Shuttleworth
źródło
11

Chociaż nie mogę znaleźć żadnych informacji o systemie macOS, ten OMG! Artykuł Ubuntu zawiera interesujący cytat Marka Shuttlewortha:

Co do uruchamiania przystawek w systemie Windows 10? „To absolutnie prawdopodobne”, powiedział Shuttleworth.

„Snapy używają nowoczesnych funkcji w jądrze Linuksa do wykonywania zabezpieczeń, konfigurowania dostępu do systemu plików itp. Wszystko to wymaga użycia nowoczesnych mechanizmów w jądrze. I Canonical prowadzi wiele [tej pracy]. Trochę potrwa, zanim Microsoft się do niego przyłączy.

Jeśli „możliwe” jest uruchomienie go w systemie Windows, powiedziałbym to samo w przypadku systemu macOS, z tym wyjątkiem, że Microsoft wydaje się współpracować z Canonical, czego nie słyszałem o Apple.


Dokumentacja na temat zasad bezpieczeństwa Snap i piaskownicowania oraz wpis Arch Wiki w snapd są pouczające:

Z Arch Wiki:

Zauważ, że funkcja przyciągania jest zbudowana z opcją --disable-confinement; pełne ograniczenie zależy od jądra z włączonym AppArmor i powiązanego profilu dla przystawki.

Z polisy:

Wyrzutnia pod maską:

  • Konfiguruje różne zmienne środowiskowe: […]
  • Gdy sprzęt jest przypisany do przystawki, konfiguruje grupę urządzeń z domyślnymi urządzeniami (np. / Dev / null, / dev / urandom itp.) I dowolnymi urządzeniami przypisanymi do tej przystawki
  • Konfiguruje private / tmp przy użyciu prywatnej przestrzeni nazw montowania dla poszczególnych poleceń i podłączania katalogu dla poszczególnych poleceń na / tmp
  • Konfiguruje polecenie dla jednej instancji, która wywołuje nową instancję
  • Ustawia filtr seccomp dla polecenia
  • Wykonuje polecenie w specyficznym dla polecenia profilu AppArmor z domyślną wartością Nice

Ta kombinacja restrykcyjnych profili AppArmor (które pośredniczą w dostępie do plików, wykonywaniu aplikacji, możliwościach Linuxa (7), montowaniu, ptrace, IPC, sygnałach, gruboziarnistej sieci), jasno określonych obszarach systemu plików specyficznych dla aplikacji, filtrowaniu syscall białej listy przez seccomp, private / tmp, nowe instancje devpts i urządzenia cgroups zapewniają silne ograniczenie i izolację aplikacji.

Chociaż AppArmor i seccomp są tylko Linuksem, wygląda na to, że ograniczenie może być opcjonalne, więc możemy to zignorować. Potem jest użycie devpts, cgroups i montowania przestrzeni nazw. Jeśli jest jakieś blokowanie, myślę, że byłoby dla nich. Nie znam wystarczająco BSD, aby powiedzieć, jakie są ich odpowiedniki.

Sama snapdaplikacja jest napisana w Go, co powinno uczynić ją rozsądną dla wielu platform. Rzeczywiście, niektóre pliki mają bardzo interesujące cele kompilacji :

osutil/group_other.go:

// -*- Mode: Go; indent-tabs-mode: t -*-
// +build !linux,!darwin,!freebsd

osutil/group_linux.go:

// -*- Mode: Go; indent-tabs-mode: t -*-
// +build darwin freebsd linux
// +build cgo

Wygląda na to, że ktoś jest tym zainteresowany.

muru
źródło