Plattformübergreifende Software - Cross-platform software

Aus Wikipedia, der freien Enzyklopädie

Beim Computing ist plattformübergreifende Software (auch plattformübergreifende Software oder plattformunabhängige Software ) Computersoftware , die auf mehreren Computerplattformen implementiert ist. Plattformübergreifende Software kann in zwei Typen unterteilt werden. Eine erfordert eine individuelle Erstellung oder Kompilierung für jede Plattform, die sie unterstützt, und die andere kann ohne besondere Vorbereitung direkt auf jeder Plattform ausgeführt werden, z. B. Software, die in einer interpretierten Sprache geschrieben ist, oder vorkompilierter tragbarer Bytecode, für den die Interpreter oder die Laufzeit Pakete sind gemeinsame oder Standardkomponenten aller Plattformen.

Beispielsweise kann eine plattformübergreifende Anwendung unter Microsoft Windows , Linux und macOS ausgeführt werden . Plattformübergreifende Programme können auf so vielen wie allen vorhandenen Plattformen oder auf nur zwei Plattformen ausgeführt werden. Plattformübergreifende Frameworks (wie Codename One , Kivy , Qt , Flutter , NativeScript , Xamarin , Phonegap , Ionic und React Native ) unterstützen die plattformübergreifende Entwicklung.

Plattformen

Die Plattform kann sich auf den Prozessortyp (CPU) oder andere Hardware beziehen, auf dem ein bestimmtes Betriebssystem oder eine bestimmte Anwendung ausgeführt wird , auf den Betriebssystemtyp auf einem Computer oder auf die Kombination aus Hardwaretyp und Betriebssystemtyp. Ein Beispiel für eine gängige Plattform ist Microsoft Windows, das auf der x86-Architektur ausgeführt wird . Andere bekannte Desktop-Computerplattformen sind Linux / Unix und macOS - beide sind selbst plattformübergreifend. Es gibt jedoch viele Geräte wie Smartphones , die ebenfalls effektiv Computerplattformen sind, aber auf diese Weise weniger häufig gedacht werden. Anwendungssoftware kann so geschrieben werden, dass sie von den Funktionen einer bestimmten Plattform abhängt - entweder von der Hardware, dem Betriebssystem oder der virtuellen Maschine , auf der sie ausgeführt wird. Die Java-Plattform ist eine Plattform für virtuelle Maschinen, die auf vielen Betriebssystemen und Hardwaretypen ausgeführt wird, und eine gängige Plattform für Software, für die geschrieben werden soll.

Hardware-Plattformen

Eine Hardwareplattform kann sich auf eine Befehlssatzarchitektur beziehen . Zum Beispiel: x86-Architektur und ihre Varianten wie IA-32 und x86-64 . Auf diesen Computern wird häufig eine Version von Microsoft Windows ausgeführt, es können jedoch auch andere Betriebssysteme ausgeführt werden, darunter Linux, OpenBSD , NetBSD , macOS und FreeBSD .

Die 32-Bit- ARM-Architekturen (und die neuere 64-Bit- Version) sind auf Smartphones und Tablet-Computern üblich , auf denen Android , iOS und andere mobile Betriebssysteme ausgeführt werden .

Softwareplattformen

Softwareplattformen können entweder ein Betriebssystem oder eine Programmierumgebung sein , obwohl es sich üblicherweise um eine Kombination aus beiden handelt. Eine bemerkenswerte Ausnahme bildet Java , das für seinen kompilierten Code, der in der Java-Welt als Bytecode bekannt ist , eine betriebssystemunabhängige virtuelle Maschine verwendet . Beispiele für Softwareplattformen sind:

Klein / historisch

Java-Plattform

Wie bereits erwähnt, ist die Java-Plattform eine Ausnahme von der allgemeinen Regel, dass ein Betriebssystem eine Softwareplattform ist. Die Java-Sprache wird normalerweise zu einer virtuellen Maschine kompiliert: einer virtuellen CPU, auf der der gesamte für die Sprache geschriebene Code ausgeführt wird. Dadurch kann dieselbe ausführbare Binärdatei auf allen Systemen ausgeführt werden, die eine Java Virtual Machine (JVM) implementieren. Java-Programme können nativ mit einem Java-Prozessor ausgeführt werden . Dies ist nicht üblich und wird hauptsächlich für eingebettete Systeme verwendet.

Java-Code, der in der JVM ausgeführt wird, hat Zugriff auf betriebssystembezogene Dienste wie Festplatten-E / A und Netzwerkzugriff, wenn die entsprechenden Berechtigungen erteilt werden. Die JVM führt die Systemaufrufe im Namen der Java-Anwendung durch. Mit diesem Setup können Benutzer abhängig von einer ACL die geeignete Schutzstufe festlegen . Beispielsweise ist der Festplatten- und Netzwerkzugriff normalerweise für Desktopanwendungen aktiviert, nicht jedoch für browserbasierte Applets . JNI kann auch verwendet werden, um den Zugriff auf betriebssystemspezifische Funktionen zu ermöglichen.

