O assunto é velho, mas é um dos que eu gosto. Saiu hoje no Br-Linux uma matéria sobre como o excesso de distribuições prejudica o Linux e nos inúmeros comentários surgiu uma discussão correlata, sobre a falta de padronização. Como já falei tudo que tinha para falar sobre o “excesso” de distribuições vou me ater a discussão sobre padronização.
Mito 1 – É preciso um sistema de empacotamento único
Na verdade não. Já usei rpm (3 sabores), deb (2 sabores), tgz e hoje uso pkg.tar.xz e devo ter esquecido um ou dois tipos de pacotes. Os pacotes contém arquivos binários compilados dinamicamente e arquivos de configuração que definem as suas dependências e eventuais scripts de configuração.
Os binários rodam em qualquer distribuição Linux que atenda às dependências e seja da mesma arquitetura. Nisso aliás se baseia o alien que converte rpm e deb.
Aliás, muitas bibliotecas mantém compatibilidade binária com versões anteriores fazendo com que um pacote construído com uma versão antrior continue funcionando na nova. Nada me impede de descompactar um pacote deb feito para o Ubuntu e usar os binários no meu Arch Linux atual.
Os arquivos de configuração podem ser facilmente convertidos de um sistema de pacotes para outro por scripts automáticos. Os scripts de configuração, exceto em pacotes básicos de sistema também costumam funcionar em qualquer distribuição com nenhuma alteração ou alterações mínimas.
O único padrão realmente necessário é na árvore de diretórios. É a falta de padronização na árvore de diretórios que impede a existência de pacotes universais ou facilmente conversíveis, não a existência de vários padrões de empacotamento.
Um padrão sobre diretórios para servidores, serviços e bibliotecas adotado por todas as distribuições permitiria que um programa precisasse ser compilado uma vez para cada arquitetura e empacotado quantas vezes se quiser. É claro que um programa compilado em um Arch atualizado vai resultar em um pacote incompatível com um Debian stable de um ano atrás, mas isto são pontos fora da média. Boa parte das distribuições sofre grandes atualizações a cada seis meses, o que é um delay aceitável.
Quanto ao aprendizado de uso do gerenciador de pacotes em si, que atire a primeira pedra o “usuário comum” que gerencia pacotes via linha de comando. Todas as principais distros tem GUIs muito boas para isso há pelo menos dez anos. GUIs auto explicativas.
Mito 2 – É preciso uma API oficial
Bem, se fosse assim estaríamos até hoje com sistemas péssimos. Particularmente acho que o trabalho necessário para fazer o toolkit Motif, que era padrão quando do lançamento do Linux, atingir a maturidade de um wxWindows, Qt ou GKT é muito maior que o necessário para criar esses toolkits. Isso para falar de toolkits. O HAL está sendo abandonado por ser uma base de código monolítica e de difícil manutenção em favor do DBus, o OSS foi abandonado por ter uma baixa qualidade a favor do ALSA que hoje em dia está perdendo terreno para o OSS4. Talvez no futuro vejamos o GCC deixar de ser o compilador padrão e o Clang assumir este posto.
Manter uma única API é limitar a evolução. Certas coisas não podem ser realizadas de modo incremental em APIs antigas. É preciso criar algo novo.
Alguns dos argumentos a favor de uma API única são facilitar a vida dos desenvolvedores. Bem, quem usa este argumento provavelmente não desenvolve para Linux, senão saberia que há várias camadas de abstração extremamente eficientes e produtivas. Queria saber quem, em 2010 escreve um player de música que use streams diretos para a placa de som através de ALSA ou OSS. Todos os projetos recentes que já vi usam GStreamer, Phonom, Pulse Audio ou outra API de alto nível que tornam a base irrelevante. Essas APIs de alto nível não precisam ser compatíveis entre si, já que é perfeitamente possível e funcional ter todas elas instaladas e rodando no mesmo computador e sua instalação é indolor em qualquer sistema que use um gerenciador de pacotes com controle de dependências.
Certamente os desenvolvedores tem um certo retrabalho já que temos várias APIs com funções razoavelmente parecidas, mas faz parte do processo de desenvolvimento. E todos que tenho visto reclamar do excesso de APIs NÃO programam APIs, mas apenas as usam, portanto não considero que essa reclamação tenha a devida propriedade.
Mito 3 – É preciso um ambiente gráfico padrão
Existe uma certa crença de que se houvesse apenas um ambiente gráfico este seria a sétima maravilha do mundo. No entanto o que percebo é os vários ambientes gráficos existentes tem objetivos irreconciliáveis e o desenvolvimento de um mega merge é absolutamente impossível e um projeto único iria ter tantas divergências internas que não se sustentaria a longo prazo.
A parte as flamewars sobre qual o melhor ambiente, temos hoje 5 grandes opções de ambientes desktop e dezenas de gerenciadores de janelas. XFCE, LXDE, Enlightment, GNOME e KDE tem objetivos e visões irreconciliáveis, visões diferentes de usabilidade e sobre quais recursos são fundamentais. Se baseiam em tecnologias diferentes que suportam recursos diferentes que tem objetivos diferentes.
Falando sobre o usuário e sua escolha entre 5 ambientes principais, tenho a dizer que todos eles são soluções razoavelmente maduras que vão ser boas o bastante para a grande maioria dos usuários, exceto talvez LXDE e Enlightment que curiosamente são os menos usados dos cinco. É importante também notar que o usuário não usa apenas um ambiente gráfico, mas uma distribuição que vem com um conjunto de aplicativos satisfatório para a maioria das atividades, portanto o tal do “usuário comum” vai instalar outro ambiente gráfico apenas se tiver curiosidade ou não estiver satisfeito com o padrão em um processo saudável de aprendizado.