Google Native Client ( NaCl ) es una tecnología de espacio aislado para ejecutar un subconjunto de código nativo Intel x86 , ARM o MIPS , o un ejecutable portátil, en un espacio aislado . Permite ejecutar de forma segura código nativo desde un navegador web , independientemente del sistema operativo del usuario , lo que permite que las aplicaciones web se ejecuten a velocidades casi nativas, lo que se alinea con los planes de Google para Chrome OS . También se puede utilizar para proteger los complementos del navegador y partes de otras aplicaciones o aplicaciones completas [2] como ZeroVM . [3]
Desarrollador (es) | Google , otros |
---|---|
Versión inicial | 16 de septiembre de 2011 [1] |
Lanzamiento estable | SDK: Pepper 45/10 de julio de 2015 Clientes: igual que Google Chrome |
Repositorio | |
Escrito en | C , C ++ |
Sistema operativo | Windows , Linux , macOS , Chrome OS |
Plataforma | x86 , ARM , MIPS |
Tipo | Sandbox en navegadores web para código nativo |
Licencia | Nuevo BSD |
Sitio web | desarrollador |
Para demostrar la preparación de la tecnología, el 9 de diciembre de 2011, Google anunció la disponibilidad de varias nuevas versiones de cromo-sólo de juegos conocidos por sus ricos y procesador intensivos en gráficos , incluyendo Bastion (ya no se admite en la tienda Chrome Web). NaCl ejecuta gráficos 3D acelerados por hardware (a través de OpenGL ES 2.0), almacenamiento de archivos local en espacio aislado, carga dinámica , modo de pantalla completa y captura de mouse . También hay planes para que el NaCl esté disponible en dispositivos portátiles. [4] [5]
Portable Native Client (PNaCl) es una versión independiente de la arquitectura. Las aplicaciones PNaCl se compilan con anticipación . Se recomienda PNaCl sobre NaCl para la mayoría de los casos de uso. [6] El concepto general de NaCl (que ejecuta código nativo en el navegador web) se implementó anteriormente en ActiveX , que, mientras todavía está en uso, tiene acceso completo al sistema (disco, memoria, interfaz de usuario, registro, etc.) . Native Client evita este problema mediante el uso de la zona de pruebas.
Una alternativa a NaCl es asm.js , que también permite que las aplicaciones escritas en C o C ++ se compilen para ejecutarse en el navegador (a más de la mitad de la velocidad nativa), y también admite la compilación anticipada, pero es un subconjunto de JavaScript y, por lo tanto, compatible con versiones anteriores de los navegadores que no lo admiten directamente. Otra alternativa (aunque inicialmente puede ser impulsada por PNaCl) es WebAssembly .
El 12 de octubre de 2016, un comentario sobre el rastreador de problemas de Chromium indicó que los equipos de Google Pepper y Native Client se habían desfasado. [7] El 30 de mayo de 2017, Google anunció la desactivación de PNaCl a favor de WebAssembly . [8] Aunque inicialmente Google planeó eliminar PNaCl en el primer trimestre de 2018, [8] y posteriormente en el segundo trimestre de 2019, [9] actualmente está previsto que se elimine en junio de 2022 (junto con las aplicaciones de Chrome). [10]
Descripción general
Native Client es un proyecto de código abierto desarrollado por Google . [11] Hasta la fecha, Quake , [12] XaoS , Battle for Wesnoth , [13] Doom , [14] Lara Croft y el guardián de la luz , [15] From Dust , [16] y MAME , así como el sonido El sistema de procesamiento Csound , se ha adaptado a Native Client. Native Client ha estado disponible en el navegador web Google Chrome desde la versión 14 y se ha habilitado de forma predeterminada desde la versión 31, cuando se lanzó Portable Native Client (PNaCl, pronunciado: pináculo). [17] [18] [19]
En marzo de 2010 se publicó una implementación de ARM . [20] También se admiten x86-64 , IA-32 y MIPS .
Para ejecutar una aplicación portable bajo PNaCl, debe ser compilado para un subconjunto arquitectura-agnóstico y estable de la LLVM intermedio representación bytecode . [21] Los ejecutables se denominan ejecutables PNaCl (pexes). PNaCl Toolchain crea archivos .pexe; Archivos .nexe de NaCl Toolchain. El número mágico de archivos .nexe es 0x7F 'E' 'L' 'F', que es ELF . En Chrome, se traducen a ejecutables específicos de la arquitectura para que se puedan ejecutar.
NaCl utiliza la detección y el aislamiento de fallas de software para el sandboxing en x86-64 y ARM. [22] La implementación x86-32 de Native Client se destaca por su novedoso método de espacio aislado, que hace uso de la facilidad de segmentación de la arquitectura x86, que rara vez se usa . [23] Native Client configura segmentos x86 para restringir el rango de memoria al que puede acceder el código de espacio aislado. Utiliza un verificador de código para evitar el uso de instrucciones inseguras, como las que realizan llamadas al sistema. Para evitar que el código salte a una instrucción insegura oculta en el medio de una instrucción segura, Native Client requiere que todos los saltos indirectos sean saltos al inicio de bloques alineados de 32 bytes, y las instrucciones no pueden cruzar estos bloques. [23] Debido a estas restricciones, el código C y C ++ debe recompilarse para ejecutarse en Native Client, que proporciona versiones personalizadas de la cadena de herramientas GNU , específicamente GNU Compiler Collection (GCC), GNU Binutils y LLVM .
Native Client tiene una licencia de estilo BSD .
Native Client usa Newlib como su biblioteca C , pero también está disponible una versión de GNU C Library (GNU libc). [24]
Pimienta
NaCl denota cloruro de sodio , sal común de mesa ; como juego de palabras , también se utilizó el nombre de pimienta . Pepper API es una API multiplataforma de código abierto para crear módulos de Native Client. [25] Pepper Plugin API, o PPAPI [26] [27] es una API multiplataforma para complementos de navegador web protegidos por Native Client, primero basada en la NPAPI de Netscape y luego reescrita desde cero. Actualmente se utiliza en Chromium y Google Chrome para habilitar la versión PPAPI de Adobe Flash [28] y el visor de PDF integrado . [29]
PPAPI
El 12 de agosto de 2009, una página en Google Code presentó un nuevo proyecto, Pepper, y la API de complemento de Pepper asociada (PPAPI), [30] "un conjunto de modificaciones a NPAPI para hacer que los complementos sean más portátiles y más seguros". [31] Esta extensión está diseñada específicamente para facilitar la implementación de la ejecución de complementos fuera de proceso . Además, los objetivos del proyecto son proporcionar un marco para hacer complementos completamente multiplataforma. Los temas considerados incluyen:
- Semántica uniforme para NPAPI en todos los navegadores.
- Ejecución en un proceso separado del navegador-renderizador.
- Estandarice la representación mediante el proceso de composición del navegador.
- Definición de eventos estandarizados y funciones de rasterización 2D.
- Intento inicial de proporcionar acceso a gráficos 3D.
- Registro de complementos.
La API de Pepper también es compatible con Gamepads (versión 19) y WebSockets (versión 18). [32]
Al 13 de mayo de 2010[actualizar], El navegador de código abierto de Google, Chromium , fue el único navegador web que utilizó el nuevo modelo de complemento de navegador. [33] A partir de 2020, Pepper es compatible con navegadores basados en motores de diseño Chrome, Chromium y Blink, como Opera y Microsoft Edge.
En agosto de 2020, Google anunció que la compatibilidad con PPAPI se eliminaría de Google Chrome y Chromium en junio de 2022. [34]
PPAPI en Firefox
Mozilla Firefox declaró en 2014 que no admitirían Pepper, ya que no hay una especificación completa de la API más allá de su implementación en Chrome, que a su vez está diseñada para usarse solo con el motor de diseño Blink , y tiene API privadas específicas para el complemento Flash Player que no están documentados. [35] En octubre de 2016 Mozilla anunció que había reconsiderado y estaba explorando si incorporar la API de Pepper y PDFium en futuras versiones de Firefox, [36] sin embargo, no se tomaron tales pasos.
Aplicaciones
Un sitio web [37] utiliza NaCL en el servidor para permitir a los usuarios experimentar con el lenguaje de programación Go desde sus navegadores. [38]
Recepción
Algunos grupos de desarrolladores de navegadores admiten la tecnología Native Client, pero otros no.
Partidarios
Chad Austin (de IMVU ) elogió la forma en que Native Client puede llevar aplicaciones de alto rendimiento a la web (con una penalización de aproximadamente el 5% en comparación con el código nativo) de una manera segura, al tiempo que acelera la evolución de las aplicaciones del lado del cliente al dar una opción del lenguaje de programación utilizado (además de JavaScript ). [39]
Id Software 's John D. Carmack alabó cliente nativo en la QuakeCon 2012, que dice: "si hay que hacer algo dentro de un navegador, cliente nativo es mucho más interesante como algo que comenzó como un hack x86 realmente bastante maldito inteligente en el camino que podrían hacer sandbox todo esto en modo de usuario de manera interesante. Ahora es una recompilación dinámica, pero algo que programa en C o C ++ y se compila en algo que no será su nivel de optimización -O4 para código completamente nativo, pero bastante cerca al código nativo. Podrías hacer todas tus persecuciones de punteros malvados y cualquier cosa que quieras hacer como desarrollador de juegos al pie de la letra ". [40]
Detractores
Otros profesionales de TI son más críticos con esta tecnología de espacio aislado, ya que tiene problemas de interoperabilidad sustanciales o sustantivos.
El vicepresidente de productos de Mozilla , Jay Sullivan , dijo que Mozilla no tiene planes de ejecutar código nativo dentro del navegador, ya que "estas aplicaciones nativas son solo pequeñas cajas negras en una página web. Realmente creemos en HTML, y aquí es donde queremos enfocarnos ". [41]
Christopher Blizzard, de Mozilla, criticó a NaCl, afirmando que el código nativo no puede evolucionar de la misma manera que lo hace la web impulsada por el código fuente. También comparó NaCl con la tecnología ActiveX de Microsoft , plagada de DLL Hell . [2]
Håkon Wium Lie , CTO de Opera, cree que "NaCl parece estar 'anhelando los viejos tiempos, antes de la web'", y que "Native Client se trata de construir una nueva plataforma - o portar una plataforma antigua a la web [. ..] traerá complejidad y problemas de seguridad, y quitará el foco de la plataforma web ". [2]
Segunda generación
La segunda generación de sandboxing desarrollada en Google es gVisor . [42] [43] Está destinado a reemplazar NaCl en Google Cloud , para ser más exactos en Google App Engine . Google también ha estado promocionando WebAssembly . [44]
Ver también
- Virtualización de aplicaciones
- Emscripten
- Sandboxie , ejecutando programas de Windows en una caja de arena
- WebAssembly , un estándar de código de bytes para navegadores web
- Aplicaciones de navegador XAML (XBAP)
Referencias
- ^ "El cliente nativo de Google se activa en Chrome" . El registro . 16 de septiembre de 2011 . Consultado el 12 de marzo de 2016 .
- ^ a b c Metz, Cade (12 de septiembre de 2011). "Cliente nativo de Google: ¿la web del futuro o del pasado?" . El registro . Consultado el 17 de septiembre de 2011 .
- ^ "Arquitectura ZeroVM" . Archivado desde el original el 8 de febrero de 2014 . Consultado el 16 de marzo de 2014 .
- ^ Rosenblatt, Seth (9 de diciembre de 2011). "Native Client convierte a Chrome en una plataforma de juegos de alta gama" . CNET. Archivado desde el original el 28 de agosto de 2012 . Consultado el 9 de diciembre de 2011 .
- ^ "Blog de Google Code: los juegos, las aplicaciones y los tiempos de ejecución llegan a Native Client" . Googlecode.blogspot.com. 9 de diciembre de 2011 . Consultado el 25 de abril de 2012 .
- ^ "NaCl y PNaCl" .
- ^ "Bugs.chromium.org" . 12 de octubre de 2016 . Consultado el 12 de octubre de 2016 .
- ^ a b "¡Adiós PNaCl, Hola WebAssembly!" . Blog de Chromium . Consultado el 31 de mayo de 2017 .
- ^ "Guía de migración de WebAssembly - Google Chrome" . developer.chrome.com . Consultado el 20 de diciembre de 2018 .
- ^ "Cambios en el cronograma de compatibilidad de aplicaciones de Chrome" . Blog de Chromium . 10 de agosto de 2020.
- ^ "Cliente nativo de Google en Google Code" . Consultado el 25 de abril de 2012 .
- ^ davemichael. "GitHub - davemichael / NaCl-Quake: Quake para Native Client (basado en el puerto de SDL Quake)" . GitHub .
- ^ "La batalla por Wesnoth" .
- ^ "Índice de /" .
- ^ "Copia archivada" . Archivado desde el original el 8 de diciembre de 2013 . Consultado el 26 de noviembre de 2013 .Mantenimiento de CS1: copia archivada como título ( enlace )
- ^ "Del polvo" . Archivado desde el original el 12 de marzo de 2016 . Consultado el 24 de febrero de 2016 .
- ^ Chen, Brad (8 de diciembre de 2008). "Native Client: una tecnología para ejecutar código nativo en la web" . Google-code-updates.blogspot.com . Consultado el 25 de abril de 2012 .
- ^ "El blog de Chromium: Native Client trae código nativo de espacio aislado a las aplicaciones de Chrome Web Store" . Blog.chromium.org. 18 de agosto de 2011 . Consultado el 25 de abril de 2012 .
- ^ "Blog de Google Code: Portable Native Client: el" pináculo "de la velocidad, la seguridad y la portabilidad" . blog.chromium.org. 12 de noviembre de 2013 . Consultado el 16 de marzo de 2014 .
- ^ "El cliente nativo de Google va ARM y más allá" . El H. 18 de marzo de 2010 . Consultado el 19 de mayo de 2010 .
- ^ "PNaCl: ejecutables de cliente nativo portátil" (PDF) . Archivado desde el original (PDF) el 2 de mayo de 2012 . Consultado el 25 de abril de 2012 .
- ^ Sehr, David; Muth, Robert; Biffle, Cliff L .; Khimenko, Victor; Pasko, Egor; Sí, Bennet; Schimpf, Karl; Chen, Brad (2010). "Adaptación del aislamiento de fallas de software a las arquitecturas de CPU contemporáneas" . XIX Simposio de Seguridad de USENIX . Consultado el 31 de julio de 2011 .
- ^ a b Sí, Bennet; Sehr, David; Dardyk, Greg; Chen, Brad; Muth, Robert; Ormandy, Tavis; Okasaka, Shiki; Narula, Neha; Fullagar, Nicolás (2009). "Native Client: una caja de arena para código nativo x86 portátil y que no es de confianza" . Simposio de IEEE sobre seguridad y privacidad (Oakland'09) . Consultado el 31 de julio de 2011 .
- ^ "Cliente nativo: Edificio" . developer.chrome.com . Consultado el 16 de marzo de 2014 .
- ^ "Descripción técnica" .
- ^ "Proyecto de API Pepper Plugin en" . Consultado el 25 de abril de 2012 .
- ^ "Fuente de Chrome: índice de / trunk / src / ppapi" . Src.chromium.org . Consultado el 25 de abril de 2012 .
- ^ "El camino hacia un Flash más seguro, estable y llamativo" . 8 de agosto de 2012 . Consultado el 10 de agosto de 2013 .
- ^ Metz, Cade (18 de junio de 2010). "Google abraza a Adobe con más fuerza con la combinación de Chrome-PDF" . El registro . Consultado el 25 de abril de 2012 .
- ^ "Introducción: antecedentes y conceptos básicos: los proyectos de Chromium" . Chromium.org . Consultado el 25 de abril de 2012 .
- ^ "Pepper.wiki" . 24 de febrero de 2012 . Consultado el 25 de abril de 2012 .
- ^ "Notas de la versión" .
- ^ Metz, Cade (13 de mayo de 2010). "Google calienta el código nativo para Chrome OS" . Theregister.co.uk . Consultado el 25 de abril de 2012 .
- ^ Anthony Laforge (10 de agosto de 2020). "Cambios en el cronograma de compatibilidad de aplicaciones de Chrome" . Blog de Chromium .
- ^ Zbarsky, Boris. "Error 729481: admite la API del complemento" Pepper "" . Consultado el 15 de abril de 2016 .
- ^ Metz, Cade (3 de octubre de 2016). "Proyecto Mortero" . Mozilla . Consultado el 30 de octubre de 2016 .
- ^ "The Go Playground" .
- ^ "Inside the Go Playground - The Go Blog" . blog.golang.org . Consultado el 27 de agosto de 2016 .
- ^ Austin, Chad (8 de enero de 2011). "Chad Austin: en defensa de la democracia del lenguaje (o: por qué el navegador necesita una máquina virtual)" . Chadaustin.me . Consultado el 25 de abril de 2012 .
- ^ Carmack, John (3 de agosto de 2012). "QuakeCon 2012" . youtube.com . Consultado el 26 de agosto de 2012 .
- ^ Metz, Cade (24 de junio de 2010). "Mozilla: nuestro navegador no ejecutará código nativo" . El registro . Consultado el 25 de abril de 2012 .
- ^ https://news.ycombinator.com/item?id=17810591
- ^ https://github.com/google/gvisor
- ^ Avram, Abel (31 de mayo de 2017). "Google eliminará el soporte para PNaCl" . InfoQ . Consultado el 1 de agosto de 2020 .
Como reemplazo, Google ahora está impulsando WebAssembly.
enlaces externos
- Sitio web oficial , Proyecto de Google (vencido, el proyecto se ha movido)
- Sitio web oficial , desarrolladores
- Google I / O 2013: Introducción a Portable Native Client (PNaCl) en YouTube
- Código nativo de Google I / O 2009 para aplicaciones web informáticas intensivas en YouTube : charla técnica en Google I / O 2009
- Una lista de proyectos de OSS transferidos a Native Client
- Código fuente de Native Client en Git
Ejemplos de
- Plegable en casa
- Ejemplos de PNaCl (se ejecuta en Chrome 31+, PNaCl, es decir, no se necesita instalación)
- Galería de SDK de Native Client
- torapp.info , editor de vectores, especialmente potente para la impresión de seguridad (no PNaCl)
- NACLBox , un puerto de DOSBox a Native Client (PNaCl)
- SodaSynth , un sintetizador para Native Client (no PNaCl)
- pnacl-amiga-emulator , un puerto de EAU , un emulador de Amiga 500
- Abadía del crimen , un puerto de la versión SDL de Vigasoco (remake de La Abadía del Crimen ) a Native Client (PNaCl)
- Bennugd , un puerto de ejemplos de videojuegos de Bennugd a Native Client (PNaCl)