Google Native Client ( NaCl ) es una tecnología de sandbox discontinuada para ejecutar un subconjunto de código nativo Intel x86 , ARM o MIPS , o un ejecutable portátil, en un sandbox. 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 ChromeOS . También se puede utilizar para proteger complementos del navegador y partes de otras aplicaciones o aplicaciones completas [2] como ZeroVM . [3]
Para demostrar la preparación de la tecnología, el 9 de diciembre de 2011, Google anunció la disponibilidad de varias nuevas versiones exclusivas para Chrome de juegos conocidos por sus gráficos ricos y de uso intensivo del procesador , incluido Bastion (que ya no se admite en Chrome Web Store ). 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 del mouse . También había planes para hacer que NaCl estuviera disponible en dispositivos portátiles. [4] [5]
Portable Native Client (PNaCl) es una versión independiente de la arquitectura. Las aplicaciones de PNaCl se compilan con antelación . Se recomienda PNaCl en lugar de NaCl para la mayoría de los casos de uso. [6] El concepto general de NaCl (ejecutar código nativo en el navegador web) se ha implementado antes en ActiveX , que, aunque 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 sandbox.
Una alternativa de Mozilla fue asm.js , que también permite compilar aplicaciones escritas en C o C++ para ejecutarse en el navegador y también admite la compilación anticipada, pero es un subconjunto de JavaScript y, por lo tanto, es compatible con versiones anteriores de navegadores que no lo admiten directamente.
El 12 de octubre de 2016, un comentario en el rastreador de problemas de Chromium indicó que los equipos Pepper y Native Client de Google habían sido despedidos. [7] El 30 de mayo de 2017, Google anunció la descontinuación de PNaCl en favor de WebAssembly . [8] Aunque inicialmente Google planeó eliminar PNaCl en el primer trimestre de 2018, [8] y luego en el segundo trimestre de 2019, [9] se eliminó en junio de 2022 (junto con Chrome Apps ). [10] [11]
Native Client fue un proyecto de código abierto desarrollado por Google . [12] Juegos como Quake , [13] XaoS , Battle for Wesnoth , [14] Doom , [15] Lara Croft and the Guardian of Light , [16] From Dust , [17] y MAME , así como el sistema de procesamiento de sonido Csound , han sido portados a Native Client. Native Client ha estado disponible en el navegador web Google Chrome desde la versión 14, y ha estado habilitado de forma predeterminada desde la versión 31, cuando se lanzó el Portable Native Client (PNaCl, pronunciado: pinnacle). [18] [19] [20]
En marzo de 2010 se lanzó una implementación ARM . [21] También se admitieron x86-64 , IA-32 y MIPS .
Para ejecutar una aplicación de forma portable bajo PNaCl, debe compilarse en un subconjunto estable y agnóstico de la arquitectura del bytecode de representación intermedia de LLVM . [22] Los ejecutables se denominan ejecutables PNaCl (pexes). PNaCl Toolchain crea archivos .pexe; NaCl Toolchain, archivos .nexe. El número mágico de los 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 detección y aislamiento de fallos de software para el sandboxing en x86-64 y ARM. [23] La implementación x86-32 de Native Client es notable por su novedoso método de sandboxing, que hace uso de la raramente utilizada función de segmentación de la arquitectura x86 . [24] Native Client configura segmentos x86 para restringir el rango de memoria al que puede acceder el código sandbox. Utiliza un verificador de código para evitar el uso de instrucciones no seguras, como las que realizan llamadas al sistema. Para evitar que el código salte a una instrucción no segura oculta en 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 no se permite que las instrucciones se extiendan a estos bloques. [24] Debido a estas restricciones, el código C y C++ debe volver a compilarse 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 licencia estilo BSD .
Native Client utiliza Newlib como su biblioteca C , pero también está disponible un puerto de la biblioteca C de GNU (GNU libc). [25]
NaCl denota cloruro de sodio , sal de mesa común ; 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 Native Client. [26] Pepper Plugin API, o PPAPI [27] [28] es una API multiplataforma para complementos de navegador web seguros de Native Client, primero basada en NPAPI de Netscape , luego reescrita desde cero. Se usó en Chromium y Google Chrome para habilitar la versión PPAPI de Adobe Flash [29] y el visor de PDF integrado . [30]
El 12 de agosto de 2009, una página de Google Code presentó un nuevo proyecto, Pepper, y la API de complementos de Pepper (PPAPI) asociada, [31] "un conjunto de modificaciones a NPAPI para hacer que los complementos sean más portátiles y más seguros". [32] 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 que los complementos sean completamente multiplataforma. Los temas considerados incluyen:
La API de Pepper también admite Gamepads (versión 19) y WebSockets (versión 18). [33]
A partir del 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. [34] A partir de 2020, Pepper es compatible con los navegadores basados en motores de diseño Chrome, Chromium y Blink, como Opera y Microsoft Edge.
En agosto de 2020, Google anunció que el soporte para PPAPI se eliminaría de Google Chrome y Chromium en junio de 2022. [35]
Los desarrolladores de Firefox declararon en 2014 que no darían soporte a Pepper, ya que no existía una especificación completa de la API más allá de su implementación en Chrome, que a su vez fue diseñado para usarse solo con el motor de diseño Blink , y tenía API privadas específicas para el complemento Flash Player que no estaban documentadas. [36] En octubre de 2016, Mozilla anunció que había reconsiderado y estaba explorando la posibilidad de incorporar la API Pepper y PDFium en futuras versiones de Firefox, [37] sin embargo, no se tomaron tales medidas. En julio de 2017, Adobe desaprobó Flash y anunció su fin de vida útil a fines de 2020. [38] Para enero de 2021, Adobe Flash Player, Google Chrome, Firefox, Safari y Windows [39] recibieron actualizaciones que deshabilitaban o eliminaban por completo Flash.
Un sitio web [40] utilizó NaCL en el servidor para permitir a los usuarios experimentar con el lenguaje de programación Go desde sus navegadores. [41]
Algunos grupos de desarrolladores de navegadores apoyaron la tecnología Native Client mientras que otros no.
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 alrededor del 5% en comparación con el código nativo) de manera segura, al mismo tiempo que acelera la evolución de las aplicaciones del lado del cliente al brindar la opción del lenguaje de programación utilizado (además de JavaScript ). [42]
John D. Carmack de Id Software elogió a Native Client en QuakeCon 2012, diciendo: "si tienes que hacer algo dentro de un navegador, Native Client es mucho más interesante como algo que comenzó como un hack x86 realmente muy inteligente en la forma en que podían poner todo esto en modo de usuario. Ahora es una recompilación dinámica, pero algo que programas en C o C++ y compila hasta algo que no será tu nivel de optimización -O4 para código completamente nativo, pero bastante cercano al código nativo. Podrías hacer todas tus persecuciones de punteros diabólicos, y lo que quieras hacer como un desarrollador de juegos de primera". [43]
Otros profesionales de TI fueron más críticos con esta tecnología de sandbox, ya que tenía problemas de interoperabilidad sustanciales o sustanciales.
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 es aquí donde queremos centrarnos". [44]
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 basada en código fuente. También comparó a NaCl con la tecnología ActiveX de Microsoft , plagada de DLL Hell . [2]
Håkon Wium Lie , director de tecnología de Opera, cree que "NaCl parece estar 'anhelando los viejos y malos tiempos, antes de la web'", y que "Native Client trata de construir una nueva plataforma, o trasladar una plataforma antigua a la web [...] traerá consigo complejidad y problemas de seguridad, y desviará la atención de la plataforma web". [2]
La segunda generación de sandboxing desarrollada en Google es gVisor . [45] [46] Está pensada para sustituir a NaCl en Google Cloud , para ser más exactos en Google App Engine . Google también ha estado promocionando WebAssembly . [47]
Como reemplazo, Google ahora está impulsando WebAssembly.