Derzeit können Java Standard Edition-Programme unter Microsoft Windows, macOS, mehreren Unix-ähnlichen Betriebssystemen und mehreren weiteren nicht UNIX-ähnlichen Betriebssystemen wie eingebetteten Systemen ausgeführt werden. Für mobile Anwendungen werden Browser-Plugins für Windows- und Mac-basierte Geräte verwendet, und Android bietet integrierte Unterstützung für Java. Es gibt auch Untergruppen von Java, z. B. Java Card oder Java Platform, Micro Edition , die für Geräte mit eingeschränkten Ressourcen entwickelt wurden.

Implementierungen

Damit eine Software als plattformübergreifend betrachtet werden kann, muss sie auf mehr als einer Computerarchitektur oder einem Betriebssystem funktionieren können. Das Entwickeln eines solchen Programms kann eine zeitaufwändige Aufgabe sein, da verschiedene Betriebssysteme unterschiedliche APIs ( Application Programming Interfaces ) haben. Beispielsweise verwendet Linux eine andere API für Anwendungssoftware als Windows.

Für ein bestimmtes Betriebssystem geschriebene Software funktioniert nicht automatisch auf allen vom Betriebssystem unterstützten Architekturen. Ein Beispiel ab August 2006 war OpenOffice.org , das nicht nativ auf den Prozessorreihen AMD64 oder Intel 64 ausgeführt wurde , die die x86-64-Standards für Computer implementierten. Dies wurde inzwischen geändert, und die OpenOffice.org-Software-Suite wird „meistens“ auf diese 64-Bit-Systeme portiert. Dies bedeutet auch, dass ein Programm, das in einer gängigen Programmiersprache wie C oder C ++ geschrieben ist , nicht auf allen Betriebssystemen ausgeführt werden kann, die diese Programmiersprache unterstützen - oder sogar auf demselben Betriebssystem mit einer anderen Architektur.

Web Applikationen

Webanwendungen werden normalerweise als plattformübergreifend bezeichnet, da sie im Idealfall von einem beliebigen Webbrowser unter verschiedenen Betriebssystemen aus zugänglich sind. Solche Anwendungen verwenden im Allgemeinen eine Client-Server- Systemarchitektur und unterscheiden sich stark in Komplexität und Funktionalität. Diese große Variabilität verkompliziert das Ziel der plattformübergreifenden Fähigkeit erheblich, was routinemäßig im Widerspruch zum Ziel der erweiterten Funktionalität steht.

Grundlegende Webanwendungen führen die gesamte oder die meisten Verarbeitungen von einem zustandslosen Server aus und übergeben das Ergebnis an den Client-Webbrowser. Die gesamte Benutzerinteraktion mit der Anwendung besteht aus dem einfachen Austausch von Datenanforderungen und Serverantworten. Diese Arten von Anwendungen waren in den frühen Phasen der Entwicklung von World Wide Web- Anwendungen die Norm . Solche Anwendungen folgen einem einfachen Transaktionsmodell , das mit dem Bereitstellen statischer Webseiten identisch ist . Sie sind heute noch relativ häufig, insbesondere dort, wo plattformübergreifende Kompatibilität und Einfachheit als kritischer angesehen werden als erweiterte Funktionen.

Prominente Beispiele für erweiterte Webanwendungen sind die Weboberfläche zu Google Mail , A9.com , die Google Maps- Website und der Live Search-Dienst (jetzt Bing ) von Microsoft. Solche erweiterten Anwendungen hängen routinemäßig von zusätzlichen Funktionen ab, die nur in den neueren Versionen gängiger Webbrowser enthalten sind. Diese Abhängigkeiten umfassen Ajax , JavaScript , dynamisches HTML , SVG und andere Komponenten von Rich-Webanwendungen . Ältere Versionen gängiger Webbrowser bieten in der Regel keine Unterstützung für bestimmte Funktionen.

Designstrategien

Aufgrund der konkurrierenden Interessen der plattformübergreifenden Kompatibilität und der erweiterten Funktionalität haben sich zahlreiche alternative Strategien für das Design von Webanwendungen herausgebildet. Solche Strategien umfassen:

Anmutige Erniedrigung

Graceful Degradation versucht, allen Benutzern und Plattformen die gleiche oder eine ähnliche Funktionalität bereitzustellen, während diese Funktionalität für eingeschränktere Client-Browser auf einen kleinsten gemeinsamen Nenner reduziert wird. Beispielsweise kann ein Benutzer, der versucht, mit einem Browser mit eingeschränkten Funktionen auf Google Mail zuzugreifen, feststellen, dass Google Mail mit eingeschränkter Funktionalität in den Basismodus wechselt. Dies unterscheidet sich von anderen plattformübergreifenden Techniken, bei denen versucht wird, plattformübergreifend gleichwertige und nicht nur angemessene Funktionen bereitzustellen.

