O Linux é universal para todos os tipos de distribuições?

14

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

  • O Linux é universal para todos os tipos de distribuição? Quero dizer, se eu fizer um programa na distrubuição A, posso ter certeza de que ele rodará em qualquer linux?
  • Por que a maioria dos fornecedores de programas comerciais diz que o programa está sendo executado em distribuição específica? (principalmente Redhat e Suse, não Ubuntu)
por prosseek 29.01.2011 / 03:47

3 respostas

15

Estas são duas perguntas:

É um universal binário do Linux para todas as distribuições?

Depende:

  • Se o programa não estiver usando nada fora do kernel do Linux, ele será universal, exceto pela pergunta de 32 ou 64 bits. Um Linux "hello world" (um programa minimalista que apenas imprime "hello world" a uma janela de terminal) provavelmente poderia ser independente da distribuição.
  • Se o programa estiver usando qualquer biblioteca ou serviço não-kernel (que é a maior parte do Linux, o kernel é bem pequeno), existem diferenças em quais bibliotecas estão incluídas, quais versões essas bibliotecas estão e onde elas estão localizadas. Então, neste (mais comum) as distribuições de casos não são iguais.

Por que muitos programas comerciais dizem que eles só funcionam em uma ou algumas distribuições?

Porque há um grande número de distribuições Linux , e ninguém quer testar o programa em todos eles.

Um fornecedor comercial normalmente diz que suporta apenas as distribuições em que testou o 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 eles não suportam.

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 corporativas, possivelmente por meio de um raciocínio semelhante ao de que "as pessoas que pagam pelo sistema operacional têm maior probabilidade de pagar pelo software", possivelmente 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) em parente de distribuição mais próximo do Ubuntu .

    
por j-g-faustus 29.01.2011 / 06:21
1

Eu respondo segundo j-g-faustus, mas você também precisa ter cuidado com o formato do pacote. Mesmo que os próprios executáveis sejam portáteis e todas as bibliotecas necessárias estejam presentes, diferentes distros colocam arquivos em locais diferentes e usam diferentes ferramentas para gerenciar pacotes instalados. Se o fornecedor empacota seu produto como um pacote RPM, você terá que usar um pacote como ' alien 'para converter e instalá-lo em uma distribuição baseada em DEB como o Ubuntu.

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

    
por ImaginaryRobots 29.01.2011 / 22:35
1

Tanto o RedHat quanto o SUSE têm uma longa tradição de Linux corporativo e conseguiram que esses pacotes fossem produzidos e testados para eles. Com o passar do tempo, haverá mais exemplos de pacotes que foram testados para funcionar no Ubuntu. Na verdade, muitos desses pacotes desde o ano passado vêm 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ê quiser criar um programa que seja executado em todas as distribuições, crie um executável estático (comparado a dinâmico). Um executável statically-linked 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 o programa VHDL? Obtenha o arquivo .rpm e converta-o em .deb usando alien . Então, instale. Se funcionou, você está bem. Se isso não funcionar, use ldd para descobrir qual arquivo de biblioteca está faltando. Na pior das hipóteses, crie uma máquina virtual para essas outras distribuições Linux e execute o programa lá.

    
por user4124 29.01.2011 / 22:40

Tags