Was bedeutet es, dass Software nativ ausgeführt wird?


27

Ich habe mich gefragt, was es für Software bedeutet, nativ zu laufen. Was genau ist eine solche Software und wie unterscheidet sie sich von Software, die nicht von Haus aus ausgeführt wird? Wie kann ich feststellen, ob eine bestimmte Softwareversion von Haus aus auf meinem Computer ausgeführt wird? Befindet sich wahrscheinlich bereits Software auf meinem Computer, die nativ ausgeführt wird?


2
"native" impliziert, dass es auf jeder Plattform / jedem
Betriebssystem ausgeführt werden kann

Ich auch nicht ... anscheinend haben die Moderatoren Schwierigkeiten beim Lesen von Fragen ...

5
@faB Weißt du, dass kein Moderator am Schließen der Frage beteiligt war?
Slhck

Ich gebe zu, der Fragentitel hat mich an den Unterschied zwischen dem Ausführen eines "Programms" unter einem "Betriebssystem" oder auf dem Prozessor selbst (z. B. direkter Hardware-Zugriff) erinnert.
Durchbruch

Es ist nicht so, dass die Frage per se schlecht ist , aber es ist nicht gut für diese Seite. Wie aus den Antworten hervorgeht, kann dies nicht sauber beantwortet werden, und es gibt eine Reihe von Argumenten, weshalb der Abschluss gemäß den häufig gestellten Fragen durchaus angemessen ist.
Afrazier

Antworten:


43

Eine Software stammt ursprünglich aus einer Plattform, wenn sie für die Ausführung auf dieser Plattform entwickelt wurde.

Eine Plattform bezieht sich normalerweise auf ein Betriebssystem, kann aber auch auf Geräte wie den Nintendo Game Boy angewendet werden.

Am Beispiel des Game Boy bezieht er seine Software aus Kassetten. Diese Kassetten enthalten Code, der nativ auf dem Game Boy ausgeführt wird.

Emulatoren sind eine Schicht, mit der Software, die für eine Plattform entwickelt wurde, auf einer anderen ausgeführt werden kann. Zum Beispiel gibt es Emulatoren, die Bilder von Game Boy-Kassetten ausführen und es Ihnen ermöglichen, Game Boy-Spiele auf Ihrem Computer oder sogar Ihrem Mobiltelefon zu spielen.

Eine Kompatibilitätsebene ist wie ein Emulator. Als 64-Bit-Computer und Betriebssysteme zum Mainstream wurden, mussten sie mit den vorhandenen 32-Bit-Technologien kompatibel sein. Da 64-Bit- und 32-Bit-Architekturen sehr unterschiedlich sind, wird häufig eine Kompatibilitätsebene benötigt, um 32-Bit-Software auf 64-Bit-Computern auszuführen. Für 64-Bit-Editionen von Microsoft Windows musste Microsoft eine Kompatibilitätsebene erstellen, damit 32-Bit-Programme weiterhin auf dem neuen 64-Bit-System ausgeführt werden können. Aus diesem Grunde oft einige Programme in einen Ordner installiert sind aufgerufen Program Files (x86), in dem x86Mittel „32-Bit“.

Kompatibilitätsebenen sind in der Regel mit dem nativen System vertrauter als Emulatoren. VirtualBox emuliert Hardware für Betriebssysteme * , und die Systeme, die es emuliert, haben nicht sehr viel direkte Interaktion mit dem Hostsystem. WoW64 ist insofern eine Kompatibilitätsebene , als 32-Bit-Programme auf 64-Bit-Windows integrierter ausgeführt werden können. WoW64 hilft dabei, Programme eher kompatibel zu machen, als sie in einer isolierten Umgebung zu emulieren .

Eine Übersetzungsbibliothek ist Bestandteil von Kompatibilitätsebenen. Immer wenn Binärcode nicht systemeigen ausgeführt wird, hilft eine Übersetzungsbibliothek dabei, fremde, nicht systemeigene Aufrufe an systemeigene Aufrufe umzuleiten, die das System verstehen kann. Assembly-Programme, die für den ursprünglichen TI-83 geschrieben wurden, sind möglicherweise nicht mit den neueren TI-83/84 Plus-Rechnern kompatibel, da einige Aufrufe, die in der Architektur des TI-83 sinnvoll waren, im TI-83/84 + möglicherweise nicht mehr gültig sind. Eine Übersetzungsbibliothek (wahrscheinlich in Shells wie MirageOS enthalten ) stellt sicher, dass Aufrufe für den TI-83 an die neuen, aktualisierten Stellen in den TI-83/84 + -Rechnern gesendet werden.

