O binário do linux é universal para todos os tipos de distribuições?

15

Por acaso instalo o modelo sim VHDL simulator no Linux. O manual diz que apenas suporta RedHat ou Suse, mas eu apenas tentei instalá-lo no Ubuntu. E, eu poderia instalá-lo sem nenhum problema.

insira a descrição da imagem aqui

  • O binário do linux é universal para todos os tipos de distribuição? Quero dizer, se eu criar um programa de distrubuição A, posso ter certeza de que ele será executado em qualquer Linux?
  • Por que a maioria dos fornecedores de programas comerciais afirma que o programa está sendo executado em uma distribuição específica? (principalmente Redhat e Suse, não ubuntu)
prosseek
fonte

Respostas:

15

Estas são duas perguntas:

Um binário Linux é universal para todas as distribuições?

Depende:

  • Se o programa não estiver usando nada fora do kernel do Linux, será universal, exceto na questão de 32 ou 64 bits. Um "olá mundo" do Linux (um programa minimalista que apenas imprime "olá mundo" em uma janela de terminal) provavelmente poderia ser independente da distribuição.
  • Se o programa estiver usando qualquer serviço ou biblioteca que não seja do kernel (que é a maior parte do Linux, o kernel é bastante pequeno), há diferenças nas bibliotecas incluídas, em quais versões elas estão e onde estão localizadas. Portanto, neste caso (mais comum), as distribuições não são iguais.

Por que muitos programas comerciais dizem que trabalham apenas em uma ou poucas distribuições?

Porque existe um número muito grande de distribuições Linux , e ninguém quer testar seu programa em todas elas.

Um fornecedor comercial normalmente diz que suporta apenas as distribuições em que testou seu software. Pode ou não funcionar em outras distribuições, do ponto de vista do fornecedor, o ponto é que você não pode reclamar se não funcionar em uma distribuição que não oferece suporte.

Quais distribuições são selecionadas para teste depende do que o fornecedor espera que seus clientes usem. Os programas comerciais / profissionais geralmente escolhem distribuições empresariais, possivelmente por um raciocínio semelhante ao de "pessoas que pagaram por seu sistema operacional têm mais probabilidade de pagar por nosso software", possivelmente simplesmente contando as distribuições usadas por seus clientes existentes.

Veja também Mark Shuttleworth (o cara que é o motivo de termos um Ubuntu em primeiro lugar) sobre compatibilidade binária entre Ubuntu e Debian - o Debian é o parente de distribuição mais próximo do Ubuntu.

jg-faustus
fonte
2

O RedHat e o SUSE têm longa tradição no Linux corporativo e conseguiram produzir e testar esses pacotes. Com o passar do tempo, haverá mais exemplos de pacotes que foram testados para funcionar no Ubuntu. De fato, muitos desses pacotes desde o ano passado foram testados para funcionar com o Ubuntu. Como a Canonical faz acordos com mais fornecedores, haverá mais pacotes certificados pelo Ubuntu.

Para sua primeira pergunta: se você deseja criar um programa que seja executado em todas as distribuições, crie um executável estático (comparado ao dinâmico). Um statically-linkedexecutável não depende das bibliotecas do sistema; portanto, pode funcionar entre distribuições, desde que a arquitetura (como Intel / AMD) seja a mesma.

Aqui está um programa,

int main(void)
{ 
  printf("Hello, World!\n");
  return 0;
}

Vamos compilar normalmente,

$ gcc helloworld.c -o helloworld
$ ./helloworld
Hello, World!
$ ldd helloworld
    libc.so.6 => /lib/libc.so.6 (0x00007f3cc3481000)
...
$ 
$ gcc helloworld.c -static -o helloworld_static
$ ./helloworld
Hello, World!
$ ldd helloworld_static
    not a dynamic executable
$ 

Então, o que você pode fazer com esse programa VHDL? Obtenha o arquivo .rpm e converta-o em .deb usando o alien . Então instale. Se funcionou, você está bem. Se não funcionar, use lddpara descobrir qual arquivo de biblioteca está faltando. No pior cenário, crie uma máquina virtual para essas outras distribuições Linux e execute o programa lá.

user4124
fonte
1

Eu respondo a segunda resposta de jg-faustus, mas você também precisa ter cuidado com o formato do pacote. Mesmo que os executáveis ​​sejam portáteis e todas as bibliotecas necessárias estejam presentes, diferentes distribuições colocam arquivos em locais diferentes e usam ferramentas diferentes para gerenciar pacotes instalados.Se o fornecedor empacota seu produto como um pacote RPM, você precisará usar um pacote como ' alien 'para convertê-lo e instalá-lo em uma distribuição baseada em DEB como o Ubuntu.

Se eles distribuírem o software como código-fonte, você também poderá compilá-lo, quando o executável será adaptado para o seu sistema específico (mas o gerenciador de pacotes do ubuntu não o saberá).

ImaginaryRobots
fonte