Qual é a diferença entre construir a partir da fonte e usar um pacote de instalação?

39

Eu queria saber: ao instalar algo, há uma maneira fácil de clicar duas vezes em um arquivo executável de instalação e, por outro lado, há uma maneira de construí-lo a partir do código-fonte.

O último, fazendo o download de um pacote de fontes, é realmente complicado.

Mas qual é a diferença fundamental entre esses dois métodos?

    
por kwagjj 27.08.2014 / 07:21

5 respostas

41

Todos os softwares são programas , que também são chamados de pacotes de código-fonte . Portanto, todos os pacotes de origem precisam ser construídos primeiro para serem executados em seu sistema.

Os pacotes binários são aqueles que já são compilados a partir de source por alguém com recursos e parâmetros gerais fornecidos no software, para que um grande número de usuários possa instalar e usar isso.

Binary packages are easy to install.
But may not have all options from the upstream package.

Portanto, para instalar a partir do código-fonte, você precisa criar o código-fonte. Isso significa que você precisa cuidar das dependências sozinho. Além disso, você precisa estar ciente de todos os recursos do pacote para que você possa criá-lo adequadamente.

Vantagens da instalação a partir da origem:

  • Você pode instalar a versão mais recente e ficar sempre atualizado, seja um patch de segurança ou um novo recurso.
  • Permite reduzir os recursos durante a instalação para atender às suas necessidades.
  • Da mesma forma, você pode adicionar alguns recursos que podem não ser fornecidos no binário.
  • Instale-o em um local que você deseja.
  • No caso de algum software, você pode fornecer suas informações específicas de hardware para uma instalação adequada.

Em suma, a instalação a partir de source oferece a opção customização pesada ao mesmo tempo que exige muito esforço, enquanto a instalação do binário é mais fácil, mas você pode não ser capaz de personalizar como desejar.

Atualizar : Adicionando o argumento relacionado à segurança nos comentários abaixo. Sim, é verdade que, durante a instalação do binário, você não tem a integridade do código-fonte. Mas então depende de onde você tem o binário. Existem muitas fontes confiáveis de onde você pode obter o binário de qualquer novo projeto, o único negativo é o tempo . Pode levar algum tempo para que o binário das atualizações ou até mesmo um novo projeto apareça em nossos repositórios confiáveis.

E, acima de tudo, sobre segurança de software, gostaria de destacar essa hilariante página no bell-labs fornecido por Joe nos comentários abaixo.

    
por 27.08.2014 / 08:14
29

Um arquivo de origem contém o código original, conforme escrito pelo desenvolvedor em qualquer idioma que ele escolher (C, C ++, Python, etc.) e é genérico. Não é específico para nenhuma distro e, em muitos casos, para qualquer sistema operacional.

Um pacote (RPM ou DEB, por exemplo) é o executável binário (ou script interpretado, etc.) pré-preparado para sua distro em particular. A tarefa de preparar o código-fonte para compilar (adicionar quaisquer patches necessários, etc.), a compilação atual, criar arquivos de configuração específicos para a distribuição, criar scripts pré e pós-instalação, etc, são feitos pelo mantenedor do pacote.

Em outras palavras, todo o trabalho do burro foi feito para você em um pacote, enquanto você precisará fazer isso sozinho se optar por instalar a partir do código-fonte.

É muito mais fácil usar um pacote em quase todos os casos, como:

  • Eles são muito mais fáceis de instalar
  • Eles são projetados especificamente para trabalhar com sua distro
  • Às vezes, eles são corrigidos pelo mantenedor do pacote para corrigir erros específicos da distribuição
  • O gerenciador de pacotes os desinstalará
  • O gerenciador de pacotes gerenciará todas as dependências para você
  • O gerenciador de pacotes cuidará das atualizações
  • Você não precisa instalar ferramentas de desenvolvedor em seu sistema (compiladores, etc.)

