O snap é portátil em outro UNIX (por exemplo, macOS)?

8

Eu adorei a idéia por trás do snap e joguei com ele em uma VM do Ubuntu.

  

Visão geral do Snapcraft

     

O Snapcraft é uma ferramenta de criação e empacotamento que ajuda você a   software como um piscar de olhos. Isso facilita a incorporação de componentes de   diferentes fontes e construir tecnologias ou soluções. Conceitos-chave

     

Um pacote .snap para o sistema Ubuntu Core contém todos os seus   dependências. Isto tem algumas vantagens sobre o tradicional deb ou   manuseio de dependência baseado em rpm, sendo o mais importante   desenvolvedor pode sempre ter certeza de que não há regressões   desencadeada por alterações no sistema sob o aplicativo.

     

O Snapcraft facilita o agrupamento dessas dependências, permitindo que você   especifique-os como "partes" no arquivo snapcraft.yaml. Snappy

     

Snappy Ubuntu Core é uma nova versão do Ubuntu com transacional   atualizações - uma imagem mínima do servidor com as mesmas bibliotecas que as de hoje   Ubuntu, mas as aplicações são fornecidas através de um mecanismo mais simples.

     

Os aplicativos Snappy e o próprio Ubuntu Core podem ser atualizados atomicamente e   revertida, se necessário. Os aplicativos também são estritamente confinados e em sandbox   para proteger seus dados e sistema.

IoT ›Crie aplicativos

Em quais tecnologias são baseadas em snap? Como a arquitetura e os toolkits se parecem? O snap depende dos recursos do kernel do Linux?

Pergunto, porque estou pensando se no futuro poderei usar os mesmos pacotes de snap também no macOS?

Esclarecimento, após o primeiro comentário:

Eu sei que o macOS e o Ubuntu não são binários compatíveis. Uma recompilação é necessária. Existe praticamente qualquer código aberto disponível para macOS com Homebrew . O desenvolvedor pode desenvolver no macOS e implantar no Ubuntu quando o snap estiver (no futuro) disponível para o macOS.

    
por Fyodor Glebov 25.06.2016 / 21:13

2 respostas

18

Sim, graças à estabilidade da interface syscall do Linux, isso é possível.

Um dos grandes compromissos de Linus Torvalds para os usuários do Linux é que o conjunto de interfaces oferecidas pelo kernel é estável. Muitas pessoas não apreciam o valor disso, ou quão desafiador é como líder de um projeto aberto para alcançar esse compromisso. Considere, por exemplo, como as mudanças imprevisíveis nas APIs do GNOME estão em contraste! Quando você ouve falar de Linus se intensificando em uma lista de discussão, é quase sempre porque algum committer do kernel decidiu mudar uma interface como essa, “porque eles tiveram uma idéia melhor”. Linus diz que você pode inovar descontroladamente dentro do kernel, mas, por favor, não quebre os aplicativos 'userspace' que dependem do syscalls existentes.

Como consequência dessa estabilidade, é possível que outros kernels ofereçam o mesmo syscalls, permitindo que aplicativos construídos no Linux sejam executados nesses outros kernels.

Um exemplo disso é o projeto Joyent Triton, que oferece syscalls compatíveis com Linux em containers no SmartOS (um descendente do IllumOS, um descendente do Solaris).

Um exemplo mais conhecido é o novo subsistema Linux no Windows .

Naturalmente, quantos dos syscalls são oferecidos, e como eles são compatíveis com bug-for-bug, é a verdadeira questão. Pelo menos por enquanto, não há outro ambiente onde todos os syscalls necessários estão no lugar, porque os snaps que usam são relativamente novos e profundos no modo como o kernel pensa sobre as coisas que gerencia.

Mas eles certamente virão, com o tempo, e acho que os snaps serão utilizáveis em uma ampla gama de contextos.

O que é muito legal, bem-vindo os patches:)

    
por Mark Shuttleworth 26.06.2016 / 12:49
9

Embora não seja possível encontrar nenhuma informação sobre o macOS, este OMG! O artigo do Ubuntu tem uma citação interessante de Mark Shuttleworth:

  

Como para executar Snaps no Windows 10? "É absolutamente plausível"   Shuttleworth disse.

     

“Snaps estão usando recursos modernos no kernel do Linux para fazer segurança   confinamento, configurar o acesso ao sistema de arquivos, etc, e tudo isso envolve   usando mecanismos modernos no kernel. E a Canonical leva muito   [Este trabalho]. Vai demorar um pouco para a Microsoft [entrar em contato com   isto]. ”

Se é "plausível" executá-lo no Windows, eu diria o mesmo para o macOS, exceto que a Microsoft parece estar cooperando com a Canonical, o que não é algo que eu tenha ouvido falar sobre a Apple.

A documentação em Encaixar a política de segurança e o sandbox e a entrada do Arch Wiki no snapd é informativa:

Do Wiki do Arch:

  

Observe que o snap-confine é construído com a opção --disable-confinement;   O confinamento total depende de um kernel habilitado para AppArmor e   perfil para o snap.

Da política:

  

Sob o capô, o lançador:

     
  • Configura várias variáveis de ambiente: […]
  •   
  • Quando o hardware é atribuído ao snap, configura um cgroup de dispositivo com dispositivos padrão (por exemplo, / dev / null, / dev / urandom, etc) e quaisquer dispositivos   que são atribuídos a este snap
  •   
  • Configura um / tmp particular usando um namespace de montagem privada por comando e monta um diretório por comando em / tmp
  •   
  • Configura um comando por instância para nova instância
  •   
  • Configura o filtro seccomp para o comando
  •   
  • Executa o comando no perfil AppArmor específico do comando sob um valor interessante padrão
  •   

Esta combinação de perfis restativos do AppArmor (que media o arquivo   acesso, execução de aplicativos, recursos do Linux (7), mount, ptrace,   IPC, sinais, redes de granulação grossa), claramente definidos   áreas específicas do sistema de arquivos do aplicativo, filtragem syscall da lista branca via   seccomp, private / tmp, novos instâncias de instâncias e cgroups de dispositivos   para strong aplicação de confinamento e isolamento.

Embora o AppArmor e o seccomp sejam apenas para Linux, parece que o confinamento pode ser feito opcional, por isso podemos ignorá-lo. Depois, há o uso de devpts, cgroups e namespaces de montagem. Se houver algum bloqueio, acho que seria para eles. Eu não estou familiarizado o suficiente com os BSDs para dizer quais são os equivalentes.

O aplicativo snapd em si é escrito em Go, o que deve torná-lo razoavelmente compatível com várias plataformas. De fato, alguns arquivos têm objetivos de construção muito interessantes :

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

Parece que alguém tem interesse nisso.

    
por muru 25.06.2016 / 22:28