Mehrere Codebasen

Mehrere Codebasisanwendungen verwalten unterschiedliche Codebasen für verschiedene (Hardware- und Betriebssystem-) Plattformen mit gleichwertiger Funktionalität. Dies erfordert natürlich einen doppelten Aufwand bei der Pflege des Codes, kann sich jedoch lohnen, wenn die Menge an plattformspezifischem Code hoch ist.

Einzelne Codebasis

Diese Strategie basiert auf einer Codebasis, die in mehreren plattformspezifischen Formaten kompiliert werden kann. Eine Technik ist die bedingte Kompilierung . Mit dieser Technik wird Code, der allen Plattformen gemeinsam ist, nicht wiederholt. Codeblöcke, die nur für bestimmte Plattformen relevant sind, werden an Bedingungen geknüpft, sodass sie nur bei Bedarf interpretiert oder kompiliert werden . Eine andere Technik ist die Trennung von Funktionen, wodurch Funktionen deaktiviert werden, die von Client-Browsern oder Betriebssystemen nicht unterstützt werden, während dem Benutzer dennoch eine vollständige Anwendung bereitgestellt wird. (Siehe auch: Trennung von Bedenken ). Diese Technik wird in der Webentwicklung verwendet, bei der interpretierter Code (wie in Skriptsprachen) die Plattform abfragen kann, auf der er ausgeführt wird, um verschiedene Blöcke bedingt auszuführen.

Bibliotheken von Drittanbietern

Bibliotheken von Drittanbietern versuchen, die plattformübergreifenden Funktionen zu vereinfachen, indem sie die Komplexität der Clientdifferenzierung hinter einer einzigen einheitlichen API verbergen.

Sich anpassendes Webdesign

Responsive Web Design (RWD) ist ein Webdesign-Ansatz, der darauf abzielt, das visuelle Layout von Websites so zu gestalten, dass ein optimales Seherlebnis - einfaches Lesen und Navigieren mit einem Minimum an Größenänderung, Schwenken und Scrollen - für eine Vielzahl von Geräten von Mobilgeräten aus möglich ist Telefone auf Desktop-Computer-Monitore. Bei dieser Technik wird wenig oder kein plattformspezifischer Code verwendet.

Teststrategien

Ein komplizierter Aspekt des plattformübergreifenden Entwurfs von Webanwendungen ist die Notwendigkeit von Softwaretests . Zusätzlich zu den zuvor erwähnten Komplikationen gibt es die zusätzliche Einschränkung, dass einige Webbrowser die Installation verschiedener Versionen desselben Browsers auf demselben Betriebssystem verbieten. Obwohl es verschiedene Entwicklungsansätze gibt, mit denen Unternehmen auf mehrere Plattformen abzielen, führen alle zu Software, die einen erheblichen manuellen Aufwand für Tests und Wartung auf den unterstützten Plattformen erfordert. Techniken wie die vollständige Virtualisierung werden manchmal als Problemumgehung für dieses Problem verwendet.

Mit Tools wie dem Seitenobjektmodell können plattformübergreifende Tests so skriptgesteuert werden, dass ein Testfall für mehrere Versionen einer App verwendet werden kann. Solange die verschiedenen Versionen ähnliche Benutzeroberflächen haben, können beide Versionen gleichzeitig mit einem Testfall getestet werden.

Traditionelle Anwendungen

Webanwendungen werden immer beliebter, aber viele Computerbenutzer verwenden immer noch herkömmliche Anwendungssoftware, die nicht auf einer Client / Webserver-Architektur basiert. Die Unterscheidung zwischen traditionellen und Webanwendungen ist nicht immer klar. Funktionen, Installationsmethoden und Architekturen für Web- und herkömmliche Anwendungen überschneiden sich und verwischen die Unterscheidung. Diese vereinfachende Unterscheidung ist jedoch eine übliche und nützliche Verallgemeinerung.

Binäre Software

Traditionell wurde in modernen Computern Anwendungssoftware als Binärdatei, insbesondere als ausführbare Dateien, an Endbenutzer verteilt . Ausführbare Dateien unterstützen nur das Betriebssystem und die Computerarchitektur, für die sie erstellt wurden. Dies bedeutet, dass das Erstellen einer einzelnen plattformübergreifenden ausführbaren Datei eine große Aufgabe darstellt und im Allgemeinen durch das Anbieten einer Auswahl ausführbarer Dateien für die unterstützten Plattformen ersetzt wird.

