Voltemos ao nosso estudo de controle de dependências do Linux. E dessa vez iremos falar dos sistemas de gerenciamento de pacotes que possuem esse controle e os mais famosos são o dpkg/apt e o rpm/yum. Nós vamos nos concentrar nestes dois, que são os mais populares hoje em dia.
Por que hoje as distribuições estão utilizando muito mais desse tipo de controle? O foco dessas distribuições é trazer o usuário para o sistema do pingüim e uma das grandes reclamações é a instalação de programas. Certo, mas como é tratada essa facilidade e como é que se faz?
Estes sistemas tentam levar o usuário a uma experiência tranqüila com a instalação de pacotes, com sistemas one-click e sem fazer com que ele precise ir atrás de bibliotecas e mais bibliotecas para conseguir fazer seu tocador de músicas favorito rodar sem problemas, por exemplo. Isso é ótimo porque ninguém mais se preocuparia em baixar libraries.
A famíla Debian, que utiliza o sistema apt (Advanced Package Tool) para gerenciar dependências dos pacotes dpkg, que é o que realmente faz o serviço de instalação dos pacotes Debian. O dpkg é construído em C e é usado para conversar com o sistema Linux em baixo nível e só pode ser gerenciável por nós usuários através de um programa produzido em linguagem de alto nível, que possa fazer conexões remotas para baixar os arquivos e também fazer os relacionamentos das dependências dos pacotes criando os ponteiros necessários do controle de dependência de cada pacote. É aí que entra o apt ou apt-get. O apt é a ferramenta que cria os laços de dependências dos pacotes e busca esses pacotes para que eles sejam instalados. Assim, o apt é uma aplicação intermediária que gerencia os pacotes que serão instalados pelo dpkg.
Provavelmente você conhece o apt através de outros programas como Adept (Qt) ou Synaptic (GTK), que fazem o serviço do apt pra você utilizando cliques :-).
O sistema apt tem sido muito elogiado por sua facilidade de uso e a quantidade de pacotes que tem aumentado de forma impressionante, mas como software nenhum é perfeito, ele também tem muitos defeitos como por exemplo seu próprio controle super-rígido de pacotes. Quer saber como?
Imagine que você tem um sistema Debian rodando Gnome redondinho e de repente você resolve instalar um software feito em Qt do KDE, usando seu apt. Instala todas as bibliotecas que você precisa mais o programa e ele começa a rodar. Mas por algum motivo você não quer mais ele e resolve remover. Por conta do controle muito rígido do sistema, é possível que dependendo das dependências (legal essa!), ele resolve eliminar não só seu programinha, como todas as bibliotecas instaladas pra ele e mais a interface gráfica do KDE inteirinha, tornando outros programas Qt impossíveis de rodar no seu sistema. E aí? Onde foi parar a facilidade de uso?
O trabalho pelo melhor gerenciamento de pacotes dpkg tem sido intenso, porém muito modificado, principalmente pela turma do Ubuntu que é extermista na questão de facilidade de uso, porém criando vários problemas principalmente na desinstalação de programas.
Já a família RedHat, utiliza um sistema um pouco diferente chamado yum. O yum é o mesmo apt para distros RedHat. Utiliza para de fato gerenciar o sistema, o rpm que talvez seja o mais famoso entre os sistemas gerenciadores de pacotes do Linux, tudo isso porque ele foi o primeiro a nascer e oferecer essas facilidades para o usuário. Aliás o rpm é o formato base de controle de pacotes da Linux Standart Base, ou seja, ele é o padrão.
Assim como o dpkg, o rpm remove, supervisiona e possui uma estrutura interessante de controlar as versões e as dependências dos pacotes. O sistema se utiliza de uma estrutura de dados chamada lista duplamente ordenada para entender todo o emaranhado do sistema e se em algum momento a lista se quebra, o rpm vai lá e recria tudo de novo. Isso é bom porque é muito difícil ele perder o fio da meada.
O rpm tem grandes vantagens sobre o apt na sua simplicidade de funcionar. Por exemplo, se você quer instalar um pacote .rpm, ele instala, se você quiser sem as dependências (ah, isso o apt também faz), mas o barato é a desinstalação, que você pode ou não remover as dependências daquele pacote e ainda saber quais delas são utilizadas por outros pacotes e se tornar o sistema mais íntegro para não perder uma enooorme fila de pacotes que seriam desinstalados sem ter nada a ver com o programinha que você instalou e não gostou muito. Não estou defendendo o rpm, mas, por estas facilidades e mais outras, como a verificação criptografada de cada pacote antes de instalar, a inclusão do código-fonte dentro do pacote para facilitar a portabilidade, o rpm é muito elogiado, porém pelo fato da péssima documentação dos pacotes, a dificuldade de consistência do próprio rpm de uma versão para outra (o que torna muito pacote incompatível de uma versão do rpm para outra, gerando erros do tipo “han??? que é isso?”), compromete a popularidade desse gerenciador de pacotes.
É, talvez o que conta realmente para se escolher se é melhor um sistema com controle de dependências ou não é a utilidade do sistema para você, se você quer um sistema Linux para uso básico, onde você não quer ter problemas com instalações e bibliotecas para baixar, realmente vale mais a pena se você instalar uma distro que utilize o controle. Caso você prefira mexer realmente no sistema, é muito mais legal e instigante mexer a fundo nos pacotes ou mesmo nos códigos-fonte que não possuam controles de dependência fazendo como eu já falei, utilizar um caderninho com a fila de libraries que eram necessárias para tal pacote. É pura questão de necessidade.