¿Snap es portátil en otros UNIX (por ejemplo, macOS)?

10

Me encanta la idea detrás de snap y jugué con ella en una máquina virtual Ubuntu.

Descripción general de Snapcraft

Snapcraft es una herramienta de compilación y empaque que le ayuda a empaquetar su software en un instante. Facilita la incorporación de componentes de diferentes fuentes y la creación de tecnologías o soluciones. Conceptos clave

Un paquete .snap para el sistema Ubuntu Core contiene todas sus dependencias. Esto tiene un par de ventajas sobre el manejo tradicional de dependencias basado en deb o rpm, el más importante es que un desarrollador siempre puede estar seguro de que no hay regresiones desencadenadas por cambios en el sistema debajo de su aplicación.

Snapcraft facilita la agrupación de estas dependencias al permitirle especificarlas como "partes" en el archivo snapcraft.yaml. Rápido

Snappy Ubuntu Core es una nueva versión de Ubuntu con actualizaciones transaccionales: una imagen mínima del servidor con las mismas bibliotecas que el Ubuntu actual, pero las aplicaciones se proporcionan a través de un mecanismo más simple.

Las aplicaciones Snappy y Ubuntu Core pueden actualizarse atómicamente y revertirse si es necesario. Las aplicaciones también están estrictamente confinadas y protegidas para proteger sus datos y sistema.

IoT ›Crear aplicaciones

¿En qué tecnologías se basa el complemento? ¿Cómo se ven la arquitectura y los kits de herramientas? ¿Snap depende de las características del kernel de Linux?

Pregunto, porque me pregunto si en el futuro podré usar los mismos paquetes de complemento también en macOS.

Aclaración, después del primer comentario:

Sé que macOS y Ubuntu no son compatibles con binarios. Se necesita una recompilación. Ya hay casi cualquier fuente abierta disponible para macOS con Homebrew . El desarrollador podría desarrollar en macOS e implementar en Ubuntu cuando snap esté (en el futuro) disponible para macOS.

Ivanov
fuente
1
Incluso si no estuvieran involucradas características del kernel, no esperaría que ninguna aplicación no trivial, incluso compilada estáticamente, se ejecute sin volver a compilar en macOS y Linux: los formatos ejecutables son diferentes, las ABI serían diferentes para el sistema POSIX subyacente las llamadas serían diferentes, y especialmente para aplicaciones que van más allá de POSIX, las llamadas equivalentes al sistema serían diferentes. Esas no son barreras, creo que cualquier empaque puede superar. De lo contrario, proyectos como Wine y Darling habrían tenido éxito hace mucho tiempo.
muru
Entonces, ¿desea instalar snaps en macOS o crear snaps en macOS? Su pregunta inicialmente se parecía a la primera, y ahora se parece a la segunda.
muru
En cualquier caso, dado que las instantáneas todavía no se han portado completamente a otras distribuciones de Linux , esperaría que cualquier acción en macOS sea un sueño imposible.
muru

Respuestas:

20

Sí, gracias a la estabilidad de la interfaz syscall de Linux, esto es posible.

Uno de los grandes compromisos de Linus Torvalds con los usuarios de Linux es que el conjunto de interfaces que ofrece el kernel es estable. Muchas personas no aprecian el valor de esto, o lo desafiante que es como líder de un proyecto abierto lograr ese compromiso. ¡Considere, por ejemplo, cuán impredecibles son los cambios en las API de GNOME en contraste! Cuando escuchas que Linus se está volviendo intenso en una lista de correo, casi siempre es porque algún usuario del núcleo decidió cambiar esa interfaz "porque tenían una mejor idea". Linus dice que puede innovar salvajemente DENTRO del núcleo, pero no rompa las aplicaciones de 'espacio de usuario' que dependen de las llamadas al sistema existentes.

Como consecuencia de esa estabilidad, es posible que otros núcleos ofrezcan las mismas llamadas de sistema, permitiendo que las aplicaciones creadas en Linux se ejecuten en esos otros núcleos.

Un ejemplo de eso es el proyecto Joyent Triton, que ofrece syscalls compatibles con Linux en contenedores en SmartOS (un descendiente de IllumOS, un descendiente de Solaris).

Un ejemplo más ampliamente conocido es el nuevo subsistema de Linux en Windows .

Por supuesto, cuántas de las llamadas al sistema se ofrecen, y qué tan compatibles son error por error, es la verdadera pregunta. Al menos por ahora, no hay otro entorno en el que estén todas las llamadas al sistema necesarias, porque las que usan las instantáneas son relativamente nuevas y profundas en la forma en que el núcleo piensa en las cosas que administra.

Pero seguramente vendrán, con el tiempo, y creo que las instantáneas serán utilizables en una amplia gama de contextos.

Lo cual es genial, parches bienvenidos :)

Mark Shuttleworth
fuente
11

Si bien no puedo encontrar ninguna información sobre macOS, ¡este OMG! El artículo de Ubuntu tiene una cita interesante de Mark Shuttleworth:

¿En cuanto a ejecutar Snaps en Windows 10? "Es absolutamente plausible", dijo Shuttleworth.

“Los snaps están utilizando funciones modernas en el kernel de Linux para realizar confinamientos de seguridad, configurar el acceso al sistema de archivos, etc., y todo eso implica el uso de mecanismos modernos en el kernel. Y Canonical lidera mucho [este trabajo]. Le tomará un tiempo a Microsoft [conectarlo] ”.

Si es "plausible" hacer que se ejecute en Windows, diría lo mismo para macOS, excepto que Microsoft parece estar cooperando con Canonical, que no es algo que escuche sobre Apple.


La documentación sobre la política de seguridad y el sandboxing de Snap y la entrada de Arch Wiki en snapd son informativas:

Del Arch Wiki:

Tenga en cuenta que snap-confine está construido con la opción --disable-confinement; el confinamiento completo se basa en un núcleo habilitado para AppArmor y un perfil relacionado para el complemento.

De la política:

Debajo del capó, el lanzador:

  • Configura varias variables de entorno: […]
  • Cuando se asigna hardware al complemento, configura un grupo de dispositivos con dispositivos predeterminados (por ejemplo, / dev / null, / dev / urandom, etc.) y cualquier dispositivo asignado a este complemento
  • Configura un archivo privado / tmp usando un espacio de nombres de montaje privado por comando y montando un directorio por comando en / tmp
  • Configura una nueva instancia de devpts por comando
  • Configura el filtro seccomp para el comando
  • Ejecuta el comando bajo el perfil de AppArmor específico del comando bajo un valor agradable predeterminado

Esta combinación de perfiles restrictivos de AppArmor (que median el acceso a archivos, la ejecución de aplicaciones, las capacidades de Linux (7), montaje, traza, IPC, señales, redes de grano grueso), áreas del sistema de archivos específicas de la aplicación claramente definidas, filtrado de syscall de la lista blanca a través de seccomp, privado / tmp, los nuevos devpts de instancia y los grupos de dispositivos proporcionan un fuerte aislamiento y aislamiento de aplicaciones

Si bien AppArmor y seccomp son solo Linux, parece que el confinamiento puede hacerse opcional, por lo que podemos ignorar eso. Luego está el uso de devpts, cgroups y mount namespaces. Si hay algún bloqueo, creo que sería para esos. No estoy lo suficientemente familiarizado con los BSD para decir cuáles son los equivalentes.

La snapdaplicación en sí está escrita en Go, lo que debería hacerla razonablemente multiplataforma. De hecho, algunos archivos tienen objetivos de compilación muy interesantes :

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

Entonces parece que alguien tiene interés en esto.

muru
fuente