Ist Linux Binary universell für alle Arten von Distributionen?

15

Ich installiere gerade den VHDL-Simulator von model sim unter Linux. Das Handbuch sagt, dass es nur RedHat oder Suse unterstützt, aber ich habe gerade versucht, es auf Ubuntu zu installieren. Und ich könnte es ohne Probleme installieren.

Bildbeschreibung hier eingeben

  • Ist Linux Binary universell für alle Arten von Distribution? Ich meine, wenn ich ein Programm für Distribution A erstelle, kann ich dann sicher sein, dass es auf jedem Linux läuft?
  • Warum sagen die meisten kommerziellen Programmanbieter, dass das Programm auf einer bestimmten Distribution läuft? (meistens Redhat und Suse, nicht Ubuntu)
Prosseek
quelle

Antworten:

15

Das sind zwei Fragen:

Ist eine Linux-Binärdatei universell für alle Distributionen?

Es hängt davon ab, ob:

  • Wenn das Programm außerhalb des Linux-Kernels nichts verwendet, ist es universell, mit Ausnahme der 32- oder 64-Bit-Frage. Eine Linux "Hallo Welt" (ein minimalistisches Programm, das nur "Hallo Welt" in ein Terminalfenster druckt) könnte wahrscheinlich unabhängig von der Distribution sein.
  • Wenn das Programm eine Nicht-Kernel-Bibliothek oder einen Nicht-Kernel-Dienst verwendet (der Großteil von Linux ist der Kernel ziemlich klein), gibt es Unterschiede, welche Bibliotheken enthalten sind, welche Versionen diese Bibliotheken sind und wo sie sich befinden. In diesem (häufigsten) Fall sind die Verteilungen also nicht gleich.

Warum geben viele kommerzielle Programme an, dass sie nur mit einer oder wenigen Distributionen funktionieren?

Weil es eine sehr große Anzahl von Linux-Distributionen gibt und niemand sein Programm auf allen testen möchte.

Ein kommerzieller Anbieter gibt normalerweise an, dass er nur die Distributionen unterstützt, auf denen er seine Software getestet hat. Es kann bei anderen Distributionen funktionieren oder auch nicht. Aus Sicht des Anbieters geht es nur darum, dass Sie sich nicht beschweren können, wenn es bei einer Distribution, die nicht unterstützt wird, nicht funktioniert.

Welche Distributionen zum Testen ausgewählt werden, hängt davon ab, was der Anbieter von seinen Kunden erwartet. Kommerzielle / professionelle Programme wählen häufig Unternehmensdistributionen aus, möglicherweise aufgrund einer Argumentation ähnlich der "Leute, die für ihr Betriebssystem bezahlt haben, zahlen mit höherer Wahrscheinlichkeit für unsere Software", möglicherweise einfach durch Zählen der Distributionen, die von ihren bestehenden Kunden verwendet werden.

Siehe auch Mark Shuttleworth (der Typ, der der Grund ist, warum wir überhaupt ein Ubuntu haben) über die Binärkompatibilität zwischen Ubuntu und Debian - Debian ist der am nächsten kommende Distributionsverwandte von Ubuntu.

jg-faustus
quelle
2

Sowohl RedHat als auch SUSE haben eine lange Linux-Unternehmenstradition und konnten diese Pakete erstellen und für sie testen. Im Laufe der Zeit wird es weitere Beispiele für Pakete geben, die auf Ubuntu getestet wurden. Tatsächlich funktionieren viele solcher Pakete seit dem letzten Jahr getestet mit Ubuntu. Da Canonical Vereinbarungen mit mehr Anbietern trifft, wird es mehr Ubuntu-zertifizierte Pakete geben.

Zu Ihrer ersten Frage: Wenn Sie ein Programm erstellen möchten, das auf allen Distributionen ausgeführt wird, erstellen Sie eine statische (im Vergleich zu einer dynamischen) ausführbare Datei. Eine statically-linkedausführbare Datei ist nicht von den Systembibliotheken abhängig. Sie kann daher zwischen Distributionen verwendet werden, sofern die Architektur (z. B. Intel / AMD) dieselbe ist.

Hier ist ein Programm,

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

Lassen Sie uns wie gewohnt kompilieren,

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

Was können Sie mit diesem VHDL-Programm machen? Holen Sie sich die .rpm-Datei und konvertieren Sie sie mit alien in .deb . Dann installieren. Wenn es funktioniert hat, bist du in Ordnung. Wenn dies nicht funktioniert, ermitteln Sie lddmit, welche Bibliotheksdatei fehlt. Erstellen Sie im schlimmsten Fall eine virtuelle Maschine für diese anderen Linux-Distributionen und führen Sie das Programm dort aus.

user4124
quelle
1

Ich antworte jg-faustus als zweites, aber Sie müssen auch vorsichtig mit dem Paketformat sein. Auch wenn die ausführbaren Dateien selbst portierbar sind und alle erforderlichen Bibliotheken vorhanden sind, speichern verschiedene Distributionen Dateien an verschiedenen Stellen und verwenden verschiedene Tools zum Verwalten installierter Pakete. Wenn der Anbieter sein Produkt als RPM-Paket paketiert, müssen Sie ein Paket wie ' alien ', um es unter einer DEB-basierten Distribution wie Ubuntu zu konvertieren und zu installieren.

Wenn sie ihre Software als Quellcode vertreiben, können Sie sie möglicherweise auch selbst kompilieren. Zu diesem Zeitpunkt wird die ausführbare Datei auf Ihr System zugeschnitten (der Ubuntu-Paketmanager weiß jedoch nichts davon).

ImaginaryRobots
quelle