Client nativ Google - Google Native Client

Client nativ Google
Dezvoltatori Google , alții
Eliberarea inițială 16 septembrie 2011 ; acum 10 ani ( 16.09.2011 )
Versiune stabila
SDK: Pepper 45/10 iulie 2015 ; acum 6 ani ( 10.07.2015 )

Clienți: la fel ca Google Chrome

Repertoriu
Scris in C , C ++
Sistem de operare Windows , Linux , macOS , Chrome OS
Platformă x86 , ARM , MIPS
Tip Sandbox în browserele web pentru codul nativ
Licență BSD nou
Site-ul web dezvoltator .chrome .com / native-client

Clientul nativ Google ( NaCl ) este o tehnologie sandboxing pentru a rula fie un subset de cod nativ Intel x86 , ARM sau MIPS , fie un executabil portabil, într-un sandbox. Permite rularea în siguranță a codului nativ dintr-un browser web , independent de sistemul de operare al utilizatorului , permițând aplicațiilor web să ruleze la viteze aproape native, ceea ce se aliniază planurilor Google pentru sistemul de operare Chrome . Poate fi folosit și pentru securizarea pluginurilor browserului și a unor părți ale altor aplicații sau aplicații complete, cum ar fi ZeroVM .

Pentru a demonstra disponibilitatea tehnologiei, la 9 decembrie 2011, Google a anunțat disponibilitatea mai multor noi versiuni Chrome numai de jocuri cunoscute pentru lor bogate și procesor intensiv grafica , inclusiv Bastion (nu mai sunt acceptate în Magazinul web Chrome). NaCl rulează grafică 3D accelerată prin hardware (prin OpenGL ES 2.0), stocare de fișiere locale în sandbox, încărcare dinamică , modul ecran complet și captură de mouse . Există, de asemenea, planuri de a face NaCl disponibil pe dispozitive portabile.

Portable Native Client (PNaCl) este o versiune independentă de arhitectură. Aplicațiile PNaCl sunt compilate înainte de timp . PNaCl este recomandat peste NaCl pentru majoritatea cazurilor de utilizare. Conceptul general de NaCl (care rulează codul nativ în browserul web) a fost implementat anterior în ActiveX , care, în timp ce este încă în uz, are acces complet la sistem (disc, memorie, interfață cu utilizatorul, registru etc.). Clientul nativ evită această problemă utilizând sandboxing.

O alternativă la NaCl este asm.js , care permite, de asemenea, compilarea aplicațiilor scrise în C sau C ++ pentru a rula în browser (la mai mult de jumătate din viteza nativă) și, de asemenea, acceptă compilarea în avans, dar este un subset de JavaScript și, prin urmare, compatibil cu browserele care nu îl acceptă direct. O altă alternativă (deși poate fi alimentată inițial de PNaCl ) este WebAssembly .

La 12 octombrie 2016, un comentariu cu privire la urmărirea problemei Chromium a indicat faptul că echipele Google Pepper și Native Client au fost destrămate. La 30 mai 2017, Google a anunțat deprecierea PNaCl în favoarea WebAssembly . Deși inițial Google a planificat eliminarea PNaCl în primul trimestru al anului 2018 și mai târziu în al doilea trimestru al anului 2019, în prezent este planificată eliminarea în iunie 2022 (împreună cu aplicațiile Chrome).

Prezentare generală

Native Client este un proiect open source dezvoltat de Google . Până în prezent, Quake , XaoS , Battle for Wesnoth , Doom , Lara Croft și The Guardian of Light , From Dust și MAME , precum și sistemul de procesare a sunetului Csound , au fost portate către clientul nativ. Clientul nativ a fost disponibil în browserul web Google Chrome de la versiunea 14 și a fost activat implicit de la versiunea 31, când a fost lansat Clientul nativ portabil (PNaCl, pronunțat: pinnacle).

O implementare ARM a fost lansată în martie 2010. De asemenea, sunt acceptate x86-64 , IA-32 și MIPS .

Pentru a rula o aplicație portably sub PNaCl, trebuie compilate la un subset arhitectură agnostic și stabilă a LLVM intermediar reprezentare bytecode . Executabilele se numesc executabile PNaCl (pexes). PNaCl Toolchain creează fișiere .pexe; Fișierele .nexe ale NaCl Toolchain. Numărul magic de fișiere .nexe este 0x7F „E” „L” „F”, care este ELF . În Chrome, acestea sunt traduse în executabile specifice arhitecturii, astfel încât să poată fi rulate.

NaCl utilizează detectarea și izolarea defectelor software pentru sandboxing pe x86-64 și ARM. Implementarea x86-32 a Native Client se remarcă prin metoda sa nouă de sandboxing, care folosește facilitatea de segmentare rar utilizată a arhitecturii x86 . Clientul nativ configurează segmente x86 pentru a restricționa intervalul de memorie la care poate accesa codul sandbox. Folosește un verificator de cod pentru a preveni utilizarea instrucțiunilor nesigure, cum ar fi cele care efectuează apeluri de sistem. Pentru a preveni saltul codului către o instrucțiune nesigură ascunsă în mijlocul unei instrucțiuni sigure, Native Client cere ca toate săriturile indirecte să fie salturi la începutul blocurilor aliniate pe 32 de octeți, iar instrucțiunile nu au voie să traverseze aceste blocuri. Datorită acestor constrângeri, codul C și C ++ trebuie recompilat pentru a rula sub Native Client, care oferă versiuni personalizate ale lanțului de instrumente GNU , în special GNU Compiler Collection (GCC), GNU Binutils și LLVM .

