Cross Plattform Entwicklung ist überall. Wer Software für ein Smartphone oder einen Mikrocontroller schreibt hat meist keine Wahl: Übersetzt wird auf einem anderen Computer. In den 90ern trat Java an, um das ganz einfach zu machen. Java ist eine virtuelle Maschine und deshalb läuft ein Programm, das auf irgendeinem Rechner geschrieben wurde überall. Oder nicht?
In der Praxis ist es ja so, dass es gute Gründe gibt, warum man ein Programm für einen bestimmten Computer schreibt. Im Falle des Smartphones will man beispielsweise, dass das Programm mit einem Touchscreen funktioniert und dass man es unterwegs in der Hosentasche haben kann. Es soll auch mit einer fragilen Netzwerkanbindung laufen (wenn man mal wieder nur Edge hat) und vielleicht soll es auf die Daten zugreifen können, die im Handy gespeichert sind. Nichts davon habe ich auf dem PC (oder Mac), auf dem ich programmiere. Ich muss etwas simulieren, oder ich muss nach jedem Kompilieren das Programm neu übertragen. Letzteres ist leicht, wenn es um das eigene Handy geht, aber nicht alle Cross Plattform Entwicklungen sind da so reibungslos.
Programme leben von Input und Output und wenn dieser zwischern Entwicklungsrechner und Zielgerät verschieden ist, dann nützt auch eine universelle Sprache und eine virtuelle Maschine nicht viel. Entwicklung ist dann nur noch mittelbar. Wenn Karl Marx von der Entfremdung des Arbeiters von seiner Arbeit (bzw. seinem Produkt) spricht, dann könnte man hier von der Entfremdung von Programmerstellung und Programmablauf reden.
Wie glücklich war doch die Programmiererin1 für C64 Software! Sie hatte genau die Maschine, die der Kunde auch hatte. Sie hatte genau so viel Speicher, genau so viel MHz, genau die gleiche Tastatur und eine Sekunde nachdem sie etwas programmiert hatte, konnte sie es sehen, wie es war - zumindest, wenn sie Maschinensprache und/oder Basic benutzte.
Ich als Zuhause-Mac-Und-In-Der-Firma-Windows-User, der gelegentlich Programme für vier bis acht verschiedene Plattformen schreibt, finde es oft ermüdend, die Unterschiede zwischen den Systemen zu Überbrücken. Oft könnte man auch mit der schlechteren Lösung leben, wenn es doch wenigstens überall dieselbe wäre. Manchmal gibt es gute Gründe für die Unterschiede. Aber ist die Technik nicht inzwischen beinahe ausgereift? Könnten wir auf DIN-Tastaturen, UTF-8 und POSIX-Spezifikationen nicht noch „einen draufsetzen“ und jeden Computer - egal wie klein und spezialisiert - mit einer Programmierumgebung zu liefern, die lokal funktioniert und einem gemeinsamen Standard folgt?
Niemand arbeitet daran. In den 90ern gab es für Linux den AmiWM, MLVWM und FVWM95 um dem User eine vertraute GUI zu geben. Emacs hat einen VI-Mode und der Mac kann Control und Command tauschen, um Windows Shortcuts zu simulieren. All das geht nicht weit genug und ein gemeinsamer Standard kann auch nicht nur aus dem imitieren eine bestimmten Systems bestehen.
Auch am anderen Ende geschieht nichts. Visual Studio wird unter konfusen Lizenzen zum Teil teuer verkauft, selbst wenn man schon drei Windows-Installationen besitzt, und wer glaubt, die GUI des aktuellen Office damit programmieren zu können, der täuscht sich: Hier nutzt Microsoft eine nicht veröffentlichte Bibliothek mit anderem Look & Feel. XCode ist zwar gratis, aber auf dem iPad Pro gibt es von Apple nur die Playgrounds, die eine tolle Idee sind, aber irgendwie nicht für richtige Programme reichen. Andere Anbieter haben für iPad und Windows durchaus Angebote, aber sie werden von Apple und Microsoft nicht ernsthaft genug unterstützt und liefern keine gute Integration und Performance. Zwar kann ich auf meinem Mac für jedes System Programme schreiben, aber sie sehen oft nicht aus, wie die mitgelieferten. Ich kann ein Windows-Programm auf dem Mac auch nicht vollständig testen, weil die Pfadnamen ganz anders gebildet werden, weil es andere Codierungen und Dateisysteme gibt und weil jede Systemfunktion irgendetwas anders macht. Aber selbst im Idealfall ist Cross Plattform oft eine Pein, denn beispielsweise kann ich ein iOS-Programm nicht einfach einem Freund geben, es geht schon, aber:
A provisioning profile is a collection of digital entities that uniquely ties developers and devices to an authorized iPhone Development Team and enables a device to be used for testing. A Development Provisioning Profile must be installed on each device on which you wish to run your application code. Each Development Provisioning Profile will contain a set of iPhone Development Certificates, Unique Device Identifiers and an App ID. Devices specified within the provisioning profile can be used for testing only by those individuals whose iPhone Development Certificates are included in the profile.
Und bevor jetzt jemand kommt und sagt, unter Android wäre das alles besser: ich habe einmal versucht ein kostenloses Android-Spiel aus dem Play-Store auf einem PC zum laufen zu bringen. Das funktioniert nur, wenn man mit einem Android-Smartphone (das ich nicht besitze) bereits eine ID bekommen hat, die man dann angeben muss. Um überhaupt so weit zu kommen, installiert man einen Haufen instabiler Beta-Software aus zweifelhaften Quellen. Das Ergebnis ist die Arbeit sicher nicht wert.
_____
1 Ich habe mir mal erlaubt nach der Methode von CATS zu gendern: Man wählt im Text zufällig Personen aus, die weiblich sind.