Je me suis demandé ce que cela signifie pour un logiciel de fonctionner en mode natif. Qu'est-ce qu'un tel logiciel et en quoi est-il différent d'un logiciel qui ne fonctionne pas en mode natif ? Comment puis-je savoir si un logiciel donné fonctionnera en mode natif sur mon ordinateur ? Est-il probable qu'un logiciel fonctionnant en mode natif se trouve déjà sur mon ordinateur ?
Réponses
Trop de publicités?Un logiciel est natif d'une plateforme s'il a été conçu pour fonctionner sur cette plateforme.
Une plate-forme fait généralement référence à un système d'exploitation, mais elle peut également s'appliquer à des appareils tels que le Nintendo Game Boy.
Si l'on prend l'exemple du Game Boy, ses logiciels proviennent de cartouches. Ces cartouches contiennent du code qui fonctionne nativement sur le Game Boy.
Emulateurs sont une couche qui permet aux logiciels conçus pour une plate-forme d'être exécutés sur une autre. Par exemple, il existe des émulateurs qui peuvent exécuter des images de cartouches Game Boy et vous permettre de jouer à des jeux Game Boy sur votre ordinateur ou même sur votre téléphone portable.
A couche de compatibilité est une sorte d'émulateur. Lorsque les ordinateurs et les systèmes d'exploitation 64 bits se sont généralisés, ils ont dû être compatibles avec les technologies 32 bits existantes. Les architectures 64 bits et 32 bits étant très différentes, une couche de compatibilité est souvent nécessaire pour exécuter des logiciels 32 bits sur des machines 64 bits. Pour les éditions 64 bits de Microsoft Windows, Microsoft a dû écrire une couche de compatibilité afin que les programmes 32 bits continuent de fonctionner sur le nouveau système 64 bits. C'est pourquoi certains programmes sont souvent installés dans un dossier appelé Program Files (x86)
donde x86
signifie "32 bits".
Les couches de compatibilité ont tendance à être plus proches du système natif que les émulateurs. VirtualBox émule le matériel pour les systèmes d'exploitation * et les systèmes qu'il émule n'ont pas beaucoup d'interaction directe avec le système hôte. WoW64 es un couche de compatibilité en ce sens qu'il permet aux programmes 32 bits de fonctionner sur Windows 64 bits de manière plus intégrée. WoW64 aide à rendre les programmes compatible plutôt que émulant dans un environnement isolé.
A bibliothèque de traduction est un composant des couches de compatibilité. Lorsque le code binaire s'exécute de manière non native, une bibliothèque de traduction permet de rediriger les appels étrangers et non natifs vers des appels natifs que le système peut comprendre. Les programmes assembleurs écrits pour la TI-83 originale peuvent ne pas être compatibles avec les calculatrices TI-83/84 Plus plus récentes, car certains appels qui avaient un sens dans l'architecture de la TI-83 peuvent ne plus être valables dans la TI-83/84+. Une bibliothèque de traduction (probablement incluse dans des shells tels que MirageOS ) garantit que les appels pour la TI-83 vont aux nouveaux emplacements mis à jour dans les calculatrices TI-83/84+.
Code indépendant de la plate-forme est écrit dans une langue qui est interprétées par quelque chose qui fonctionne habituellement en mode natif. Par exemple, PHP est un langage de programmation qui est interprété et exécuté par le binaire PHP installé, qui a déjà été compilé nativement pour les systèmes d'exploitation Windows, Mac et Unix. Le code PHP que les scripteurs Web écrivent est indépendant de la plate-forme, ce qui permet au code de fonctionner sur plusieurs systèmes d'exploitation, à condition que PHP soit installé pour ces systèmes.
Divers
Corrections
* Merci, Michael Kjörling pour attraper quelques problèmes con cette réponse .
Autre
La différence entre "natif" et "non-natif" est la suivante pas noir et blanc . (Crédits à <a href="https://superuser.com/users/34636/afrazier">afrazier </a>)
Le code natif est généralement utilisé comme opposé au code indépendant de la plate-forme. Si vous exécutez un logiciel natif, vous exécutez un binaire compilé et non, par exemple, un script indépendant de la plate-forme comme javascript ou le bytecode Java. Le C compilé ou le C++ compilé sont de bons exemples de code natif.
Il y a étonnamment plusieurs réponses possibles, mais la norme est généralement la suivante : le code est compilé selon les opcodes du processeur et s'exécute dans les bibliothèques de programmation du système d'exploitation qui a démarré l'ordinateur. Dans ce cas, la plupart du code que vous exécutez sera du code natif. Peut-être que quelques contre-exemples permettront de clarifier les choses.
Java n'est pas un code natif. Il est compilé en un bytecode intermédiaire, qui est ensuite exécuté sur le chipset spécifique. Java peut appelez code natif. Eclipse en est un excellent exemple - pour plus de rapidité, Java fait appel à des appels graphiques natifs de certaines plates-formes.
Si vous exécutez Wine un émulateur de l'API de MS Windows, qui n'est pas du code natif. Bien que vous exécutiez du code conçu pour ce chipset (x86), vous n'exécutez pas le code du système d'exploitation qui l'a démarré, mais des bibliothèques de remplacement. MAME exécute des binaires pour différents processeurs ET systèmes d'exploitation.
Les scripts ne sont pas du code natif. Ils sont écrits dans un langage de plus haut niveau qui doit ensuite être converti au moment de l'exécution en code qui fonctionne sur votre CPU.
Il y a des lignes floues. Votre navigateur web s'exécute en tant que code natif, mais il peut également exécuter Java (compilé en bytecode) ou Javascript (un script langage interprété).
Cela dépend beaucoup du contexte. Pour moi, "natif" signifie qu'une application utilise les fonctionnalités et les mécanismes fournis par le système d'exploitation, plutôt que de développer ses propres fonctionnalités. Cela peut s'appliquer aux fonctionnalités de l'interface utilisateur (boutons, fenêtres, boîtes de dialogue de sélection de fichiers), ainsi qu'aux fonctionnalités sous le capot (par exemple, l'intégration de "Ouvrir avec...").
Par exemple, sous Windows, une application native utiliserait "WinAPI" pour obtenir les mêmes boutons, barres de défilement, etc. que les autres applications. Ils se comportent exactement de la même manière dans les applications système (bloc-notes) et dans les applications tierces natives.
Les applications Java utilisent souvent "Swing" et ont un aspect complètement différent, car elles dessinent elles-mêmes leurs contrôles, plutôt que d'utiliser ceux du système. L'avantage est que le programme a le même aspect sur tous les systèmes d'exploitation.
Une autre option pour construire une interface graphique est une boîte à outils multiplateforme comme "QT". QT demandera au système d'exploitation de dessiner les contrôles pour lui, de sorte qu'ils devraient avoir un aspect natif, peu importe si vous utilisez Windows, OSX ou Linux. Une zone de texte QT ressemblera à une zone de texte Windows, mais il ne s'agit pas d'une zone native, mais d'une sorte d'émulation. Vous pourrez remarquer de petites différences dans les détails (par exemple, le menu contextuel, les méthodes de saisie, etc.)
Notez que lorsqu'on dit "natif", cela signifie souvent qu'un programme est compilé en code machine plutôt qu'en code intermédiaire, qui est exécuté dans une machine virtuelle (comme les programmes Java et .NET). Dans les exemples ci-dessus, l'interface WinAPI et l'application QT utilisent le code machine, tandis que le programme Java est compilé en bytecode Java. Cette utilisation est un peu problématique de nos jours, car de nombreux utilisateurs considèrent qu'une application .NET bien faite est native pour Windows - il s'agit simplement d'un .exe, qui utilise exactement les mêmes contrôles et API sous le capot, et qui est presque impossible à distinguer d'un programme compilé en code machine.
De même, j'envisagerais un programme qui utilise GTK, qui connaît la structure du système de fichiers Unix et qui est peut-être fourni dans un paquet .deb natif pour Ubuntu ou Gnome. Il existe même des applications Gnome originales écrites en javascript que l'on pourrait qualifier de natives ! Il en va de même pour les applications "Metro" de Windows 8, qui peuvent être écrites dans une variété de langages, certains compilés, d'autres non.
En termes plus abstraits, c'est comme si vous laissiez une personne de confiance exécuter un programme dans un autre langage.
-
Natif signifie que le système d'exploitation utilisera le dialecte le plus rapide et le plus simple qu'il connaisse, le binaire.
Avantages : rapidité, grande disponibilité de langages pouvant dialoguer entre eux puisqu'il s'agit de métal. Contre : sécurité, API complexe, limité aux capacités du système d'exploitation, les compilateurs sont également difficiles à réaliser, car un programme, une fois compilé, est diffusé dans la nature.
-
Non natif, signifie que votre code ne sera pas exécuté directement par l'OS. Il peut être exécuté de nombreuses manières différentes, les principales étant l'interprétation et l'exécution d'une version bytecode de votre programme dans une machine virtuelle.
Pour : l'API ne change presque jamais, il est donc beaucoup plus facile pour les programmeurs de travailler (du moins quand ils s'en tiennent à ce langage particulier). Inconvénients : les performances (il s'agit souvent d'une légère baisse, qui peut rarement devenir un problème), et tout le monde n'utilisera pas ce langage particulier, ce qui peut aussi être un problème pour adopter cette technologie. La sécurité peut aussi être un problème, mais elle est beaucoup mieux maîtrisée. D'une manière ou d'une autre.