Eine Größe passt nicht für alle, warum Software nicht universell kompatibel ist

Eine Größe passt nicht für alle, warum Software nicht universell kompatibel ist / Technologie erklärt

Sie haben gerade ein Update mit vielen Funktionen für Ihre beliebte Open-Source-App heruntergeladen. Alles funktioniert gut, und Sie verwenden es auf Ihren anderen Geräten - also ist es Zeit, es auch auf diese Geräte auszuweiten.

Ihr glänzender neuer Linux-Laptop ist jedoch nicht mit Ihrem Windows-Installationspaket kompatibel. Wie wäre es mit Ihrem Android-Tablet? iPhone? PS4? Warum können Sie diese Software nicht einfach nehmen und verwenden, wo immer Sie möchten? Lassen Sie uns einige verschiedene Hindernisse für den Traum erkunden “einmal kaufen, überall laufen lassen.”

Softwareentwicklung und Betriebssystemarchitektur

Um zu verstehen, warum Software nicht über Betriebssysteme hinweg funktioniert, ist ein wenig (ich verspreche nur ein wenig) Kenntnisse darüber, wie Software hergestellt wird.

Der Software-Entwicklungsprozess

In einem sehr grundlegenden Software-Entwicklungsablauf für Desktop, Server und Mobilgeräte (dh nicht Web-Programmierung vs. Web-Entwicklung: Was ist der Unterschied? Programmierung vs. Web-Entwicklung: Was ist der Unterschied? Sie denken vielleicht, dass Anwendungsprogrammierer und Web-Entwickler die gleiche Aufgabe ausführen , aber das ist weit von der Wahrheit entfernt. Hier sind die wichtigsten Unterschiede zwischen Programmierern und Web-Entwicklern.

  1. Geben Sie einige ein Code in eine oder mehrere Dateien.
  2. Kompilieren den Code in etwas, das der Computer ausführen kann.
  3. Prüfung um sicherzustellen, dass das Programm wie erwartet funktioniert.
  4. Paketieren und verteilen / implementieren die Software.

Es ist eine Kombination der ersten und zweiten Schritte, die uns hier beschäftigen. Der Prozess von kompilieren Software oder die Umwandlung von Code in Einsen und Nullen, die ein Computer versteht (Maschinensprache) ist komplex. Wir werden nicht detailliert darauf eingehen, aber es ist nützlich, auf hoher Ebene zu verstehen, was passiert.

OS-Architektur

Ein wichtiger Punkt zu verstehen ist, dass ein Betriebssystem keine einzelne Entität ist. Es besteht vielmehr aus Softwareschichten.

Betriebssystem-Kernel

Ein Betriebssystem Kernel ist für die Kommunikation mit der Hardware des Computers verantwortlich. Software übermittelt ihre Befehle an den Kernel, der wiederum Befehle an die Hardware ausgibt, um beispielsweise eine Datei von der Festplatte zu lesen oder ein Fenster auf dem Bildschirm zu zeichnen. Im Wesentlichen werden alle Informationen (ob gespeicherte Daten, Berechnungen oder Benutzereingaben) zwischen Hardware und verschiedenen Softwarekomponenten koordiniert. Der Kernel stellt all diese Funktionen der Software über zur Verfügung Systemaufrufe.

Bildnachweis: Wikimedia Commons

Der Kernel jedes Betriebssystems wird Systemaufrufe unterschiedlich implementieren, je nachdem, welche verfügbar sind, wie sie aufgerufen werden oder welche Optionen sie nutzen. Daher muss die Software die Systemaufrufe berücksichtigen, die vom Kernel jedes Betriebssystems unterstützt werden, auf das sie abzielen. Der Systemaufruf, den Sie zum Senden von Daten an die GPU in Linux verwenden, hat möglicherweise einen anderen Namen, eine Liste mit Informationen, die Sie bereitstellen müssen, oder beides in Windows. Dieser genaue Anruf ist möglicherweise gar nicht da.

Systembibliotheken

In vielen Fällen ruft die Software nicht direkt zum Kernel auf. Stattdessen ruft es an Systembibliotheken, oder Sammlungen von Grundfunktionen. Bibliotheken existieren so (zum Beispiel), dass jedes Programm, das Dateien auf der Festplatte speichert, keine Funktion dafür schreiben muss. Stattdessen einfach Links zu eine Systembibliothek und verwendet eine vorhandene Funktion. Die GLibC-Bibliothek für Linux ist ein Paradebeispiel, ebenso wie die .DLL-Dateien in der Win32-API oder der Inhalt eines Mac-Verzeichnisses / System / Library. So greifen Sie auf den OS X-Bibliotheksordner zu und warum ist es praktisch? Zugriff auf die OS X-Bibliothek Ordner & Warum es praktisch ist Die meisten OS X Library-Ordner sollten am besten in Ruhe gelassen werden. Es ist jedoch nützlich, sich in und um die User Library zu informieren. Weiterlesen .

Bildnachweis: ScottXW über Wikimedia Commons

Systembibliotheken fungieren als eine Art Übersetzer zwischen Anwendungen und dem Kern für Routineaufgaben. Anwendungen machen Funktionsaufrufe zu diesen Bibliotheken, die viele der Low-Level-Details behandeln. Sie können auch aus Gründen des Komforts Systemaufrufe an den Kernel vornehmen. Wie Sie vielleicht schon erraten haben, bedeutet dies, dass diese Bibliotheken für einen bestimmten Kernel geschrieben wurden und daher nicht für Betriebssysteme mit unterschiedlichen Kerneln verwendet werden können.

Header der Betriebssystemausführung

Der letzte Weg zu universeller Software ist das Format der ausführbaren Dateien für die Betriebssysteme. Ein Betriebssystem erwartet, dass die Dateien, die es ausführt, einem bestimmten binären Dateiformat folgen. Alles, was Sie über Dateiformate und ihre Eigenschaften wissen müssen Alles, was Sie über Dateiformate und ihre Eigenschaften wissen müssen Wir verwenden die Wortdatei austauschbar: Musik, Bild, Tabellenkalkulation, Diashow , und so weiter. Aber was macht eine Datei überhaupt zu einer "Datei"? Versuchen wir, diesen grundlegenden Teil des Computers zu verstehen. Weiterlesen . Beispielsweise müssen die ELF-Dateien (Executable and Linkable Format), die auf Betriebssystemen wie Linux und FreeBSD ausgeführt werden, bestimmte Eigenschaften der Datei in bestimmten Bytes angeben, wie in der folgenden Abbildung dargestellt.

Das Anwendungsbinäre Schnittstelle (ABI) gezeigt werden kann, ist von besonderer Bedeutung. Eine Kombination der Aufrufe, die von Prozessor-, Kernel- und Systembibliotheken verfügbar sind, ähnelt einer ABI Anwendungsprogrammierschnittstelle (API) Es definiert, wie zwei Programme miteinander kommunizieren. Die API wird jedoch von Programmierern (Menschen) im Quellcode verwendet, um zwei Software-Teile anzuzeigen sollte miteinander reden. Das ABI erlaubt es ihnen tatsächlich, dies zu tun, sobald die Software kompiliert und ausgeführt wird. Jedes Betriebssystem implementiert eine bestimmte ABI, die zwischen den Versionen desselben Betriebssystems wechseln kann.

Im Allgemeinen implementieren Betriebssysteme ihre eigene ABI, die durch eine Kombination aus Prozessortyp, Kernel und beliebigen Standardsystembibliotheken bestimmt wird. Aber manchmal implementiert ein Betriebssystem mehr als eine. FreeBSD unterstützt beispielsweise Linux-Binärdateien, da es eine Linux-ABI als Add-On zum FreeBSD-Kernel (anstelle des Linux-Kernels) bereitstellt. Dies unterscheidet sich von Virtualisierungsprogrammen. Was ist eine virtuelle Maschine? Alles, was Sie wissen müssen, was eine virtuelle Maschine ist Alles, was Sie wissen müssen Mit virtuellen Maschinen können Sie andere Betriebssysteme auf Ihrem aktuellen Computer ausführen. Hier ist, was Sie darüber wissen sollten. Lesen Sie mehr wie VMWare oder VirtualBox, die Software zum Simulieren einer gesamten Maschine (Hardware und alle) verwenden. Infolgedessen ist diese Art der ABI-Kompatibilität schneller, aber der Aufwand für die Wartung ist erheblich. Dies ist der Grund, warum es selten ist, obwohl Microsoft kürzlich den Wert von Ubuntu jetzt im Windows Store erkannt hat. Ubuntu ist jetzt im Windows Store verfügbar. Windows Insiders können Ubuntu jetzt auf Windows 10 herunterladen und installieren. Dadurch werden Linux und Windows zu einer unheiligen Vereinigung zusammengeführt Wenige hatten sich jemals vorgestellt, sie würden lange genug leben, um Zeugnis zu geben. Lesen Sie mehr dazu.

Ausnahme: Interpretierte Software

Basierend auf dem oben genannten haben wir gelernt, dass Entwickler Software für einen und nur einen Zielsystemtyp schreiben. Außer wenn sie es nicht tun. Es gibt viele Anwendungen, die Sie herunterladen und auf einem Mac ausführen können, dann unter Windows kopieren und ausführen und möglicherweise sogar erneut kopieren und unter Linux ohne Probleme ausführen können. Wie ist das möglich?

War ich bisher gelogen??

Wie sich herausstellt, gibt es eine Kategorie von Software, die auf der Oberfläche genau so aussieht “läuft überall hin.” Sie können es auf jeder unterstützten Plattform herunterladen und ausführen - das Schlüsselwort lautet “unterstützt.” Tatsächlich laden Sie den Quellcode für die Anwendung herunter, während eine andere Anwendung (die Dolmetscher) ist eine Art Ausführung des Quellcodes direkt in Echtzeit. Dies ist so etwas wie eine Vereinfachung, schauen wir uns also genau an, wie dies mit einigen Sprachen funktioniert.

Java

Als Java zum ersten Mal veröffentlicht wurde, versprach es (wörtlich) “einmal schreiben, irgendwo laufen.” Die Idee war, Anwendungen mithilfe von Java-Funktionen zum Speichern von Dateien, zum Durchführen von Berechnungen oder zum Erstellen eines Anwendungsfensters zu erstellen. Dann ein Java-Laufzeitumgebung (JRE) Für jede unterstützte Computerplattform würde der Code ausgeführt und in native Betriebssystemfunktionen übersetzt. Der Trick für Java ist, dass es nicht läuft “direkt” auf dem Betriebssystem. Es läuft in einem Teil der JRE, der Java virtuelle Maschine und das läuft auf dem Betriebssystem.

Durch das Einfügen dieser zusätzlichen Softwareschicht zwischen der Anwendung und dem Betriebssystem können Sie sich auf Java auf eine Reihe von Funktionen konzentrieren, die für alle Betriebssysteme gleich sind. Sie teilen Java mit, was Sie tun möchten, und überlassen Sie der JVM für Ihr System, wie sie es tatsächlich tun soll. Das folgende Bild zeigt dies in Aktion, wo JIDE Software Java Desktop Application Framework dieselbe Anwendung für Mac (oben) und Windows (Mitte links) anzeigt., “reines Java” (Mitte rechts) und Linux (unten).

Bildnachweis: JIDE Software

Java-Programme nicht genau “kompilieren” sich in Echtzeit. Der Java-Compiler rendert sie vielmehr in “Bytecode.” Sie können sich Bytecode als halbgebackenes Programm vorstellen. Wenn der Entwickler die Anwendung freigibt, wird sie so viel wie möglich kompiliert, ohne zu wissen, auf welchem ​​Betriebssystem sie ausgeführt wird. Wenn Sie es tatsächlich starten, wird die JVM gestartet “backen Sie es den Rest des Weges” um die Funktionen des Host-Betriebssystems anzupassen.

Python

Eine beliebte interpretierte Sprache ist Python. 5 Gründe, warum Python-Programmierung nicht nutzlos ist. 5 Gründe, warum Python-Programmierung nicht nutzlos ist. Python - Sie lieben es oder Sie hassen es. Sie können sogar wie ein Pendel von einem Ende zum anderen schwingen. Unabhängig davon ist Python eine Sprache, bei der es schwierig ist, ambivalent zu sein. Weiterlesen . Wenn Sie ein Python-Skript ausführen, übersetzt der Python-Interpreter Code in Anweisungen für das Betriebssystem. Es kann auch ähnlich wie Java funktionieren: wenn Sie “einführen” Code von außerhalb Ihrer Anwendung wird beim ersten Aufruf zum Bytecode kompiliert. Dann wird der Interpreter wissen, ob sich der ursprüngliche Code bei nachfolgenden Durchläufen geändert hat. Dann wird er in einen neuen Bytecode neu kompiliert.

Ein cooles Nebenprodukt davon “auf Nachfrage” Laufen ist, dass Sie den Interpreter verwenden können, um Ihre Skripts interaktiv zu entwickeln. Einfach tippen “Python” In der Befehlszeile starten Sie den Interpreter, und Sie können Code ausführen und die Ergebnisse sofort anzeigen.

Dies bedeutet, dass Entwickler herumspielen und Dinge optimieren können “Leben.” Sobald eine Codezeile das tut, was sie möchten, kopieren Sie sie und fügen Sie sie in eine Skriptdatei ein (die wesentlich effizienter ist als die “Code-Compile-Test” Zyklus, den nicht interpretierte Sprachprogrammierer tun müssen).

Selbst wenn Software gleich ist, ist es wahrscheinlich nicht

Leider hat sich die Tech-Industrie für die Anwender nicht wirklich entwickelt “Universal-” Format. Und das kann es niemals tun. Die Einführung dieser Arten von Standards führt häufig zu einem “kleinster gemeinsamer Nenner” Lösung, mit Zugeständnissen im Interesse der Zustimmung aller.

Was denkst du? Möchten Sie lieber eine universell kompatible Software haben, auch wenn sie nicht so gut wäre? Oder sind Sie mit dem Betriebssystem, das Sie verwenden, einverstanden und haben kein Interesse an Apps anderer Plattformen? Lassen Sie uns unten in den Kommentaren wissen!

Bildnachweise: Masterchief_Productions / Shutterstock

Erfahren Sie mehr über: Dateisystem, Software installieren, Betriebssysteme.