Co to znaczy, że oprogramowanie działa natywnie?


27

Zastanawiałem się, co to znaczy, że oprogramowanie działa natywnie. Czym dokładnie jest takie oprogramowanie i czym różni się od oprogramowania, które nie działa natywnie? Jak mogę sprawdzić, czy dany program będzie działał natywnie na moim komputerze? Czy na moim komputerze jest już zainstalowane oprogramowanie działające natywnie?


2
„natywny” oznacza, że ​​jest przeznaczony do uruchamiania na dowolnej platformie / os
yuritsuki

Ja też ... wygląda na to, że moderatorzy mają trudności z czytaniem pytań ...

5
@faB Zdajesz sobie sprawę, że żaden moderator nie był zaangażowany w zamykanie pytania?
slhck

Przyznaję, że tytuł pytania spowodował, że pomyślałem o różnicy między uruchomieniem „programu” w ramach „systemu operacyjnego” lub samego procesora (np. Bezpośredniego dostępu do sprzętu).
Breakthrough

To nie tak, że pytanie jest zły per se, ale nie jest to dobre dla tej strony. Jak wynika z odpowiedzi, nie jest to coś, na co można odpowiedzieć czysto i ma wiele argumentów wokół niego, co sprawia, że ​​jego zamknięcie jest całkowicie odpowiednie zgodnie z FAQ.
afrazier

Odpowiedzi:


43

Oprogramowanie jest rodzime dla platformy, jeśli zostało zaprojektowane do działania na tej platformie.

Platforma zazwyczaj odnosi się do systemu operacyjnego, ale może być również stosowana do urządzeń takich jak Nintendo Game Boy.

Korzystając z Game Boy jako przykładu, pobiera oprogramowanie z kartridży. Te wkłady zawierają działający kod natywnie na Game Boy.

Emulatory są warstwą, która umożliwia uruchamianie oprogramowania dla jednej platformy na innej. Na przykład istnieją emulatory, które mogą wykonywać obrazy kartridży Game Boy i umożliwiać granie w gry Game Boy na komputerze lub nawet w telefonie komórkowym.

ZA warstwa zgodności jest jakby emulatorem. Gdy komputery 64-bitowe i systemy operacyjne stały się mainstreamem, musiały być kompatybilne z istniejącymi technologiami 32-bitowymi. Ponieważ architektury 64-bitowe i 32-bitowe są bardzo różne, warstwa kompatybilności jest często potrzebna do uruchomienia 32-bitowego oprogramowania na maszynach 64-bitowych. W przypadku 64-bitowych wersji systemu Microsoft Windows firma Microsoft musiała napisać warstwę zgodności, aby programy 32-bitowe nadal działały na nowym systemie 64-bitowym. Dlatego niektóre programy są często instalowane w folderze o nazwie Program Files (x86), gdzie x86 oznacza „32-bit”.

Warstwy zgodności są bardziej intymne z rodzimym systemem niż emulatory. VirtualBox emuluje sprzęt dla systemów operacyjnych * , a systemy, które emuluje, nie mają bardzo bezpośredniej interakcji z systemem hosta. WoW64 jest warstwa zgodności w ten sposób pozwala 32-bitowym programom na 64-bitowe Windows w bardziej zintegrowany sposób. WoW64 pomaga tworzyć programy zgodny zamiast emulować w odosobnionym środowisku.

ZA biblioteka tłumaczeń jest składnikiem warstw zgodności. Za każdym razem, gdy kod binarny działa w trybie nienaturalnym, biblioteka tłumaczeń pomaga przekierować zagraniczne, nienatywne wywołania do połączeń rodzimych, które system może zrozumieć. Programy montażowe napisane dla oryginalnego kalkulatora TI-83 mogą nie być zgodne z nowszymi kalkulatorami TI-83/84 Plus, ponieważ niektóre połączenia, które miały sens w architekturze TI-83, mogą nie być już ważne w TI-83/84 +. Biblioteka tłumaczeń (prawdopodobnie dołączona do skorup MirageOS ) zapewnia, że ​​połączenia do kalkulatora TI-83 przechodzą do nowych, zaktualizowanych miejsc w kalkulatorach TI-83/84 +.