Plattformunabhängiger Code ist in einer Sprache geschrieben, die von etwas interpretiert wird, das normalerweise von Haus aus ausgeführt wird. Zum Beispiel ist PHP eine Programmiersprache, die von der installierten PHP-Binärdatei interpretiert und ausgeführt wird, die bereits nativ für Windows-, Mac- und Unix-basierte Betriebssysteme kompiliert wurde. Der von Web-Skriptern geschriebene PHP-Code ist plattformunabhängig, sodass der Code auf mehreren Betriebssystemen ausgeführt werden kann, sofern PHP für diese Betriebssysteme installiert ist.


Sonstiges

Korrekturen

* Vielen Dank, Michael Kjörling , dass Sie einige Probleme mit dieser Antwort haben .

Andere

Der Unterschied zwischen "native" und "non-native" ist nicht schwarz und weiß . ( Dank an afrazier )


3
Kleiner Trottel: (es ist VirtualBox, nicht VirualBox und) VirtualBox emuliert nicht das Betriebssystem, sondern die Hardware . So können Sie jedes Betriebssystem in VirtualBox installieren (vorbehaltlich der Virtualisierungseinschränkungen) oder sogar Ihr eigenes von Grund auf neu schreiben.
ein CVn

1
Native impliziert häufig auch, dass der primäre Bibliothekssatz und die API für die zugrunde liegende Plattform verwendet werden, wodurch die Unterscheidung etwas unscharf werden kann. Es gibt einige Leute, die .NET-Anwendungen nicht als "nativ" betrachten, so wie Win32-API-Anwendungen "nativ" sind, und in ähnlicher Weise betrachten manche Leute ein KDE-Programm, das auf einem Gnome-Desktop ausgeführt wird, nicht als "nativ".
Afrazier

@afrazier: Das liegt daran, dass .NET-Anwendungen so konzipiert sind, dass sie in der "Common Language Runtime" ausgeführt werden und eine Kompatibilitätsebene benötigen, um unter Windows ausgeführt zu werden. Oder eine andere Kompatibilitätsebene für Linux.
Ben Voigt

@Ben Voigt: Es ist immer noch eine Erstanbieter-API, die Binärdateien werden zu nativem x86 / amd64-Code kompiliert (zur Laufzeit von der CLR oder im Voraus mit ngen), und das Framework wurde mit neueren Windows-Versionen ausgeliefert. Dies ist jedoch Teil eines größeren Arguments und hier nicht wirklich angemessen.
Afrazier

Virtual Box ist technisch gesehen kein Emulator, sondern ein Virtualizer. Ein Emulator der vergangenen Zeiten hat immer ganz andere Hardware emuliert. Unter einem Virtualizer läuft das Betriebssystem und die Software nativ auf der Host-CPU. Der Unterschied besteht darin, dass die Geräte virtuell oder emuliert sind. Es ist ein kleiner technischer Unterschied, auf den sogar die Virtual Box-Website hier hinweist
Matt H

4

Nativer Code wird normalerweise als Gegenteil von plattformunabhängigem Code verwendet. Wenn Sie native Software ausführen, führen Sie eine kompilierte Binärdatei aus und beispielsweise kein plattformunabhängiges Skript wie Javascript oder Java-Bytecode. Kompiliertes C oder kompiliertes C ++ sind die guten Beispiele für nativen Code.


3

Es gibt überraschenderweise ein paar mögliche Antworten, aber der Standard lautet normalerweise: Code, der zu den Opcodes für die CPU kompiliert und mit den Programmierbibliotheken des Betriebssystems ausgeführt wird, das den Computer gebootet hat. In diesem Fall handelt es sich bei dem meisten Code, den Sie ausführen, um systemeigenen Code. Vielleicht klären einige Gegenbeispiele die Dinge auf.

Java ist kein nativer Code. Es wird zu einem Zwischenbytecode kompiliert, der dann auf dem spezifischen Chipsatz ausgeführt wird. Java kann nativen Code aufrufen . Eclipse ist ein großartiges Beispiel - aus Gründen der Geschwindigkeit ruft Java einige plattformeigene Grafikaufrufe auf.

Wenn Sie WINE , einen MS Windows API-Emulator, ausführen, handelt es sich nicht um systemeigenen Code. Obwohl Sie Code ausführen, der für diesen Chipsatz (x86) entwickelt wurde, führen Sie nicht den Code für das Betriebssystem aus, das ihn gestartet hat, sondern Ersatzbibliotheken. MAME führt Binärdateien für verschiedene CPUs UND Betriebssysteme aus.

Skripte sind kein nativer Code. Sie sind in einer höheren Sprache geschrieben, die dann zur Laufzeit in Code konvertiert werden muss, der auf Ihrer CPU ausgeführt wird.