Für Software, die als ausführbare Binärdatei verteilt wird, wie z. B. in C oder C ++ geschriebene Software, muss der Programmierer die Software für jedes Betriebssystem und jede Computerarchitektur erstellen , dh ein Toolset verwenden, das eine einzelne Codebasis in mehrere Binärdateien übersetzt - transkompiliert - ausführbare Dateien. Beispielsweise ist Firefox , ein Open-Source-Webbrowser, unter Windows, MacOS (sowohl PowerPC als auch x86 über eine von Apple Inc. als Universal Binary bezeichnete ), Linux und * BSD auf mehreren Computerarchitekturen verfügbar . Die vier Plattformen (in diesem Fall Windows, MacOS, Linux und * BSD) sind separate ausführbare Distributionen, obwohl sie aus demselben Quellcode stammen .

Die Verwendung unterschiedlicher Toolsets zum Ausführen unterschiedlicher Builds reicht möglicherweise nicht aus, um eine Vielzahl von funktionierenden ausführbaren Dateien für verschiedene Plattformen zu erzielen. In diesem Fall muss der Softwareentwickler ihn portieren , dh den Code so ändern, dass er für eine neue Computerarchitektur oder ein neues Betriebssystem geeignet ist. Beispielsweise kann ein Programm wie Firefox, das bereits unter Windows in der x86-Familie ausgeführt wird, geändert und neu erstellt werden, um unter Linux unter x86 (und möglicherweise auch unter anderen Architekturen) ausgeführt zu werden. Die mehreren Versionen des Codes können als separate Codebasen gespeichert oder durch bedingte Kompilierung zu einer Codebasis zusammengeführt werden (siehe oben). Beachten Sie, dass die Portierung zwar von einer plattformübergreifenden Erstellung begleitet werden muss, das Gegenteil jedoch nicht der Fall ist.

Alternativ zur Portierung ermöglicht die plattformübergreifende Virtualisierung, dass Anwendungen, die für eine CPU und ein Betriebssystem kompiliert wurden, auf einem System mit einer anderen CPU und / oder einem anderen Betriebssystem ausgeführt werden können, ohne dass der Quellcode oder die Binärdateien geändert werden müssen. In Apples Rosetta , das in Intel- basierte Macintosh-Computer integriert ist, werden beispielsweise Anwendungen ausgeführt, die für die vorherige Mac-Generation mit PowerPC-CPUs kompiliert wurden. Ein weiteres Beispiel ist IBM PowerVM Lx86 , mit dem Linux / x86-Anwendungen auf dem Linux / Power-Betriebssystem unverändert ausgeführt werden können.

Beispiel für plattformübergreifende Binärsoftware:

Skripte und interpretierte Sprachen

Ein Skript kann als plattformübergreifend betrachtet werden, wenn sein Interpreter auf mehreren Plattformen verfügbar ist und das Skript nur die von der Sprache bereitgestellten Funktionen verwendet. Das heißt, ein in Python für ein Unix-ähnliches System geschriebenes Skript wird unter Windows wahrscheinlich nur geringfügig oder gar nicht geändert, da Python auch unter Windows ausgeführt wird. Es gibt auch mehr als eine Implementierung von Python, auf der dieselben Skripts ausgeführt werden (z. B. IronPython für .NET Framework ). Gleiches gilt für viele der verfügbaren Open-Source- Programmiersprachen, die Skriptsprachen sind .

Im Gegensatz zu ausführbaren Binärdateien kann auf allen Computern mit Software zur Interpretation des Skripts dasselbe Skript verwendet werden. Dies liegt daran, dass das Skript im Allgemeinen im Klartext in einer Textdatei gespeichert wird . Es kann jedoch einige Probleme geben, z. B. die Art des neuen Zeilenzeichens, das sich zwischen den Zeilen befindet. Im Allgemeinen muss jedoch wenig oder gar keine Arbeit geleistet werden, um ein Skript für ein System zu schreiben und auf einem anderen auszuführen.

Einige sehr beliebte plattformübergreifende Skripts oder interpretierte Sprachen sind:

Videospiele

Plattformübergreifend oder plattformübergreifend ist ein Begriff, der auch für Videospiele gelten kann, die auf einer Reihe von Videospielkonsolen , spezialisierten Computern, die für das Spielen von Spielen vorgesehen sind, veröffentlicht wurden. Beispiele für plattformübergreifende Videospiele sind: Miner 2049er , Tomb Raider: Legend , FIFA-Serie , NHL-Serie und Minecraft .

Jeder wurde in einer Vielzahl von Gaming - Plattformen, wie das freigesetzte Wii , PlayStation 3 , Xbox 360 , PC (PC) und mobile Geräte .

