2016-04-16 5 views
2

Es gibt viele Linux-Distributionen. Sie alle haben jedoch eines gemeinsam: den Kernel. Und Linux-Programme laufen über alle von ihnen. Wenn ich eine minimalistische Distribution vom Kernel mache, werden dann aktuelle Programme für Linux laufen? Was definiert die Unterschiede der Distributionen? Ich bin ein Anfänger auf diesem Zeug, geh nicht hart, wenn es eine dumme Frage ist. DankeUnterstützt der Linux-Kernel aktuelle Programme?

+0

Je nachdem, wie Sie Ihren Code entwerfen, kann er kompilierbar sein und in den meisten Architekturen und sogar in verschiedenen Betriebssystemen funktionieren. Wenn eine Binärdatei plattformübergreifend funktioniert, ist das eine andere Geschichte. Soweit ich weiß, sollte Ihre Anwendung keine Abhängigkeiten von Bibliotheken haben, die nicht Teil des Standards sind, sollte es in jeder Version von Linux funktionieren, solange Sie auf der gleichen Architektur sind (zB X86 zum Beispiel) aber ich kann mich irren. – Havenard

Antwort

1

Ja, mit Vorbehalten.

Sie müssen sicherstellen, dass Sie volle C-Unterstützung haben und damit meine ich etwas wie glibc installiert oder installierbar oder Sie können keine Programme für Ihre minimale Installation erstellen. Wenn Sie C-Programme unter Linux installieren und kompilieren können, können Sie praktisch alles andere von Grund auf neu erstellen.

Wenn Sie Binärdateien herunterladen und ausführen möchten, ist dies anders, die Binärdateien benötigen wahrscheinlich gemeinsame Bibliotheken, die sie auf den Systemen haben würden, für die sie erstellt wurden. Wenn Sie diese Bibliotheken nicht haben, können Sie die vorhandenen Binärdateien, die Sie online finden, nicht ausführen.

Was sind die Unterschiede der Verteilungen?

In jeder Distribution gibt es viele definierende Faktoren. Wenn wir ignorieren Dinge wie ...

  1. Licensing dh Redhat vs Debian
  2. Stance auf Dinge wie GPL/BSD/unfreie
  3. Veröffentlichungspläne Debian Vs Ubuntu
  4. Zielgruppe also Ubuntu vs Debian

Ich denke, der größte bestimmende Faktor ist die Paketverwaltung, dh yum/rpm vs apt/dpkg und wie die Basiskonfiguration auf der Maschine verwaltet wird. Dies ist sicherlich die Sache, die ich am meisten benutze und am meisten vermisse, wenn ich die Verteilung ändere. Der Kernel selbst ist sehr selten in meinem Kopf, was zum Teil ein großer Teil des Erfolgs ist.

Die meisten Leute beginnen mit etwas wie ISO Linux und erhalten eine bootfähige CD, aber selbst dann wählen Sie normalerweise eine Basisverteilung. Wenn Sie eine Basisverteilung erstellen möchten, ist das eine Menge Arbeit. Werfen Sie einen Blick auf diese große Infografik des Linux-Stammbaum

https://en.wikipedia.org/wiki/List_of_Linux_distributions#/media/File:Linux_Distribution_Timeline.svg

Wenn Sie auf Debian/Ubuntu die Menge der Infrastruktur sehen diese Distributionen haben Setup ziemlich schwankend ist. Sie haben Millionen, vielleicht sogar Milliarden von Codezeilen, die alle auf ihren unterstützten Versionen laufen. Sie könnten ein binäres von einem von ihnen nehmen können und es auf Redhat laufen, aber es ist wahrscheinlich, es sei denn, die Planeten in Ausrichtung sind zum Scheitern verurteilt usw. Einige Leute denken, das ist eigentlich eine schlechte Sache

https://en.wikipedia.org/wiki/Ingo_Moln%C3%A1r#Quotes

der grundlegende Fehler des freien Linux-Desktop ist, dass es, pervers, nicht frei genug ...

Desktop-Linux-Distributionen zu versuchen, „eigene“ 20 tausend
Pakete Anwendung, bestehend aus mehr als eine Milliarde Zeilen Code und haben parallele, meist geschlossene Ökosysteme um sie herum geschaffen ...Das Linux-Paket Management-Methode System funktioniert ziemlich gut im Unternehmen (das ist eine hierarchische, zentral geplante Organisation in den meisten Fällen), aber Desktop-Linux auf der anderen Seite gestoppt Skalierung vor 10 Jahren, bei der 1000 Pakete begrenzen ...

1

Wenn ich eine minimalistische Verteilung aus dem Kernel zu machen, werden für Linux läuft laufende Programme gemacht?

Sehr wenige Programme verwenden den Kernel direkt. Sie benötigen auch eine libc, die für die eigentliche Implementierung der meisten C-Routinen verantwortlich ist, die entweder von den Programmen selbst oder von den VMs, die ihren Code ausführen, verwendet werden.

Es ist möglich, die libc mit dem Programm statisch zu verknüpfen, aber dies führt sowohl zu einer Vergrößerung des Programms als auch zu einer Behebung von Sicherheitsproblemen in den verbundenen Bibliotheken, ohne das gesamte Programm neu zu erstellen.

1

Nun, bestimmte Programme erfordern eine bestimmte Version des Kernels. Normalerweise fungieren diese Programme als "Treiber" für den Rest des Systems (z. B. nvidia-eigene Treiber: einige von ihnen wirken im Kernelraum, während andere im Benutzerraum laufen, aber dieses sehr spezifische Kernelmodul und somit diesen sehr spezifischen Kernel benötigen).

Ein weniger strenger Fall ist, wenn ein Programm eine bestimmte Fähigkeit vom Kernel fordert. Zum Beispiel verlassen sich fast alle modernen Linux-Virtualisierungssysteme auf die Funktion cgroups. Um sie zu verwenden, müssen Sie also einen einigermaßen frischen Kernel haben.

Trotzdem ist eine Menge Kernel-API stabil, so dass Sie sich darauf verlassen können. Aber normalerweise rufen Programme Kernel-Routinen nicht direkt auf. Eine typische Methode zur Verwendung einer Kernelfunktion ist das Aufrufen einer entsprechenden Bibliotheksroutine, die die Kernel-API umschließt und nutzt. Die wichtigste, grundlegendste Bibliothek dieser Art ist libc.

Technisch Programme kompiliert für eine Version von libc (sowie andere gemeinsam genutzte Bibliotheken) können mit leicht unterschiedlichen Versionen von Korrespondenzbibliotheken verwendet werden. Zum Beispiel verwenden viele Leute Skype, das für SuSE in völlig verschiedenen Linux-Distributionen kompiliert wurde. Skype ist eine ziemlich komplexe Anwendung, in der viele Bibliotheken eingebunden sind, und trotzdem funktioniert es ohne nennenswerte Probleme. So bei vielen anderen proprietären Programmen, die für eine bestimmte Distribution oder gar für eine bestimmte Installation nicht kompiliert werden konnten. Aber manchmal passiert Scheiße. Diese binären Inkompatibilitäten sind ziemlich selten, aber sie kommen von Zeit zu Zeit vor.