Linux binary è universale per tutti i tipi di distribuzioni?


15

Mi capita di installare il simulatore modello VHDL sim su Linux. Il manuale dice che supporta solo RedHat o Suse, ma ho appena provato a installarlo su Ubuntu. E potrei installarlo senza alcun problema.

inserisci qui la descrizione dell'immagine

  • Il binario linux è universale per tutti i tipi di distribuzione? Voglio dire, se faccio un programma sulla distribuzione A, posso essere sicuro che funzionerà su qualsiasi Linux?
  • Perché la maggior parte dei venditori di programmi commerciali afferma che il programma è in esecuzione su una distribuzione specifica? (principalmente Redhat e Suse, non ubuntu)

Risposte:


15

Questa è due domande:

Un binario Linux è universale per tutte le distribuzioni?

Dipende:

  • Se il programma non utilizza nulla al di fuori del kernel Linux, sarà universale tranne per la domanda a 32 o 64 bit. Un "ciao mondo" di Linux (un programma minimalista che stampa semplicemente "ciao mondo" su una finestra terminale) potrebbe probabilmente essere indipendente dalla distribuzione.
  • Se il programma utilizza una libreria o un servizio non kernel (che è la maggior parte di Linux, il kernel è abbastanza piccolo), ci sono differenze in quali librerie sono incluse, in quali versioni si trovano e dove si trovano. Quindi in questo caso (più comune) le distribuzioni non sono uguali.

Perché molti programmi commerciali affermano di funzionare solo su una o poche distribuzioni?

Perché esiste un numero molto grande di distribuzioni Linux e nessuno vuole testare il proprio programma su tutte.

Un fornitore commerciale dirà normalmente che supporta solo le distribuzioni su cui ha testato il proprio software. Potrebbe funzionare o meno su altre distribuzioni, dal punto di vista del fornitore il punto è che non puoi lamentarti se non funziona su una distribuzione che non supportano.

Le distribuzioni selezionate per il test dipendono da ciò che il fornitore si aspetta che i loro clienti utilizzino. I programmi commerciali / professionali generalmente raccolgono le distribuzioni aziendali, probabilmente attraverso un ragionamento simile a "le persone che hanno pagato per il loro sistema operativo hanno maggiori probabilità di pagare per il nostro software", possibilmente semplicemente contando le distribuzioni utilizzate dai loro clienti esistenti.

Vedi anche Mark Shuttleworth (il ragazzo che è il motivo per cui abbiamo un Ubuntu in primo luogo) sulla compatibilità binaria tra Ubuntu e Debian - Debian è il parente di distribuzione più vicino di Ubuntu.


2

Sia RedHat che SUSE hanno una lunga tradizione Linux aziendale e sono riusciti a produrre e testare quei pacchetti. Col passare del tempo, ci saranno più esempi di pacchetti che sono stati testati per funzionare su Ubuntu. In effetti, molti di questi pacchetti dallo scorso anno sono stati testati per funzionare con Ubuntu. Man mano che Canonical stipula accordi con più fornitori, ci saranno più pacchetti certificati Ubuntu.

Per la tua prima domanda: se vuoi creare un programma che gira su tutte le distribuzioni, crea un eseguibile statico (rispetto a quello dinamico). Un statically-linkedeseguibile non dipende dalle librerie di sistema, pertanto può funzionare tra distribuzioni, purché l'architettura (come Intel / AMD) sia la stessa.

Ecco un programma,

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

Compiliamo 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
$ 

Quindi, cosa puoi fare con quel programma VHDL? Ottieni il file .rpm e convertilo in .deb usando alien . Quindi, installa. Se ha funzionato, stai bene. Se non funziona, utilizzare lddper capire quale file di libreria manca. Nel peggiore dei casi, crea una macchina virtuale per quelle altre distribuzioni Linux ed esegui lì il programma.


1

Ho una seconda risposta di jg-faustus, ma devi anche stare attento al formato del pacchetto. Anche se gli stessi eseguibili sono portatili e sono presenti tutte le librerie necessarie, diverse distribuzioni posizionano i file in luoghi diversi e utilizzano strumenti diversi per gestire i pacchetti installati. Se il fornitore confeziona il suo prodotto come pacchetto RPM, dovrai utilizzare un pacchetto come ' alien 'per convertirlo e installarlo sotto una distribuzione basata su DEB come Ubuntu.

Se distribuiscono il loro software come codice sorgente, allora potresti anche essere in grado di compilarlo da solo, a quel punto l'eseguibile sarà personalizzato per il tuo sistema specifico (ma il gestore dei pacchetti ubuntu non lo saprà).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.