Snap è portatile su altri UNIX (esempio macOS)?


10

Adoro l'idea alla base di Snap e ci ho giocato su una VM Ubuntu.

Panoramica di Snapcraft

Snapcraft è uno strumento di creazione e creazione di pacchetti che consente di impacchettare il software in un attimo. Semplifica l'integrazione di componenti di diverse fonti e la creazione di tecnologie o soluzioni. Concetti chiave

Un pacchetto .snap per il sistema Ubuntu Core contiene tutte le sue dipendenze. Ciò presenta un paio di vantaggi rispetto alla tradizionale gestione delle dipendenze basata su deb o rpm, la cosa più importante è che uno sviluppatore può sempre essere certo che non ci sono regressioni innescate da modifiche al sistema sotto la sua app.

Snapcraft semplifica il raggruppamento di queste dipendenze consentendo di specificarle come "parti" nel file snapcraft.yaml. Elegante

Snappy Ubuntu Core è una nuova versione di Ubuntu con aggiornamenti transazionali: un'immagine server minima con le stesse librerie di Ubuntu di oggi, ma le applicazioni sono fornite attraverso un meccanismo più semplice.

Le app scattanti e Ubuntu Core stesso possono essere aggiornati atomicamente e ripristinati se necessario. Le app sono inoltre strettamente confinate e in modalità sandbox per salvaguardare i dati e il sistema.

IoT ›Crea app

Su quali tecnologie si basa lo snap? Come si presentano l'architettura e i toolkit? Lo snap dipende dalle funzionalità del kernel Linux?

Lo chiedo, perché mi chiedo se in futuro sarò in grado di utilizzare gli stessi pacchetti di snap anche su macOS?

Chiarimento, dopo il primo commento:

So che macOS e Ubuntu non sono compatibili con i binari. È necessaria una ricompilazione. Esistono quasi tutti gli Open Source già disponibili per macOS con Homebrew . Lo sviluppatore potrebbe sviluppare su macOS e distribuirlo su Ubuntu quando snap sarà (in futuro) disponibile per macOS.


1
Anche se non fossero coinvolte funzionalità del kernel, non mi aspetterei che nessuna applicazione non banale, anche compilata staticamente, possa funzionare senza ricompilare su macOS e Linux - i formati eseguibili sono diversi, gli ABI sarebbero diversi per il sistema POSIX sottostante le chiamate sarebbero diverse, e specialmente per le applicazioni che vanno al di là di POSIX, le chiamate di sistema equivalenti sono diverse. Queste non sono barriere che penso che qualsiasi imballaggio possa superare. Altrimenti progetti come Wine e Darling sarebbero riusciti molto tempo fa.
Muru,

Quindi vuoi installare snap su macOS o creare snap su macOS? La tua domanda inizialmente sembrava la prima, e ora sembra la seconda.
Muru,

Ad ogni modo, dato che gli snap non sono ancora stati completamente portati su altre distribuzioni Linux , mi aspetto che qualsiasi azione su macOS sia un sogno irrealizzabile.
Muru,

Risposte:


20

Sì, grazie alla stabilità dell'interfaccia syscall di Linux, questo è possibile.

Uno dei grandi impegni di Linus Torvalds per gli utenti Linux è che l'insieme di interfacce offerte dal kernel è stabile. Molte persone non apprezzano il valore di questo, o quanto sia difficile come leader di un progetto aperto raggiungere tale impegno. Considera, ad esempio, come cambiamenti imprevedibili nelle API di GNOME siano al contrario! Quando si sente parlare di Linus che diventa intenso su una mailing list, è quasi sempre perché alcuni committer del kernel hanno deciso di cambiare un'interfaccia del genere "perché avevano un'idea migliore". Linus dice che puoi innovare selvaggiamente DENTRO il kernel, ma per favore non rompere le app "userspace" che dipendono da syscall esistenti.

Come conseguenza di quella stabilità è possibile che altri kernel offrano le stesse scale di sistema, consentendo alle app costruite su Linux di funzionare su quegli altri kernel.

Ne è un esempio il progetto Joyent Triton, che offre syscalls compatibili con Linux in container su SmartOS (un discendente di IllumOS, un discendente di Solaris).

Un esempio più noto è il nuovo sottosistema Linux in Windows .

Ovviamente, quante syscall sono offerte e quanto sono compatibili bug-for-bug, è la vera domanda. Almeno per ora, non esiste un altro ambiente in cui siano presenti tutte le syscall necessarie, perché quelle che usano gli snap sono relativamente nuove e profonde nel modo in cui il kernel pensa alle cose che gestisce.

Ma arriveranno sicuramente, nel tempo, e penso che gli snap saranno quindi utilizzabili in una vasta gamma di contesti.

È fantastico, patch benvenute :)


11

Anche se non riesco a trovare alcuna informazione su macOS, questo OMG! L' articolo di Ubuntu ha un'interessante citazione di Mark Shuttleworth:

Per quanto riguarda l'esecuzione di Snaps su Windows 10? "È assolutamente plausibile", ha detto Shuttleworth.

“Gli snap utilizzano funzionalità moderne nel kernel Linux per confinare la sicurezza, impostare l'accesso al file system, ecc. E tutto ciò implica l'utilizzo di meccanismi moderni nel kernel. E Canonical guida molto [questo lavoro]. Ci vorrà un po 'prima che Microsoft [riesca ad agganciarlo]. ”

Se è "plausibile" farlo funzionare su Windows, direi lo stesso per macOS, tranne per il fatto che Microsoft sembra collaborare con Canonical, cosa che non ho mai sentito parlare di Apple.


La documentazione sulla politica di sicurezza di Snap e sandboxing e la voce Arch Wiki su snapd sono informativi:

Da Arch Wiki:

Nota che snap-confine è costruito con l'opzione --disable-confinamento; il confinamento completo si basa su un kernel abilitato AppArmor e sul profilo correlato per lo snap.

Dalla politica:

Sotto il cofano, il lanciatore:

  • Imposta varie variabili d'ambiente: […]
  • Quando l'hardware è assegnato allo snap, imposta un cgroup di dispositivo con dispositivi predefiniti (ad esempio, / dev / null, / dev / urandom, ecc.) E tutti i dispositivi assegnati a questo snap
  • Imposta un privato / tmp usando uno spazio dei nomi di montaggio privato per comando e montando una directory per comando su / tmp
  • Imposta un comando per devove nuova istanza
  • Imposta il filtro seccomp per il comando
  • Esegue il comando sotto il profilo AppArmor specifico del comando con un valore di default predefinito

Questa combinazione di profili AppArmor restrittivi (che mediano l'accesso ai file, l'esecuzione delle applicazioni, le capacità di Linux (7), mount, ptrace, IPC, segnali, reti a grana grossa), aree del filesystem specifiche per l'applicazione chiaramente definite, whitelist syscall filtering tramite seccomp, private / tmp, i dev dev di nuove istanze e i cgroup di dispositivi forniscono un forte isolamento e isolamento delle applicazioni.

Mentre AppArmor e seccomp sono solo Linux, sembra che il confinamento possa essere reso opzionale, quindi possiamo ignorarlo. Quindi viene utilizzato dev Devs, cgroups e mount namespace. Se c'è qualche blocco, penso che sarebbe per quelli. Non ho abbastanza familiarità con i BSD per dire quali sono gli equivalenti.

L' snapdapplicazione stessa è scritta in Go, il che dovrebbe renderla ragionevolmente multipiattaforma. In effetti, alcuni file hanno obiettivi di build molto interessanti :

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

Quindi sembra che qualcuno abbia interesse in questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.