Como vocês sabem, sou usuário feliz do Ubuntu, uma distribuição amigável e voltada para o usuário final e uso nos Desktop
.
Mas se tem uma coisa que me deixa muito frustado no Linux, é a tal da compilação. Talvez até mais que a falta de Drivers.
Compilação é o seguinte: você baixa os arquivos fontes de um programa, que em geral vêm compactados em formato .tar.gz, e a partir destes fontes, você cria um binário (como é chamado um programa executável compilado), que será otimizado para a configuração do seu computador
.
Não é uma tarefa para leigos e novatos, mas também não é tão complicada assim. Na maioria da vezes, se você já tiver um computador bem configurado para a compilação, basta executar os seguintes comandos dentro da pasta com o código-fonte:
$ ./configure
$ make
$ sudo make install
Um pré-requisito básico para a compilação é o pacote build-essential, que você pode instalar pelo comando:
$ sudo apt-get install build-essential
Não é qualquer programa que pode ser compilado. É necessário que o código-fonte do programa esteja disponível.
Compilar tem suas vantagens, como por exemplo:
- gerar um binário que funcione no seu processador
, seja ele de 32 ou 64 bits;
- ganho de velocidade no programa, já que ele vai ser otimizado para seu computador;
- você pode personalizar uma aplicação. Por exemplo, o AMSN é um dos clientes para Microsoft MSN Messenger mais conhecidos, e que também é conhecido por não ter a interface bonita. A partir dos fontes, eu posso compilar o AMSN para que ele fique com o anti-aliasing ativado, tornando a aplicação menos... feia.
Contudo, ela também tem suas desvantagens, que ao meu ver, ofuscam totalmente as vantagens:
- Nem sempre é fácil. Para compilar alguns programas são necessários bibliotecas especiais. Quando você usa o comando ./configure, o script se encarrega de dizer quais as bibliotecas estão faltando, mas consegui-las é problema seu. Algumas você consegue no Synaptics (Dica: sempre que um programa requisitar um pacote, instale a versão -dev), outras não. Aí você tem que procurar e se necessário compilar essas bibliotecas.
- Compilar, na maioria das vezes, é demorado. A demora em compilar um programa é proporcional ao tamanho do código-fonte e à velocidade do processador. Se você estiver compilando o Firefox e tiver um processador mais antigo como o meu (Athlon 900Mhz), sugiro que vá tomar um café ou fazer alguma atividade que não consuma memória e processamento demais, como ler ou jogar paciência.
- O ganho de velocidade nem sempre é sensível. Em alguns programas, como o Firefox, é evidente o ganho de velocidade no carregamento do programa. Já no AMSN, não é, pelo menos comigo. De uma maneira geral, o ganho de velocidade da maioria dos programas é irrelevante.
- Consome espaço em disco. Quando você vai compilar, você baixa muitas bibliotecas que, se tiver sorte, você nunca mais vai usar. Na maioria das vezes você pode removê-las facilmente pelo Synaptics, mas nem sempre, especialmente quando você instala bibliotecas compiladas. Por exemplo, ontem para instalar um aplicativo de 600kb, eu tive que baixar mais de 50mb de bibliotecas. Esse foi um dos motivos que me levaram a escrever este artigo. Além das bibliotecas, a compilação gera um código de pré-instalação que também consome espaço, mas pode ser removido, usando o comando make clean, dentro da pasta com código compilado.
- Algumas vezes não é fácil desinstalar um aplicativo compilado. Alguns programas disponibilizam uma regra para a remoção do aplicativo compilado, e você pode remover o programa usando o comando sudo make uninstall, dentro da pasta que tem o código-fonte do programa (ou seja, se você deletou o código-fonte, vai ter que baixá-lo novamente). Além do mais, se você utilizou o comando make clean para limpar os arquivos gerados pela compilação, você vai ter que compilar o código novamente, usando o comando make. Agora, se o programa não disponibilizar a regra make uninstall, o problema para desinstalar o programa é todo seu, pois terá que ser feito manualmente.
Possível solução para os problemas número 4 e 5: Você pode, ao invés de compilar o código e depois guardá-lo para eventualmente desinstalar o programa, gerar um pacote .deb utilizando o checkinstall. Para instalar este programa, basta digitar no terminal:
$ sudo apt-get install checkinstall
E, na hora de compilar, substitua sudo make install por sudo checkinstall:
$ ./configure
$ make
$ sudo checkinstall
E o que isso ai fará? ele compilará o código, gerará um arquivo .deb com o código compilado, e instalará o pacote. Depois disso, você poderá deletar o código-fonte, e poderá desinstalar o programa via Synaptics ou através do comando sudo dpkg -i pacote.
Mas o ideal mesmo...
...era que todas as distribuições padronizassem a forma de instalar os pacotes de programas. Eu acho que já falei sobre isso aqui em algum post.
Existem programas para Linux, bons e ótimos programas, que só são distribuídos sem pacotes pré-compilados, apenas através do código-fonte. E eu não posso culpar os desenvolvedores por isso. Eles teriam que gerar pacotes para uma infinidade de distribuições e os formatos que elas adotam (.rpm e .deb são os mais comuns), e às vezes até para versões de distribuições, como no caso do Fedora. Existe pacote para o FC1, FC2, FC3...
Mark Shuttkeworth, o pai do Ubuntu Linux em afirmar que as distros precisam se unir e se tornarem padronizadas. Ele sugeriu, e eu endosso, o uso do Autopackage, que torna a instalação de pacotes fácil em qualquer Desktop Linux
, e que resolveria boa parte destes problemas na distribuição de software.
Abraços a todos.