Clientul nativ este licențiat sub o licență în stil BSD .

Clientul nativ folosește Newlib ca bibliotecă C , dar este disponibil și un port al Bibliotecii GNU C (GNU libc).

Piper

NaCI indică clorură de sodiu , sare de masă obișnuită ; ca joc de cuvinte , s-a folosit și denumirea de piper . Pepper API este un API multiplataforma, open-source pentru crearea de module Native Client. Pepper Plugin API sau PPAPI este un API multiplataforma pentru pluginurile de browser web securizate de clientul nativ, bazat mai întâi pe NPAPI de la Netscape , apoi rescris de la zero. În prezent, este utilizat în Chromium și Google Chrome pentru a activa versiunea PPAPI a Adobe Flash și vizualizatorul PDF încorporat.

PPAPI

La 12 august 2009, o pagină de pe Google Code a introdus un nou proiect, Pepper și Pepper Plugin API (PPAPI), „un set de modificări ale NPAPI pentru a face pluginurile mai portabile și mai sigure”. Această extensie este concepută special pentru a facilita implementarea execuției pluginului în afara procesului . Mai mult, obiectivele proiectului sunt de a oferi un cadru pentru ca pluginurile să fie complet multiplataforme. Subiectele luate în considerare includ:

  • Semantică uniformă pentru NPAPI în toate browserele.
  • Executarea într-un proces separat de renderer-browser.
  • Standardizați redarea utilizând procesul de compoziție al browserului.
  • Definirea evenimentelor standardizate și funcții de rasterizare 2D.
  • Încercarea inițială de a oferi acces grafic 3D.
  • Registrul pluginurilor.

API-ul Pepper acceptă, de asemenea, Gamepads (versiunea 19) și WebSockets (versiunea 18).

Începând cu 13 mai 2010, browserul open source Google, Chromium , a fost singurul browser web care a folosit noul model de plug-in pentru browser. Începând cu 2020, Pepper este acceptat de browserele Chrome, Chromium și Blink, bazate pe motoare, precum Opera și Microsoft Edge.

În august 2020, Google a anunțat că suportul pentru PPAPI va fi eliminat din Google Chrome și Chromium în iunie 2022.

PPAPI în Firefox

Dezvoltatorii Firefox au declarat în 2014 că nu vor sprijini Pepper, deoarece nu există nicio specificație completă a API-ului dincolo de implementarea sa în Chrome, care în sine este conceput pentru a fi utilizat numai cu motorul de aspect Blink și are API-uri private specifice pluginului Flash Player care nu sunt documentate. În octombrie 2016, Mozilla a anunțat că a reexaminat și că explorează dacă va încorpora Pepper API și PDFium în viitoarele versiuni de Firefox, însă nu au fost luate astfel de măsuri.

Aplicații

Un site web folosește NaCL pe server pentru a permite utilizatorilor să experimenteze limbajul de programare Go din browserele lor.

Recepţie

Unele grupuri de dezvoltatori de browsere acceptă tehnologia Native Client, dar altele nu.

Suporteri

Chad Austin (de la IMVU ) a lăudat modul în care clientul nativ poate aduce aplicații performante pe web (cu o penalizare de aproximativ 5% comparativ cu codul nativ) într-un mod sigur, accelerând în același timp evoluția aplicațiilor din partea clientului, oferind o alegere a limbajului de programare utilizat (pe lângă JavaScript ).

John D. Carmack al lui Id Software a lăudat Native Client la QuakeCon 2012, spunând: „dacă trebuie să faci ceva în interiorul unui browser, Native Client este mult mai interesant ca ceva care a început ca un hack destul de drăguț și inteligent x86. că ar putea rezolva toate acestea în mod utilizator în mod interesant. Acum este o recompilare dinamică, dar ceva pe care îl programați în C sau C ++ și se compilează până la ceva care nu va fi nivelul dvs. de optimizare -O4 pentru cod complet nativ, dar aproape al naibii de aproape la codul nativ. Ați putea face toate urmăririle voastre ale indicatorului rău și orice doriți să faceți ca dezvoltator de jocuri metalice. "

Detractori

Alți profesioniști IT sunt mai critici cu privire la această tehnologie sandboxing, deoarece are probleme substanțiale sau substanțiale de interoperabilitate.

Vicepreședintele de produse Mozilla , Jay Sullivan , a declarat că Mozilla nu are de gând să ruleze codul nativ în browser, deoarece „Aceste aplicații native sunt doar niște cutii negre într-o pagină web. [...] Credem cu adevărat în HTML, și aici vrem să ne concentrăm ".

Christopher Blizzard, de la Mozilla, a criticat NaCl, susținând că codul nativ nu poate evolua în același mod în care poate face web-ul bazat pe codul sursă. De asemenea, el a comparat NaCl cu tehnologia Microsoft ActiveX , afectată de DLL Hell .

Håkon Wium Lie , CTO-ul Opera, consideră că „NaCl pare să„ tânjească după vremurile rele, înainte de web ”” și că „Clientul nativ este despre construirea unei noi platforme - sau portarea unei platforme vechi pe web [. ..] va aduce probleme de complexitate și securitate și va elimina concentrarea de pe platforma web. "

A doua generație

A doua generație de sandboxing dezvoltată în Google este gVisor . Este destinat să înlocuiască NaCl în Google Cloud , pentru a fi mai exact în Google App Engine . De asemenea, Google promovează WebAssembly .

Vezi si

Referințe

linkuri externe

Exemple