Imagine poder executar aplicações Linux independente da distribuição usada ou não se preocupar qual formato de pacote deve usar para cada distribuição e derivadas, bem como: .deb ou .rpm. Isso já é possível graças aos ‘formatos universais’ Snap, Flatpak e AppImage disponíveis para Linux. Em outras palavras, você poderá usar um programa no Fedora e no Ubuntu a partir de um mesmo arquivo – sem a necessidade de instalação de bibliotecas compartilhadas ou complementos peculiares de cada sistema.
Contextualizando
O histórico de desenvolvimento e publicação de aplicações nos sistemas Linux está sendo amplamente discutido. A criação dos gerenciadores de pacotes (APT e DNF, por exemplo) está sendo repensada por conta das novas propostas de “empacotamento” de aplicações Linux, vide Snap, Flatpak e AppImage.
Para os idealizadores desses projetos, o cenário atual das aplicações Linux é problemático e afeta a flexibilidade de uso e desenvolvimento; já que para cada distro ou sistema Linux é preciso configurar bibliotecas e componentes peculiares para fazê-la funcionar. Por exemplo: caso não use uma distro Linux LTS, você estará limitado a usar a versão mais nova do programa oferecida naquele repositório da versão usada – muitas das vezes desatualizada. E, se caso queira usar a mesma aplicação em distros diferentes, será precisa baixá-la do repositório oficial de cada uma delas. E, mesmo assim, não garante que será usada a mesma versão.
Em outras palavras, quando se desenvolve uma aplicação para Linux é colocado na pauta em qual distro esse programa irá rodar; e não é visado o Linux como um todo – “desenvolvendo aplicação para Fedora 19 e 20; e não para o Linux…” – Linus Torvalds. Por isso, os ‘formatos universais‘ estão cada vez mais presentes no universo Linux.
Assim, o objetivo principal, em comum, desses projetos (Snap, Flatpak e AppImage) é oferecer flexibilidade e dinamismo na distribuição de softwares no Linux. Gerenciadores de pacotes, como APT e DNF, instalam formatos empacotados (.deb, por exemplo) que dependem de diversos outros pacotes, bem como bibliotecas.
Estes “novos” formatos contêm todos os arquivos necessários, incluindo as dependências para os outros pacotes. Consequentemente, eles conterão arquivos de instalação maiores. Por outro lado, você não terá problema se remover uma aplicação em um desses formatos; pois nenhum outro pacote/programa será afetado por causa de conflito de dependências, por exemplo.
Em resumo, alguns benefícios podem ser destacados:
– visão do usuário final: facilidade para fazer o download da aplicação, em um website ou por um ‘repositório universal’, e executá-lo no seu sistema desktop Linux; tal como como faria em um aplicativo do Windows ou Mac.
– visão do testador de software : facilidade para obter a versão mais recente de um aplicativo a partir de um servidor de desenvolvimento contínuo; e poder testá-lo sem a necessidade de compilar e sem ter que se preocupar em comprometer seu sistema, já que o aplicativo ainda está em fase de testes.
– visão do desenvolvedor: poder oferecer pacotes para sistemas desktop Linux, assim como é feito para Windows e OS X, sem a necessidade de criar diversas bibliotecas específicas para cada distro Linux.
Formatos universais para instalação de programas
Um dos objetivos principais desses ‘formatos universais’ é permitir que aplicações Linux possam ser executadas independente da distribuição usada. Em outras palavras, eles oferecem novos formatos de empacotamento da aplicação. São pacotes que incluem não só o programa, mas também as dependências que você precisará usar.
Por isso, acredito que seja importante você conhecer suas peculiaridades e saber quando deve usar ou não cada um deles:
1 – AppImage: “Linux apps that run anywhere”
Liberado a primeira vez em 2004, como nome klik, ele foi continuamente desenvolvido até ser renomeado, em 2011, para PortableLinuxApps. E, finalmente, em 2013, para AppImage.
A ideia central não é nova e lembra o uso dos programas portáteis no Windows; que você carrega no pendrive e pode executar diversas aplicações sem instalá-las. Em outras palavras, você poderá usar um programa no Fedora e no Ubuntu a partir de um mesmo arquivo – sem a necessidade de instalação de bibliotecas compartilhadas ou complementos peculiares de cada sistema.
Em resumo, os principais objetivos do AppImage são:
* Simplicidade – tanto para o usuário final como desenvolvedores;
* Empacotamento de software – todo software em único arquivo “one app = one file”, sem necessidade de compilação ou pré-compilação;
* Um único software para diversas distros Linux – permite executar aplicações Linux independente da distribuição usada;
* Sem necessidade de instalação – como os LiveCD’s, você pode testar uma aplicação sem precisar instá-la antes;
* Bibliotecas e pastas do sistema são preservadas – Como não necessita de instalação e compilação, nenhuma alteração é feita no sistema base;
* E outros;
A arquitetura do AppImage é simples 🙂 O Formato geral é um arquivo ISO 9660 comprimido que contém um diretório AppDir que contém o aplicativo e todos os arquivos que ele necessita para executar; e que não fazem parte do sistema operacional Linux onde será executado a aplicação.
Além disso, contém um pequena chamada executável incorporada em seu cabeçalho. Assim, uma imagem App é tanto um arquivo ISO 9660 (que você pode montar e analisar) e um executável ELF (que você pode executar).
Devo e quando usar?
Você já deve ter notado que alguns aplicativos já são oferecidos numa extensão .appimage. E para usá-lo (não instá-lo, já que o AppImage é uma imagem comprimida com todas as dependências e bibliotecas necessárias para executar o software desejado) é preciso seguir 3 etapas simples:
1. baixar o arquivo AppImage
2. torná-lo executável
3. executá-lo
No primeiro passo, você deve procurar se o programa desejado está disponível no formato .appimage. Veja AQUI.
Há muitos softwares disponíveis no formato AppImage. GIMP, Krita, Scribus e OpenShot são apenas alguns nomes. Você pode encontrar uma extensa lista de aplicativos disponíveis no formato AppImage AQUI.
Escolha a aplicação e prossiga na seção “Files”. Por exemplo, no meu caso, foi baixado a versão do Editor ATOM Atom-1.4.0-x86_64.AppImage (a maioria das aplicações oferecidas é na arquitetura 64bits)
Depois de realizado o download do arquivo, clique com botão direito sobre ele e habilite o recurso para executá-lo como aplicação – aba Permissão. Conforme imagem abaixo:
Pronto!! Agora é só clicar normalmente, como um arquivo, e o programa será executado.
Caso não queira mais o programa executado, basta remover o arquivo appimage baixado!
Algumas ressalvas devem ser levadas em conta. Uma delas é sobre a atualização do software instalado via appimage. Diferentemente do modelo tradicional (apt-get update && apt-get upgrade, por exemplo), não existem atualizações automáticas nesse formato. Você terá que verificar se há atualizações manualmente ou observar se a aplicação fornece isso automaticamente para você.
Sendo assim, isto pode ser um ponto importante a ser levado em conto. Mas, não desmerece o projeto e a oportunidade em poder usar/testar alguns programas nesse cenário 🙂
2 – Flatpak: “Build once, run anywhere”
O Flatpak é ideia de Alexander Larsson, principal engenheiro de software da Red Hat. Larsson tem trabalhado em ambiente desktop Linux durante 18 anos. Além disso, possui uma experiência considerável na área de empacotamento de aplicativos.
O Flatpak, conhecido, anteriormente durante seu desenvolvimento, como xdg-app, fornece a capacidade de um aplicativo – empacotado nesse formato – ser instalado e executado com facilidade; e de forma consistente em muitas distribuições Linux diferentes. Além da segurança inerente ao formato, o formato Flatpak tem a capacidade de oferecer isolamento do sistema operacional e de outras aplicações; garantindo maior segurança.
Ele permite criar um aplicativo (empacotar) uma vez e depois implantá-lo em todas as distribuições Linux. Ele usa tecnologias semelhantes aos containers em ambientes servidor, mas com foco no ambiente desktop.
Tecnicamente, em resumo, o Flatpak faz uso do OSTree, que pode ser descrito como “GIT para grandes binários”. Isso fornece grande parte das funcionalidades para hospedar os repositórios de software. Tornando o Flatpak extremamente eficiente, pois aplicações e bibliotecas que são instalados são deduplicadas, economizando espaço em disco. Um dos aspectos que fazem com que o Flatpak ocupe menos espaço do que outros formatos similares, como o Snap, por exemplo.
Já para garantir o isolamento (“sandboxing”), o Flatpak faz uso do utilitário Bubblewrap, bem como várias características do kernel do Linux (como cgroups e namespaces), o que ajuda a torná-lo “portátil” para diversas distribuições Linux.
Uma gama crescente de aplicações já estão disponíveis no formaro Flatpak, bem como LibreOffice, GIMP, Inkscape, MyPaint, Darktable, e um grande número de aplicações compatíveis com o GNOME. Além disso, o Flatpak é compatível com as normas, oferecendo suporte para a especificação Open Initiative Container.
O projeto está hospedado em Freedesktop.org e no Github, e é licenciado sob a LGPL.
Devo e quando usar?
A Comunidade Fedora foi uma das primeiras a “aderir” ao Flatpak. No lançamento da versão 24, o Fedora ofereceu suporte padrão ao Flatpak. ALém disso, o projeto Endless Computers – empresa criadora do sistema Endless OS que busca alcançar pessoas localizadas em zonas remotas onde o acesso à informação é restrito – também “aderiu” logo cedo ao Flatpak 🙂
Diferentemente do AppImage, o Flatpak não é um formato “portátil” – assemelha-se muito ao Snap (mostrado a seguir). Em outras palavras, você precisa instalar uma ‘engine’ Flatpak no seu sistema para que ela encontre, em seus repositórios, os pacotes universais desse formato.
Atualmente, o suporte ao Flatpak é extenso. Sendo possível instalá-lo nas principais distribuições Linux com suporte ao GNOME 3.22 ou superior. Basicamente o pacote é o mesmo em todas as distros, variando de acordo com o sistema e seu gerenciador de pacote:
Arch Linux
Debian 9 e superior
Fedora 24 e superior
openSUSE
Ubuntu 17.10 e superior
Depois de instalado em sua distribuição, é preciso seguir 2 etapas importantes:
1. instalação do ‘runtime’ – uma espécie de referência (.flatpakref) para informar como cada programa deve ser instalado.
2. execução do programa instalado
O Flatpak exige que cada programa especifique um tempo de execução (runtime) que ele usa para suas dependências. Para instalá-lo, primeiro é preciso adicionar o repositório que o fornece através do arquivo de referência fornecido pelo desenvolvedor do programa:
sudo flatpak install --from http://download.documentfoundation.org/libreoffice/flatpak/LibreOffice.flatpakref
Algumas perguntas serão feitas… apenas siga as referências!
E, por fim, executá-lo:
flatpak run org.libreoffice.LibreOffice
No caso do flatpak é possível manter o programa instalado sempre atualizado. Para isso, você precisará buscar pelo programa desejado:
Em seguida, atualizá-lo:
Fazendo isso, atualizará o aplicativo individualmente. Contudo, basta digitar flatpak update para atualizar, simultaneamente, todas as aplicações instaladas no sistema 🙂 Alternativamente, basta usar o GNOME Software, normalmente. Quando houver uma atualização de algum programa flatpak, você será notificado também!
Para remoção do programa é possível via terminal:
Em resumo, o uso do flatpak pode ser uma opção segura e robusta para caso decida ter um programa “enjaulado” que não venha comprometer outros softwares já instalados no sistema. Como visto, não é uma alternativa tão simples (como o AppImage). Entretanto, garante mais confiança e segurança nas aplicações distribuídas. Além, claro, ser um projeto grande e mantido por uma comunidade participativa!
A documentação oficial com todos os comandos do flatpak pode ser encontrada AQUI. Por fim, o flatpak runtime para KDE ainda está desenvolvimento. E, isso, pode ser um ponto negativo para alguns 🙁
3 – Snap: “Package any app for every Linux”
Snap é uma criação da Canonical pensado, especificamente, para a tecnologia Snappy usado em Snappy Ubuntu Core – uma versão enxuta do Ubuntu para ser implantado em vários dispositivos embarcados; e para tecnologia de Internet das coisas (Internet of Things).
Assim, tornou-se um novo tipo de pacote que nos permite instalar programas de maneira muito simples, sem ter de procurar as dependências (igualmente ao AppImage e Flatpak, vistos anteriormente). Conforme, site oficial do Ubuntu, os pacotes snap são um novo formato de empacotamento da aplicação. Foi lançado, primeiramente, no Ubuntu 16.04 LTS. Mas, agora estão disponíveis também no Ubuntu 14.04 LTS.
No caso dos pacotes snap, criado e mantido pela Canonical, você poderá instalar novos aplicativos em versões anteriores do Ubuntu, mesmo se as dependências não estejam disponíveis nesta versão. Para o Ubuntu, é um formato de empacotamento que surge como alternativa para os pacotes binários .deb do Debian.
Devo e quando usar?
Mesmo sendo mantido e pensado, inicialmente, para o Ubuntu, outros desenvolvedores, de outras distribuições Linux e empresas, anunciaram colaboração ao projeto de pacote snap. Tornando-o universal para qualquer distribuição Linux, permitindo que um único pacote binário possa ser instalado perfeitamente, e com segurança, em qualquer ambiente Linux (desktop, servidor, cloud ou embarcado).
Estes desenvolvedores, estão trabalhando sobre a plataforma snapcraft.io para fornecer um único mecanismo de publicação para qualquer software, independentemente do ambiente Linux. Atualmente, o formato do pacote snap funciona, nativamente, em distribuições Linux populares; bem como: Arch Linux, Fedora, Debian, OpenWrt, Ubuntu e suas variantes oficiais.
Futuramente, outras distribuições Linux irão adotar o pacote snap como um formato binário universal para seus usuários. Entre elas, podemos citar openSUSE, Linux Mint, Red Hat Enterprise Linux, CentOS, e Elementary OS. Os formatos nativos de cada distribuição serão mantidos. O Snap seria apenas uma alternativa complementar:
Arch Linux
sudo systemctl enable --now snapd.socket
Debian Testing
Fedora 24 e superior
sudo systemctl enable --now snapd.socket
openSUSE
42.2
Tumbleweed
Instalar:
sudo systemctl enable --now snapd.socket
Ubuntu 14.04 LTS
Ubuntu 16.04 LTS e superior já vem instalado, por padrão 🙂
Para encontrar uma lista com diversos programas disponíveis via snap, veja AQUI. Agora, você pode instalar pacotes snap diretamente pelo repositório. Faça um teste:
A primeira vez que você instala um snap, o snapd também instala o snap “core”, que é a plataforma comum para todos os outros snaps. Após a instalação, você pode usar o comando “snap list” para listar os snaps instalados:
Para explorar ainda mais os snaps, você pode usar o comando “snap find” ou “snap find pacote” para procurar mais opções:
Por fim, como você pode ver, o comando “snap” é usado para gerenciar snaps da mesma maneira que você usa “apt” para gerenciar .debs. Você pode aprender mais sobre isso seguindo este Tutorial desenvolvido pela Canonical e publicado em seu novo portal de Tutoriais. Ou através do comando “snap –help”.
CONSIDERAÇÕES FINAIS
Mesmo com esses projetos, espera-se que os pacotes binários tradicionais (.deb .rpm) continuem existindo e, claro, a capacidade de compilar diretamente das fontes de software também. Embora, inevitavelmente, possa ser substituído gradualmente.
Em comparação entre o snap e o Flatpak, o Flatpak parece mais voltado para a comunidade (mas, a Canonical parece estar mudando sua postura). Pois, o Flatpak começou como um projeto do Gnome, principalmente, pelos desenvolvedores da Red Hat. E, também está se expandindo para outros ambientes de trabalho, bem como KDE e várias distribuições Linux. Contudo, pela “maior facilidade”, em relação ao flatpak, o snap acabe por ser o formato universal (minha opinião).
Mesmo com suporte em diversas distros: Fedora, Debian, Arch, Mageia e Ubuntu, o Snap e o Flatpak, provavelmente, não serão tão absorvida no Arch Linux, Gentoo ou Slackware; já que a quantidade de softwares disponíveis são sempre entregues com as mais recentes versões e que a filosofia desses sistemas é priorizar a compilação a partir do fonte. Mas, em outras distribuições, com ciclo regular; bem como Ubuntu, openSUSE Leap, Debian, pode ser uma boa oportunidade para ter acesso a versão do software mais recente; e “enjaulado”.
Uma desvantagem do Flatpak , comparado ao Snap, é que ele precisa do GNOME ou KDE (ainda em testes) para ser executado, e potencialmente alguns outros componentes, para que possam trabalhar em uma determinada distro Linux. Na sua essência, os pacotes Flatpak não são tão “universal” (como ter suporte a tantas plataformas Linux, por padrão) como são os snaps.
E, pela tangente, o AppImage entra como alternativa “portátil” de distribuição de software. Mas, entre as 3 opções, é a que mais destoa dos pilares… portabilidade, flexibilidade e segurança.
Por fim, independentemente de qualquer situação, a “batalha” pelo empacotamento universal de aplicações Linux começou e é a sua vez decidir usar ou não 🙂