iPat1337 schrieb:
Ich möchte verstehen was das Nvidia Problem unter Linux ist?
Erst mal ein Bild zum Erschlagen:
Linux Graphic Stack
Und dann noch die sehr gute Erklärung auf
Reddit.
Kurzzusammenfassung auf Deutsch:
Der Graphics-Stack besteht aus mehreren Komponenten.
Kerneltreiber zum direkten Ansprechen der Graka auf Hardwareebene:
Der ist sowohl bei AMD als auch bei Nvidia durch die Firmware zum großen Teil closed-source. Geladen werden die Blobs aus /lib/firmware. Teilweise sind da auch Implementierungen drin, die nicht als Open Source veröffentlicht werden dürfen, z.B. die
HDMI-Implementierung. Außerdem wollen die Hersteller nicht alles preisgeben.
Auch gibt's einen gewissen Qualitätsstandard für Kernelcode. AMD musste
2016 den Treibercode stark modifizieren, bevor er in den Linux-Kernel aufgenommen wurde.
Dann gibt's noch den Userspace-Teil,
der zu groß für den eigentlichen Treiber ist. Dazu gehören die Implementierungen für OpenGL, Vulkan und OpenCL. Die Open-Source-Variante ist
Mesa. Von jeher benutzt wurde die von Intel. AMD ist seit amdgpu dabei. Und hier kommt dann der Nvidia-Treiber ins Spiel. Der nutzt Mesa überhaupt nicht und stellt eigene Implementierungen zur Verfügung.
Der Nvidia-Treiber besteht somit aus dem Low-Level-Treiber und den Implementierungen im Userspace für OpenGL, Vulkan und Cuda.
Was ist jetzt das Problematische dabei
Für Hersteller, die Treiber für Windows und Linux zur Verfügung stellen, ist es am bequemsten, eine gemeinsame Code-Basis für beide Plattformen zu nutzen. Das wird allerdings von den Linux-Kernel-Maintainern zurückgewiesen (s.o. AMD). Bei Nvidia ist das der Fall. D.h. in der derzeitigen Implementierung würde der Nvidia-Treiber wahrscheinlich nicht in den Kernel aufgenommen werden.
Zwischen den Kernelmaintainern und den Nvidia-Entwicklern gibt's ein Katz- und Mausspiel. Die Kernelmaintainer ändern gern mal die Schnittstellen für die Treiberanbindung. Entsprechend müssen die Nvidia-Entwickler den Treiber immer wieder anpassen, damit der mit den aktuellen Kernel-Implementierungen läuft.
Und im Userspacebereich ist Mesa die Standardimplementierung, auf die alles aufbaut. Deswegen liefen in der Vor-AMDGPU-Zeit auch die Grafikkarten von Intel am problemlosesten unter Linux. Nvidia nutzt eine eigene Bibliothek dafür. Und die ist dann eben nicht zu 100% kompatibel zu Wayland, bzw. fehlen im Nvidia-Treiber einfach noch einige Implementierungen. Weiterhin wurde Wayland von Nvidia in der Vergangenheit sehr stiefmütterlich betrachtet. Da jetzt immer mehr Distributionen Wayland als Standard einsetzen, ist hier Nvidia ins Hintertreffen geraten.
Bei Nvidia muss man den Treiber manuell installieren. Da die Kernelmodule zur jeweiligen Kernel-Version in /lib/modules abgelegt werden und auch gegen die Kernelversion gelinkt sind, muss der Nvidia-Treiber bei jedem Kernelupdate eigentlich auch re-installiert werden. Abhilfe schafft hier
DKMS, dass sich um die automatische Re-Installation der externen Treibermodule kümmert.