Es gibt kaum eine Rechnerarchitektur, auf der der Linux-Kernel nicht läuft. Wenn es eine gibt, finden sich meist sehr schnell ein paar Programmierer, die für Abhilfe sorgen. Die Geschichte der Linux-Portierung ist fast so alt wie der Kernel selbst: Kernel-Vater Linus Torvalds selbst übertrug seinen für x86 geschriebenen Systemkern auf die Alpha-Architektur. Nur wenig später fand Linux seinen Weg auf Sparc-Rechner. Die jüngsten Ports übertragen Linux auf die Embedded-Architekturen AVR32 und Blackfin.
Weltenbummler
Dass Linux jemals so viele fremde Welten erobern würde, war zumindest 1991 noch nicht absehbar. Linus Torvalds selbst hat angenommen, sein "Terminal-Emulator" sei nicht portabel, da er das Task-Switching der x86-Architektur verwendete [1]. Dank der frei verfügbaren GNU Compiler Collection (GCC) entwickelte sich Linux aber schnell zu einem der am besten portierbaren Systeme. Die Hersteller von Embedded-Systemen suchten einen hoch anpassbaren Systemkern und fanden ihn in Linux. Weitere Portierungen kamen schlicht deshalb zustande, weil einige Kernelentwickler Linux auch auf ihrer Lieblings-Architektur nutzen wollten.
Erster Brückenschlag
Grundlagen jeder Linux-Portierung sind die Binutils, eine Sammlung von Programmierwerkzeugen für Assembler- und Binärcode, sowie die GCC. Beide müssen zunächst auf dem vom Entwickler genutzten Rechner, dem Host, vorliegen. Der Entwickler richtet auf diesem Rechner - beispielsweise einem gewöhnlichen x86-Computer - eine Umgebung für die Cross-Kompilierung ein. Dazu erstellt er eine Maschinenbeschreibung der Zielmaschine, dem Target.
Die notwendigen Informationen liegen üblicherweise in Form von Hersteller-Spezifikationen vor. Diese Beschreibung und maschinenspezifische Einstellungen nutzen der GNU-Assembler (Gas) und die BFD-Bibliothek aus den Binutils. Sie erzeugen und formatieren damit aus Assembler-Befehlen gültigen Binärcode. Danach nimmt der Entwickler sich die GNU Compiler Collection vor. Sie benötigt ebenfalls ein Beschreibung des Target. Diesmal enthalten die Beschreibungen detaillierte Informationen über die Zielarchitektur, nämlich wie ihre Komponenten sich ansprechen lassen und wie sie miteinander kommunizieren.