Frage

Nach einem Linux-Kernel-Upgrade, mein VMWare Server kann nicht gestartet werden, bis mit vmware-config.pl einig Re-config zu tun (einschließlich einig Kernel-Module bauen).

Wenn ich meine Windows VMWare-Host mit dem neuesten Windows Service Pack aktualisieren, muß ich in der Regel nichts tun VMWare laufen zu lassen.

Warum VMWare funktioniert anders zwischen Linux und Windows? Ist diese erneute Kompilierung Aktion bringt keine benifits auf Linux-Plattform gegenüber Windows?

War es hilfreich?

Lösung

Go

der Linux-Kernel-Driver-Interface .

  

Dies wird geschrieben, um zu versuchen zu erklären, warum Linux, keine binäre Kernel-Schnittstelle hat noch eine stabile Kernel-Schnittstelle verfügt. Beachten Sie bitte, dass dieser Artikel den _in kernel_ Schnittstellen beschreibt, nicht die Kernel User-Space-Schnittstellen. Der Kernel auf User-Space-Schnittstelle ist die eine, die Anwendungsprogramme verwenden, die syscall-Schnittstelle. Diese Schnittstelle ist _very_ über die Zeit stabil und wird nicht brechen. Ich habe alte Programme, die auf einem bereits 0.9something Kernel gebaut wurden, die noch ganz gut auf dem neuesten 2.6 Kernel-Version funktioniert. Diese Schnittstelle ist derjenige, der Benutzer und Anwendungsprogrammierer auf stabil zählen kann.

Es spiegelt den Blick auf einen großen Teil der Linux-Kernel-Entwickler: die Freiheit in-Kernel-Implementierung Details und APIs jederzeit ändern können sie viel schneller und besser zu entwickeln.

Ohne das Versprechen von Schnittstellen im Kernel zu halten identisch von Version Version, gibt es keine Möglichkeit für einen binärer Kernel-Modul wie die VMWare zuverlässig arbeitet auf mehreren Kernel zur Verfügung.

Als Beispiel, wenn einige Strukturen auf eine neue Kernel-Version (für eine bessere Leistung oder mehr Funktionen oder was auch immer aus anderen Gründen) zu ändern, eine binäre VMWare-Modul kann katastrophale Schäden verursacht, das alte Struktur Layout. das Modul wieder Kompilieren von der Quelle wird das neue Struktur Layout erfassen und damit eine bessere Chance auf Arbeits stehen -. aber immer noch nicht zu 100%, falls Felder verschiedene Zwecke entfernt oder umbenannt oder gegeben worden

Wenn eine Funktion der Argumentliste ändert, oder umbenannt wird oder anderweitig nicht mehr verfügbar, auch nicht aus dem gleichen Quellcode neu zu kompilieren funktioniert. Das Modul wird auf den neuen Kernel anzupassen. Da jeder (soll) Quelle hat und (kann jemanden, finden) in der Lage ist, es zu ändern, zu passen. „Push Arbeit zu den Endknoten“ ist eine gemeinsame Idee sowohl in der Vernetzung und freie Software: Da die Ressourcen [am Rande] / [des Entwicklers außerhalb des Linux-Kernel] sind größer als die begrenzten Ressourcen [des Rückgrats] / [der Linux-Entwickler], das Abwägen der frühere mehr Arbeit tun, um akzeptiert wird.

Auf der anderen Seite hat Microsoft die Entscheidung getroffen, dass sie binäre Treiber-Kompatibilität, so viel wie möglich bewahren müssen - sie haben keine andere Wahl, als sie in einer eigenen Welt spielen. In gewisser Weise ist es dadurch viel einfacher für externe Entwickler, die nicht mehr ein sich bewegendes Ziel zugewandt sind, und für Endnutzer, die nie etwas ändern müssen. Auf der anderen Seite zwingt diese Microsoft Abwärtskompatibilität zu erhalten, die (bestenfalls) zeitraubend für Microsoft-Entwickler und (im schlimmsten Fall) ist ineffizient, verursacht Fehler und verhindert die weitere Fortschreiten.

Andere Tipps

Linux nicht über einen stabilen Kernel-ABI - Dinge wie die interne Aufteilung der Datenstrukturen, usw. Änderungen von Version zu Version. VMWare muss wieder aufgebaut werden, um das ABI in dem neuen Kernel zu verwenden.

Auf der anderen Seite verfügt Windows über ein sehr stabilen Kernel-ABI, die von Service Pack nicht auf Service Pack ändern.

zu bdonlan Antwort hinzuzufügen, ABI-Kompatibilität ist eine bunte Mischung. Auf der einen Seite ermöglicht es Ihnen, binären Module und Treiber zu verteilen, die mit neueren Versionen des Kernels funktioniert. Auf der anderen Seite zwingt es Kernel-Programmierer viel Glue Code hinzuzufügen Rückwärtskompatibilität zu behalten. Da Linux Open-Source ist, und weil Kernel-Entwickler selbst, ob sie sogar erlaubt , die Fähigkeit Binärmodule zu verteilen ist nicht so wichtig. Auf der anderen Seite, Linux-Kernel-Entwickler müssen sich nicht über ABI-Kompatibilität sorgen, wenn Datenstrukturen zu verändern, den Kernel zu verbessern. Auf lange Sicht führt dies in sauberer Kernel-Code.

Es ist eine Folge von Linux und Windows in unterschiedlichen kulturellen Umgebungen und Erwartungen entwickelt: http: // www.joelonsoftware.com/articles/Biculturalism.html . Kurz gesagt:. Windows konzipiert für Anwender geeignet zu sein, während Linux für Open-Source-Entwickler geeignet sein entwickelt

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top