Google Native Client

A Wikipédiából, a szabad enciklopédiából
(PNaCl szócikkből átirányítva)
Google Native Client
FejlesztőGoogle és mások
Legfrissebb stabil kiadásPepper 23
Legfrissebb fejlesztői
kiadás
Pepper 27
(2013. április 12. – 4024 napja)
Programozási nyelvC++
Operációs rendszerMicrosoft Windows, Linux, Mac OS, Chrome OS
Platform
KategóriaNatív kód homokozóban való futtatása, a webböngészőn belül
LicencNew 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]

  1. Efficient software-based fault isolation, Robert Wahbe, Steven Lucco, Thomas E. Anderson, Susan L. Graham, 1993
  2. a b c Native Client: A Technology for Running Native Code on the Web
  3. 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.)
  4. 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.)
  5. Google Code Blog: Games, apps and runtimes come to Native Client
  6. CNET: Google's Native Client reaches ARM-based Chromebooks
  7. The Next Web: Google adds ARM support to Native Client for Chrome 25 and up, plans architecture-independence next
  8. Chromium Blog: Native Client support on ARM
  9. Google Native Client on Google Code
  10. The Chromium Blog: Native Client Brings Sandboxed Native Code to Chrome Web Store Apps
  11. Google's Native Client goes ARM and beyond. The H, 2010. március 18. (Hozzáférés: 2010. május 19.)
  12. PNaCl: Portable Native Client Executables. [2016. március 12-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. április 25.)
  13. 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.)
  14. 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.)
  15. Archivált másolat. [2011. július 25-i dátummal az eredetiből archiválva]. (Hozzáférés: 2011. augusztus 6.)
  16. Official NaCl Release Notes Archiválva 2011. november 25-i dátummal a Wayback Machine-ben
  17. SDK 0.5 release notes[halott link]
  18. Native Client: Technical Overview
  19. Pepper Plugin API project at. Google. (Hozzáférés: 2012. április 25.)
  20. Chrome Source: Index of /trunk/src/ppapi. Src.chromium.org. (Hozzáférés: 2012. április 25.)
  21. Metz, Cade: Google hugs Adobe harder with Chrome-PDF merge. The Register, 2010. június 18. (Hozzáférés: 2012. április 25.)
  22. 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.)
  23. Comment by t.hajdu....@gmail.com: Pepper.wiki. Google, 2012. február 24. (Hozzáférés: 2012. április 25.)
  24. Native Client: News & Announcements. [2012. május 30-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. április 30.)
  25. Metz, Cade: Google heats up native code for Chrome OS. Theregister.co.uk, 2010. május 13. (Hozzáférés: 2012. április 25.)
  26. NPAPI:Pepper – MozillaWiki. Wiki.mozilla.org, 2011. május 26. (Hozzáférés: 2012. április 25.)
  27. Chad Austin: In Defense of Language Democracy (Or: Why the Browser Needs a Virtual Machine)
  28. The Register: Mozilla: Our browser will not run native code
  29. q:Tim Berners-Lee

További információk[szerkesztés]

Példák[szerkesztés]