Cliente nativo

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 29 de septiembre de 2017; las comprobaciones requieren 16 ediciones .
Cliente nativo
Desarrollador Google
Escrito en C y C++
Sistema operativo multiplataforma
Primera edición 16 de septiembre de 2011 [1]
plataforma de hardware x86 , x86_64 , BRAZO [2] y MIPS
ultima versión
Estado Desarrollado
Licencia licencia BSD modificada [d]
Sitio web desarrollador.chrome.com/doc…

Native Client ( NaCl ) es una tecnología de espacio aislado para ejecutar código en las plataformas x86 , x86-64 , ARM y MIPS , que le permite ejecutar de forma segura código nativo directamente en el navegador, independientemente del sistema operativo, a una velocidad cercana a la de ejecución. código nativo . Esta tecnología también se puede utilizar para crear complementos de navegador seguros , partes de una aplicación o las propias aplicaciones [4] , como ZeroVM .

Para mostrar la disponibilidad de la tecnología, el 9 de diciembre de 2011, Google presentó un juego [5] con gráficos ricos (el juego ya no está disponible en este momento). NaCl utiliza gráficos 3D acelerados por hardware a través de OpenGL ES 2.0, que se ejecutan en un espacio aislado de almacenamiento local con capacidad de pantalla completa e interacción con el mouse. [6] [7]

Portable Native Client ( Portable Native Client en inglés  , abreviado PNaCl) es una versión independiente de la arquitectura de esta tecnología. Las aplicaciones PNaCl utilizan tecnologías de compilación AOT . La idea básica de NaCl (ejecutar código nativo en un navegador) se implementó en ActiveX , que tiene muchos problemas de seguridad. La tecnología NaCl evita esto mediante el uso de una caja de arena.

Existe una alternativa a NaCl llamada asm.js , que también le permite compilar aplicaciones C o C++ para que se ejecuten directamente en el navegador (casi a una velocidad nativa ), admite la compilación AOT y es un subconjunto del lenguaje JavaScript, es decir, e. retrocompatible con navegadores que no tienen soporte nativo para ello. Otra alternativa a NaCl (aunque originalmente basada en PNaCl) es WebAssembly .

El 12 de octubre de 2016 , apareció un comentario [8] en el rastreador de errores del proyecto Chromium , mencionando la disolución de los equipos que trabajaban en Pepper y Native Client de Google.

El 30 de mayo de 2017, Google anunció que dejaría de utilizar PNaCl en favor de WebAssembly . [9]

Descripción

Native Client es un proyecto de código abierto . Hasta la fecha, Quake [10] , XaoS , Battle for Wesnoth , Doom , Lara Croft and the Guardian of Light , From Dust y MAME , así como el sistema de síntesis de sonido del software Csound , se han portado a Native Client. La tecnología está disponible en el navegador Google Chrome a partir de la versión 14 [11] y se activa por defecto a partir de la versión 31, en la que se introdujo oficialmente el Portable Native Client (PNaCl). [12]

En marzo de 2010 se lanzó una implementación ARM de la tecnología. [13] Las plataformas x86-64, IA-32 y MIPS fueron compatibles de forma nativa.

Para ejecutarse con la tecnología PNaCl, la aplicación debe compilarse en un código de bytes independiente de la arquitectura del formato LLVM . [14] Los ejecutables creados de esta manera se denominan ejecutables PNaCl (pexe). Las herramientas de compilación de PNaCl producen archivos .pexe; NaCl - .nexe. Los archivos .nexe tienen la firma 0x7F 'E' 'L' 'F' (es decir, son archivos ELF ). Chrome traduce pexe en ejecutables específicos de la arquitectura para ejecutar .

NaCl utiliza detección de errores de software y protección de espacio aislado en plataformas x86-64 y ARM. [15] La implementación en x86-32 presenta una nueva forma de sandboxing. [16] El sandboxing de Native Client establece sus segmentos de memoria en arquitectura x86 . También se utiliza un verificador de código para evitar que se realicen llamadas al sistema no seguras. Para evitar saltar a la parte desprotegida de la llamada, Native Client requiere que todos los saltos indirectos comiencen en bloques alineados de 32 bytes, y las instrucciones no pueden salir de estos bloques. [16] Debido a estas limitaciones, el código escrito en C o C++ debe recompilarse de una manera especial para ejecutarse utilizando la tecnología Native Client, lo que se puede hacer utilizando versiones especializadas de la cadena de herramientas GNU , en particular GNU Compiler Collection , GNU Binutils y LLVM .

El cliente nativo usa Newlib como la biblioteca C estándar , sin embargo, también está disponible un puerto de la biblioteca GNU C. [17]

Pimientos

Pepper API es una API gratuita multiplataforma para crear módulos para Native Client. Plugin Pepper API ( eng. Pepper Plugin API , abreviado PPAPI) es una API multiplataforma para complementos protegidos por la tecnología Native Client, basada en NPAPI , pero completamente reescrita. Actualmente se utiliza en navegadores similares a Chromium para ejecutar la versión PPAPI de Adobe Flash [18] y el visor de PDF integrado [19] .  

