Google Native Client

Google Native Client
Entwickler (en) Google, Andere
Erstveröffentlichung 16. September 2011; vor 10 Jahren[1]
Stabile Version
SDK: Pfeffer 45 / 10. Juli 2015; vor 7 Jahren

Kunden: Gleich wie Google Chrome

Repository
Geschrieben in C, C ++
Betriebssystem Fenster, Linux, Mac OS, Chrome OS
Plattform x86, ARM, MIPS
Nachfolger WebAssembly
Typ Sandkasten In Webbrowsern für nativen Code
Lizenz Neues BSD
Webseite Entwickler.Chrom.com/docs/nativer Klient/ Edit this at Wikidata

Google Native Client (NaCl) ist ein Sandboxing Technologie zum Ausführen einer Teilmenge von Intel x86, ARM, oder MIPS Natives Code oder eine tragbare ausführbare Datei in einer Sandbox. Es ermöglicht sicheres Laufen nativen Code von einem Webbrowserunabhängig vom Benutzer Betriebssystem, erlauben Web -Apps mit nahezu nativen Geschwindigkeiten zu laufen, die den Plänen von Google für die Pläne von Google übereinstimmen Chrome OS. Es kann auch zur Sicherung des Browsers verwendet werden Pluginsund Teile anderer Anwendungen oder vollständige Anwendungen[2] wie zum Beispiel Zerovm.[3]

Um die Bereitschaft der Technologie zu demonstrieren, kündigte Google am 9. Dezember 2011 die Verfügbarkeit mehrerer neuer Chromversionen von nur an Spiele bekannt für ihre Reichen und Prozessor-intensiv Grafik, einschließlich Bastion (nicht mehr im Chrome -Webladen unterstützt). NaCl läuft Hardware-Beschleunigung 3D -Grafik (über OpenGL ES 2.0), sandboxierte lokale Dateispeicherung, dynamische Belastung, Vollbildmodus und Maus Erfassung. Es gab auch Pläne, NaCl auf Handheld -Geräten verfügbar zu machen.[4][5]

Portable Native Client (PNACL) ist eine architekturunabhängige Version. PNACl -Apps sind präsentiert. PNACL wird für die meisten Anwendungsfälle über NaCl empfohlen.[6] Das allgemeine Konzept von NaCl (ausführender nativer Code im Webbrowser) wurde bereits in der IM implementiert ActiveX, was während der noch verwendeten, aber vollen Zugriff auf das System (Festplatte, Speicher, Benutzeroberfläche, Registrierung usw.) hat. Native Client vermeidet dieses Problem mit Sandboxen.

Eine Alternative zu NaCl ist ASM.JS, was auch Anwendungen ermöglicht in geschriebene in C oder C ++ Um im Browser (mit mehr als der Hälfte der nativen Geschwindigkeit) zusammengestellt zu werden, unterstützt sie auch die kompilierte Kompilierung vor der Zeit, ist jedoch eine Untergruppe von JavaScript und daher rückwärtskompatibel mit Browsern, die es nicht direkt unterstützen. Eine andere Alternative (während sie anfangs von PNACl angetrieben werden kann) ist WebAssembly.

Am 12. Oktober 2016 zeigte ein Kommentar zum Chrom -Ausgaber -Tracker, dass Googles Pfeffer- und native Client -Teams dest1iert waren.[7] Am 30. Mai 2017 kündigte Google eine Abschreibung von PNACl zugunsten von WebAssembly.[8] Obwohl Google zunächst vorhatte, PNACL im ersten Quartal 2018 zu entfernen,[8] und später im zweiten Quartal 2019,[9] Es ist derzeit geplant, im Juni 2022 zu entfernen (zusammen mit Chrome -Apps).[10][11]

Überblick

