Aus EasyLinux 07/2017

Windows-Programme unter Linux nutzen

Passend machen

Das Unmögliche möglich machen: Darum geht es im Schwerpunkt dieses Ausgabe. Konkret z. B. um den Wunsch, lieb gewonnene Windows-Anwendungen auch unter Linux zu nutzen. Warum das schwierig ist und wie Emulation und Virtualisierung helfen, verraten wir in diesem Einstiegstext.

Für viele PC-Besitzer ist es gar nicht wichtig, ob auf ihrem Rechner Windows, Linux oder ein sonstiges Betriebssystem läuft – sie denken eher an Anwendungen wie Word, Gimp und Firefox, und der Rechner soll schnell und sicher arbeiten. Viele Benutzer haben (nach entsprechenden Hinweisen aus den Medien) ein Linux-System auf ihrem Rechner installiert und waren dann überrascht, dass sie ihre Windows-Programme nicht mehr nutzen konnten.

Woran liegt es, dass sich Microsoft Office nicht unter Linux installieren lässt und auch umgekehrt Klassiker der Linux-Welt nicht unter Windows laufen? Ist das eine absichtliche Einschränkung, um Anwender vom Wechsel des Betriebssystems abzuhalten? Nein, es liegt an technischen Grundlagen.

Programme starten und ausführen

Es geht schon damit los, dass Linux ein Windows-Programm gar nicht als Programmdatei erkennt (Abbildung 1). Die bekannten .exe-Dateien aus der Windows-Welt haben das Dateiformat PE (Portable Executable) und besitzen am Dateianfang einen Header-Bereich, der für den Programmstart nötige Informationen enthält: Da steht z. B., welche Teile der Programmdatei wo in den Speicher kopiert werden müssen und welche Bibliotheken (bei Windows: DLL-Dateien) das System zusätzlich laden muss, damit das Programm laufen kann.

Abbildung 1: Der Internet Explorer ("iexplore.exe") kann nur mit Hilfestellung unter Windows laufen; hier bietet KDE an, das Programm in Wine zu starten.
Abbildung 1: Der Internet Explorer („iexplore.exe“) kann nur mit Hilfestellung unter Windows laufen; hier bietet KDE an, das Programm in Wine zu starten.

Versuchen Sie, eine solche Programmdatei unter Linux zu starten, wird das System nur darauf hinweisen, dass die „Binärdatei“ ein ungültiges Format hat:

[esser@linux:~]$ ./texexec.exe
bash: ./texexec.exe: Kann die Binärdatei nicht ausführen: Fehler im Format der Programmdatei

Denn Linux erwartet ebenfalls, dass Programmdateien Header-Informationen enthalten, allerdings in einem ganz anderen Format – Linux verwendet ELF (Executable and Linking Format).

Prinzipiell leisten ELF und PE dasselbe; Windows und Linux benötigen für Programmstarts ähnliche Informationen. Im Detail sind die Unterschiede dann aber doch zu groß: Selbst wenn Linux das PE-Format von Windows verstehen würde (das wäre kein allzu großes Problem), wäre das keine Hilfe, denn die enthaltenen Anweisungen, welche Programmteile in welchen Speicherbereich zu laden sind, passen nicht zur Speicheraufteilung von Linux – das System müsste sie als ungültig ablehnen und den Programmstart verweigern.

Übrigens verwendet macOS mit Mach-O (Mach Object file format) ein drittes Format, das zu ELF und PE inkompatibel ist.

Bibliotheken

Nehmen wir an, man könnte all diese Hürden überwinden und Linux so anpassen, dass es das PE-Format versteht und die unterschiedliche Speichernutzung kein Problem darstellt – dann folgt nach der ersten Analyse der exe-Datei das Nachladen der Bibliotheken.

Bibliotheken sind im Wesentlichen auch ausführbare Dateien, die Windows-Dateien mit Endung .dll (Dynamic Link Library) liegen wieder im PE-Format vor, und Linux speichert seine Dateien (mit Endung .so für Shared Object) im ELF-Format. Auch das Finden und Nachladen der Windows-Bibliotheken ließe sich also regeln, wenn denn alle benötigten Windows-Bibliotheken in der jeweils richtigen Version unter Linux installiert werden.

Ein angepasster Programmlader (der PE versteht) und eine Sammlung der Windows-Bibliotheken sollten also ausreichen, um ein Windows-Programm vollständig unter Linux zu laden und auszuführen – oder fehlt doch noch etwas?

System Calls ins Betriebssystem

Die Bibliotheken stellen Funktionen bereit, über die Anwendungen z. B. Dateien öffnen, Mausbewegungen und Tastendrücke auswerten, Netzwerkverbindungen aufbauen und Informationen in Fenstern oder auf der Konsole ausgeben können. Dazu nutzen sie (die Bibliotheken) selbst Dienste des Betriebssystems – über so genannte System Calls (Systemaufrufe).

Hier liegt das Hauptproblem: System Calls sind sehr spezifisch und auf das jeweilige Betriebssystem zugeschnitten. Ein Großteil der System Calls von Windows hat zwar unter Linux eine Entsprechung, aber es gibt kleinere oder größere Abweichungen, und die verhindern letzten Endes, dass sich ein Windows-Programm in der Linux-Umgebung zurechtfinden kann.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 2 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
KAUFEN
EasyLinux 07/2017 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: