Compilação com source code

Olá pessoal, me surgiu uma dúvida talvez mais técnica e nem sempre encontramos todas respostas na internet. Então é bom contar com pessoas que pode nos ajudar.
Quando se faz a compilação de um programa com source code e é gerado o arquivo .deb esse arquivo contém tudo que é necessário para o programa funcionar em qualquer sistema derivado Debian independente da versão se é mais antiga ou atualizado? Pode haver problemas com dependências ou só vai funcionar se instalar direto sem gerar o .deb?

1 curtida

Creio eu que o .deb puxa dependências do sistema, logo só funcionaria em sistema com tais dependências, um exemplo disso e quando você vai baixar um programa e no site fala “download para Ubuntu X ou superior”, no caso no snap ele carrega as dependências junto com o pacote e não seria necessário puxar nada do sistema.

Eu acho! kkkj

Não. Justamente por isso existem versões de PPAs e repositórios para cada versão das distros.
Resumidamente porque durante a compilação os objetos serão linkados com as versões das libs que estão no sistema naquele momento, e pode ser que uma ou outra funcionalidade ou trechos de códigos sejam ativados ou desativados dependendo das versões das libs. Se mudar, os links quebram.

Mas isso depende bastante dos dependências do pacote. Quanto mais dependências, mais “travado” fica o pacote com o sistema em que foi compilado.

Outra prova disso é que não é possível alterar a versão padrão do compilador GCC do sistema, pois tudo no sistema foi compilado com aquela versão. Quando os devs atualizam a versão do compilador, tudo tem que ser recompilado.

2 curtidas

Não, um arquivo .deb contém uma “receita” pro sistema puxar tudo que o pacote precisa

Não, geralmente pacotes Debian tem suporte futuro de 3 versões, o que significa que na melhor das hipoteses se você faz um pacote no Debian 10 ele provavelmente vai funcionar no 10, 11 e 12, a partir daí é uma incógnita.

É possível distribuir programas sem ter problemas com dependências, o nome disso é AppDir, e o ideal é gerar um AppImage a partir dele, isso vai estender o suporte a versões futuras indefinidamente

3 curtidas