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

10

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

Visão geral do Snapcraft

O Snapcraft é uma ferramenta de compilação e empacotamento que ajuda você a empacotar seu software rapidamente. Isso facilita a incorporação de componentes de diferentes fontes e a criação de tecnologias ou soluções. Conceitos chave

Um pacote .snap para o sistema Ubuntu Core contém todas as suas dependências. Isso tem algumas vantagens sobre o tratamento tradicional de dependências baseado em deb ou rpm, sendo o mais importante que um desenvolvedor sempre pode ter certeza de que não há regressões acionadas por alterações no sistema sob o aplicativo.

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

O Snappy Ubuntu Core é uma nova versão do Ubuntu com atualizações transacionais - uma imagem mínima do servidor com as mesmas bibliotecas do Ubuntu atual, mas os aplicativos são fornecidos por um mecanismo mais simples.

Aplicativos rápidos e o próprio Ubuntu Core podem ser atualizados atomicamente e revertidos, se necessário. Os aplicativos também são estritamente confinados e protegidos por sandbox para proteger seus dados e sistema.

IoT ›Criar aplicativos

Em que tecnologias é baseada em snap? Como é a arquitetura e os kits de ferramentas? O snap depende dos recursos do kernel do Linux?

Eu 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 compatíveis com binários. Uma recompilação é necessária. Já existe quase todo o código aberto disponível para o macOS com o Homebrew . O desenvolvedor pode desenvolver no macOS e implantar no Ubuntu quando o snap estiver (no futuro) disponível para o macOS.

Ivanov
fonte
1
Mesmo que nenhum recurso do kernel estivesse envolvido, eu não esperaria que qualquer aplicativo não trivial, mesmo compilado estaticamente, fosse executado sem recompilar no macOS e Linux - os formatos executáveis ​​são diferentes, as ABIs seriam diferentes para o sistema POSIX subjacente as chamadas seriam diferentes e, especialmente para aplicativos que vão além do POSIX, as chamadas equivalentes ao sistema serão diferentes. Acho que essas não são barreiras que qualquer embalagem possa superar. Caso contrário, projetos como Wine e Darling teriam tido sucesso há muito tempo.
Muru
Deseja instalar snaps no macOS ou criar snaps no macOS? Sua pergunta inicialmente parecia com a primeira e agora parece com a segunda.
Muru
De qualquer forma, como os snaps ainda não foram completamente transportados para outras distribuições Linux , eu esperaria que qualquer ação no macOS fosse um sonho.
Muru

Respostas:

20

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

Um dos grandes compromissos de Linus Torvalds com os usuários do Linux é que o conjunto de interfaces oferecidas pelo kernel é estável. Muitas pessoas não apreciam o valor disso ou o quão desafiador é como líder de um projeto aberto alcançar esse compromisso. Considere, por exemplo, como são imprevisíveis as mudanças nas APIs do GNOME! Quando você ouve sobre o Linus ficar intenso em uma lista de discussão, é quase sempre porque algum colaborador do kernel decidiu mudar essa interface 'porque eles tinham uma ideia melhor'. Linus diz que você pode inovar loucamente DENTRO do kernel, mas por favor, não quebre os aplicativos 'espaço de usuário' que dependem dos chamados existentes.

Como conseqüência dessa estabilidade, é possível que outros kernels ofereçam os mesmos syscalls, permitindo que os aplicativos criados no Linux sejam executados nesses outros kernels.

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

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

Obviamente, quantos dos syscalls são oferecidos e quão compatíveis são de bug por bug, é a verdadeira questão. Pelo menos por enquanto, não há outro ambiente em que todos os syscalls necessários estejam em vigor, porque os snaps usados ​​são relativamente novos e aprofundados na maneira como o kernel pensa nas coisas que gerencia.

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

O que é muito legal, os patches são bem-vindos :)

Mark Shuttleworth
fonte
11

Embora não encontre nenhuma informação sobre o macOS, este OMG! O artigo Ubuntu tem uma citação interessante de Mark Shuttleworth:

Quanto à execução do Snaps no Windows 10? "É absolutamente plausível", disse Shuttleworth.

“Os snaps estão usando recursos modernos no kernel do Linux para confinar a segurança, configurar o acesso ao sistema de arquivos, etc., e tudo isso envolve o uso de mecanismos modernos no kernel. E a Canonical liderou muito [esse trabalho]. Vai demorar um pouco para a Microsoft [conseguir se conectar a ele]. ”

Se é "plausível" fazê-lo funcionar 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 ouvi sobre a Apple.


A documentação sobre política de segurança Snap e sandboxing e a entrada do Arch Wiki no snapd são informativas:

No Arch Wiki:

Observe que snap-confine é criado com a opção --disable-confinement; o confinamento completo depende de um kernel ativado pelo AppArmor e de um perfil relacionado 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 dispositivos com dispositivos padrão (por exemplo, / dev / null, / dev / urandom, etc) e todos os dispositivos atribuídos a esse snap
  • Configura um private / tmp usando um namespace de montagem privada por comando e montando um diretório por comando em / tmp
  • Configura um comando por comando que devolve uma nova instância
  • Configura o filtro seccomp para o comando
  • Executa o comando no perfil AppArmor específico do comando, com um valor agradável padrão

Essa combinação de perfis restritos do AppArmor (que mediam o acesso a arquivos, a execução de aplicativos, os recursos Linux (7), a montagem, o ptrace, o IPC, os sinais, a rede de granulação grossa), as áreas do sistema de arquivos específicas da aplicação claramente definidas, a lista de permissões syscall via seccomp, private / tmp, novas instâncias de instância e cgroups de dispositivos fornecem forte confinamento e isolamento de aplicativos.

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

O snapdaplicativo em si é escrito em Go, o que deve torná-lo razoavelmente entre plataformas. De fato, alguns arquivos têm alvos 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.

muru
fonte