Kod niezależny od platformy jest napisany w języku, który jest interpretowane przez coś, co zwykle działa natywnie. Na przykład PHP jest językiem programowania, który jest interpretowany i wykonywany przez zainstalowany plik binarny PHP, który został już skompilowany natywnie dla systemów operacyjnych Windows, Mac i Unix. Kod PHP, który piszą scriptery internetowe, jest niezależny od platformy, dzięki czemu kod może działać na wielu systemach operacyjnych, o ile PHP jest zainstalowany dla tych systemów operacyjnych.


Różne

Korekty

* Dziękuję Ci, Michael Kjörling , dla łapanie niektórych problemów z ta odpowiedź .

Inny

Różnica między „rodzimym” a „nie-rodzimym” to nie czarno-biały . (Kredyty do afrazier )


3
Drobne nitpick: (to VirtualBox, nie VirtualBox, i) VirtualBox nie emuluje systemu operacyjnego, symuluje sprzęt komputerowy . Możesz więc zainstalować dowolny system operacyjny w VirtualBox (z zastrzeżeniem ograniczeń wirtualizacji), a nawet napisać własny od podstaw.
a CVn

1
Ojczysty często sugeruje również, że używa podstawowego zestawu bibliotek i interfejsu API dla platformy bazowej, co może spowodować, że rozróżnienia będą nieco rozmyte. Jest sporo osób, które nie uważają aplikacji .NET za „rodzime”, podobnie jak aplikacje Win32 API są „rodzime” i podobnie niektórzy ludzie nie uważają programu KDE działającego na „rodzimym” komputerze Gnome.
afrazier

@afrazier: Dzieje się tak, ponieważ aplikacje .NET są zaprojektowane do pracy w „Common Language Runtime” i potrzebują warstwy kompatybilności do uruchomienia w systemie Windows. Lub inna warstwa kompatybilności do uruchomienia w systemie Linux.
Ben Voigt

@Ben Voigt: Nadal jest to pierwszy interfejs API, pliki binarne są kompilowane do natywnego kodu x86 / amd64 (czy to w czasie wykonywania przez CLR, czy wcześniej z ngen), a framework został dostarczony z najnowszymi wersjami Windows. Jest to jednak część większego argumentu i nie do końca tutaj pasuje.
afrazier

Virtual Box nie jest technicznie emulatorem, ale Virtualizerem. Emulator czasu minął zawsze emulował całkowicie inny sprzęt. W ramach wirtualizatora system operacyjny i oprogramowanie faktycznie działa natywnie na procesorze hosta. Różnica polega na tym, że urządzenia są wirtualne lub emulowane. To niewielka różnica techniczna, że ​​nawet witryna Virtual Box wskazuje tutaj: virtualbox.org/wiki/Virtualization
Matt H

4

Kod natywny jest zwykle używany jako przeciwieństwo kodu niezależnego od platformy. Jeśli używasz natywnego oprogramowania, uruchamiasz skompilowany plik binarny, a nie, na przykład, skrypt niezależny od platformy, taki jak javascript lub kod bajtowy Java. Skompilowane C lub skompilowane C ++ to dobre przykłady kodu natywnego.


3

Istnieje zaskakująco kilka możliwych odpowiedzi, ale standardem jest zazwyczaj: kod skompilowany do kodu operacyjnego procesora i działający przeciwko bibliotekom programistycznym systemu operacyjnego, który uruchomił komputer. W tym przypadku większość uruchamianego kodu będzie natywnym kodem. Może niektóre kontrprzykłady wyjaśnią wszystko.

Java nie jest natywnym kodem. Jest kompilowany do pośredniego kodu bajtowego, który jest następnie uruchamiany na określonym chipsecie. Java może połączenie kod natywny. Eclipse to świetny przykład - dla szybkości Java wywołuje niektóre natywne wywołania graficzne platformy.

Jeśli uciekasz WINO , emulator interfejsu API MS Windows, który nie jest natywnym kodem. Chociaż wykonujesz kod zaprojektowany dla tego chipsetu (x86), nie uruchamiasz kodu dla systemu operacyjnego, który go uruchomił, ale zastępujesz biblioteki. MAME uruchamia pliki binarne dla różnych procesorów I systemów operacyjnych.

Skrypty nie są rodzimym kodem. Są napisane w języku wyższego poziomu, który następnie musi zostać przekonwertowany w czasie wykonywania na kod działający na CPU.

