Ist Snap für andere UNIX-Geräte (Beispiel MacOS) portabel?

10

Ich liebe die Idee hinter Snap und habe damit auf einer Ubuntu-VM gespielt.

Snapcraft Übersicht

Snapcraft ist ein Build- und Packaging-Tool, mit dem Sie Ihre Software im Handumdrehen verpacken können. Es macht es einfach, Komponenten aus verschiedenen Quellen zu integrieren und Technologien oder Lösungen zu entwickeln. Schlüssel Konzepte

Ein .snap-Paket für das Ubuntu Core-System enthält alle seine Abhängigkeiten. Dies hat einige Vorteile gegenüber der herkömmlichen Deb- oder RPM-basierten Abhängigkeitsbehandlung. Das Wichtigste ist, dass ein Entwickler immer sicher sein kann, dass keine Regressionen durch Änderungen am System unter seiner App ausgelöst werden.

Mit Snapcraft können Sie diese Abhängigkeiten einfach bündeln, indem Sie sie als "Teile" in der Datei snapcraft.yaml angeben. Bissig

Snappy Ubuntu Core ist eine neue Version von Ubuntu mit Transaktionsupdates - ein minimales Server-Image mit denselben Bibliotheken wie das heutige Ubuntu, aber Anwendungen werden über einen einfacheren Mechanismus bereitgestellt.

Schnelle Apps und Ubuntu Core selbst können atomar aktualisiert und bei Bedarf zurückgesetzt werden. Apps sind außerdem streng beschränkt und in einer Sandbox gespeichert, um Ihre Daten und Ihr System zu schützen.

IoT ›Apps erstellen

Auf welchen Technologien basiert Snap? Wie sehen die Architektur und die Toolkits aus? Hängt Snap von den Funktionen des Linux-Kernels ab?

Ich frage, weil ich mich frage, ob ich in Zukunft die gleichen Snap-Pakete auch unter macOS verwenden kann.

Klarstellung nach erstem Kommentar:

Ich weiß, dass macOS und Ubuntu nicht binär kompatibel sind. Eine Neukompilierung ist erforderlich. Es gibt bereits fast jedes Open Source für macOS mit Homebrew . Der Entwickler könnte unter macOS entwickeln und unter Ubuntu bereitstellen, wenn Snap (in Zukunft) für macOS verfügbar sein wird.

Ivanov
quelle
1
Selbst wenn keine Kernelfunktionen beteiligt wären, würde ich nicht erwarten, dass eine nicht triviale Anwendung, auch statisch kompiliert, ohne erneutes Kompilieren unter MacOS und Linux ausgeführt wird - die ausführbaren Formate sind unterschiedlich, die ABIs wären für das zugrunde liegende POSIX-System unterschiedlich Aufrufe wären unterschiedlich, und insbesondere für Anwendungen, die über POSIX hinausgehen, sind äquivalente Systemaufrufe unterschiedlich. Das sind keine Hindernisse, die meiner Meinung nach jede Verpackung überwinden kann. Sonst wären Projekte wie Wine and Darling längst erfolgreich gewesen.
Muru
Möchten Sie Snaps unter macOS installieren oder Snaps unter macOS erstellen? Ihre Frage sah anfangs wie die erstere aus, und jetzt sieht sie wie die letztere aus.
Muru
Auf jeden Fall würde ich erwarten, dass jede Aktion unter macOS ein Wunschtraum ist, da Snaps noch nicht vollständig auf andere Linux- Distributionen portiert wurden .
Muru

Antworten:

20

Ja, dank der Stabilität der Linux-Syscall-Schnittstelle ist dies möglich.

Eine der großen Verpflichtungen von Linus Torvalds gegenüber Linux-Benutzern besteht darin, dass die vom Kernel angebotenen Schnittstellen stabil sind. Viele Menschen schätzen den Wert davon nicht oder wie herausfordernd es als Leiter eines offenen Projekts ist, dieses Engagement zu erreichen. Stellen Sie sich zum Beispiel vor, wie unvorhersehbar Änderungen in den GNOME-APIs sind! Wenn Sie hören, dass Linus auf einer Mailingliste immer intensiver wird, liegt dies fast immer daran, dass ein Committer des Kernels beschlossen hat, eine solche Schnittstelle zu ändern, "weil er eine bessere Idee hatte". Linus sagt, dass Sie INNERHALB des Kernels wild innovieren können, aber bitte brechen Sie nicht die "Userspace" -Apps, die von vorhandenen Systemaufrufen abhängen.