Die Eigenschaften eines bestimmten Systems können die Zeit verlängern, die für die Implementierung eines Videospiels auf mehreren Plattformen benötigt wird. Daher kann ein Videospiel zunächst auf einigen Plattformen und später auf verbleibenden Plattformen veröffentlicht werden. In der Regel tritt diese Situation auf, wenn ein neues Spielesystem veröffentlicht wird, da Entwickler von Videospielen sich mit der mit der neuen Konsole verbundenen Hardware und Software vertraut machen müssen.

Einige Spiele werden möglicherweise nicht plattformübergreifend, da Lizenzvereinbarungen zwischen Entwicklern und Herstellern von Videospielkonsolen die Entwicklung eines Spiels auf eine bestimmte Konsole beschränken. Als Beispiel könnte Disney ein Spiel mit der Absicht erstellen, es auf den neuesten Nintendo- und Sony -Spielekonsolen zu veröffentlichen. Sollte Disney das Spiel zuerst mit Sony lizenzieren, muss Disney das Spiel möglicherweise nur für kurze Zeit oder auf unbestimmte Zeit ausschließlich auf der Sony-Konsole veröffentlichen. Dies verbietet effektiv eine plattformübergreifende Veröffentlichung für die Dauer.

Plattformübergreifendes Spiel

Mehrere Entwickler haben Mittel implementiert, um Spiele online zu spielen, während sie verschiedene Plattformen verwenden. Psyonix , Epic Games , Microsoft und Valve verfügen alle über eine Technologie, mit der Xbox 360- und PlayStation 3-Spieler mit PC-Spielern spielen können. Die Entscheidung, welche Plattform verwendet werden soll, bleibt den Verbrauchern überlassen. Das erste Spiel, das diese Interaktivität zwischen PC- und Konsolenspielen ermöglichte, war Quake 3 .

Spiele , die Cross-Plattform verfügen über Online - Spiele gehören Rocket League , Final Fantasy XIV , Street Fighter V , Killer Instinct , Paragon und Fable Vermögen , und Minecraft mit Better Together Update auf Microsoft Windows 10 , VR - Editionen, Pocket Edition und Xbox One .

Plattformübergreifende Programmierung

Plattformübergreifende Programmierung ist die Praxis, aktiv Software zu schreiben, die auf mehr als einer Plattform funktioniert.

Ansätze zur plattformübergreifenden Programmierung

Es gibt verschiedene Möglichkeiten, sich dem Problem des Schreibens eines plattformübergreifenden Anwendungsprogramms zu nähern. Ein solcher Ansatz besteht einfach darin, mehrere Versionen desselben Programms in verschiedenen Quellbäumen zu erstellen. Mit anderen Worten, die Microsoft Windows-Version eines Programms verfügt möglicherweise über einen Satz von Quellcodedateien und die Macintosh- Version über einen anderen, während ein FOSS * nix System könnte ein anderes haben. Dies ist zwar eine unkomplizierte Herangehensweise an das Problem, kann jedoch die Entwicklungskosten, die Entwicklungszeit oder beides erheblich verteuern, insbesondere für Unternehmen. Die Idee dahinter ist, mehr als zwei verschiedene Programme zu erstellen, die sich ähnlich verhalten können. Es ist auch möglich, dass dieses Mittel zum Entwickeln einer plattformübergreifenden Anwendung zu mehr Problemen bei der Fehlerverfolgung und -behebung führt, da die beiden unterschiedlichen Quellbäume unterschiedliche Programmierer und damit unterschiedliche Fehler in jeder Version haben würden.

Ein anderer Ansatz, der verwendet wird, besteht darin, von bereits vorhandener Software abhängig zu sein, die die Unterschiede zwischen den Plattformen verbirgt - die als Abstraktion der Plattform bezeichnet wird -, sodass das Programm selbst die Plattform, auf der es ausgeführt wird, nicht kennt. Man könnte sagen, dass solche Programme plattformunabhängig sind . Programme, die auf der Java Virtual Machine (JVM) ausgeführt werden, werden auf diese Weise erstellt.

Einige Anwendungen kombinieren verschiedene Methoden der plattformübergreifenden Programmierung, um die endgültige Anwendung zu erstellen. Ein Beispiel hierfür ist der Firefox-Webbrowser, der mithilfe der Abstraktion einige der untergeordneten Komponenten erstellt, separate Quellunterbäume für die Implementierung plattformspezifischer Funktionen (wie die grafische Benutzeroberfläche) erstellt und mehr als eine Skriptsprache implementiert, um dies zu vereinfachen einfache Portabilität . Firefox implementiert XUL , CSS und JavaScript zur Erweiterung des Browsers sowie klassische Browser-Plugins im Netscape- Stil. Ein Großteil des Browsers selbst ist auch in XUL, CSS und JavaScript geschrieben.

Plattformübergreifende Programmier-Toolkits und -Umgebungen

