Go lesen The Linux Kernel Driver Interface.
Dies wird geschrieben, um zu erklären, warum Linux weder eine binäre Kernel-Schnittstelle noch eine stabile Kernel-Schnittstelle hat. Bitte beachten Sie, dass dieser Artikel die Kernel-Interfaces von _in kernel_ beschreibt, nicht die Benutzeroberflächen von Kernel zu Userspace. Die Kernel-zu-Userspace-Schnittstelle ist diejenige, die von Anwendungsprogrammen verwendet wird, die Syscall-Schnittstelle. Diese Schnittstelle ist über die Zeit stabil und bricht nicht. Ich habe alte Programme, die auf einem Kernel vor 0.9 gebaut wurden, der immer noch gut funktioniert auf dem neuesten 2.6 Kernel-Release. Diese Schnittstelle ist diejenige, auf die sich Benutzer und Anwendungsprogrammierer verlassen können, die stabil ist.
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 entwickeln.
Ohne das Versprechen, die Kernel-Schnittstellen von Release zu Release identisch zu halten, gibt es keine Möglichkeit, dass ein Binärkernel-Modul wie VMWare zuverlässig auf mehreren Kernen arbeitet.
Wenn sich beispielsweise einige Strukturen bei einer neuen Kernel-Version ändern (für bessere Leistung oder mehr Funktionen oder andere Gründe), kann ein binäres VMWare-Modul unter Verwendung des alten Strukturlayouts katastrophale Schäden verursachen. Wenn das Modul erneut aus der Quelle kompiliert wird, wird das neue Strukturlayout erfasst, und es besteht somit eine bessere Chance zu arbeiten - wenn auch nicht zu 100%, wenn Felder entfernt oder umbenannt wurden oder andere Zwecke erfüllt wurden.
Wenn eine Funktion ihre Argumentliste ändert oder umbenannt wird oder auf andere Weise nicht mehr verfügbar ist, funktioniert nicht einmal das erneute Kompilieren aus demselben Quellcode. Das Modul muss sich an den neuen Kernel anpassen. Da jeder (sollte) eine Quelle haben sollte (und jemanden finden kann), der in der Lage ist, ihn zu modifizieren."Push work to the end-nodes" ist eine gängige Idee sowohl bei der Vernetzung als auch bei freier Software: da die Ressourcen [am Rande]/[der Entwickler außerhalb des Linux-Kernels] größer sind als die begrenzten Ressourcen [des Backbones]/[der Linux-Entwickler], der Kompromiss, um die ersteren machen mehr von der Arbeit wird akzeptiert.
Auf der anderen Seite hat Microsoft die Entscheidung getroffen, dass sie die Kompatibilität der Binärtreiber so weit wie möglich erhalten müssen - sie haben keine Wahl, da sie in einer proprietären Welt spielen. In gewisser Weise ist dies für externe Entwickler, die nicht mehr mit einem beweglichen Ziel konfrontiert sind, und für Endbenutzer, die nie etwas ändern müssen, viel einfacher. Auf der anderen Seite zwingt dies Microsoft zu Abwärtskompatibilität, die (bestenfalls) zeitaufwendig für die Entwickler von Microsoft ist und (im schlimmsten Fall) ineffizient ist, Fehler verursacht und den Fortschritt verhindert.