Wie aus Daten Arbeit wird
Architektur und Kompatibilität
Du lädst eine Anwendung herunter, und dein Computer weigert sich, sie auszuführen. Es gibt viel Arbeitsspeicher. Das Laufwerk ist halb leer. Nichts sieht falsch aus, aber etwas stimmt nicht: Das Programm wurde für eine andere Art von CPU gebaut.
Nicht jede CPU spricht dieselbe Sprache
Du weißt bereits, dass eine CPU Maschinenanweisungen ausführt. Bisher hat aber niemand erwähnt, dass es davon nicht nur einen Satz gibt. Verschiedene CPU-Familien verstehen verschiedene Anweisungen. Ein Programm für die eine Familie ist für eine andere unverständlich.
Zwei Familien dominieren heutige Desktop-, Laptop- und Smartphone-Hardware: x86-64 und ARM64. Der Begriff für eine CPU-Familie und die von ihr verstandenen Anweisungen lautet Architektur.
Eine aus x86-64-Anweisungen gebaute App läuft nicht direkt auf einer ARM64-CPU. Das ist kein Geschwindigkeitsproblem. Ohne eine weitere Schicht, die sie übersetzt, versteht die CPU diese Anweisungen nicht.
Der Architekturname allein sagt dir nicht, wie schnell ein Computer ist. Beide Familien kommen in Laptops und Servern vor. ARM-basierte Prozessoren sind auch in Smartphones verbreitet. Für Kompatibilität zählt, welche Anweisungen das Programm braucht und welche die CPU versteht.
Was du dagegen tun kannst
Im Wesentlichen zwei Dinge.
Die passende Version besorgen. Native Anwendungen werden meistens für jede Architektur getrennt gebaut. Die Downloadseite wählt die richtige für dich, oft ohne es zu erwähnen. Wenn sie falschliegt oder eine unerwartete Auswahl anbietet, geht es darum.
Eine Schicht nutzen, die den Unterschied überbrückt. Manche Systeme können Software für die andere Architektur ausführen, indem sie deren Anweisungen unterwegs übersetzen. Apple tat das beim Wechsel seiner Computer von x86-64 zu ARM64. Das funktioniert gut und bedeutet echte Zusatzarbeit, die eine passende Version nicht brauchen würde.
Eine App für x86-64 startet nicht auf einem ARM64-Laptop. Was würde tatsächlich helfen?
Was das für Python bedeutet
Eine passende Architektur ist nicht alles, was Software braucht. Sie erwartet auch ein bestimmtes Betriebssystem und oft bestimmte zusätzlich installierte Software. Eine ARM64-App für einen Mac läuft nicht auf einem ARM64-Computer mit Windows.
Eine gewöhnliche .py-Quelldatei enthält keine nativen Maschinenanweisungen. Der Quelltext selbst ist also nicht für x86-64 oder ARM64 gebaut. Zur Maschine passen muss die Python-Implementierung. Auch verwendete native Erweiterungen und Systemabhängigkeiten müssen passen.
In diesem nützlichen Sinne ist Python-Quellcode portabel. Eine reine Quelldatei lässt sich oft unverändert übertragen, weil kompatible Python-Implementierungen bereits für jedes unterstützte Betriebssystem und jede unterstützte Architektur gebaut wurden.
Du hast auf einem x86-64-Desktop eine reine Python-Datei ohne zusätzliche Abhängigkeiten geschrieben und schickst sie per E-Mail an einen Freund mit einem ARM64-Laptop. Was braucht er?
Jede Schicht in diesem Kapitel hat vorausgesetzt, dass etwas das Ganze organisiert: Programme an die CPU übergeben, sie auseinanderhalten und entscheiden, was als Nächstes läuft. Zeit, es kennenzulernen.