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

46

Eu estava pensando: 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, baixar um pacote de fontes, é realmente complicado.

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

kwagjj
fonte

Respostas:

44

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

Os pacotes binários já são criados a partir da fonte por alguém com recursos e parâmetros gerais fornecidos no software, para que um grande número de usuários possa instalá-lo e usá-lo.

Pacotes binários são fáceis de instalar .
Mas pode não ter todas as opções do pacote upstream.

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 por conta própria. Além disso, você precisa estar ciente de todos os recursos do pacote para poder construí-lo adequadamente.

Vantagens de instalar a partir da fonte:

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

Em resumo, a instalação a partir do código - fonte oferece uma opção de personalização pesada , ao mesmo tempo em que exige muito esforço, enquanto a instalação a partir do binário é mais fácil, mas você pode não conseguir personalizar o que deseja.

Atualização : 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ê obteve o binário. Existem muitas fontes confiáveis ​​de onde você pode obter o binário de qualquer novo projeto, o único aspecto negativo é o tempo . Pode levar algum tempo até que o binário das atualizações ou até um novo projeto apareçam em nossos repositórios confiáveis.

E, acima de tudo, sobre segurança de software, gostaria de destacar esta página hilária nos laboratórios da Bell fornecidos por Joe nos comentários abaixo.

iniciante
fonte
4
A fonte também pode ser compilada de maneira otimizada para o seu sistema (o que .. pode não ser uma boa ideia, pois o material compilado é "específico" para o sistema e pode não funcionar em um backup ... mas você tem o fonte, você pode recompilar (se tiver tempo para isso))
Olivier Dulac
Isso depende se você possui esse "sistema de backup". Se você está apenas fazendo alguma pesquisa, normalmente não.
h22 27/08/14
1
Para o hiperparanóide, uma vantagem da instalação a partir do código-fonte é a segurança e a capacidade de revisar o código, se você puder e quiser: ao instalar a partir do código-fonte, você sabe que possui um binário desse código-fonte e não um binário com modificações desconhecidas (supondo que você confie na fonte em primeiro lugar).
LawrenceC
6
@ultrasawblade - Você obviamente não é paranóico o suficiente! <G> - consulte cm.bell-labs.com/who/ken/trust.html para obter o monty completo.
Joe
32

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 distribuição 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 distribuição específica. A tarefa de preparar a fonte para a compilação (adicionando as correções necessárias, etc.), a compilação real, a criação de arquivos de configuração específicos da distribuição, a criação de scripts de pré e pós-instalação, etc. são todos executados pelo mantenedor do pacote.

Em outras palavras, todo o trabalho de 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 distribuição
  • À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 no seu sistema (compiladores, make etc)

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

  • Você precisará instalar todas as ferramentas de desenvolvedor em seu sistema
  • Você será responsável por verificar uma atualização e recompilar
  • Você precisará garantir que todas as dependências estejam instaladas, incluindo devpacotes - pode haver muitas delas.
  • Pode ser necessário depurar problemas se não funcionar como esperado em sua distribuição

Se você estiver disposto a fazer um esforço extra, a compilação a partir da fonte poderá fornecer os benefícios de:

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

Observe que, embora alguns pacotes pré-criados de distros forneçam executáveis ​​binários prontos para instalação e execução (RPM e DEB são exemplos), outras distros fornecem pacotes que simplesmente automatizam o processo de compilação.

O Gentoo's ebuildsé 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 possui um sistema de empacotamento em que os pacotes principais são binários, enquanto muitos pacotes extras são compilados no sistema usando PKGBUILDarquivos.

garethTheRed
fonte
19

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

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

Toda vez que o aplicativo é atualizado, você terá que recompilar a nova versão, portanto, lembre-se de que você terá que gastar um pouco do seu tempo toda semana.

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

Daniel
fonte
6

Construir a partir da fonte permite especificar a arquitetura exatamente da sua máquina. As novas CPUs possuem instruções adicionais que os compiladores entendem, reduzindo um pouco o desempenho. Pacotes pré-compilação geralmente contam com a CPU mais arcaica ainda em uso comum.

Isso é importante principalmente para aplicativos críticos ao 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; portanto, raramente há bugs de segurança tão urgentes que precisam ser corrigidos em dias ou horas. Quase nunca é necessário rodar em uma máquina diferente com arquitetura inicialmente desconhecida.

Sim, eu sabia, os computadores são muito, muito, muito rápidos agora e todos os esforços ou ações que você executa são muito, muito, muito caros, mas no terceiro dia de espera e espera que seu programa seja concluído (esta é a situação da qual estou falando), tais verdades comece a parecer questionável.

Diferentemente, aplicativos como navegadores e similares devem ser melhor utilizados no repositório de mantenedores (e não em alguns pacotes pré-criados baixados), pois é muito importante mantê-los atualizados.

h22
fonte
Onde esses ajustes para explorar sua CPU ao máximo fazem a diferença (isso é relevante apenas em algum código muito especializado; o ditado é que 95% do tempo é gasto em 5% do código, para otimizar os outros 95% não faz diferença perceptível; e a maioria dos programas atuais aguarda 99% do tempo para que o usuário decida), os programas oferecem código diferente a ser ativado, dependendo da CPU na inicialização.
vonbrand
0

Uma maneira de obter o melhor dos dois mundos (software atualizado, instalação / desinstalação simples, incorporar a maioria dos ajustes de distribuição e adaptações, pode otimizar os requisitos locais), enquanto os custos (precisa se manter atualizado, cuidado com os bugs) e correções de última hora, siga o desenvolvimento, você está por conta própria com relação a correções de bugs e incompatibilidades entre versões) não podem ser atenuadas (muito), é criar seus próprios pacotes, começando pelos pacotes de origem da sua distribuição. Sim, é mais trabalho do que apenas construir e instalar.

vonbrand
fonte
1
Parece uma resposta interessante ("o melhor dos dois mundo"), mas não consigo entender bem o que você quer dizer aqui: "é criar seus próprios pacotes, começando pelos pacotes de origem da sua distribuição". Você se importaria em reformular / explicar?
Jan Żankowski