Native Client ist ein Open Source Projekt wird entwickelt von Google.[12] Miteinander ausgehen, Beben,[13] Xaos, Kampf um Wesnoth,[14] Untergang,[15] Lara Croft and the Guardian of Light,[16] Von Staub,[17] und Mamesowie das Soundverarbeitungssystem Cound, wurden auf einen nativen Kunden portiert. Native Client war in der verfügbar Google Chrome Webbrowser seit Version 14 und wurde seit Version 31 standardmäßig aktiviert, als der tragbare native Client (PNACl, ausgesprochen: Pinnacle) veröffentlicht wurde.[18][19][20]

Ein ARM Die Implementierung wurde im März 2010 veröffentlicht.[21] x86-64, IA-32, und MIPS werden auch unterstützt.

Um eine Anwendung porttral unter PNACl auszuführen, muss sie mit einer Architektur-agnostischen und stabilen Teilmenge der Llvm Zwischendarstellung Bytecode.[22] Die ausführbaren Ausführbarungen werden als PNACl Executables (PEXES) bezeichnet. Die PNACl Toolchain erstellt .pexe -Dateien; NaCl Toolchain .Nexe -Dateien. Das magische Zahl von .Nexe -Dateien ist 0x7f 'e' 'l' 'f', nämlich ELF. In Chrome werden sie in architekturspezifische ausführbare Ausführbarungen übersetzt, damit sie ausgeführt werden können.

NaCl verwendet Software Fehlererkennung und Isolation Für Sandboxen auf x86-64 und Arm.[23] Die X86-32-Implementierung des nativen Clients ist bemerkenswert für seine neuartige Sandboxing-Methode, die die selten verwendete X86-Architektur verwendet Segmentierungseinrichtung.[24] Native Client richtet X86 -Segmente ein, um den Speicherbereich einzuschränken, auf den der Sandbox -Code zugegriffen wird. Es verwendet einen Code -Überprüfer, um die Verwendung unsicherer Anweisungen wie solche zu verhindern, die Systemaufrufe ausführen. Um zu verhindern, dass der Code in eine unsichere Anweisung springt, die in der Mitte eines sicheren Befehls versteckt ist, verlangt der native Client, dass alle indirekten Sprünge zu Beginn von 32-Byte-ausgerichteten Blöcken sind und Anweisungen diese Blöcke nicht überspannen dürfen.[24] Aufgrund dieser Einschränkungen muss der C- und C ++ - Code neu kompiliert werden, um unter dem nativen Client ausgeführt zu werden, was maßgeschneiderte Versionen des GNU Toolchain, speziell GNU Compiler -Sammlung (GCC), Gnu binutils, und Llvm.

Der native Kunde ist unter einem lizenziert Lizenz im BSD-Stil.

Native Client verwendet Newlib wie es C Bibliothek, aber ein Hafen von GNU C -Bibliothek (GNU LIBC) ist ebenfalls verfügbar.[25]

Pfeffer

NaCl bezeichnet Natriumchlorid, gemeinsame Tabelle Salz; Als ein Wortspiel, der Name von Pfeffer wurde auch verwendet. Pepper API ist eine plattformübergreifende Open-Source-API zum Erstellen nativer Client-Module.[26] Pfeffer -Plugin -API oder PPAPI[27][28] ist eine plattformübergreifende API für native client-gesicherte Webbrowser-Plugins, die zunächst auf Netscape's basiert Npapi, dann von Grund auf neu geschrieben. Es wird derzeit in Chrom und in Chrom verwendet und Google Chrome So aktivieren Sie die PPAPI -Version von Adobe Flash[29] und das eingebaute PDF Zuschauer.[30]

Ppapi