Infolge dieser Stabilität können andere Kernel dieselben Systemaufrufe anbieten, sodass auf Linux basierende Apps auf diesen anderen Kerneln ausgeführt werden können.

Ein Beispiel dafür ist das Joyent Triton-Projekt, das Linux-kompatible Systemaufrufe in Containern unter SmartOS (ein Nachkomme von IllumOS, ein Nachkomme von Solaris) anbietet.

Ein bekannteres Beispiel ist das neue Linux-Subsystem in Windows .

Natürlich ist die eigentliche Frage, wie viele der Syscalls angeboten werden und wie Bug-für-Bug-kompatibel sie sind. Zumindest für den Moment gibt es keine andere Umgebung, in der alle erforderlichen Systemaufrufe vorhanden sind, da die verwendeten Snaps relativ neu und tief in der Art und Weise sind, wie der Kernel über die von ihm verwalteten Dinge denkt.

Aber sie werden mit Sicherheit mit der Zeit kommen, und ich denke, dass Schnappschüsse daher in einer Vielzahl von Kontexten verwendet werden können.

Welches ist sehr cool, Patches willkommen :)

Mark Shuttleworth
quelle
11

Ich kann zwar keine Informationen zu macOS finden, aber dieses OMG! Der Ubuntu- Artikel enthält ein interessantes Zitat von Mark Shuttleworth:

Wie für das Ausführen von Snaps unter Windows 10? "Es ist absolut plausibel", sagte Shuttleworth.

„Snaps verwenden moderne Funktionen im Linux-Kernel, um die Sicherheit einzuschränken, den Dateisystemzugriff einzurichten usw. All dies beinhaltet die Verwendung moderner Mechanismen im Kernel. Und Canonical führt eine Menge [dieser Arbeit]. Es wird eine Weile dauern, bis Microsoft [sich daran gewöhnt hat]. “

Wenn es "plausibel" ist, es unter Windows zum Laufen zu bringen, würde ich dasselbe für macOS sagen, außer dass Microsoft anscheinend mit Canonical zusammenarbeitet, was ich nicht über Apple gehört habe.


Die Dokumentation zu Snap-Sicherheitsrichtlinien und Sandboxing sowie der Arch Wiki-Eintrag zu snapd sind informativ:

Aus dem Arch Wiki:

Beachten Sie, dass snap-confine mit der Option --disable-confinement erstellt wird. Die vollständige Beschränkung basiert auf einem AppArmor-fähigen Kernel und einem zugehörigen Profil für den Snap.

Aus der Richtlinie:

Unter der Haube der Launcher:

  • Richtet verschiedene Umgebungsvariablen ein: […]
  • Wenn dem Snap Hardware zugewiesen ist, richtet er eine Gerätegruppe mit Standardgeräten (z. B. / dev / null, / dev / urandom usw.) und allen Geräten ein, die diesem Snap zugewiesen sind
  • Richtet ein privates / tmp mit einem privaten Mount-Namespace pro Befehl und einem Mount pro Verzeichnis in / tmp ein
  • Richtet eine neue Instanz pro Befehl ein
  • Richtet den Seccomp-Filter für den Befehl ein
  • Führt den Befehl unter dem befehlsspezifischen AppArmor-Profil unter einem Standardwert aus

Diese Kombination aus restriktiven AppArmor-Profilen (die Dateizugriff, Anwendungsausführung, Linux-Funktionen (7), Mount, Ptrace, IPC, Signale, grobkörniges Netzwerk vermitteln), klar definierten anwendungsspezifischen Dateisystembereichen und Whysist-Syscall-Filterung über seccomp, private / tmp, neue Instanzentwicklungen und Gerätegruppen sorgen für eine starke Anwendungsbeschränkung und -isolation.

Während AppArmor und seccomp nur Linux sind, sieht es so aus, als ob die Beschränkung optional gemacht werden kann, sodass wir das ignorieren können. Dann werden devpts, cgroups und mount-Namespaces verwendet. Wenn es irgendwelche Blockierungen gibt, denke ich, wäre es für diese. Ich bin mit den BSDs nicht vertraut genug, um zu sagen, was die Äquivalente sind.

Die snapdAnwendung selbst ist in Go geschrieben, was sie einigermaßen plattformübergreifend machen sollte. In der Tat haben einige Dateien sehr interessante Build-Ziele :

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

Es sieht also so aus, als hätte jemand ein Interesse daran.

muru
quelle