Share to: share facebook share twitter share wa share telegram print page

Google Native Client

Google Native Client
FejlesztőGoogle és mások
Legfrissebb stabil kiadásPepper 23
Legfrissebb fejlesztői
kiadás
Pepper 27
(2013. április 12. – 4530 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

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

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

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

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]

Jegyzetek

  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. [2012. május 31-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. április 30.)
  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 [email protected]: 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

Példák

Kembali kehalaman sebelumnya