Am 12. August 2009 führte eine Seite auf Google Code ein neues Projekt, Pfeffer und die zugehörige Pfeffer -Plugin -API (PPAPI) vor.[31] "Eine Reihe von Änderungen an NPAPI, um Plugins tragbarer und sicherer zu machen".[32] Diese Erweiterung ist speziell entwickelt, um die Implementierung außerhalb derProzess Plugin -Ausführung. Darüber hinaus sind die Ziele des Projekts, einen Framework für die vollständige Plattformarbeit zu bieten. Zu den berücksichtigten Themen gehören:

  • Uniforme Semantik für NPAPI über Browser.
  • Ausführung in einem separaten Prozess vom Renderer-Browser.
  • Standardisieren Sie das Rendering mit dem Kompositionsprozess des Browsers.
  • Definieren von standardisierten Ereignissen und 2D -Rasterfunktionen.
  • Erster Versuch, 3D -Grafikzugriff zu gewähren.
  • Plugin -Registrierung.

Die Pfeffer -API unterstützt auch Gamepads (Version 19) und Websockets (Version 18).[33]

Ab dem 13. Mai 2010, Googles Open -Source -Browser, Chromwar der einzige Webbrowser, der das neue Browser-Plug-in-Modell verwendet hat.[34] Ab 2020 wird Pepper von Browsern auf der Basis von Chrome, Chrom und Blink Layout wie Opera und Microsoft Edge unterstützt.

Im August 2020 kündigte Google an, dass die Unterstützung für PPAPI im Juni 2022 von Google Chrome und Chromium entfernt wird.[35]

PPAPI in Firefox

Feuerfuchs Entwickler erklärten im Jahr 2014, dass sie Pepper nicht unterstützen würden, da es keine vollständige Spezifikation der API gibt Layout -Motor blinken Nur und verfügt über private APIs, die für das Flash Player -Plugin spezifisch sind, die nicht dokumentiert sind.[36] Im Oktober 2016 kündigte Mozilla an, dass es erneut überprüft wurde und untersucht wurde, ob die Pepper-API und PDFIUM in zukünftigen Veröffentlichungen von Firefox integriert werden sollen.[37] Es wurden jedoch keine solchen Schritte unternommen.

Anwendungen

Eine Website[38] Verwendet NaCl auf dem Server, um Benutzer mit dem experimentieren zu lassen Gehen Sie Programmiersprache von ihren Browsern.[39]

Rezeption

Einige Gruppen von Browserentwicklern unterstützen die native Kundentechnologie, andere nicht.

Unterstützer

Chad Austin (von IMVU) Lobte die Art und Weise, wie nativer Client leistungsstarke Anwendungen in das Web bringen kann (mit einer Strafe von etwa 5% im Vergleich zu nativem Code) auf sichere Weise und beschleunigt gleichzeitig die Entwicklung von Kunden aufeinandertisch (Außerdem JavaScript).[40]

ID -Software's John D. Carmack gelobten einheimischen Kunden bei Quakecon 2012, sagt: "Wenn Sie in einem Browser etwas tun müssen, ist der native Kunde viel interessanter als etwas, das als wirklich verdammt cleverer X86 -Hack so begann, wie sie all dies im Benutzermodus interessant sein könnten. Es ist. Jetzt dynamische Neukompilation, aber etwas, das Sie in C oder C ++ programmieren, und es kompiliert sich auf etwas, das nicht Ihre -O4 -Optimierungsstufe für einen vollständig nativen Code sein wird, sondern verdammt nahe an dem nativen Code. Sie könnten alle Ihre bösen Zeigerjagden unternehmen und was auch immer Sie als to-the-Metal-Spieleentwickler tun möchten. "[41]

Kritiker

Andere IT -Fachleute kritisieren diese Sandboxing -Technologie, da sie erhebliche oder inhaltliche Interoperabilitätsprobleme aufweist.

MozillaJay Sullivan, Vizepräsident für Produkte, sagte, Mozilla habe keinen Pläne, native Code im Browser auszuführen, da "diese nativen Apps nur kleine schwarze Boxen in einer Webseite sind. [...] Wir glauben wirklich an HTML und Hier wollen wir uns konzentrieren. "[42]

Mozilla Christopher Blizzard Kritisiert NaCl und behauptete, dass sich der native Code nicht auf die gleiche Weise entwickeln kann, wie das Quellcode-gesteuerte Web kann. Er verglich NaCl auch mit Microsofts ActiveX Technologie, geplagt mit Dll Hölle.[2]

