stringtranslate.com

Cliente nativo de Google

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]

Descripción general

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]

Pimienta

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]

PPAPI

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 , 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]

PPAPI en Firefox

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.

Aplicaciones

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]

Recepción

Algunos grupos de desarrolladores de navegadores apoyaron la tecnología Native Client mientras que 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 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]

Detractores

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]

Segunda generación

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]

Véase también

Referencias

  1. ^ "El cliente nativo de Google se lanza en Chrome". The Register . 16 de septiembre de 2011 . Consultado el 12 de marzo de 2016 .
  2. ^ abc Metz, Cade (12 de septiembre de 2011). "Google Native Client: The web of the future – or the past?" [Cliente nativo de Google: ¿la web del futuro o del pasado?]. The Register . Consultado el 17 de septiembre de 2011 .
  3. ^ "Arquitectura de ZeroVM". Archivado desde el original el 8 de febrero de 2014 . Consultado el 16 de marzo de 2014 .
  4. ^ 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 .
  5. ^ "Google Code Blog: Los juegos, las aplicaciones y los entornos de ejecución llegan a Native Client". Googlecode.blogspot.com. 9 de diciembre de 2011. Consultado el 25 de abril de 2012 .
  6. ^ "NaCl y PNaCl".
  7. ^ "Bugs.chromium.org". 12 de octubre de 2016. Consultado el 12 de octubre de 2016 .
  8. ^ ab "¡Adiós PNaCl, hola WebAssembly!". Blog de Chromium . Consultado el 31 de mayo de 2017 .
  9. ^ "Guía de migración de WebAssembly - Google Chrome". developer.chrome.com . Consultado el 20 de diciembre de 2018 .
  10. ^ "Cambios en la cronología de compatibilidad de aplicaciones de Chrome". Blog de Chromium . 10 de agosto de 2020.
  11. ^ Li, Abner (10 de agosto de 2020). «Google retrasa la descontinuación de las aplicaciones de Chrome en todas las plataformas». 9to5Google . Consultado el 2 de octubre de 2021 .
  12. ^ "Google Native Client en Google Code" . Consultado el 25 de abril de 2012 .
  13. ^ davemichael (3 de octubre de 2020). "GitHub - davemichael/NaCl-Quake: Quake para Native Client (basado en el puerto SDL Quake)". GitHub .
  14. ^ "La batalla por Wesnoth".
  15. ^ "Índice de /".
  16. ^ "Chrome Web Store - Lara Croft y el guardián de la luz". Archivado desde el original el 8 de diciembre de 2013. Consultado el 26 de noviembre de 2013 .
  17. ^ "Del polvo". Archivado desde el original el 12 de marzo de 2016 . Consultado el 24 de febrero de 2016 .
  18. ^ Chen, Brad (8 de diciembre de 2008). "Native Client: A Technology for Running Native Code on the Web" (Cliente nativo: una tecnología para ejecutar código nativo en la Web). Google-code-updates.blogspot.com . Consultado el 25 de abril de 2012 .
  19. ^ "El blog de Chromium: Native Client incorpora código nativo en entorno aislado a las aplicaciones de Chrome Web Store". Blog.chromium.org. 18 de agosto de 2011. Consultado el 25 de abril de 2012 .
  20. ^ "Google Code Blog: Portable Native Client: The "pinecle" of speed, security, and portability" (Blog de Google Code: Cliente nativo portátil: 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 .
  21. ^ "El cliente nativo de Google va más allá de ARM". The H. 18 de marzo de 2010. Consultado el 19 de mayo de 2010 .
  22. ^ "PNaCl: Portable Native Client Executables" (PDF) . Archivado desde el original (PDF) el 2 de mayo de 2012. Consultado el 25 de abril de 2012 .
  23. ^ Sehr, David; Muth, Robert; Biffle, Cliff L.; Khimenko, Victor; Pasko, Egor; Yee, Bennet; Schimpf, Karl; Chen, Brad (2010). "Adaptación del aislamiento de fallos de software a las arquitecturas de CPU contemporáneas". 19.º Simposio de seguridad de USENIX . Consultado el 31 de julio de 2011 .
  24. ^ ab Yee, Bennet; Sehr, David; Dardyk, Greg; Chen, Brad; Muth, Robert; Ormandy, Tavis; Okasaka, Shiki; Narula, Neha; Fullagar, Nicholas (2009). "Native Client: A Sandbox for Portable, Untrusted x86 Native Code". Simposio IEEE sobre seguridad y privacidad (Oakland'09) . Consultado el 31 de julio de 2011 .
  25. ^ "Cliente nativo: creación". developer.chrome.com . Consultado el 16 de marzo de 2014 .
  26. ^ "Descripción técnica".[ enlace muerto permanente ]
  27. ^ "Proyecto API del complemento Pepper en". Archivado desde el original el 9 de septiembre de 2016 . Consultado el 25 de abril de 2012 .
  28. ^ "Origen de Chrome: índice de /trunk/src/ppapi". Src.chromium.org . Consultado el 25 de abril de 2012 .
  29. ^ "El camino hacia un Flash más seguro, estable y llamativo". 8 de agosto de 2012. Consultado el 10 de agosto de 2013 .
  30. ^ Metz, Cade (18 de junio de 2010). "Google abraza a Adobe con más fuerza con la fusión de Chrome y PDF". The Register . Consultado el 25 de abril de 2012 .
  31. ^ "Introducción: antecedentes y conceptos básicos: los proyectos de Chromium". Chromium.org . Consultado el 25 de abril de 2012 .
  32. ^ "Pepper.wiki". 24 de febrero de 2012. Consultado el 25 de abril de 2012 .
  33. ^ "Notas de la versión".
  34. ^ 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 .
  35. ^ Anthony Laforge (10 de agosto de 2020). "Cambios en la cronología de compatibilidad de aplicaciones de Chrome". Blog de Chromium .
  36. ^ Zbarsky, Boris. "Bug 729481 - Support the "Pepper" Plugin api" (Error 729481: compatibilidad con la API del complemento "Pepper") . Consultado el 15 de abril de 2016 .
  37. ^ Metz, Cade (3 de octubre de 2016). «Project Mortar». Mozilla . Consultado el 30 de octubre de 2016 .
  38. ^ "Flash y el futuro del contenido interactivo". Adobe Inc. 25 de julio de 2017. Archivado desde el original el 2 de diciembre de 2017. Consultado el 31 de julio de 2023 .
  39. ^ Salter, Jim (4 de mayo de 2021). "Adiós de nuevo, Flash: Microsoft obliga a eliminarlo de Windows 10". Ars Technica . Consultado el 1 de agosto de 2023 .
  40. ^ "El patio de juegos del Go".
  41. ^ "Dentro del patio de juegos de Go - El blog de Go". blog.golang.org . Consultado el 27 de agosto de 2016 .
  42. ^ Austin, Chad (8 de enero de 2011). "Chad Austin: En defensa de la democracia lingüística (o: por qué el navegador necesita una máquina virtual)". Chadaustin.me . Consultado el 25 de abril de 2012 .
  43. ^ Carmack, John (3 de agosto de 2012). "QuakeCon 2012". youtube.com . Consultado el 26 de agosto de 2012 .
  44. ^ Metz, Cade (24 de junio de 2010). «Mozilla: Nuestro navegador no ejecutará código nativo». The Register . Consultado el 25 de abril de 2012 .
  45. ^ "Versión beta de PHP 7.2 en el entorno estándar de Google App Engine | Hacker News".
  46. ^ "Google/Gvisor". GitHub . 15 de octubre de 2021.
  47. ^ Avram, Abel (31 de mayo de 2017). "Google va a eliminar el soporte para PNaCl". InfoQ . Consultado el 1 de agosto de 2020 . Como reemplazo, Google ahora está impulsando WebAssembly.

Enlaces externos

Ejemplos