Wir alle wissen, dass Treiber-Setups scheiße sind und das System mit Müll verkleben. Aber wieso eigentlich?
Eine kleine Analyse des AMD-Mainboard-Treiber-Setups.
Download der
AMD Chipset Drivers 2.04.04.111
Das Paket ist 50,2 MiB groß. Es kommt mit Klickibunti-Oberfläche und installiert Unmengen von Scheiße auf dem System.
Wie kommen wir an die eigentlichen Treiber?
Erstmal nutzen wir 7-Zip, um die EXE zu öffnen. Dabei sehen wir, dass die Oberfläche mit Qt gemacht wurde. Der Ordner
Qt_Dependancies (Nur echt mit Rechtschreibfehler!) bringt über 60 MiB an Code mit. Und da alles mit Visual Studio kompiliert wurde, muss auch die Visual C++-Redistributable beigelegt werden (14 MiB).
Also 75 MiB nur für die Klickibunti-Oberfläche.
Wir gehen in den Ordner
Packages und finden dort
AMD_Chipset_Drivers.exe. Ein Setup im Setup. Und dort eine weitere Kopie der Visual C++-Redistributable von vorhin; plus eine 64-Bit-Version.
Das Setup im Setup (AMD_Chipset_Drivers.exe) extrahieren wir via 7-Zip.
Die Datei lässt sich nicht einfach erneut mit 7-Zip extrahieren; das ist was Kompiliertes. Wir durchsuchen die Datei im Hex-Editor nach Strings und finden Hinweise auf ein InstallShield-Kompilat.
Für InstallShield gibt es
ISx, das ich nur empfehlen kann. Drag & Drop auf
isx.exe extrahiert das Setup im Setup.
Wir finden eine Datei
AMD_Chipset_Drivers.msi, das
Setup im Setup im Setup. Wie man MSI-Dateien mit Windows-Bordmitteln extrahiert, habe ich
hier beschrieben.
Wir öffnen also eine Befehlszeile und führen
msiexec /a AMD_Chipset_Drivers.msi aus. Wir geben einen Ordner an, in den wir das Setup extrahiert haben wollen.
In diesen Ordner wurden nun 22 weitere MSI-Dateien extrahiert, die
Setups im Setup im Setup im Setup. Bei jeder MSI-Datei handelt es sich um einen einzelnen Treiber – USB-Controller, GPIO-Treiber, usw. Wir nähern uns des Pudels Kern:
Wenn ich diesen Ordner packe, komme ich auf 3,3 MiB.
So groß sollte der Download sein: Treiber x86 + x64 + alle digitalen Signaturen + eine Setup-GUI für DAUs. 3,3 MiB. Die anderen 46,9 MiB sind Bloat.
Aber Moment! Warum sind da überhaupt MSI-Dateien?! Gibt es eigentlich
irgendeinen Grund, warum Treiber via Windows Installer installiert werden sollten?! Das Deinstallieren und Backups früherer Treiberversionen behandelt doch schon der Windows Driver Store; MSI ist doch bloß eine weitere überflüssige Abstraktionsschicht! INF-Dateien ftw!
Also schauen wir mal, wo die Treiber
wirklich liegen. In den Unterordnern natürlich.
GPIO2 Driver … hey,
noch ein Setup! Die MSI-Dateien rufen bloß
dpinst.exe oder
dpinst64.exe auf.
Setups in Setups im Setup im Setup im Setup!
Und die wiederum holen sich die eigentlichen Treiber aus dem
WT/x64-Verzeichnis. Fairerweise zählen wir die x86-Versionen mit dazu und kommen für alle Treiber zusammen auf eine Größe von … 10 MiB extrahiert und 2 MiB komprimiert.
So groß sind die rohen AMD-Chipset-Treiber für x86 plus x64 plus Readmes und Release Notes, als komprimierter Download: 2 MiB.
Das hier ist, was ich eigentlich brauche:
Alles andere drumherum ist grafische Oberfläche, die nach TEMP extrahiert, eine grafische Oberfläche startet, die nach TEMP extrahiert, den Windows Installer startet, der nach TEMP extrahiert, dort weitere Windows Installers startet, die nach TEMP extrahieren, EXEs aufrufen, ca. 3 MiB an Dateien kopieren (denn nur ein Teil der Treiber wird auf einem System installiert) … dann legen sie Sicherheitskopien an, legen von den Sicherheitskopien weitere Sicherheitskopien an, legen Sicherheitskopien der Sicherheitskopien der Sicherheitskopien an, und installieren natürlich alle Abhängigkeiten, die sie dafür brauchen.
Und
darum war mein 11 Jahre alter PC schneller als alle anderen Systeme, die ich kenne. Weil ich mir einfach die rohen Treiber extrahiert und über den Device Manager installiert habe anstatt diesen Affenzirkus mein System vollkotzen zu lassen.
Meine Vermutung zur Ursache des ganzen Bloats: Sie haben ein Experten-Team, das die Treiber entwickelt, und die kompakten
dpinst-Setups erzeugt. Dann geht das zu einem Team, das vor allem Paketmanagement betreibt, und das wrappt MSI drumherum um irgendwelche Corporate-Anforderungen zu erfüllen. Dann geht das zu einem Studenten in der dritten Welt, der eine Klickibunti-Oberfläche drumherum wrappt um sich ein paar Euro dazuzuverdienen. Weil der damit überfordert ist, ein oder zwei Unzulänglichkeiten im Setup ordentlich zu korrigieren (z.B., dass InstallShield-Logos auftauchen?), wrappt er noch ein oder zwei andere Oberflächen drumherum.
Ship it!
Und Millionen Menschen auf der Welt baden es dann aus. Und weil’s jeder so macht, fällt das auch gar nicht mehr auf, dass der Download so fett ist. Ist ja schließlich viel kompakter als die 570 MiB eines Nvidia-Treibers!
Nachtrag: Zumindest für die RAID-Treiber haben sie’s selber gemerkt:
LOL