PPAPI

El 12 de agosto de 2009, el proyecto Pepper asociado con el desarrollo del complemento Pepper API [20] se presentó en la página de códigos de Google , que establecía que PPAPI es un conjunto de modificaciones de NPAPI para hacer que dichos complementos sean más portátiles y seguros [21] . El complemento se creó para implementar fácilmente el lanzamiento fuera del proceso. En el futuro, el objetivo del proyecto era proporcionar un marco para crear complementos totalmente multiplataforma. Se planeó implementar estas tecnologías:

Posteriormente, el uso de PPAPI ayudó a implementar soporte para gamepads y WebSocket .

A partir del 13 de mayo de 2010, Chromium se convirtió en el único navegador compatible con el nuevo modelo de complemento. [22] Mozilla Firefox no es compatible con Pepper ya que no existe una especificación de API completa fuera de su implementación en Chrome, que se creó solo para el motor del navegador Blink . A partir de 2016, Pepper es compatible con navegadores basados ​​en Chrome, Chromium y Blink, como Opera .

Proyectos en Native Client

Hay un sitio llamado The Go Playground Archivado el 17 de noviembre de 2021 en Wayback Machine que utiliza esta tecnología para permitir la experimentación con Go directamente en el navegador.

Reacción pública

Chad Austin elogió la forma de Native Client de crear aplicaciones web de alto rendimiento ( con  solo un % menos de rendimiento que el código de máquina ) al tiempo que permite que las aplicaciones del cliente evolucionen al proporcionar una selección de lenguajes de programación (excepto JavaScript). [23]

John Carmack , copropietario de Id Software , mencionó Native Client en QuakeCon 2012:

Si necesita hacer algo en el navegador, Native Client es mucho más interesante, que comenzó como un truco x86 realmente inteligente que le permite hacer lo que quiera sin salir del sandbox del nivel de acceso del usuario. Ahora hay una recompilación dinámica, y lo que escribes en C o C++ se compila en algo que no es un código de máquina altamente optimizado, pero se parece mucho al código de máquina. Puedes hacer todo tipo de operaciones locas con punteros y todo lo que los desarrolladores de juegos están acostumbrados a hacer a nivel de hardware.Carmack, Juan [24]
  Texto original  (inglés) : 
si tiene que hacer algo dentro de un navegador, Native Client es mucho más interesante como algo que comenzó como un truco x86 realmente bastante inteligente en la forma en que podrían aislar todo esto en el modo de usuario de manera interesante. Ahora es una recompilación dinámica, pero algo que programa en C o C++ y se compila hasta algo que no va a ser su nivel de optimización -O4 para un código completamente nativo, sino bastante cercano al código nativo. Podrías hacer todas tus persecuciones de punteros malvados y lo que quieras hacer como desarrollador de juegos al máximo.

El vicepresidente de Mozilla, Jay Sullivan , dijo que Mozilla no tiene  planes de ejecutar código nativo en el navegador porque

Estas aplicaciones nativas son cajas negras en una página web. […] Creemos en la tecnología HTML, y ahí es donde vamos a poner nuestra energía.Jay Sullivan [  25 ] _
  Texto original  (inglés) : 
Estas aplicaciones nativas son solo pequeñas cajas negras en una página web. […] Realmente creemos en HTML, y aquí es donde queremos enfocarnos.

El colaborador de Mozilla, Blizzard , criticó la tecnología NaCl y argumentó que el código nativo nunca debería usarse en la web. También comparó NaCl con la tecnología ActiveX de Microsoft , que llegó al punto del infierno DLL . [cuatro]

Håkon Wium Lie ( noruego:  Håkon Wium Lie ) , director técnico de Opera , cree que

NaCl parece estar "apuntando a esos malos viejos tiempos, antes de la web" [...] La esencia de Native Client es construir una nueva plataforma, o trasladar una antigua a la web [...] lo que introducirá problemas de complejidad y seguridad y privará la plataforma web de atención.Håkon Wium Lie ( Noruego  Håkon Wium Lie ) [4]
  Texto original  (inglés) : 
NaCl parece estar 'anhelando los viejos tiempos, antes de la web' [...] Native Client se trata de construir una nueva plataforma, o trasladar una plataforma antigua a la web [...] traerá problemas de complejidad y seguridad, y le quitará el foco a la plataforma web.

Brendan Eich , CTO de Mozilla, dijo que ECMAScript 6 es suficiente para todas las necesidades de desarrollo de aplicaciones web. [26]

Véase también

