Cliente nativo
| Cliente nativo | |
|---|---|
| Sviluppatore | |
| Scritto in | C e C++ |
| Sistema operativo | multipiattaforma |
| Prima edizione | 16 settembre 2011 [1] |
| Piattaforma hardware | x86 , x86_64 , ARM [2] e MIPS |
| ultima versione |
|
| Stato | Sviluppato |
| Licenza | licenza BSD modificata [d] |
| Sito web | developer.chrome.com/doc… |
Native Client ( NaCl ) è una tecnologia sandbox per l'esecuzione di codice sulle piattaforme x86 , x86-64 , ARM e MIPS , che consente di eseguire in sicurezza codice nativo direttamente nel browser, indipendentemente dal sistema operativo, a una velocità prossima all'esecuzione codice nativo . Questa tecnologia può essere utilizzata anche per creare plugin per browser sicuri , parti di un'applicazione o applicazioni stesse [4] , come ZeroVM .
Per mostrare la prontezza della tecnologia, il 9 dicembre 2011, Google ha introdotto un gioco [5] con una grafica ricca (il gioco non è più disponibile al momento). NaCl utilizza la grafica 3D con accelerazione hardware tramite OpenGL ES 2.0, in esecuzione in una sandbox di archiviazione locale con funzionalità a schermo intero e interazione con il mouse. [6] [7]
Portable Native Client ( inglese Portable Native Client , abbr. PNaCl ) è una versione indipendente dall'architettura di questa tecnologia. Le applicazioni PNaCl utilizzano tecnologie di compilazione AOT . L'idea di base di NaCl (esecuzione di codice nativo in un browser) è stata implementata in ActiveX , che ha molti problemi di sicurezza. La tecnologia NaCl evita ciò utilizzando una sandbox.
Esiste un'alternativa a NaCl chiamata asm.js , che consente anche di compilare applicazioni C o C++ da eseguire direttamente nel browser (a velocità quasi nativa ), supporta la compilazione AOT ed è un sottoinsieme del linguaggio JavaScript, ad es. retrocompatibile con i browser che non dispongono del supporto nativo per esso. Un'altra alternativa a NaCl (sebbene originariamente basata su PNaCl) è WebAssembly .
Il 12 ottobre 2016 , un commento [8] è apparso nel bug tracker del progetto Chromium , menzionando lo scioglimento dei team che lavorano su Pepper e Native Client di Google.
Il 30 maggio 2017, Google ha annunciato che avrebbe deprecato PNaCl a favore di WebAssembly . [9]
Descrizione
Native Client è un progetto open source . Ad oggi, Quake [10] , XaoS , Battle for Wesnoth , Doom , Lara Croft and the Guardian of Light , From Dust e MAME , così come il sistema di sintesi del suono del software Csound , sono stati portati su Native Client. La tecnologia è disponibile nel browser Google Chrome a partire dalla versione 14 [11] ed è attivata di default a partire dalla versione 31, in cui è stato ufficialmente introdotto il Portable Native Client (PNaCl). [12]
Un'implementazione ARM della tecnologia è stata rilasciata nel marzo 2010. [13] Le piattaforme x86-64, IA-32 e MIPS erano supportate in modo nativo.
Per funzionare utilizzando la tecnologia PNaCl, l'applicazione deve essere compilata in un bytecode indipendente dall'architettura del formato LLVM . [14] Gli eseguibili creati in questo modo sono chiamati eseguibili PNaCl (pexe). Gli strumenti di compilazione PNaCl producono file .pexe; NaCl - .nexe. I file .nexe hanno la firma 0x7F 'E' 'L' 'F' (cioè sono file ELF ). Chrome traduce pexe in eseguibili specifici dell'architettura da eseguire .
NaCl utilizza il rilevamento degli errori software e la protezione sandbox su piattaforme x86-64 e ARM. [15] L'implementazione in x86-32 presenta un nuovo modo di sandboxing. [16] Il sandboxing di Native Client imposta i suoi segmenti di memoria sull'architettura x86 . Un verificatore di codice viene utilizzato anche per impedire che vengano chiamate chiamate di sistema non sicure. Per evitare di passare alla parte non protetta della chiamata, Native Client richiede che tutti i salti indiretti inizino in blocchi allineati a 32 byte e che le istruzioni non siano autorizzate a lasciare questi blocchi. [16] A causa di queste limitazioni, il codice scritto in C o C++ deve essere ricompilato in un modo speciale per essere eseguito utilizzando la tecnologia Native Client, cosa che può essere eseguita utilizzando versioni specializzate della toolchain GNU , in particolare GNU Compiler Collection , GNU Binutils e LLVM .
Native Client utilizza Newlib come libreria C standard , tuttavia è disponibile anche una porta della libreria C GNU . [17]
Peperoni
Pepper API è un'API multipiattaforma gratuita per la creazione di moduli per Native Client. Plugin Pepper API ( eng. Pepper Plugin API , abbr. PPAPI) è un'API multipiattaforma per plug-in protetta da tecnologia Native Client, basata su NPAPI , ma completamente riscritta. Attualmente utilizzato nei browser simili a Chromium per eseguire la versione PPAPI di Adobe Flash [18] e il visualizzatore PDF integrato [19] .
PPAPI
Il 12 agosto 2009, il progetto Pepper associato allo sviluppo del plug-in Pepper API [20] è stato presentato nella code page di Google , in cui si affermava che PPAPI è un insieme di modifiche NPAPI per rendere tali plug-in più portatili e sicuri [21] . Il plugin è stato creato per implementare facilmente il lancio fuori processo. Andando avanti, l'obiettivo del progetto era fornire un framework per la creazione di plug-in completamente multipiattaforma. Si prevedeva di implementare queste tecnologie:
- Semantica NPAPI universale per tutti i browser.
- Esegui in un processo separato dal browser stesso.
- Standardizzazione del processo di rendering tramite browser.
- Definizione di eventi standard e rasterizzazione di funzioni 2D.
- Base per la grafica 3D.
- Plugin di registrazione.
Successivamente, l'uso di PPAPI ha aiutato a implementare il supporto per gamepad e WebSocket .
A partire dal 13 maggio 2010, Chromium è diventato l'unico browser a supportare il nuovo modello di plug-in. [22] Mozilla Firefox non supporta Pepper poiché non esiste una specifica API completa al di fuori della sua implementazione in Chrome, che è stata creata solo per il motore del browser Blink . A partire dal 2016, Pepper è supportato nei browser basati su Chrome, Chromium e Blink come Opera .
Progetti su Native Client
C'è un sito chiamato The Go Playground Archiviato il 17 novembre 2021 su Wayback Machine che utilizza questa tecnologia per consentire la sperimentazione con Go direttamente nel browser.
- Folding@home Archiviato l'11 dicembre 2016 su Wayback Machine Progetto Folding@home direttamente nel browser utilizzando la tecnologia nacl
Reazione pubblica
Chad Austin ha elogiato il modo in cui Native Client crea applicazioni Web ad alte prestazioni ( con solo il % di prestazioni in meno rispetto al codice macchina ) consentendo al contempo l'evoluzione delle applicazioni client fornendo una scelta di linguaggi di programmazione (tranne JavaScript). [23]
John Carmack , co-proprietario di Id Software , ha menzionato Native Client al QuakeCon 2012:
|
Se hai bisogno di fare qualcosa nel browser, Native Client è molto più interessante, che è iniziato come un hack x86 davvero intelligente che ti consente di fare ciò che vuoi senza lasciare la sandbox del livello di accesso dell'utente. Ora c'è la ricompilazione dinamica e ciò che scrivi in C o C++ viene compilato in qualcosa che non è un codice macchina altamente ottimizzato, ma estremamente vicino al codice macchina. Puoi eseguire tutti i tipi di operazioni folli con i puntatori e tutto ciò che gli sviluppatori di giochi sono abituati a fare a livello hardware. Carmack, Giovanni [24]
|
se devi fare qualcosa all'interno di un browser, Native Client è molto più interessante come qualcosa che è iniziato come un hack x86 davvero dannatamente intelligente nel modo in cui potevano sandbox tutto questo in modalità utente in modo interessante. Ora è una ricompilazione dinamica, ma qualcosa che programmi in C o C++ e si riduce a qualcosa che non sarà il tuo livello di ottimizzazione -O4 per codice completamente nativo ma dannatamente vicino al codice nativo. Potresti fare tutti i tuoi malvagi inseguimenti di puntatori e qualsiasi cosa tu voglia fare come sviluppatore di giochi al metallo. |
Il vicepresidente di Mozilla Jay Sullivan ha affermato che Mozilla non ha intenzione di eseguire codice nativo nel browser perché
|
Queste app native sono scatole nere su una pagina web. […] Crediamo nella tecnologia HTML, ed è qui che metteremo le nostre energie. Jay Sullivan [ 25 ] _
|
Queste app native sono solo piccole scatole nere in una pagina web. […] Crediamo davvero nell'HTML, ed è qui che vogliamo concentrarci. |
Il collaboratore di Mozilla Blizzard ha criticato la tecnologia NaCl, sostenendo che il codice nativo non dovrebbe mai essere utilizzato sul web. Ha anche paragonato NaCl alla tecnologia ActiveX di Microsoft , che ha raggiunto il punto dell'inferno delle DLL . [quattro]
Håkon Wium Lie ( in norvegese: Håkon Wium Lie ) , direttore tecnico dell'Opera , ritiene che
|
NaCl sembra "mirare a quei brutti vecchi tempi, prima del web" […] L'essenza di Native Client è la costruzione di una nuova piattaforma — o il porting di una vecchia sul web […] che introdurrà problemi di complessità e sicurezza e priverà la piattaforma web dell'attenzione. Håkon Wium Lie ( norvegese Håkon Wium Lie ) [4]
|
NaCl sembra 'desiderare i brutti vecchi tempi, prima del web' […] Native Client riguarda la costruzione di una nuova piattaforma – o il porting di una vecchia piattaforma nel web […] comporterà complessità e problemi di sicurezza, e toglierà l'attenzione dalla piattaforma web. |
Brendan Eich , CTO di Mozilla, ha affermato che ECMAScript 6 è sufficiente per tutte le esigenze di sviluppo di applicazioni web. [26]
Vedi anche
- Virtualizzazione delle applicazioni
- Sandbox
- asm.js
- assemblaggio web
- XBAP
Note
- ↑ Il client nativo di Google diventa attivo in Chrome - 2011.
- ↑ Supporto Native Client su ARM - 2013.
- ↑ https://developer.chrome.com/native-client/sdk/release-notes#chrome-pepper-49
- ↑ 1 2 3 Metz, Cade . Google Native Client: il Web del futuro o del passato? (inglese) (12 settembre 2011). Archiviato dall'originale il 6 agosto 2016. Estratto il 6 agosto 2016.
- ^ Khodakovsky, Costantino . La nuova tecnologia Google Chrome porta Bastion nel browser (13 dicembre 2011). Archiviato dall'originale il 21 agosto 2016. Estratto il 6 agosto 2016.
- ^ Stefansen, Cristiano . Giochi, app e runtime arrivano in Native Client ( 9 dicembre 2011). Archiviato dall'originale il 19 agosto 2016. Estratto il 6 agosto 2016.
- ^ Rosenblatt, Seth . Native Client trasforma Chrome in una piattaforma di gioco di fascia alta ( 9 dicembre 2011). Archiviato dall'originale il 27 aprile 2016. Estratto il 6 agosto 2016.
- ↑ Bugs.chromium.org _ _ bugs.chromium.org (12 novembre 2016). Estratto il 7 marzo 2018 . Archiviato dall'originale il 18 agosto 2017.
- ↑ Addio PNaCl, ciao WebAssembly! (ita.) , Chromium Blog (30 maggio 2017). Archiviato dall'originale il 30 maggio 2017. Estratto il 7 marzo 2018.
- ^ Humphries, Matteo . Google mostra Quake-clone in esecuzione in Native Client ( 13 maggio 2010). Archiviato dall'originale il 21 agosto 2016. Estratto il 6 agosto 2016.
- ^ Chen, Brad . Una nuova versione stabile di Chrome, che espande le frontiere del web ( 16 settembre 2011). Archiviato dall'originale il 20 agosto 2016. Estratto il 6 agosto 2016.
- ^ Sehr, David . Portable Native Client: l'"apice" di velocità, sicurezza e portabilità ( 12 novembre 2013). Archiviato dall'originale il 13 maggio 2016. Estratto il 6 agosto 2016.
- ^ Sehr, David . Supporto Native Client su ARM (eng.) (22 gennaio 2013). Archiviato dall'originale il 27 luglio 2016. Estratto il 6 agosto 2016.
- ^ Alan Donovan, Robert Muth, Brad Chen, David Sehr. PNaCl: eseguibili Portable Native Client (inglese) (22 febbraio 2010). Archiviato dall'originale il 12 marzo 2016.
- ^ David Sehr, Robert Muth, Cliff L. Biffle, Victor Khimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen. Adattamento dell'isolamento dei guasti software alle architetture CPU contemporanee ( 2010). Estratto 6 agosto 2016 . Archiviato dall'originale il 24 luglio 2016.
- ^ 1 2 Bennet Yee, David Sehr, Greg Dardyk, Brad Chen, Robert Muth, Tavis Ormandy, Shiki Okasaka, Neha Narula, Nicholas Fullagar. Client nativo: una sandbox per codice nativo x86 portatile e non affidabile (inglese) (2009). Estratto 6 agosto 2016 . Archiviato dall'originale il 12 settembre 2016.
- ↑ Edificio . _ Estratto il 6 agosto 2016 . Archiviato dall'originale il 9 novembre 2016.
- ^ Schuh, Giustino . La strada verso Flash più sicuro, più stabile e più appariscente ( 8 agosto 2012). Archiviato dall'originale il 29 luglio 2016. Estratto il 6 agosto 2016.
- ^ Metz, Cade . Google abbraccia Adobe più forte con l'unione di Chrome-PDF ( 18 giugno 2010). Archiviato dall'originale il 6 agosto 2016. Estratto il 6 agosto 2016.
- ↑ pappi . _ Estratto il 6 agosto 2016 . Archiviato dall'originale il 6 ottobre 2016.
- ↑ pappi - Concepts.wiki . Estratto il 6 agosto 2016 . Archiviato dall'originale il 6 ottobre 2016.
- ^ Metz, Cade . Google riscalda il codice nativo per Chrome OS ( 13 maggio 2010). Archiviato dall'originale il 17 gennaio 2019. Estratto il 6 agosto 2016.
- ^ Ciad Austin. In difesa della democrazia linguistica (o: perché il browser ha bisogno di una macchina virtuale) (inglese) (8 gennaio 2011). Estratto 6 agosto 2016 . Archiviato dall'originale il 16 agosto 2016.
- ↑ Video del QuakeCon 2012 (inizia a 2 ore, 36 minuti, 18 secondi) su YouTube , a partire da 2:36:18
- ^ Metz, Cade . Mozilla: Il nostro browser non eseguirà codice nativo ( 24 giugno 2010). Archiviato dall'originale il 26 agosto 2016. Estratto il 6 agosto 2016.
- ^ Crill, Paolo . Il fondatore di JavaScript respinge Google Native Client, spinge ECMAScript 6 ( 31 maggio 2012). Archiviato dall'originale il 20 settembre 2016. Estratto il 6 agosto 2016.
Collegamenti
- Chen, Brad . Native Client: una tecnologia per l'esecuzione di codice nativo sul Web ( 8 dicembre 2008). Archiviato dall'originale il 19 agosto 2016. Estratto il 6 agosto 2016.
- mezzo leggero. NaclBox (inglese) . Estratto il 15 marzo 2022 . Archiviato dall'originale il 18 settembre 2021.