0%

Hoe gegevens tot uitvoering komen

CPU-architecturen en compatibiliteit

Je downloadt een applicatie en je computer weigert die uit te voeren. Er is genoeg geheugen. Het opslagstation is halfleeg. Niets lijkt verkeerd, maar er is wel iets mis: het programma is gebouwd voor een ander soort CPU.

Niet elke CPU spreekt dezelfde taal

Je weet al dat een CPU machine-instructies uitvoert. Wat nog niet is genoemd, is dat er geen enkele universele verzameling daarvan bestaat. Verschillende CPU-families begrijpen verschillende instructies. Een programma voor de ene familie is onbegrijpelijk voor de andere.

Twee families overheersen de huidige hardware van desktops, laptops en telefoons: x86-64 en ARM64. De naam voor een CPU-familie en de instructies die die begrijpt, is de architectuur.

Een app die uit x86-64-instructies is opgebouwd, draait niet rechtstreeks op een ARM64-CPU. Dit is geen snelheidsprobleem. De CPU begrijpt die instructies niet zonder een extra laag die ze vertaalt.

Alleen de architectuurnaam vertelt niet hoe snel een computer is. Beide families komen voor in laptops en servers; ARM-processors zijn ook gebruikelijk in telefoons. Voor compatibiliteit gaat het om welke instructies het programma nodig heeft en welke de CPU begrijpt.

Wat je eraan kunt doen

Eigenlijk twee dingen.

Download de juiste uitvoering. Native applicaties worden meestal apart gebouwd voor elke architectuur. De downloadpagina kiest de juiste voor je, vaak zonder het te vermelden. Als die verkeerd gokt of je een onverwachte keuze geeft, is dit waar het om gaat.

Voer de app uit via een overbruggende laag. Sommige systemen kunnen software voor een andere architectuur uitvoeren door de instructies tijdens het uitvoeren te vertalen. Apple deed dat toen zijn computers van x86-64 naar ARM64 overstapten. Het werkt goed, maar doet wel echt extra werk dat een passende uitvoering niet nodig zou hebben.

Een app voor x86-64 start niet op een ARM64-laptop. Wat zou werkelijk helpen?

Wat dit voor Python betekent

Een passende architectuur is niet het enige dat software nodig heeft. Die verwacht ook een bepaald besturingssysteem en vaak specifieke aanvullende software. Een ARM64-app voor een Mac werkt niet op een ARM64-computer met Windows.

Een gewoon .py-bronbestand bevat geen native machine-instructies. De broncode zelf is dus niet voor x86-64 of ARM64 gebouwd. De Python-implementatie moet bij je computer passen. Eventuele native uitbreidingen en systeemafhankelijkheden die die gebruikt ook.

In die nuttige betekenis is Python-broncode overdraagbaar. Een gewoon bronbestand kan vaak ongewijzigd worden overgebracht, omdat er al compatibele Python-implementaties zijn gemaakt voor elk ondersteund besturingssysteem en elke ondersteunde architectuur.

Je hebt op een x86-64-desktop een gewoon Python-bestand zonder extra afhankelijkheden geschreven en mailt dat naar een vriend met een ARM64-laptop. Wat heeft die nodig?

Elke laag in dit hoofdstuk ging ervan uit dat iets het geheel regelde: programma’s aan de CPU geven, ze uit elkaar houden en bepalen wat hierna wordt uitgevoerd. Tijd om daarmee kennis te maken.