Es gibt eine Reihe von Tools, die den Prozess der plattformübergreifenden Programmierung erleichtern:

  • 8. Eine plattformübergreifende Entwicklungssprache, die Juce als GUI-Schicht verwendet. Die derzeit unterstützten Plattformen sind: Android, iOS, Windows, MacOS, Linux und Raspberry Pi.
  • Anant Computing : Eine mobile Anwendungsplattform, die in allen indischen Sprachen einschließlich ihrer Tastaturen funktioniert und auch die Leistung von AppWallet und Native in allen Betriebssystemen unterstützt.
  • AppearIQ Ein Framework, das den Workflow der App-Entwicklung und -Bereitstellung in einer Unternehmensumgebung unterstützt. Nativ entwickelte Container präsentieren Hardwarefunktionen der mobilen Geräte oder Tablets über eine API in HTML5-Code und erleichtern so die Entwicklung mobiler Apps, die auf verschiedenen Plattformen ausgeführt werden.
  • Boden: Ein plattformübergreifendes UI-Framework für verschiedene in C ++ geschriebene Plattformen.
  • Kairo : Eine kostenlose Softwarebibliothek zur Bereitstellung einer vektorgrafikbasierten, geräteunabhängigen API. Es wurde entwickelt, um Grundelemente für das zweidimensionale Zeichnen über eine Reihe verschiedener Backends bereitzustellen. Kairo ist in C geschrieben und hat Bindungen für viele Programmiersprachen.
  • Cocos2d : Ein Open-Source-Toolkit und eine Game-Engine zur Entwicklung plattformübergreifender 2D- und einfacher 3D-Spiele und -Anwendungen.
  • Codename One : Ein plattformübergreifendes Open Source-WORA-Framework (Write Once Run Anywhere) für Java- und Kotlin-Entwickler.
  • Delphi : Eine plattformübergreifende IDE, die die Pascal-Sprache für die Entwicklung verwendet. Derzeit unterstützt es Android, iOS, Windows, MacOS, Linux.
  • Ecere SDK: Ein plattformübergreifendes GUI- und 2D / 3D-Grafik-Toolkit sowie eine IDE, die in eC geschrieben wurden und zusätzliche Sprachen wie C und Python unterstützen . Derzeit unterstützt es Linux, FreeBSD, Windows, Android, MacOS und das Web über Emscripten oder Binaryen (WebAssembly).
  • Eclipse : Eine plattformübergreifende Open Source-Entwicklungsumgebung. Implementiert in Java mit einer konfigurierbaren Architektur, die viele Tools für die Softwareentwicklung unterstützt. Add-Ons sind für mehrere Sprachen verfügbar, einschließlich Java und C ++.
  • FLTK : Ein weiteres plattformübergreifendes Open-Source-Toolkit, das jedoch leichter ist, da es sich auf die GUI beschränkt.
  • Flutter : Ein plattformübergreifendes UI-Framework für Android und iOS, das von Google entwickelt wurde .
  • fpGUI : Ein Open Source-Widget-Toolkit, das vollständig in Object Pascal implementiert ist. Es unterstützt derzeit Linux, Windows und ein bisschen Windows CE.
  • GeneXus : Eine schnelle Windows-Softwareentwicklungslösung für die plattformübergreifende Erstellung und Bereitstellung von Anwendungen basierend auf Wissensrepräsentation und Unterstützung von C # , COBOL , Java, einschließlich Android- und BlackBerry-Smart-Geräten, Objective-C für Apple- Mobilgeräten, RPG , Ruby , Visual Basic und Visual FoxPro .
  • GLBasic : Ein BASIC-Dialekt und Compiler, der C ++ - Code generiert. Es enthält Cross-Compiler für viele Plattformen und unterstützt zahlreiche Plattformen (Windows, Mac, Linux, Android, iOS und einige exotische Handhelds).
  • Godot : Ein plattformübergreifendes SDK, das die Godot Engine verwendet.
  • GTK + : Ein Open Source Widget Toolkit für Unix-ähnliche Systeme mit X11 und Microsoft Windows.
  • Haxe : Eine plattformübergreifende Open Source-Sprache.
  • Juce : Ein in C ++ geschriebenes Anwendungsframework, mit dem native Software auf zahlreichen Systemen (Microsoft Windows, POSIX, macOS) ohne Änderung des Codes geschrieben wird.
  • Kivy : Ein plattformübergreifendes Open Source-UI-Framework, das in Python geschrieben wurde . Es unterstützt Android , iOS , Linux , OS X , Windows und Raspberry Pi .
  • LEADTOOLS : Plattformübergreifende SDK-Bibliotheken zur Integration von Erkennungs-, Dokument-, Medizin-, Bildgebungs- und Multimediatechnologien in Windows-, iOS-, MacOS-, Android-, Linux- und Webanwendungen.
  • Lazarus : Eine Programmierumgebung für den FreePascal Compiler. Es unterstützt die Erstellung eigenständiger Grafik- und Konsolenanwendungen und läuft unter Linux, MacOSX, iOS, Android, WinCE, Windows und WEB.
  • Max / MSP : Eine visuelle Programmiersprache , die plattformunabhängigen Code mit einer plattformspezifischen Laufzeitumgebung in Anwendungen für macOS und Windows kapselt. Eine plattformübergreifende Android-Laufzeit. Damit können unveränderte Android-Apps nativ unter iOS und macOS ausgeführt werden
  • Mendix : Eine Cloud-basierte Entwicklungsplattform für Low-Code-Anwendungen.
  • MonoCross : Ein Open-Source - Entwurfsmuster für Modellansicht -Controller , bei dem Modell und Controller plattformübergreifend gemeinsam genutzt werden, die Ansicht jedoch plattformspezifisch ist.
  • Mono : Eine plattformübergreifende Open-Source-Version von Microsoft .NET (ein Framework für Anwendungen und Programmiersprachen)
  • MoSync : Ein Open-Source-SDK für die Entwicklung von Apps für mobile Plattformen in der C ++ - Familie.
  • Mozilla-Anwendungsframework : Eine Open Source-Plattform zum Erstellen von MacOS-, Windows- und Linux-Anwendungen.
  • Ein plattformübergreifendes JavaScript / TypeScript-Framework für die Android- und iOS-Entwicklung.
  • OpenGL : Eine plattformübergreifende 3D-Grafikbibliothek.
  • Pixel Game Maker MV : Eine proprietäre 2D-Spieleentwicklungssoftware für Windows zur Entwicklung von Windows- und Nintendo Switch- Spielen.
  • PureBasic : Eine proprietäre plattformübergreifende Sprache und IDE zum Erstellen von MacOS-, Windows- und Linux-Anwendungen.
  • ReNative : Das universelle Entwicklungs-SDK zum Erstellen plattformübergreifender Projekte mit React Native. Enthält die neuesten Plattformen für iOS, tvOS, Android, Android TV, Web, Tizen TV, Tizen Watch, LG webOS, macOS / OSX, Windows, KaiOS, Firefox OS und Firefox TV.
  • Ft : Ein Anwendungsframework und ein Widget-Toolkit für Unix-ähnliche Systeme mit X11 , Microsoft Windows, macOS und anderen Systemen - verfügbar unter Open Source- und proprietären Lizenzen.
  • Einfache und schnelle Multimedia-Bibliothek: Eine Multimedia-C ++ - API , die auf niedriger und hoher Ebene Zugriff auf Grafiken, Eingaben, Audio usw. bietet.
  • Simple DirectMedia Layer : Eine plattformübergreifende Open-Source-Multimedia-Bibliothek in C, die eine Abstraktion über die Grafik-, Sound- und Eingabe- APIs verschiedener Plattformen erstellt . Es läuft auf vielen Betriebssystemen wie Linux, Windows und MacOS und richtet sich an Spiele und Multimedia-Anwendungen.
  • Smartface : Ein plattformübergreifendes natives App-Entwicklungstool zum Erstellen mobiler Anwendungen für Android und iOS mit dem WYSIWYG- Designeditor und dem JavaScript-Code-Editor.
  • Tcl / Tk
  • Ultimate ++ : Ein plattformübergreifendes C ++ - Framework für die schnelle Anwendungsentwicklung, das sich auf die Produktivität von Programmierern konzentriert. Es enthält eine Reihe von Bibliotheken (GUI, SQL usw.) und eine integrierte Entwicklungsumgebung. Es unterstützt Windows- und Unix-ähnliche Betriebssysteme. Das U ++ konkurriert mit gängigen Skriptsprachen unter Beibehaltung der C / C ++ - Laufzeitmerkmale. Es verfügt über eine eigene integrierte Entwicklungsumgebung, TheIDE, die über die BLITZ-Build-Technologie verfügt, um C ++ - Neuerstellungen bis zu viermal zu beschleunigen.
  • Unity : Ein weiteres plattformübergreifendes SDK, das Unity Engine verwendet.
  • Uno-Plattform : Windows, MacOS, iOS, Android, WebAssembly und Linux mit C #.
  • Unreal : Ein plattformübergreifendes SDK, das Unreal Engine verwendet.
  • V-Play Engine : V-Play ist ein plattformübergreifendes Entwicklungs-SDK, das auf dem beliebten Qt-Framework basiert. V-Play-Apps und -Spiele werden in Qt Creator erstellt.
  • WaveMaker : Ein plattformübergreifendes Low-Code-Entwicklungstool zum Erstellen reaktionsschneller Web- und Hybrid-Mobilanwendungen (Android und iOS).
  • WinDev: Integrierte Entwicklungsumgebung für Windows, Linux, .Net und Java (auch mit Unterstützung für Internet und Intranet ). Entwicklungssoftware, die für die Erstellung professioneller Geschäftsführung, Buchhaltung, Industrieanwendungen, Planungsmanagement, Registrierkassensoftware und Abrechnungssoftware optimiert ist. Hauptvorteil: Entwicklungsgeschwindigkeit durch die Integration von vorgefertigten Modulen (Bearbeitung, Barcode-Verwaltung, Dateneingabe, Planung usw. ...), die die Anzahl der Codezeilen massiv reduzieren. Windev wlanguage ist eine prozedurale Programmiersprache, die imperative Programmierung und objektorientierte Programmierung ermöglicht.
  • wxWidgets : Ein Open Source-Widget-Toolkit, das auch ein Anwendungsframework ist . Es läuft auf Unix-ähnlichen Systemen mit X11 , Microsoft Windows und macOS. Anwendungen, die geschrieben wurden, können auf allen von ihr unterstützten Systemen ausgeführt werden, wenn die Anwendung zusätzlich keine betriebssystemspezifische Programmierung verwendet.
  • Xojo : Eine von Xojo, Inc. entwickelte RAD-IDE, die eine objektorientierte Programmiersprache zum Erstellen von Desktop-, Web- und iOS-Apps verwendet. Xojo erstellt native, kompilierte Desktop-Apps für MacOS, Windows, Linux und Raspberry Pi. Es werden kompilierte Webanwendungen erstellt, die als eigenständige Server oder über CGI ausgeführt werden können. Kürzlich wurde die Möglichkeit hinzugefügt, native iOS-Apps zu erstellen.
  • Cosmopolitan / APE : Cosmopolitan libc ist eine C-Laufzeit für die x64-CPU, um sogenannte "αcτµαlly pδrταblε εxεcµταblε" zu erstellen , Software unter Linux 2.6+ unter Verwendung einer Linux-ABI-Teilmenge mit GCC zu schreiben und die Programme nur unter Windows 8+, macOS, funktionieren zu lassen und BSD.