Jest kilka niewyraźnych linii. Twoja przeglądarka działa jako kod natywny, ale może również uruchamiać Javę (skompilowaną do kodu bajtowego) lub Javascript (język interpretowany skryptowo).


.NET, VBA, XUL , IA-32 (przynajmniej w procesorach AMD64) ...
a CVn

3

To zależy od kontekstu. Dla mnie „natywny” oznacza, że ​​aplikacja wykorzystuje funkcje i mechanizmy, które zapewnia system operacyjny, zamiast tworzyć własne. Może to dotyczyć funkcji interfejsu użytkownika (przyciski, okna, okna wyboru plików), a także funkcji pod maską (np. Integracja z „Otwórz za pomocą ...”).

Na przykład w systemie Windows natywna aplikacja użyłaby „WinAPI”, aby uzyskać takie same przyciski, paski przewijania itp. Jak inne aplikacje. Zachowują się dokładnie tak samo w aplikacjach systemowych (notatnik), jak w rodzimych aplikacjach innych firm.

Aplikacje Java często używają „Swingu” i wyglądają zupełnie inaczej, ponieważ same rysują kontrolki, a nie te systemowe. Korzyścią jest to, że program wygląda tak samo na każdym systemie operacyjnym.

Inną opcją budowania GUI jest wieloplatformowy zestaw narzędzi, taki jak „QT”. QT poprosi system operacyjny, aby narysował kontrolki, więc powinny wyglądać bardzo natywnie, bez względu na to, czy używasz Windows, OSX, czy Linux. Pole tekstowe QT będzie wyglądało tak jak pole tekstowe systemu Windows, jednak nie jest to środowisko natywne, ale rodzaj emulacji. Możesz zauważyć niewielkie różnice w szczegółach (np. Menu kontekstowe, metody wprowadzania itd.).

Zauważ, że kiedy ludzie mówią „natywny”, często oznaczają, że program jest kompilowany do kodu maszynowego, a nie do kodu pośredniego, który jest uruchamiany na maszynie wirtualnej (jak programy Java i .NET). W powyższych przykładach aplikacja WinAPI i aplikacja QT używają kodu maszynowego, podczas gdy program Java jest kompilowany do kodu bajtowego Java. To użycie jest w dzisiejszych czasach trochę problematyczne, ponieważ wielu użytkowników uważa dobrze zrobioną aplikację .NET dla Windows - jest to po prostu .exe, używa dokładnie tych samych kontrolek i interfejsów API pod maską, i jest prawie nie do odróżnienia od programu skompilowanego do kod maszynowy.

Podobnie, rozważałbym program, który używa GTK, wie o strukturze systemu plików Unixa i może pochodzić z pakietu .deb dla Ubuntu lub Gnome. Istnieją nawet własne aplikacje Gnome napisane w javascript, które można nazwać rodzimymi! To samo dotyczy aplikacji „Metro” systemu Windows 8, które można pisać w różnych językach, niektóre kompilowane, inne nie.


2

Mówiąc bardziej abstrakcyjnie, to tak jakby pozwolić komuś innemu zaufać, wykonując program w innym języku.

  • Native oznacza, że ​​system operacyjny użyje najszybszego, najprostszego dialektu, jaki zna, binarnego.

    Zalety: szybka, duża dostępność języka, który może ze sobą rozmawiać, ponieważ zależy od metalu. Wady: bezpieczeństwo, złożone API, ograniczone do możliwości systemu operacyjnego, a także kompilatory są trudne do wykonania, ponieważ skompilowany program jest wypuszczany na wolność.

  • Nie natywny, oznacza to, że twój kod nie zostanie wykonany bezpośrednio przez system operacyjny. Może być wykonywany na wiele różnych sposobów, z których główne są interpretowane i uruchamiają wersję programu kodu bajtowego na maszynie wirtualnej.

    Plusy: API prawie się zmienia, więc programiści mogą łatwiej pracować (przynajmniej wtedy, gdy trzymają się tego konkretnego języka). Wady: wydajność (często jest to łagodny spadek, rzadko może stać się problemem), a nie każdy będzie faktycznie używał tego konkretnego języka, więc może być problem z przyjęciem tej technologii. Bezpieczeństwo może również stanowić problem, ale jest znacznie bardziej kontrolowane. Jakoś.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.