Desenvolvimento de apps para Linux
(makealinux.app)- Há demanda por novos softwares no Linux para desktop e mobile, mas as lojas de apps e repositórios têm poucos aplicativos, então a mensagem é focar no desenvolvimento de apps em vez de criar novas distribuições
- Mesmo apps que nascem de uma necessidade pessoal, quando desenvolvidos abertamente, podem virar material de aprendizado e comunidade, levando à expansão do ecossistema Linux
- A diversidade de centenas de distribuições é um desafio, mas com sistemas de empacotamento e distribuição bem documentados é possível entregar apps a usuários de vários ambientes
- GNOME, KDE Frameworks, elementary OS, Electron e Ubuntu Touch oferecem caminhos de desenvolvimento diferentes, com Gtk, Qt, Vala, JavaScript·HTML·CSS e QML
- Existem meios de distribuição como AppCenter, AppImage, Flatpak, Open Build Service e Snapcraft, além de possibilidades de monetização por meio de apps e serviços pagos e lojas baseadas em apoio financeiro
Por que o Linux precisa de mais apps
- Usuários de Linux em desktop e mobile têm demanda por novos softwares
- As lojas de apps e repositórios do Linux têm menos aplicativos do que plataformas proprietárias
- Para entusiastas de tecnologia, a recomendação é usar paixão e criatividade em novos aplicativos para usuários de Linux, em vez de criar ainda mais distribuições Linux
- A mensagem central é: “parem de criar distribuições Linux e criem aplicativos”
O efeito do desenvolvimento de apps no ecossistema
- Se você tem uma ideia de app que precisa pessoalmente, é possível que outros usuários com necessidades parecidas também tenham
- Ao criar um aplicativo publicamente, desenvolvedores mais novos também podem aprender e começar, o que ajuda a próxima geração de desenvolvimento de apps para Linux
- Desenvolver aplicativos é um trabalho criativo, e a sensação de realização ao concluir um projeto também pode ser uma recompensa
- O desenvolvimento de apps ajuda a formar comunidade, e a comunidade Linux muitas vezes quer ajudar desenvolvedores a ter sucesso
- Habilidade em desenvolvimento de software é uma competência valorizada, e há muitos recursos gratuitos de aprendizado
- A ideia de que usuários de Linux não apoiam financeiramente desenvolvedores é um equívoco; apps e serviços pagos populares podem criar novas fontes de renda
Trabalhando para várias distribuições Linux
- Ao contrário de outras plataformas, o Linux tem uma variedade enorme de alvos, com centenas de distribuições
- Depois de publicado uma vez, um aplicativo em geral pode funcionar em vários ambientes
- Existem sistemas de empacotamento e distribuição bem documentados para que desenvolvedores entreguem apps aos usuários
- Cada framework de desenvolvimento e cada distribuição Linux tem um caminho recomendado para entregar apps aos usuários
- Quando estiver pronto para compartilhar seu app, é possível consultar na documentação de desenvolvimento os guias de empacotamento recomendados
Caminhos para começar a desenvolver
-
GNOME
- O projeto GNOME cria o desktop GNOME Shell e oferece suporte ao desenvolvimento com Gjs e Gtk
- No Gtk, é possível usar linguagens populares como Python, C, C++, Rust e JavaScript
- GNOME Developer Center
-
KDE Frameworks
- O KDE oferece o desktop Plasma e ferramentas e frameworks para criação de aplicativos
- O KDE Frameworks tem sido usado no desenvolvimento de vários aplicativos para desktop
- Usa principalmente o toolkit Qt e a linguagem de programação C++
- KDE Frameworks Getting Started
-
elementary OS
- O elementary OS se propõe a ser um sistema operacional rápido, aberto e que respeita a privacidade, como alternativa ao Windows e macOS
- Os desenvolvedores constroem um desktop e um ecossistema para criação de apps
- O guia para desenvolvedores recomenda Vala e Gtk
- elementary OS Developer Guide
-
Electron
- O Electron permite criar apps desktop multiplataforma com JavaScript, HTML e CSS
- Desenvolvedores podem usar a enorme biblioteca de módulos do node para criar apps baseados em tecnologias web
- Electron Documentation
-
Ubuntu Touch
- O Ubuntu Touch é um sistema operacional open source projetado para funcionar em vários dispositivos, como celulares, tablets e PCs
- Apps nativos do Ubuntu Touch são feitos em QML ou HTML, e o comportamento é definido com JavaScript, C++, Python, Rust e Go
- Ubuntu Touch Documentation
Opiniões de desenvolvedores sobre o ecossistema de apps no Linux
- Neil McGovern, da GNOME Foundation, diz que é preciso um ecossistema de apps próspero para levar o Linux ao grande público, e que todos deveriam poder desenvolver para Linux para aproximar o objetivo de um desktop aberto
- Aleix Pol, da KDE e.V., diz que grandes apps são necessários para fazer do Linux o sistema operacional que as pessoas querem usar, e que as ferramentas de desenvolvimento permitem criar o que se imagina
- Daniel Foré, fundador do elementary, acredita que há oportunidade não só de criar ótimos apps para Linux desktop, mas também de construir APIs de plataforma e influenciar a direção do desktop
- Jan Sprinz, membro do conselho da UBports Foundation, diz que desenvolver apps para Linux é algo totalmente diferente de ecossistemas fechados, e que mesmo competindo tecnicamente, todos colaboram por uma visão maior
Como compartilhar e distribuir apps
-
AppCenter
- É uma loja de apps aberta no modelo pay-what-you-want para desenvolvedores independentes, além de um serviço de build
- O AppCenter Dashboard integra com o GitHub e oferece suporte a releases e rastreamento de issues
- AppCenter Dashboard
-
AppImage
- É possível distribuir aplicativos desktop Linux no formato AppImage para alcançar usuários de distribuições Linux em geral
- A proposta é empacotar uma vez e rodar em qualquer lugar
- AppImage Packaging Guide
-
Flatpak
- É um framework para distribuir aplicativos de desktop Linux
- Foi criado por desenvolvedores com longa experiência no desktop Linux e é mantido como um projeto open source independente
- Flatpak Documentation
-
Open Build Service
- O openSUSE Build Service é a instância pública do Open Build Service
- É usado no desenvolvimento da distribuição openSUSE e também para fornecer, a partir do mesmo código-fonte, pacotes para várias distribuições como Fedora, Debian, Ubuntu e SUSE Linux Enterprise
- openSUSE Build Service Help
-
Snapcraft
- O Snapcraft é uma ferramenta de linha de comando para criar snaps
- Snaps são pacotes de apps para desktop, nuvem e IoT, apresentados como fáceis de instalar, seguros, multiplataforma e sem dependências
- Snapcraft Documentation
1 comentários
Opiniões no Hacker News
Acho que a premissa está errada pelo fato de o Linux ainda não ter um conjunto de frameworks centrais com ABI estável
Plataformas concorrentes têm muito mais frameworks básicos, como CoreImage, CoreAudio, CodeML, SceneKit e AppKit, e eles quebram com menos frequência
snap e flatpak no Linux também são interessantes, mas parecem mais uma forma de contornar o problema via infraestrutura e gerenciamento de pacotes, em vez de resolvê-lo nos próprios frameworks e linguagens de programação que pedem para você usar ao criar apps
No Linux também existem conjuntos que são padrões de fato, mas eles mudam e são descontinuados, então são menos estáveis. Ainda assim, é melhor do que parece à primeira vista, e Snaps podem mitigar parte dos problemas
Só que, se as pessoas escolherem distribuições que não têm esses padrões, no momento em que você não oferecer suporte a todo tipo de configuração peculiar, perde metade dos usuários potenciais
Mas, como o texto diz, a maioria continuou focada em criar distribuições, e naturalmente fica difícil surgir uma única stack que acompanhe todas as inúmeras distribuições peculiares
No fim, o Google pegou o kernel Linux e colocou por cima dois conjuntos de frameworks centrais baseados em Java e JavaScript; para o consumidor comum, essas distribuições Linux foram as vencedoras
Em geral, desenvolvedores de jogos compilam em uma distribuição grande e recente e publicam no Steam; se essa distribuição tiver glibc 2.36, muitas vezes o binário também acaba levando nomes de versão que exigem glibc 2.36 ou superior
No fim, é preciso usar a diretiva symver do binutils gas para forçar nomes de versão compatíveis com uma glibc razoavelmente antiga. Pessoalmente, vejo 5 anos, talvez 7 a 8 anos, como um critério razoável: https://sourceware.org/glibc/wiki/Glibc%20Timeline
Desenvolvedores de jogos comuns quase não sabem desse problema e, mesmo sabendo, não fariam um trabalho tão doloroso por 1% do mercado. No caso de libgcc e C++, também é preciso linkar libstdc++ estaticamente para evitar esse problema de ABI
Ainda assim, a engine Godot fornece um contêiner de build que leva isso em conta, e a Unity também parece bem resolvida nesse aspecto. Não sei quanto à UT5.x
Por outro lado, há engines que não estão preparadas, como jogos baseados em Electron. Se não houver uma versão do GTK+ adequada à distribuição, como Enlightenment, Qt, X11 puro ou Wayland, pode ser que não rode
Também não é fácil empacotar corretamente todo o engine Google Blink para distribuição binária visando uma ampla variedade de distribuições ELF/Linux
ELF/Linux, de modo geral, é hostil à distribuição somente em binário por causa de quebras de ABI, especialmente em SDKs e bibliotecas centrais
Se binários de jogos já são difíceis nesse nível, apps devem ser ainda mais. Dá para imaginar os desenvolvedores acabando por dizer: “não me importa; instalem e usem apenas Microsoft SUSE GNU/Linux, o resto não tem suporte”
É incrível ter tantas ferramentas prontas para usar sem precisar se preocupar muito com período de suporte, qual fork é melhor ou se combina bem com outras bibliotecas de terceiros. Isso reduz muito o atrito e deixa você simplesmente criar
Os ecossistemas KDE Qt e GNOME/GTK são os que chegam mais perto, mas ainda não estão nesse nível
Talvez eu não conheça o padrão que determina quando acrescentar
deveversionaos nomes dos pacotes, ou o que significam esses1ou0arbitrários no fim, mas acho que a primeira distribuição Linux com regras consistentes de nomes de pacotes vai conquistar coraçõeslibgnutls-devlibgtk-3-0libwayland-server0libxcb1libx11-6libffi-devlibncurses5-dev-devcontém os headers, então é relativamente fácilOs números indicam a versão quando é possível instalar várias versões ao mesmo tempo. Mas pode haver exceções, como em
xcb1, em que isso faz parte do nome da bibliotecaPor exemplo, em algum momento talvez fosse possível instalar
libgtk-3-0elibgtk-2-$somethingao mesmo tempo. É bem provável que tenham mantido o nome para que, mesmo depois de removerlibgtk-2, referências alibgtk-3-0em tutoriais antigos não quebrassemTambém não sei bem o que significa o
0no fim delibwayland-server0. Vejo em/var/liba mesma biblioteca com vários sufixos.$number, mas nunca fui investigar exatamente que problema isso resolve-devbasta; se vai desenvolver com essa biblioteca, também precisa do-dev, que instala os headersO
1ou0no fim não é nada especial, é apenas parte do nome ou da versão do pacoteMas
-devsignifica coisas necessárias apenas quando se vai desenvolver tendo aquela biblioteca como alvoO número é o número da versão principal, ou seja, o número de compatibilidade. Graças a isso, várias versões principais exigidas por pacotes diferentes podem ser instaladas juntas facilmente, sem conflito
-dev. Normalmente não é preciso se preocupar diretamente com pacotes-devnumerados; se necessário, o pacote sem número deveria encaminhar issoDurante a compilação, fica registrado qual sufixo numérico, isto é, qual versão da ABI, foi usado. Isso deve corresponder ao sufixo
.so.N, mas você não procura diretamente desse jeitoEsse método permite instalar várias cópias incompatíveis de uma biblioteca e fazer com que a correta seja usada. As distribuições normalmente limpam as antigas a cada grande release
Na instalação, as dependências registradas durante a compilação deveriam ser usadas automaticamente
Este é um dos maiores problemas que seguram a plataforma Linux como um todo. Costumam citar isso como vantagem, mas não vejo assim
Desenvolvedores apresentam a abundância de opções como uma vantagem do Linux, mas para muitos usuários isso vira o paradoxo da escolha e os faz voltar para a plataforma que já usavam
No macOS e no Windows há menos opções, mas as opções disponíveis são muito mais polidas e menos fragmentadas
Por exemplo, de quantos gerenciadores de janelas em mosaico precisamos? Não daria para escolher o melhor gerenciador de janelas em mosaico e criar docks e applets melhores? E apps e launchers integrados ao paradigma de gerenciador de janelas em mosaico?
Em vez disso, muitas vezes acabamos com 10 gerenciadores de janelas em mosaico e gambiarras pela metade por cima deles
Um ecossistema bem-sucedido faz com que escolher uma opção bem visível ainda leve a um resultado bom o bastante
O aumento no número de distribuições Linux, na maior parte, são pequenas diferenças que não reduzem uma adequação significativa, e só é visto como problema pela minoria minúscula que nunca teve dificuldade para escolher uma distribuição
Por outro lado, em casos como o Wayland, a infraestrutura interna e o hardware de repente passam a importar, e é preciso entender um pouco da estrutura interna para escolher uma combinação utilizável, então isso vira um problema real
Comparar Mac ou Windows com Linux também não faz muito sentido. Para 95% dos consumidores, o sistema operacional é uma característica fixa ou uma função do computador, não um produto separado
Se o pacote como um todo fizer sentido, eles podem comprar um computador com aquele sistema operacional instalado, mas não vão tentar instalá-lo separadamente no seu aparelho com Windows ou Mac
Pessoas com conhecimento técnico suficiente para ficarem satisfeitas provavelmente não vão se confundir muito só porque surgiram mais três derivadas do Ubuntu e duas do Arch
Tornar-se desenvolvedor de código aberto significa poder definir por conta própria os objetivos e os meios, uma liberdade que muitas vezes não existe no desenvolvimento de software comercial
As arestas aparecem, mas o efeito IKEA entra em ação e você acaba gostando
Se todo mundo usa o mesmo software, vira uma monocultura mais vulnerável a ataques. Um dos motivos pelos quais o Windows foi muito visado por vírus é que o alvo era grande e consistente
Se você invadisse a máquina Windows de um usuário comum, conseguiria invadir as demais de forma parecida. Mirando Linux, isso é muito mais difícil
Além disso, é software livre. Se você não está pagando alguém para fazer, na maior parte é trabalho voluntário, e não podemos dizer aos outros onde gastar seu tempo de voluntariado
Se há tantos grupos assim e mesmo assim ninguém quer entrar, também precisamos olhar para as estruturas sociais dominantes. Talvez um ponto de partida seja eliminar códigos de conduta que permitam punir até comportamentos fora do projeto
E também não sei bem o que ainda precisa melhorar. Coisas como Ulauncher ou Albert são muito mais poderosas do que o que é possível em outras plataformas, e não sei como tornar a UI melhor
É bom que haja mais software. Mas, antes de criar algo do zero, talvez valha a pena contribuir para algo que já existe, ou escolher um projeto abandonado, ou que precise de ajustes para compilar e rodar em compiladores e hardware atuais
Também fico curioso se existe em algum lugar um banco de dados de projetos dormentes ou mortos que valem a pena ressuscitar
Outro projeto pode ser liderado por alguém difícil de conviver, ou ter uma comunidade que não aceita sugestões e patches
Processos sociais e bloqueios podem fazer a pessoa perder a motivação para contribuir. Nem todo mundo consegue ser um jogador de equipe otimista e sem personalidade
Para mim, é melhor começar do zero. Porque posso controlar todas as variáveis, não preciso mexer na infraestrutura social e técnica existente, não preciso convencer alguém de que minhas ideias são boas e não quero gastar mais tempo com discussões e debates do que com código
A experiência de desenvolvimento solo é melhor. Porque não fico preso a política e processos sociais, e tentar ser um jogador de equipe só me trouxe sofrimento
Colaborar pode parecer oneroso e difícil, mas no fim é algo que entrega resultado, e é um tempo melhor empregado do que o gasto em projetos que serão abandonados
Há muitas reclamações de que faltam ferramentas para criar apps compatíveis com vários sistemas operacionais, mas não concordo. Basta olhar para soluções que não são Electron
O Telegram usa Qt para distribuir apps nativos de bom desempenho nos três sistemas operacionais
O Flutter compila para código nativo nos três sistemas operacionais e em mobile
O Kirigami é um framework QtQuick que permite criar apps executáveis tanto para mobile quanto para desktop
É só criar o app. Não há motivo para usar isso como desculpa para culpar o Linux
No Windows, macOS e mobile, quase não há comunidade ou projetos sérios. Não estou tentando diminuir o lado do KDE, mas essa é a realidade
A licença do Qt Quick também não é simples no iOS ou, no caminho comercial, sai muito cara
Por outro lado, grandes empresas investem no Electron e entregam ferramentas de nível de produção muito polidas, há uma comunidade enorme e um ecossistema de bibliotecas, e ele também não exige uma linguagem pouco familiar como Dart
O Telegram realmente faz um esforço além. O cliente é excelente
[0]: https://github.com/overtake/TelegramSwift
O problema é que o software OSS nem tenta direito competir com o mercado
As pessoas que usam software OSS aceitam como algo natural que a UX vai ser insuficiente, e muitas vezes isso acontece mesmo
O software proprietário comum se adapta para melhorar a experiência do usuário final porque existe o risco de o usuário não pagar, mas no OSS normalmente esse risco não existe. O open source também precisa ficar exposto ao risco vindo do usuário final
Tentei mudar isso com o Notes[1], mas percebi que é difícil viver só de anúncios. Também coloquei pagamento por recursos premium como Kanban, mas o app é FOSS completo, então qualquer um pode compilá-lo facilmente a partir do código-fonte
No meu próximo app[2], penso em mantê-lo como código fechado antes do lançamento. Não posso assumir o risco de meu esforço não ser recompensado
Acredito que, se eu puder cobrar, vou conseguir investir mais em apps focados em UX no Linux, então isso também ajudará a comunidade Linux. Talvez eu abra partes como open source, e talvez, em um futuro distante, abra tudo
[1] https://github.com/nuttyartist/notes
[2] https://www.get-plume.com
Por isso, se você não tornar o programa open source, é bem possível que perca mais do que se o tornar open source e assumir o risco de algumas pessoas não pagarem
Acho que há muito mais gente disposta a pagar para usar open source do que gente disposta a usar software proprietário
O fato de ser open source não significa que você precise distribuir o código para todo mundo; se estiver cobrando, pode entregar o código-fonte só aos usuários pagantes. Porém, eles terão o direito de modificar e redistribuir
Se a pessoa não se importa com open source, pode usar Notion ou Evernote. Se estiver procurando um app de notas open source moderno, recomendo o Logseq
Primeiro, o Notes parece bastante parecido com o Standard Notes. Se você criou o Notes usando OSS copyleft, acho difícil reclamar, a menos que pague royalties pelo trabalho de outros programadores incluído nele
Segundo, provavelmente sou um usuário atípico. Uso Linux há mais de 20 anos, mas não consigo escrever direito nem um script Bash nem uma linha de Perl
Mas justamente por não saber programar e por ser grato pelo trabalho dos outros e pela liberdade que ele proporciona, gastei muito mais dinheiro com software do que indivíduos normalmente gastam em outras plataformas
Apoio vários projetos e serviços, como Kaisen e Debian, os utilitários essenciais da FSF e Emacs, KDE, Firefox da Mozilla, Betterbird, Syncthing, LaGrange, Joplin, ClipTo, SoulSeek e envs.net
Em alguns pago anualmente, em outros mensalmente, e em outros paguei só uma vez
Quando o Standard Notes foi lançado, também paguei uma assinatura de 7 anos, mas depois de uns dois meses de uso não fiquei satisfeito e parei. Há coisas que uso bastante, como o Alacritty, mas para as quais não consegui encontrar um meio de doar, e tento minimizar esses casos
Na verdade, sinto que o macOS tem um dos piores gerenciadores de janelas entre as plataformas populares. Ele é bonito e fácil de usar, mas, para fazer qualquer coisa além do básico, você precisa de feitiços mágicos que não são descobertos naturalmente
Claro, cada um tem seu gosto
Cliquei para ver o preço premium; em termos anuais era razoável, mas só aparecia a opção de assinatura mensal, então achei difícil
Nesse tipo de app, é mais provável que eu faça uma doação do que pague por uma versão premium. O Obsidian conseguiu fazer esse modelo funcionar bem
Não acho que acesso antecipado a recursos tenha muito valor, mas muita gente pagou para apoiar o trabalho
Também acho que uma estrutura com um grande ecossistema open source em torno de um produto central fechado cria motivos para as pessoas pagarem
Acho que teria sido bom se o texto trouxesse alguns exemplos
Não me vem facilmente à cabeça alguém que esteja criando uma distribuição quando, na verdade, deveria estar criando uma aplicação. Forçando um pouco, talvez o LinuxCNC? Mas ele tem requisitos específicos de kernel, então talvez uma distribuição customizada faça mais sentido
Não entendo muito bem quando uma distribuição derivada de outra derivada é distribuída apenas por incluir um ambiente de desktop diferente
Em vez de “pare de criar distribuições Linux e crie aplicações”, acho melhor parar de ouvir pessoas que querem dizer o que se deve ou não fazer
Ainda assim, a mensagem e as informações em si são boas
Pessoalmente, eu teria dito algo como “usuários de Linux não querem mais distribuições. Querem software”. Pelo menos eu penso assim
Recentemente migrei do Mac para o Linux, porque queria usar um equipamento usado de bom desempenho como minha máquina do dia a dia
Eu já tinha instalado Linux em várias máquinas antes, mas desta vez não era só um hobby
O Ubuntu dá bom suporte ao meu hardware e aos periféricos, mas a loja de apps parece inacabada e meio encaixada à força. Ainda assim, quase tudo funciona como esperado
Quero conferir também Mint, Debian e Arch, mas fico cauteloso porque parece haver muito software escrito com Ubuntu em mente
Também existe uma versão do Mint baseada em Debian, mas ela é mais uma salvaguarda para não depender de forma crítica do lado do Ubuntu
Hoje em dia, mesmo usando uma distribuição mais incomum, isso não costuma ser um grande problema. Se o gerenciador de pacotes padrão não oferecer o app desejado, dá para usar AppImage, Flatpak ou Snap
Quando usava Arch, precisei me acostumar com as suposições que as pessoas fazem tendo o Ubuntu como referência, mas na maioria dos casos era só corrigir arquivos de configuração ou definir variáveis de ambiente
Essas são habilidades úteis e transferíveis para outros lugares
Acho que eu gostaria de ter experimentado antes
Fico pensando por que alguém faria isso. É mais difícil, e usuários de Linux não pagam por coisas que não valem a pena pagar