Herausforderungen für die plattformübergreifende Entwicklung

Mit der plattformübergreifenden Entwicklung sind bestimmte Probleme verbunden. Einige davon sind:

  • Das Testen plattformübergreifender Anwendungen kann erheblich komplizierter sein, da verschiedene Plattformen leicht unterschiedliche Verhaltensweisen oder subtile Fehler aufweisen können. Dieses Problem hat einige Entwickler dazu veranlasst, die plattformübergreifende Entwicklung als "einmal schreiben, überall debuggen" zu verspotten, eine Interpretation des Marketing-Slogans von Sun Microsystems " einmal schreiben, überall ausführen ".
  • Entwickler beschränken sich häufig darauf, die Teilmenge der Funktionen mit dem kleinsten gemeinsamen Nenner zu verwenden, die auf allen Plattformen verfügbar sind. Dies kann die Leistung der Anwendung beeinträchtigen oder es Entwicklern verbieten, die fortschrittlichsten Funktionen jeder Plattform zu verwenden.
  • Unterschiedliche Plattformen haben häufig unterschiedliche Benutzeroberflächenkonventionen, die plattformübergreifende Anwendungen nicht immer berücksichtigen. Beispielsweise sollen Anwendungen, die für macOS und GNOME entwickelt wurden , die wichtigste Schaltfläche auf der rechten Seite eines Fensters oder Dialogfelds platzieren, während Microsoft Windows und KDE die entgegengesetzte Konvention haben. Obwohl viele dieser Unterschiede subtil sind, kann sich eine plattformübergreifende Anwendung, die diesen Konventionen nicht angemessen entspricht, für den Benutzer klobig oder fremd anfühlen. Wenn Sie schnell arbeiten, können solche gegensätzlichen Konventionen sogar zu Datenverlust führen , z. B. in einem Dialogfeld, in dem bestätigt wird, ob der Benutzer Änderungen an einer Datei speichern oder verwerfen möchte.
  • Skriptsprachen und virtuelle Maschinen müssen bei jeder Ausführung der Anwendung in nativen ausführbaren Code übersetzt werden, was zu Leistungseinbußen führt. Diese Strafe kann mithilfe fortschrittlicher Techniken wie Just-in-Time-Kompilierung verringert werden. Aber selbst unter Verwendung solcher Techniken kann ein gewisser Rechenaufwand unvermeidbar sein.
  • Verschiedene Plattformen erfordern die Verwendung nativer Paketformate wie RPM und MSI . Multi-Plattform-Installationsprogramme wie InstallAnywhere erfüllen diese Anforderungen.
  • Plattformübergreifende Ausführungsumgebungen können plattformübergreifende Sicherheitslücken aufweisen, wodurch eine fruchtbare Umgebung für plattformübergreifende Malware geschaffen wird.

Siehe auch

Verweise