Me he estado preguntando qué significa que el software se ejecute de forma nativa. ¿Qué es exactamente ese software y en qué se diferencia del software que no se ejecuta de forma nativa? ¿Cómo puedo saber si una determinada porción de software se ejecutará de forma nativa en mi computadora? ¿Es probable que ya haya software en mi computadora que se ejecute de forma nativa?
terminology
Throsby
fuente
fuente
Respuestas:
Un software es nativo de una plataforma si fue diseñado para ejecutarse en esa plataforma.
Una plataforma generalmente se refiere a un sistema operativo, pero también se puede aplicar a dispositivos como Nintendo Game Boy.
Usando Game Boy como ejemplo, obtiene su software de cartuchos. Estos cartuchos contienen código que se ejecuta de forma nativa en Game Boy.
Los emuladores son una capa que permite que el software diseñado para una plataforma se ejecute en otra. Por ejemplo, hay emuladores que pueden ejecutar imágenes de cartuchos de Game Boy y le permiten jugar juegos de Game Boy en su computadora o incluso en su teléfono móvil.
Una capa de compatibilidad es como un emulador. Cuando las computadoras y los sistemas operativos de 64 bits se volvieron convencionales, debían ser compatibles con las tecnologías existentes de 32 bits. Como las arquitecturas de 64 y 32 bits son muy diferentes, a menudo se necesita una capa de compatibilidad para ejecutar software de 32 bits en máquinas de 64 bits. Para las ediciones de 64 bits de Microsoft Windows, Microsoft necesitaba escribir una capa de compatibilidad para que los programas de 32 bits siguieran funcionando en el nuevo sistema de 64 bits. Es por eso que algunos programas a menudo se instalan en una carpeta llamada
Program Files (x86)
, dondex86
significa "32 bits".Las capas de compatibilidad tienden a ser más íntimas con el sistema nativo que los emuladores. VirtualBox emula hardware para sistemas operativos * , y los sistemas que emula no tienen mucha interacción directa con el sistema host. WoW64 es una capa de compatibilidad, ya que permite que los programas de 32 bits se ejecuten en Windows de 64 bits de una manera más integrada. WoW64 ayuda a hacer que los programas sean compatibles en lugar de emularlos en un entorno aislado.
Una biblioteca de traducción es un componente de las capas de compatibilidad. Cada vez que el código binario se ejecuta de forma no nativa, una biblioteca de traducción ayuda a redirigir las llamadas extranjeras no nativas a las llamadas nativas que el sistema puede entender. Los programas de ensamblaje escritos para la TI-83 original podrían no ser compatibles con las calculadoras TI-83/84 Plus más nuevas porque algunas llamadas que tenían sentido en la arquitectura de la TI-83 ya no son válidas en la TI-83/84 +. Una biblioteca de traducción (probablemente incluida en shells como MirageOS ) asegura que las llamadas para la TI-83 vayan a los lugares nuevos y actualizados en las calculadoras TI-83/84 +.
El código independiente de la plataforma está escrito en un lenguaje interpretado por algo que generalmente se ejecuta de forma nativa. Por ejemplo, PHP es un lenguaje de programación que es interpretado y ejecutado por el binario PHP instalado, que ya ha sido compilado de forma nativa para Windows, Mac y sistemas operativos basados en Unix. El código PHP que escriben los guionistas web es independiente de la plataforma, lo que permite que el código funcione en múltiples sistemas operativos siempre que PHP esté instalado para esos sistemas operativos.
Diverso
Correcciones
* Gracias, Michael Kjörling , por detectar algunos problemas con esta respuesta .
Otro
La diferencia entre "nativo" y "no nativo" no es en blanco y negro . (Créditos a un afrazier )
fuente
El código nativo generalmente se usa como opuesto al código independiente de la plataforma. Si ejecuta software nativo, está ejecutando un binario compilado y no, por ejemplo, una secuencia de comandos independiente de la plataforma, como JavaScript o Java bytecode. C compilado o C ++ compilado son buenos ejemplos de código nativo.
fuente
Sorprendentemente, hay un par de posibles respuestas, pero el estándar generalmente es: código compilado en los códigos de operación para la CPU y que se ejecuta contra las bibliotecas de programación del sistema operativo que arrancó la computadora. En este caso, la mayoría del código que ejecute será código nativo. Quizás algunos contraejemplos aclaren las cosas.
Java no es código nativo. Se compila en un bytecode intermedio, que luego se ejecuta en el conjunto de chips específico. Java puede llamar a código nativo. Eclipse es un gran ejemplo: para la velocidad, Java llama a algunas llamadas de gráficos nativos de la plataforma.
Si ejecuta WINE , un emulador de API de MS Windows, ese no es el código nativo. Aunque está ejecutando código diseñado para ese conjunto de chips (x86), no está ejecutando el código para el sistema operativo que lo inició, sino bibliotecas de reemplazo. MAME ejecuta binarios para diferentes CPU y sistemas operativos.
Las secuencias de comandos no son código nativo. Están escritos en un lenguaje de nivel superior que luego debe convertirse en tiempo de ejecución a código que se ejecuta en su CPU.
Hay algunas líneas borrosas. Su navegador web se ejecuta como código nativo, pero también puede ejecutar Java (compilado en bytecode) o Javascript (un lenguaje interpretado por script).
fuente
Depende mucho del contexto. Para mí, "nativo" significa que una aplicación utiliza las características y los mecanismos que proporciona el sistema operativo, en lugar de implementar las suyas propias. Esto puede aplicarse a las funciones de la interfaz de usuario (botones, ventanas, cuadros de diálogo de selección de archivos), así como a las funciones ocultas (por ejemplo, integración con "Abrir con ...").
Por ejemplo, en Windows, una aplicación nativa usaría "WinAPI" para obtener los mismos botones, barras de desplazamiento, etc. que otras aplicaciones. Se comportan exactamente igual en las aplicaciones del sistema (bloc de notas) que en las aplicaciones de terceros nativas.
Las aplicaciones Java a menudo usan "Swing" y se ven completamente diferentes, porque dibujan sus controles ellos mismos, en lugar de usar los del sistema. El beneficio es que el programa se ve igual en todos los sistemas operativos.
Otra opción para construir una GUI es un juego de herramientas multiplataforma como "QT". QT le pedirá al sistema operativo que dibuje los controles para él, por lo que deberían verse muy nativos, sin importar si está ejecutando Windows, OSX o Linux. Un cuadro de texto QT se verá como un cuadro de texto de Windows, sin embargo, no es exageradamente nativo, sino una especie de emulación. Puede notar pequeñas diferencias en los detalles (por ejemplo, el menú contextual, los métodos de entrada, etc.).
Tenga en cuenta que cuando las personas dicen "nativo", a menudo significan que un programa se compila en código máquina en lugar de en un código intermedio, que se ejecuta en una máquina virtual (como los programas Java y .NET). En los ejemplos anteriores, la aplicación WinAPI y QT están usando código de máquina, mientras que el programa Java está compilado en código de bytes Java. Este uso es un poco problemático hoy en día, porque muchos usuarios considerarían una aplicación .NET nativa bien hecha para Windows: es solo un archivo .exe, usa exactamente los mismos controles y API bajo el capó, y es casi indistinguible de un programa compilado para codigo de maquina.
Del mismo modo, consideraría un programa que usa GTK, conoce la estructura del sistema de archivos Unix y tal vez viene en un paquete .deb nativo para Ubuntu o Gnome. ¡Incluso hay aplicaciones Gnome de primera mano escritas en javascript que uno podría llamar nativas! Lo mismo se aplica a las aplicaciones "Metro" de Windows 8, que se pueden escribir en una variedad de idiomas, algunos compilados, otros no.
fuente
Para ponerlo en términos más abstractos, es como dejar que otra persona de su confianza ejecute un programa en un idioma diferente.
Native significa que el sistema operativo utilizará el dialecto más rápido y simple que conoce, binario.
Pros: disponibilidad rápida y amplia de lenguaje que puede comunicarse entre sí, ya que todo se reduce al metal. Contras: seguridad, API compleja, restringida a las capacidades del sistema operativo, también los compiladores son difíciles de hacer, porque un programa, una vez compilado, se libera en la naturaleza.
No nativo, significa que su código no será ejecutado directamente por el sistema operativo. Se puede ejecutar de muchas maneras diferentes, interpretando las principales y ejecutando una versión de bytecode de su programa en una máquina virtual.
Pros: la API casi siempre cambia, por lo que es mucho más fácil para los programadores trabajar (al menos cuando se apegan a este lenguaje en particular). Contras: rendimiento (a menudo es una disminución leve, rara vez puede convertirse en un problema), y no todos usarán este lenguaje en particular, por lo que también puede ser un problema adoptar esta tecnología. La seguridad también puede ser un problema, pero está mucho más bajo control. De alguna manera.
fuente