Håkon Wium Lüge, Operas CTO, ist der Ansicht, dass "NaCl sich nach den schlechten alten Zeiten vor dem Web" sehnt "und dass" einheimische Kunde darum geht, eine neue Plattform zu bauen - oder eine alte Plattform in das Web zu portieren [...] Es wird Komplexitäts- und Sicherheitsprobleme einbringen und sich von der Webplattform konzentrieren. "[2]

Zweite Generation

Die zweite Generation von Sandboxing In Google entwickelt ist Gvvisor.[43][44] Es soll NaCl in ersetzen Google Cloudgenauer sein in Google App Engine. Google hat auch promotiert WebAssembly.[45]

Siehe auch

Verweise

  1. ^ "Der native Kunde von Google geht in Chrome live". Das Register. 16. September 2011. Abgerufen 12. März 2016.
  2. ^ a b c Metz, Cade (12. September 2011). "Google Native Client: Das Web der Zukunft - oder der Vergangenheit?". Das Register. Abgerufen 17. September 2011.
  3. ^ "Zerovm Architektur". Archiviert von das Original am 8. Februar 2014. Abgerufen 16. März 2014.
  4. ^ Rosenblatt, Seth (9. Dezember 2011). "Native Client verwandelt Chrome in eine High-End-Gaming-Plattform". CNET. Archiviert von das Original am 28. August 2012. Abgerufen 9. Dezember 2011.
  5. ^ "Google Code Blog: Spiele, Apps und Runtimes kommen zum nativen Kunden". Googlecode.blogspot.com. 9. Dezember 2011. Abgerufen 25. April 2012.
  6. ^ "NaCl und Pnacl".
  7. ^ "Bugs.chromium.org". 12. Oktober 2016. Abgerufen 12. Oktober 2016.
  8. ^ a b "Auf Wiedersehen Pnacl, Hallo WebAssembly!". Chrom -Blog. Abgerufen 31. Mai 2017.
  9. ^ "Migrationshandbuch für WebAssembly - Google Chrome". Entwickler.chrome.com. Abgerufen 20. Dezember 2018.
  10. ^ "Änderungen an der Chrome App Support Timeline". Chrom -Blog. 10. August 2020.
  11. ^ Li, Abner (10. August 2020). "Google verzögert die Abschreibung von Chrome -Apps auf allen Plattformen". 9to5google. Abgerufen 2. Oktober 2021.{{}}: CS1 Wartung: URL-Status (Link)
  12. ^ "Google Native Client auf Google Code". Abgerufen 25. April 2012.
  13. ^ Davemichael (3. Oktober 2020). "Github - Davemichael/NaCl -Ring: Beben Sie für den nativen Client (basierend auf dem SDL -Bebenanschluss)". GitHub.
  14. ^ "Der Kampf um Wesnoth".
  15. ^ "Index von /".
  16. ^ "Archivierte Kopie". Archiviert von das Original am 8. Dezember 2013. Abgerufen 26. November 2013.{{}}: CS1 Wartung: Archiviertes Kopie als Titel (Link)
  17. ^ "Von Staub". Archiviert von das Original am 12. März 2016. Abgerufen 24. Februar 2016.
  18. ^ Chen, Brad (8. Dezember 2008). "Native Client: Eine Technologie zum Ausführen nativer Code im Web". Google-Code-Updates.blogspot.com. Abgerufen 25. April 2012.
  19. ^ "Der Chromium -Blog: Der native Client bringt sandboxed native Code in Chrome Web Store Apps.". Blog.chromium.org. 18. August 2011. Abgerufen 25. April 2012.
  20. ^ "Google Code Blog: Tragbarer nativer Client: Das" Pinnacle "von Geschwindigkeit, Sicherheit und Portabilität". blog.chromium.org. 12. November 2013. Abgerufen 16. März 2014.
  21. ^ "Der native Client von Google geht Arm und darüber hinaus". Der H. 18. März 2010. Abgerufen 19. Mai 2010.
  22. ^ "PNACL: Tragbare native Client -Ausführbare" (PDF). Archiviert von das Original (PDF) am 2. Mai 2012. Abgerufen 25. April 2012.
  23. ^ Sehr, David; Muth, Robert; Biffle, Cliff L.; Khimenko, Victor; Pasko, Egor; Yee, Bennet; Schimpf, Karl; Chen, Brad (2010). "Anpassung der Software -Fehlerisolation an zeitgenössische CPU -Architekturen". 19. Usenix Security Symposium. Abgerufen 31. Juli 2011.
  24. ^ a b Yee, Bennet; Sehr, David; Dardyk, Greg; Chen, Brad; Muth, Robert; Ormandy, Tavis; Okasaka, Shiki; Narula, Neha; Fullagar, Nicholas (2009). "Native Client: Eine Sandbox für tragbare, nicht vertrauenswürdige x86 native Code". IEEE Symposium über Sicherheit und Privatsphäre (Oakland'09). Abgerufen 31. Juli 2011.
  25. ^ "Einheimischer Kunde: Bau". Entwickler.chrome.com. Abgerufen 16. März 2014.
  26. ^ "Technische Übersicht".
  27. ^ "Pfeffer -Plugin -API -Projekt bei". Abgerufen 25. April 2012.
  28. ^ "Chromquelle: Index von/trunk/src/ppapi". Src.chromium.org. Abgerufen 25. April 2012.
  29. ^ "Die Straße zu sichereren, stabileren und auffälligeren Blitz". 8. August 2012. Abgerufen 10. August 2013.
  30. ^ Metz, Cade (18. Juni 2010). "Google Hugs Adobe härter mit Chrome-PDF Merge". Das Register. Abgerufen 25. April 2012.
  31. ^ "Erste Schritte: Hintergrund und Grundlagen - die Chromprojekte". Chromium.org. Abgerufen 25. April 2012.
  32. ^ "Pepper.wiki". 24. Februar 2012. Abgerufen 25. April 2012.
  33. ^ "Versionshinweise".
  34. ^ Metz, Cade (13. Mai 2010). "Google erhitzt den nativen Code für Chrome OS". Dadurch.co.uk. Abgerufen 25. April 2012.
  35. ^ Anthony Laforge (10. August 2020). "Änderungen an der Chrome App Support Timeline". Chrom -Blog.
  36. ^ Zbarsky, Boris. "Bug 729481 - Unterstützen Sie die" Pepper "Plugin -API".. Abgerufen 15. April 2016.
  37. ^ Metz, Cade (3. Oktober 2016). "Projekt Mörtel". Mozilla. Abgerufen 30. Oktober 2016.
  38. ^ "The Go Playplatz".
  39. ^ "Im Go -Spielplatz - The Go Blog". blog.golang.org. Abgerufen 27. August 2016.
  40. ^ Austin, Chad (8. Januar 2011). "Chad Austin: Zur Verteidigung der Sprachdemokratie (oder: Warum der Browser eine virtuelle Maschine braucht)". Chadaustin.me. Abgerufen 25. April 2012.
  41. ^ Carmack, John (3. August 2012). "Quakecon 2012". youtube.com. Abgerufen 26. August 2012.
  42. ^ Metz, Cade (24. Juni 2010). "Mozilla: In unserem Browser wird kein nativer Code ausgeführt". Das Register. Abgerufen 25. April 2012.
  43. ^ "Beta -Veröffentlichung von PHP 7.2 in der Google App Engine Standard Umgebung | Hacker News".
  44. ^ "Google/Gvisor". GitHub. 15. Oktober 2021.
  45. ^ Avram, Abel (31. Mai 2017). "Google soll die Unterstützung für PNACl entfernen". Infoq. Abgerufen 1. August 2020. Als Ersatz treibt Google jetzt die WebAssembly vor.

Externe Links

Beispiele