Notas

  1. El cliente nativo de Google se activa en Chrome - 2011.
  2. Soporte de cliente nativo en ARM - 2013.
  3. https://developer.chrome.com/native-client/sdk/release-notes#chrome-pepper-49
  4. 1 2 3 Metz, Cade . Cliente nativo de Google: la web del futuro, ¿o del pasado?  (inglés)  (12 de septiembre de 2011). Archivado desde el original el 6 de agosto de 2016. Consultado el 6 de agosto de 2016.
  5. Jodakovski, Konstantin . La nueva tecnología Google Chrome trae Bastion al navegador  (13 de diciembre de 2011). Archivado desde el original el 21 de agosto de 2016. Consultado el 6 de agosto de 2016.
  6. Stefansen, Christian . Los juegos, las aplicaciones y los tiempos de ejecución llegan a Native Client  (  9 de diciembre de 2011). Archivado desde el original el 19 de agosto de 2016. Consultado el 6 de agosto de 2016.
  7. Rosenblatt, Seth . Native Client convierte a Chrome en una plataforma de juegos de gama alta  (  9 de diciembre de 2011). Archivado desde el original el 27 de abril de 2016. Consultado el 6 de agosto de 2016.
  8. Bugs.chromium.org._  _ _ bugs.chromium.org (12 de noviembre de 2016). Consultado el 7 de marzo de 2018. Archivado desde el original el 18 de agosto de 2017.
  9. ¡Adiós PNaCl, hola WebAssembly!  (ing.) , Chromium Blog  (30 de mayo de 2017). Archivado desde el original el 30 de mayo de 2017. Consultado el 7 de marzo de 2018.
  10. Humphries, Mateo . Google muestra Quake-clone ejecutándose en Native Client  (  13 de mayo de 2010). Archivado desde el original el 21 de agosto de 2016. Consultado el 6 de agosto de 2016.
  11. Chen, Brad . Una nueva versión estable de Chrome que amplía las fronteras de la web  (  16 de septiembre de 2011). Archivado desde el original el 20 de agosto de 2016. Consultado el 6 de agosto de 2016.
  12. Sehr, David . Portable Native Client: el "pináculo" de la velocidad, la seguridad y la portabilidad  (  12 de noviembre de 2013). Archivado desde el original el 13 de mayo de 2016. Consultado el 6 de agosto de 2016.
  13. Sehr, David . Soporte de Native Client en ARM  (ing.)  (22 de enero de 2013). Archivado desde el original el 27 de julio de 2016. Consultado el 6 de agosto de 2016.
  14. Alan Donovan, Robert Muth, Brad Chen, David Sehr. PNaCl: Portable Native Client Executables  (inglés) (22 de febrero de 2010). Archivado desde el original el 12 de marzo de 2016.
  15. David Sehr, Robert Muth, Cliff L. Biffle, Victor Khimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen. Adaptación del aislamiento de fallas de software a las arquitecturas de CPU contemporáneas  ( 2010). Consultado el 6 de agosto de 2016. Archivado desde el original el 24 de julio de 2016.
  16. 1 2 Bennet Yee, David Sehr, Greg Dardyk, Brad Chen, Robert Muth, Tavis Ormandy, Shiki Okasaka, Neha Narula, Nicholas Fullagar. Cliente nativo: una caja de arena para código nativo x86 portátil y no confiable  (inglés) (2009). Consultado el 6 de agosto de 2016. Archivado desde el original el 12 de septiembre de 2016.
  17. Edificio  ._ _ Consultado el 6 de agosto de 2016. Archivado desde el original el 9 de noviembre de 2016.
  18. Schuh, Justin . El camino hacia un Flash más seguro, estable y llamativo  (  8 de agosto de 2012). Archivado desde el original el 29 de julio de 2016. Consultado el 6 de agosto de 2016.
  19. Metz, Cadé . Google abraza a Adobe con más fuerza con la combinación de Chrome-PDF  (  18 de junio de 2010). Archivado desde el original el 6 de agosto de 2016. Consultado el 6 de agosto de 2016.
  20. ppapi._  _ _ Consultado el 6 de agosto de 2016. Archivado desde el original el 6 de octubre de 2016.
  21. ppapi-Concepts.wiki  . _ Consultado el 6 de agosto de 2016. Archivado desde el original el 6 de octubre de 2016.
  22. Metz, Cadé . Google calienta código nativo para Chrome OS  (  13 de mayo de 2010). Archivado desde el original el 17 de enero de 2019. Consultado el 6 de agosto de 2016.
  23. Chad Austin. In Defense of Language Democracy (O: Why the Browser Needs a Virtual Machine)  (inglés) (8 de enero de 2011). Consultado el 6 de agosto de 2016. Archivado desde el original el 16 de agosto de 2016.
  24. Vídeo de la QuakeCon 2012 (comienza a las 2 horas, 36 minutos, 18 segundos) en YouTube , a las 2:36:18
  25. Metz, Cadé . Mozilla: Nuestro navegador no ejecutará código nativo  (  24 de junio de 2010). Archivado desde el original el 26 de agosto de 2016. Consultado el 6 de agosto de 2016.
  26. Crill, Paul . El fundador de JavaScript descarta Google Native Client e impulsa ECMAScript 6  (  31 de mayo de 2012). Archivado desde el original el 20 de septiembre de 2016. Consultado el 6 de agosto de 2016.

Enlaces