No entanto, às vezes, a versão empacotada é uma versão antiga ou, pior ainda, não há versão empacotada; Nesse caso, sua única opção é se compilar. Se fizer isso, você precisa considerar o seguinte:

  • Você precisará instalar todas as ferramentas do desenvolvedor em seu sistema
  • Você será responsável por verificar uma atualização e recompilação
  • Você precisará verificar se todas as dependências estão instaladas, incluindo dev packages - pode haver muitas delas.
  • Você pode precisar depurar problemas se não funcionar como esperado na sua distro

Se você estiver disposto a fazer um esforço extra, então compilar a partir da fonte pode lhe dar os benefícios de:

  • Acesso à última versão disponível
  • A opção de otimizar o processo de compilação para desempenho / estabilidade
  • Prazer!

Note que enquanto alguns pacotes pré-compilados de distros fornecem executáveis binários que estão prontos para serem instalados e executados (RPM e DEB são exemplos), outras distribuições fornecem pacotes que simplesmente automatizam o processo de compilação.

O ebuilds do Gentoo é um exemplo disso - o pacote é basicamente instruções para o gerenciador de pacotes, descrevendo como compilar e instalar o executável. Isso tem muitas das vantagens dos gerenciadores de pacotes tradicionais (atualizações automáticas, desinstalação, etc.) enquanto ainda permite ao usuário otimizar o processo de compilação ao seu gosto.

O Arch Linux tem um sistema de empacotamento onde os pacotes principais são binários, enquanto muitos pacotes extras são compilados no sistema usando PKGBUILD files.

    
por 27.08.2014 / 07:55
17

Além das outras respostas, gostaria de acrescentar algo:

Se você decidir compilar um programa sozinho, precisará pensar que a compilação não é algo que você faz apenas uma vez. Você provavelmente precisará se inscrever na lista de discussão de desenvolvimento dos aplicativos que você decidiu compilar e manter-se atualizado com as novas versões e, especialmente, com as atualizações de segurança.

Toda vez que o aplicativo é atualizado, você terá que recompilar a nova versão, apenas tenha em mente que terá que poupar um pouco do seu tempo toda semana.

Se você não puder pagar por isso, é melhor deixar que o mantenedor do pacote faça o trabalho para você.

    
por 27.08.2014 / 10:48
5

Construir a partir da fonte permite especificar a arquitetura da sua máquina exatamente. Novas CPUs têm instruções adicionais que os compiladores entendem, reduzindo um pouco o desempenho. Os pacotes pré-compilados geralmente contam com a CPU mais arcaica ainda em uso comum.

Isso é importante principalmente para aplicativos críticos para o projeto que usam muito a CPU, como ferramentas de pipeline bioinformática, por exemplo, ou ferramentas de modelagem geofísica. Esse software é executado em um ambiente muito controlado, não possui controle de acesso por conta própria, então raramente os bugs de segurança são tão urgentes que devem ser corrigidos em dias ou horas. Quase nunca precisa ser executado em uma máquina diferente com arquitetura inicialmente desconhecida.

Sim, eu sei, os computadores são muito muito muito rápidos agora e qualquer esforço ou ação que você tome é muito muito muito caro, mas no terceiro dia de sentar e esperar seu programa ser concluído (esta é a situação da qual estou falando ) tais verdades começam a parecer questionáveis.

Diferentemente, aplicativos como navegadores e similares devem ser melhor usados a partir do repositório do mantenedor (e não de alguns pacotes pré-compilados baixados), já que é muito importante mantê-los atualizados.

    
por 27.08.2014 / 14:42
0

Uma maneira de obter o melhor dos dois mundos (software atualizado, instalação / desinstalação simples, incorporar a maioria dos ajustes e adaptações de distribuição, pode otimizar os requisitos locais), enquanto os custos (tem que manter-se atualizado, assistir para bugs e patches de última hora, siga o desenvolvimento, você está sozinho com relação a correções de bugs e incompatibilidades entre versões) não pode ser mitigado (muito), é construir seus próprios pacotes, começando com os pacotes de origem do seu distribuição. Sim, é mais trabalho do que apenas construir e instalar.

    
por 29.02.2016 / 14:35