Es gibt einige verschwommene Linien. Ihr Webbrowser wird als systemeigener Code ausgeführt. Er kann jedoch auch Java (zu Bytecode kompiliert) oder Javascript (eine von Skripten interpretierte Sprache) ausführen.


.NET, VBA, XUL , IA-32 (zumindest bei AMD64-CPUs), ...
ein CVn

3

Es kommt sehr auf den Kontext an. Für mich bedeutet "nativ", dass eine Anwendung die vom Betriebssystem bereitgestellten Funktionen und Mechanismen verwendet, anstatt ihre eigenen zu rollen. Dies kann sowohl für Funktionen der Benutzeroberfläche (Schaltflächen, Fenster, Dialogfelder zur Dateiauswahl) als auch für Funktionen unter der Haube gelten (z. B. Integration mit "Öffnen mit ...").

Unter Windows verwendet eine native App beispielsweise "WinAPI", um dieselben Schaltflächen, Bildlaufleisten usw. wie andere Anwendungen abzurufen. Sie verhalten sich in System-Apps (Editor) genauso wie in nativen Apps von Drittanbietern.

Java-Anwendungen verwenden häufig "Swing" und sehen völlig anders aus, da sie ihre Steuerelemente selbst zeichnen, anstatt die Systemsteuerelemente zu verwenden. Der Vorteil ist, dass das Programm auf jedem Betriebssystem gleich aussieht.

Eine weitere Option zum Erstellen einer GUI ist ein plattformübergreifendes Toolkit wie "QT". QT fordert das Betriebssystem auf, die Steuerelemente dafür zu zeichnen, sodass sie sehr nativ aussehen sollten, unabhängig davon, ob Sie Windows, OSX oder Linux ausführen. Ein QT-Textfeld sieht genauso aus wie ein Windows-Textfeld, ist jedoch nicht nur ein natives, sondern eine Art Emulation. Möglicherweise stellen Sie kleine Unterschiede in den Details fest (z. B. Kontextmenü, Eingabemethoden usw.).

Wenn Leute "native" sagen, bedeutet dies oft, dass ein Programm eher zu Maschinencode kompiliert wird als zu einem Zwischencode, der in einer virtuellen Maschine (wie Java- und .NET-Programmen) ausgeführt wird. In den obigen Beispielen verwenden die WinAPI- und die QT-App Maschinencode, während das Java-Programm in Java-Bytecode kompiliert wird. Diese Verwendung ist heutzutage etwas problematisch, da viele Benutzer eine gut gemachte .NET-Anwendung für Windows als native betrachten würden - es handelt sich lediglich um eine EXE-Datei, die exakt dieselben Steuerelemente und APIs verwendet und von einem Programm, das für kompiliert wurde, kaum zu unterscheiden ist Maschinensprache.

Ebenso würde ich ein Programm in Betracht ziehen, das GTK verwendet, sich mit der Unix-Dateisystemstruktur auskennt und möglicherweise in einem für Ubuntu oder Gnome nativen .deb-Paket vorliegt. Es gibt sogar Gnome-Apps von Erstanbietern, die in Javascript geschrieben sind und als native bezeichnet werden können! Gleiches gilt für Windows 8 "Metro" -Anwendungen, die in verschiedenen Sprachen geschrieben werden können, einige kompiliert, andere nicht.


2

Abstrakter ausgedrückt ist es so, als würde man jemand anderem Ihr Vertrauen schenken, ein Programm in einer anderen Sprache auszuführen.

  • Nativ bedeutet, dass das Betriebssystem den schnellsten und einfachsten Dialekt verwendet, den es kennt, binär.

    Vorteile: Schnelle, große Verfügbarkeit von Sprache, die miteinander sprechen kann, da es nur auf Metal ankommt. Nachteile: Sicherheit, komplexe API, Beschränkung auf Betriebssystemfunktionen, auch Compiler sind schwer zu erstellen, da ein einmal kompiliertes Programm ins Freie geht.

  • Nicht nativ, dh Ihr Code wird nicht direkt vom Betriebssystem ausgeführt. Er kann auf viele verschiedene Arten ausgeführt werden, wobei die wichtigsten interpretiert werden und eine Bytecode-Version Ihres Programms in einer virtuellen Maschine ausgeführt wird.

    Vorteile: Die API ändert sich fast immer, so dass es für Programmierer viel einfacher ist zu arbeiten (zumindest, wenn sie sich an diese bestimmte Sprache halten). Nachteile: Leistung (es ist oft ein leichter Rückgang, es kann selten zu einem Problem werden), und nicht jeder wird diese bestimmte Sprache tatsächlich verwenden, so dass es auch ein Problem sein kann, diese Technologie zu übernehmen. Sicherheit kann auch ein Problem sein, ist aber viel unter Kontrolle. Irgendwie.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.