Client nativ
| Client nativ | |
|---|---|
| Dezvoltator | |
| Scris in | C și C++ |
| Sistem de operare | multiplatformă |
| Prima editie | 16 septembrie 2011 [1] |
| Platformă hardware | x86 , x86_64 , ARM [2] și MIPS |
| ultima versiune |
|
| Stat | Dezvoltat |
| Licență | licență BSD modificată [d] |
| Site-ul web | developer.chrome.com/doc… |
Native Client ( NaCl ) este o tehnologie sandbox pentru rularea codului pe platformele x86 , x86-64 , ARM și MIPS , care vă permite să rulați în siguranță cod nativ direct în browser, indiferent de sistemul de operare, la o viteză apropiată de rulare cod nativ . Această tehnologie poate fi folosită și pentru a crea pluginuri securizate de browser , părți ale unei aplicații sau aplicații în sine [4] , cum ar fi ZeroVM .
Pentru a arăta pregătirea tehnologiei, pe 9 decembrie 2011, Google a introdus un joc [5] cu o grafică bogată (jocul nu mai este disponibil momentan). NaCl folosește grafică 3D accelerată hardware prin OpenGL ES 2.0, rulând într-un sandbox de stocare locală cu capacitate de ecran complet și interacțiune cu mouse-ul. [6] [7]
Portable Native Client ( în engleză Portable Native Client , abreviat PNaCl ) este o versiune independentă de arhitectură a acestei tehnologii. Aplicațiile PNaCl folosesc tehnologii de compilare AOT . Ideea de bază a NaCl (rularea codului nativ într-un browser) a fost implementată în ActiveX , care are multe probleme de securitate. Tehnologia NaCl evită acest lucru prin utilizarea unui sandbox.
Există o alternativă la NaCl numită asm.js , care vă permite, de asemenea, să compilați aplicații C sau C++ pentru a rula direct în browser (la viteză aproape nativă ), acceptă compilarea AOT și este un subset al limbajului JavaScript, adică de ex. compatibil cu browserele care nu au suport nativ pentru acesta. O altă alternativă la NaCl (deși inițial bazată pe PNaCl) este WebAssembly .
Pe 12 octombrie 2016 , a apărut un comentariu [8] în trackerul de erori al proiectului Chromium , menționând dizolvarea echipelor care lucrează pe Pepper și Native Client de la Google.
Pe 30 mai 2017, Google a anunțat că depreciază PNaCl în favoarea WebAssembly . [9]
Descriere
Native Client este un proiect open source . Până în prezent, Quake [10] , XaoS , Battle for Wesnoth , Doom , Lara Croft and the Guardian of Light , From Dust și MAME , precum și sistemul de sinteză a sunetului software Csound , au fost portate la Native Client. Tehnologia este disponibilă în browserul Google Chrome începând cu versiunea 14 [11] și este activată implicit începând cu versiunea 31, în care a fost introdus oficial Portable Native Client (PNaCl). [12]
O implementare ARM a tehnologiei a fost lansată în martie 2010. [13] Platformele x86-64, IA-32 și MIPS au fost suportate nativ.
Pentru a rula folosind tehnologia PNaCl, aplicația trebuie să fie compilată într-un bytecode independent de arhitectură în format LLVM . [14] Executabilele create astfel se numesc executabil PNaCl (pexe). Instrumentele de compilare PNaCl produc fișiere .pexe; NaCl - .nexe. Fișierele .nexe au semnătura 0x7F „E” „L” „F” (adică sunt fișiere ELF ). Chrome traduce pexe în executabile specifice arhitecturii pentru a rula .
NaCl folosește detectarea erorilor software și protecția sandbox pe platformele x86-64 și ARM. [15] Implementarea în x86-32 prezintă un nou mod de sandboxing. [16] Native Client sandboxing își setează segmentele de memorie la arhitectura x86 . Un verificator de cod este, de asemenea, utilizat pentru a preveni apelarea apelurilor de sistem nesigure. Pentru a preveni trecerea la partea neprotejată a apelului, Native Client cere ca toate săriturile indirecte să înceapă în blocuri aliniate pe 32 de octeți, iar instrucțiunile nu au voie să părăsească aceste blocuri. [16] Din cauza acestor limitări, codul scris în C sau C++ trebuie să fie recompilat într-un mod special pentru a rula folosind tehnologia Native Client, care poate fi realizată folosind versiuni specializate ale lanțului de instrumente GNU , în special GNU Compiler Collection , GNU Binutils și LLVM .
Clientul nativ folosește Newlib ca bibliotecă C standard , totuși este disponibil și un port al Bibliotecii C GNU . [17]
Ardei
Pepper API este un API gratuit multiplatform pentru crearea de module pentru Native Client. Plugin Pepper API ( eng. Pepper Plugin API , abreviat PPAPI) este un API multiplatformă pentru plug-in-uri protejat de tehnologia Native Client, bazat pe NPAPI , dar complet rescris. Folosit în prezent în browsere asemănătoare Chromium pentru a rula versiunea PPAPI a Adobe Flash [18] și vizualizatorul PDF încorporat [19] .
PPAPI
Pe 12 august 2009, proiectul Pepper asociat cu dezvoltarea pluginului Pepper API [20] a fost prezentat pe pagina Google Code , care afirma că PPAPI este un set de modificări NPAPI pentru a face astfel de pluginuri mai portabile și mai sigure [21] . Pluginul a fost creat pentru a implementa cu ușurință lansarea în afara procesului. În continuare, scopul proiectului a fost de a oferi un cadru pentru crearea de pluginuri complet multiplatforme. S-a planificat implementarea acestor tehnologii:
- Semantică NPAPI universală pentru toate browserele.
- Rulați într-un proces separat de browserul însuși.
- Standardizarea procesului de randare cu ajutorul browserului.
- Definirea evenimentelor standard și rasterizarea funcțiilor 2D.
- Baza pentru grafica 3D.
- Plugin de înregistrare.
Mai târziu, utilizarea PPAPI a ajutat la implementarea suportului pentru gamepad -uri și WebSocket .
Începând cu 13 mai 2010, Chromium a devenit singurul browser care acceptă noul model de plugin. [22] Mozilla Firefox nu acceptă Pepper, deoarece nu există o specificație API completă în afara implementării sale în Chrome, care a fost creată numai pentru motorul de browser Blink . Începând cu 2016, Pepper este acceptat în browserele bazate pe Chrome, Chromium și Blink, cum ar fi Opera .
Proiecte pe Native Client
Există un site numit The Go Playground Arhivat 17 noiembrie 2021 la Wayback Machine care utilizează această tehnologie pentru a permite experimentarea cu Go chiar în browser.
- Folding@home Arhivat 11 decembrie 2016 la proiectul Wayback Machine Folding@home direct în browser folosind tehnologia nacl
Reacția publicului
Chad Austin a lăudat modul Native Client de a construi aplicații web de înaltă performanță ( cu doar % mai puține performanțe decât codul de mașină ) , permițând în același timp aplicațiilor client să evolueze oferind o gamă de limbi de programare (cu excepția JavaScript). [23]
John Carmack , coproprietar al Id Software , a menționat Native Client la QuakeCon 2012:
|
Dacă trebuie să faceți ceva în browser, Native Client este mult mai interesant, care a început ca un hack x86 cu adevărat inteligent care vă permite să faceți ceea ce doriți fără a părăsi sandbox-ul la nivel de acces al utilizatorului. Acum există recompilare dinamică, iar ceea ce scrieți în C sau C++ este compilat în ceva care nu este un cod de mașină foarte optimizat, ci extrem de aproape de codul de mașină. Puteți face tot felul de operațiuni nebunești cu pointeri și tot ceea ce dezvoltatorii de jocuri sunt obișnuiți să facă la nivel hardware. Carmack, John [24]
|
dacă trebuie să faceți ceva în interiorul unui browser, Native Client este mult mai interesant ca ceva care a început ca un hack x86 al naibii de inteligent, în felul în care ar putea sandbox toate acestea în modul utilizator, interesant. Acum este o recompilare dinamică, dar ceva pe care îl programezi în C sau C++ și se compilează până la ceva care nu va fi nivelul tău de optimizare -O4 pentru codul complet nativ, dar destul de aproape de codul nativ. Ai putea să faci toate urmăririle tale rele și orice vrei să faci ca dezvoltator de jocuri cu metal. |
Vicepreședintele Mozilla, Jay Sullivan , a spus că Mozilla nu are de gând să ruleze cod nativ în browser, deoarece
|
Aceste aplicații native sunt cutii negre pe o pagină web. […] Credem în tehnologia HTML și acolo ne vom pune energia. Jay Sullivan [ 25 ] _
|
Aceste aplicații native sunt doar mici cutii negre dintr-o pagină web. […] Credem cu adevărat în HTML și aici vrem să ne concentrăm. |
Colaboratorul Mozilla, Blizzard , a criticat tehnologia NaCl, argumentând că codul nativ nu ar trebui să fie folosit niciodată pe web. El a comparat, de asemenea, NaCl cu tehnologia Microsoft ActiveX , care a atins punctul de iad DLL . [patru]
Håkon Wium Lie ( norvegiană: Håkon Wium Lie ) , directorul tehnic al Opera , consideră că
|
NaCl pare să „țintească în acele vremuri proaste, înainte de web” […] Esența Native Client este construirea unei noi platforme – sau portarea uneia veche pe web […] care va introduce probleme de complexitate și securitate și va priva platforma web a atenției. Håkon Wium Lie ( norvegiană Håkon Wium Lie ) [4]
|
NaCl pare să „tânjească după vremurile proaste, înainte de web” […] Native Client este despre construirea unei noi platforme – sau portarea unei platforme veche pe web […] va aduce probleme de complexitate și securitate și va va elimina concentrarea platformei web. |
Brendan Eich , CTO al Mozilla, a spus că ECMAScript 6 este suficient pentru toate nevoile de dezvoltare a aplicațiilor web. [26]
Vezi și
- Virtualizarea aplicațiilor
- Sandboxie
- asm.js
- asamblare web
- XBAP
Note
- ↑ Clientul nativ Google este disponibil în Chrome - 2011.
- ↑ Suport pentru client nativ pe ARM - 2013.
- ↑ https://developer.chrome.com/native-client/sdk/release-notes#chrome-pepper-49
- ↑ 1 2 3 Metz, Cade . Google Native Client: Web-ul viitorului - sau trecutul? (engleză) (12 septembrie 2011). Arhivat din original pe 6 august 2016. Preluat la 6 august 2016.
- ↑ Hodakovsky, Konstantin . Noua tehnologie Google Chrome aduce Bastion în browser (13 decembrie 2011). Arhivat din original pe 21 august 2016. Preluat la 6 august 2016.
- ↑ Stefansen, Christian . Jocuri, aplicații și timpii de rulare vin la Native Client ( 9 decembrie 2011). Arhivat din original pe 19 august 2016. Preluat la 6 august 2016.
- ↑ Rosenblatt, Seth . Native Client transformă Chrome într-o platformă de jocuri de ultimă generație ( 9 decembrie 2011). Arhivat din original pe 27 aprilie 2016. Preluat la 6 august 2016.
- ↑ Bugs.chromium.org . _ bugs.chromium.org (12 noiembrie 2016). Preluat la 7 martie 2018. Arhivat din original la 18 august 2017.
- ↑ La revedere PNaCl, Bună WebAssembly! (eng.) , Chromium Blog (30 mai 2017). Arhivat din original pe 30 mai 2017. Preluat la 7 martie 2018.
- ↑ Humphries, Matthew . Google arată Quake-clone care rulează în Native Client ( 13 mai 2010). Arhivat din original pe 21 august 2016. Preluat la 6 august 2016.
- ↑ Chen, Brad . O nouă versiune stabilă a Chrome, care extinde frontierele web ( 16 septembrie 2011). Arhivat din original pe 20 august 2016. Preluat la 6 august 2016.
- ↑ Sehr, David . Client nativ portabil: „apogeul” vitezei, securității și portabilității ( 12 noiembrie 2013). Arhivat din original pe 13 mai 2016. Preluat la 6 august 2016.
- ↑ Sehr, David . Asistență Native Client pe ARM (ing.) (22 ianuarie 2013). Arhivat din original pe 27 iulie 2016. Preluat la 6 august 2016.
- ↑ Alan Donovan, Robert Muth, Brad Chen, David Sehr. PNaCl: Portable Native Client Executables (engleză) (22 februarie 2010). Arhivat din original pe 12 martie 2016.
- ↑ David Sehr, Robert Muth, Cliff L. Biffle, Victor Khimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen. Adaptarea izolației defecțiunilor software la arhitecturile CPU contemporane ( 2010). Preluat la 6 august 2016. Arhivat din original la 24 iulie 2016.
- ↑ 1 2 Bennet Yee, David Sehr, Greg Dardyk, Brad Chen, Robert Muth, Tavis Ormandy, Shiki Okasaka, Neha Narula, Nicholas Fullagar. Client nativ: un Sandbox pentru cod nativ x86 portabil, neîncrezut (engleză) (2009). Preluat la 6 august 2016. Arhivat din original la 12 septembrie 2016.
- ↑ Clădire . _ Preluat la 6 august 2016. Arhivat din original la 9 noiembrie 2016.
- ↑ Schuh, Justin . Drumul către Flash mai sigur, mai stabil și mai strălucitor ( 8 august 2012). Arhivat din original pe 29 iulie 2016. Preluat la 6 august 2016.
- ↑ Metz, Cade . Google îmbrățișează Adobe mai mult cu îmbinarea Chrome-PDF ( 18 iunie 2010). Arhivat din original pe 6 august 2016. Preluat la 6 august 2016.
- ↑ ppapi . _ Preluat la 6 august 2016. Arhivat din original la 6 octombrie 2016.
- ↑ ppapi - Concepts.wiki . Preluat la 6 august 2016. Arhivat din original la 6 octombrie 2016.
- ↑ Metz, Cade . Google încălzește codul nativ pentru sistemul de operare Chrome ( 13 mai 2010). Arhivat din original pe 17 ianuarie 2019. Preluat la 6 august 2016.
- ↑ Chad Austin. În apărarea democrației lingvistice (sau: de ce browserul are nevoie de o mașină virtuală) (engleză) (8 ianuarie 2011). Preluat la 6 august 2016. Arhivat din original la 16 august 2016.
- ↑ Videoclipul QuakeCon 2012 (începe la 2 ore, 36 minute, 18 secunde) pe YouTube , începând cu 2:36:18
- ↑ Metz, Cade . Mozilla: Browserul nostru nu va rula cod nativ ( 24 iunie 2010). Arhivat din original pe 26 august 2016. Preluat la 6 august 2016.
- ↑ Crill, Paul . Fondatorul JavaScript respinge Google Native Client, promovează ECMAScript 6 ( 31 mai 2012). Arhivat din original pe 20 septembrie 2016. Preluat la 6 august 2016.
Link -uri
- Chen, Brad . Client nativ: O tehnologie pentru rularea codului nativ pe web ( 8 decembrie 2008). Arhivat din original pe 19 august 2016. Preluat la 6 august 2016.
- medii ușoare. NaclBox (engleză) . Preluat la 15 martie 2022. Arhivat din original la 18 septembrie 2021.