Google Native Client
Google Native Client | |
Fejlesztő | Google és mások |
Legfrissebb stabil kiadás | Pepper 23 |
Legfrissebb fejlesztői kiadás | Pepper 27 (2013. április 12. – 4242 napja) |
Programozási nyelv | C++ |
Operációs rendszer | Microsoft Windows, Linux, Mac OS, Chrome OS |
Platform | |
Kategória | Natív kód homokozóban való futtatása, a webböngészőn belül |
Licenc | New BSD license |
A Google Native Client weboldala |
A Google Native Client („natív kliens”, rövidítve NaCl, utalva a nátrium-kloridra, azaz konyhasóra) egy homokozó (sandbox) technológia, ami az Intel x86 (32, illetve 64 biten), illetve az ARM utasításkészlet egy részhalmazát képes futtatni, szoftveralapú hiba-izolációja mellett.[1] A projekt célkitűzése natív kód futtatása webböngészőből, amivel a webalkalmazások sebessége megközelíthetné az asztali alkalmazásokét,[2] ami jól illeszkedik a Google Chrome OS-szel kapcsolatos terveihez. A technológia segítségével biztonságosabbá tehetők a böngészőpluginek, a tervek szerint pedig akár más alkalmazások is részben vagy egészében bevihetők lesznek a Native Client alá.[3]
2011. december 9-én a Google egy technológiai bemutató során bejelentette több processzor-intenzív és gazdag grafikájú játék (köztük a Bastion) új, Chrome-ban futó verzióját. A jelenlegi NaCl-verzió támogatja a hardveres gyorsítású 3D grafikát (OpenGL ES 2.0-n keresztül), a homokozón belüli helyi fájltárolást, a dinamikus betöltést, teljes képernyős módot és az egér a böngészőn belülre rögzítését. Tervezik az NaCl átültetését mobil eszközökre is (okostelefonok, PDA-k).[4][5]
Az ARM-et is támogató Native Client a Google Chrome 25-ös verziójának lesz része;[6] ez az ARM-alapú Chromebookokon működni fog, az ARM-alapú okostelefonokon még nem. Ezekre még 2013-ban tervezik megjelentetni a keresztplatformos, PNaCl-alapú natív klienst.[7][8]
Áttekintés
[szerkesztés]A Native Client egy a Google által fejlesztett, open source projekt.[9] A szoftver lehetőségeinek bemutatására a Quake-et és a XaoSt ültették át a Google Native Client Platformra. A Native Client pluginként a Firefox, Safari, Opera, beépítve a Google Chrome webböngészőn támogatott (utóbbin az 5-ös verziótól kezdve), Windows, Mac és Linux operációs rendszereken, x86 hardveren.[2] A Chrome korábban alapértelmezetten kikapcsolt, kísérleti funkcióként tartalmazta a klienst,[2] a 14-es főverzióban kapcsolták be;[10] azóta natív alkalmazások feltölthetők a Chrome Web Store-ba, és az újabb Chrome-verziókban (ha engedélyezve lett a chrome://flags alatt), a natív kliens alkalmazásait bármilyen weboldalról futtatni lehet.
Létezik ARM,[11] valamint x86-64 utasításkészletre írt implementáció is. Tudni kell azonban, hogy mindhárom jelenlegi megvalósítás csak a gazdagép natív utasításkészletében írt kódot képes futtatni. Ezt a problémát a PNaCl (ejtsd mint: pinnacle, „orom”), azaz Portable Native Client hivatott orvosolni. Egy alkalmazás PNaCl alatti, hordozható futtatásához, LLVM köztes nyelvre (bitcode) kell lefordítani azt.[12]
A Google Native Client x86-64 és ARM alatt Software Fault Isolationt használ a homokozó megvalósítására.[13] Az x86-32 implementáció különlegessége a homokozó újszerű megvalósításában van, ami az architektúra egy ritkán használt képességét, a memória-szegmentálás lehetőségét használja ki.[14] A Native Client x86-os szegmenseket alakít ki, hogy korlátozza a homokozóban futó kód által hozzáférhető memóriaterületeket. Egy kód-ellenőrzőt használ a nem biztonságos – pl. rendszerhívásokat végző – utasítások kiszűrésére. Hogy ne lehessen a védelmet azzal kicselezni, hogy egy nem biztonságos utasítást rejtenek egy biztonságos utasítás belsejébe, a Native Client megköveteli, hogy az összes közvetett (indirekt) ugrás 32 bájtra igazított memóriablokk elejére történjen, és nem megengedettek a mindkét 32 bájtos memóriablokkba „belógó” utasítások.[14] Ezen megszorítások miatt a C kódot újra kell fordítani a Native Client alatti futtatáshoz, amire a GNU toolchain (ezen belül a gcc és binutils) a Native Clienthez készített egyedi verziói adnak lehetőséget.
A Native Client a Newlibet használja C library-ként, de egy GNU libc-re átültetett változat is hozzáférhető.[15]
A 0.5-ös kiadástól kezdve a Native Client stabil bináris alkalmazás-csatolófelülettel (ABI) rendelkezik.[16] Ez nagyjából azt jelenti, hogy a Google Chrome 14-es verziójának NaCl-megvalósításához lefordított, abban működő kódok a Chrome valamennyi későbbi verziójában is működőképesek lesznek.[17]
Pepper
[szerkesztés]Ahogy az NaCl a konyhasóra utal, a szójátékot folytatva a bors (angolul: pepper) is szerepet kap.
A Pepper API egy Native Client modulok létrehozására szolgáló, keresztplatformos, nyílt API.[18] A Pepper Plugin API, röviden PPAPI[19][20] egy keresztplatformos API Native Client által biztonságossá tett böngészőpluginek létrehozására, először a Netscape NPAPI-ja alapján, majd teljesen újraírva. A Chromium és a Google Chrome Flash-lejátszóból NPAPI és PPAPI-változatot is tartalmaz, de a beépített PDF-néző már kizárólagosan a Pepperrel működik.[21]
PPAPI
[szerkesztés]2009. augusztus 12-én a Google Code oldalán jelentették be a Pepper projektet és a hozzá tartozó Pepper Plugin API-t (PPAPI),[22] „egy módosított NPAPI-ként, ami a plugineket hordozhatóbbá és biztonságosabbá teszi”.[23] A kiterjesztést kimondottan arra tervezték, hogy megkönnyítse a külön folyamatként futó pluginek futtatásának implementációját. A projekt további céljai közé tartozik a pluginek teljesen keresztplatformossá tételéhez keretrendszer biztosítása.
A felmerült témák közé tartozik:
- különböző böngészőkben azonos szemantikájú NPAPI használata,
- a böngésző/megjelenítő folyamattól különálló folyamatban való futtatás,
- az oldalmegjelenítés (rendering) standardizálása a böngésző oldal-összeállító folyamatának használatával,
- szabványosított események, 2D raszterizációs funkciók meghatározása,
- 3D-grafikai elérés kezdeti változata,
- plugin-jegyzék.
A folyamatosan bővülő Pepper API támogat továbbá Gamepadeket (version 19) és a WebSocketet (version 18) is.[24]
2012 áprilisában a Google Chrome az egyetlen böngésző, ami az új, PPAPI pluginmodellt használja.[25] A Mozilla bejelentette, hogy „ez idő szerint nem érdekli őket a Pepper, illetve nem dolgoznak a támogatásán”.[26]
Vitás kérdések
[szerkesztés]Egyesek (pl. Chad Austin az IMVU-tól) dicsérik a Native Clientet, kiemelve, hogy nagy teljesítményű alkalmazásokat lehet vele biztonságos módon a webre vinni (a natív kódhoz képest kb. 5% teljesítménycsökkenéssel), továbbá felgyorsítja a kliensoldali webes alkalmazások fejlődését azzal, hogy a JavaScript mellett egyéb programozási nyelvek is használhatók vele.[27] Mások kritikusabbak a projekttel. Jay Sullivan, a Mozilla termékekért felelős alelnöke kijelentette, hogy nem tervezik natív kód futtatását a böngészőben, mivel „Ezek a natív alkalmazások olyanok, mint kis fekete dobozok egy weboldalon. […] Mi tényleg a HTML-ben hiszünk, és erre szeretnénk fókuszálni.”[28] Håkon Wium Lie, az Opera CTO-ja Tim Berners-Lee-t parafrazeálva úgy gondolja, hogy „az NaCl a web előtti, régi rossz idők iránti vágyakozás”[29] és hogy „az NaCl egy új platform építéséről szól, vagy egy régi platform a webre portolásáról […] ami komplexitási és biztonsági kérdéseket fog magával hozni, és elvonja a figyelmet magáról a webes platformról”.[3] Christopher Blizzard, a Mozilla Open Source-evangelistája attól tart, hogy az alkalmazások forráskódja nélkül az innováció üteme lassulni fog, és az NaCl-t a Microsoft ActiveX technológiájához hasonlítja, amit a DLL hell-lel való küzdelem jellemez. Nézetei szerint, még ha biztonságos is, a Native Client nem jó dolog.[3]
Források
[szerkesztés]- ↑ Efficient software-based fault isolation, Robert Wahbe, Steven Lucco, Thomas E. Anderson, Susan L. Graham, 1993
- ↑ a b c Native Client: A Technology for Running Native Code on the Web
- ↑ a b c Cade Metz: Google Native Client: The web of the future – or the past?. The Register, 2011. szeptember 12. (Hozzáférés: 2011. szeptember 17.)
- ↑ Seth Rosenblatt: Native Client turns Chrome into high-end gaming platform. CNET, 2011. december 9. [2012. augusztus 28-i dátummal az eredetiből archiválva]. (Hozzáférés: 2011. december 9.)
- ↑ Google Code Blog: Games, apps and runtimes come to Native Client
- ↑ CNET: Google's Native Client reaches ARM-based Chromebooks
- ↑ The Next Web: Google adds ARM support to Native Client for Chrome 25 and up, plans architecture-independence next
- ↑ Chromium Blog: Native Client support on ARM
- ↑ Google Native Client on Google Code
- ↑ The Chromium Blog: Native Client Brings Sandboxed Native Code to Chrome Web Store Apps
- ↑ Google's Native Client goes ARM and beyond. The H, 2010. március 18. (Hozzáférés: 2010. május 19.)
- ↑ PNaCl: Portable Native Client Executables. [2016. március 12-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. április 25.)
- ↑ David Sehr, Robert Muth, Cliff L. Biffle, Victor Khimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen: Adapting Software Fault Isolation to Contemporary CPU Architectures. 19th USENIX Security Symposium, 2010. (Hozzáférés: 2011. július 31.)
- ↑ a b Bennet Yee, David Sehr, Greg Dardyk, Brad Chen, Robert Muth, Tavis Ormandy, Shiki Okasaka, Neha Narula, Nicholas Fullagar: Native Client: A Sandbox for Portable, Untrusted x86 Native Code. IEEE Symposium on Security and Privacy (Oakland'09), 2009. (Hozzáférés: 2011. július 31.)
- ↑ Archivált másolat. [2011. július 25-i dátummal az eredetiből archiválva]. (Hozzáférés: 2011. augusztus 6.)
- ↑ Official NaCl Release Notes Archiválva 2011. november 25-i dátummal a Wayback Machine-ben
- ↑ SDK 0.5 release notes[halott link]
- ↑ Native Client: Technical Overview. [2012. május 31-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. április 30.)
- ↑ Pepper Plugin API project at. Google. (Hozzáférés: 2012. április 25.)
- ↑ Chrome Source: Index of /trunk/src/ppapi. Src.chromium.org. (Hozzáférés: 2012. április 25.)
- ↑ Metz, Cade: Google hugs Adobe harder with Chrome-PDF merge. The Register, 2010. június 18. (Hozzáférés: 2012. április 25.)
- ↑ Getting Started: Background and Basics – The Chromium Projects. Chromium.org. [2017. március 15-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. április 25.)
- ↑ Comment by t.hajdu....@gmail.com: Pepper.wiki. Google, 2012. február 24. (Hozzáférés: 2012. április 25.)
- ↑ Native Client: News & Announcements. [2012. május 30-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. április 30.)
- ↑ Metz, Cade: Google heats up native code for Chrome OS. Theregister.co.uk, 2010. május 13. (Hozzáférés: 2012. április 25.)
- ↑ NPAPI:Pepper – MozillaWiki. Wiki.mozilla.org, 2011. május 26. (Hozzáférés: 2012. április 25.)
- ↑ Chad Austin: In Defense of Language Democracy (Or: Why the Browser Needs a Virtual Machine)
- ↑ The Register: Mozilla: Our browser will not run native code
- ↑ q:Tim Berners-Lee
További információk
[szerkesztés]- Google Native Client Project Page
- Google I/O 2009 Native Code for Compute Intensive Web Apps. YouTube - Technical talk at Google I/O 2009
- News4Geeks.net: Google Native Client: The web of the future – or the past? (egy jó áttekintés a projektről)
Példák
[szerkesztés]- Native Client Gallery
- NACLBox, a DOSBox Native Clientre portolva (régi játékok futattása böngészőben)