Natív kliens | |
---|---|
Fejlesztő | |
Beírva | C és C++ |
Operációs rendszer | platformközi |
Első kiadás | 2011. szeptember 16. [1] |
Hardver platform | x86 , x86_64 , ARM [2] és MIPS |
legújabb verzió |
|
Állapot | Fejlett |
Engedély | módosított BSD licenc [d] |
Weboldal | developer.chrome.com/doc… |
A Native Client ( NaCl ) egy sandbox technológia kód futtatására x86 , x86-64 , ARM és MIPS platformokon , amely lehetővé teszi a natív kód biztonságos futtatását közvetlenül a böngészőben, operációs rendszertől függetlenül, a futáshoz közeli sebességgel. natív kód . Ezzel a technológiával biztonságos böngészőbővítményeket , egy alkalmazás részeit vagy magukat az alkalmazásokat is létrehozhatjuk [4] , például a ZeroVM .
A technológia készenlétének bemutatására 2011. december 9-én a Google bemutatott egy játékot [5] gazdag grafikával (a játék jelenleg már nem elérhető). A NaCl hardveres gyorsítású 3D grafikát használ az OpenGL ES 2.0-n keresztül, amely egy helyi tárolási sandboxban fut teljes képernyős képességgel és egérrel való interakcióval. [6] [7]
A Portable Native Client ( angolul Portable Native Client , rövidítés: PNaCl) ennek a technológiának egy architektúrától független változata. A PNaCl alkalmazások AOT fordítási technológiát használnak . A NaCl alapötlete (natív kód futtatása böngészőben) az ActiveX -ben valósult meg , aminek számos biztonsági problémája van. A NaCl technológia ezt elkerüli egy homokozó használatával.
A NaCl-nek van egy alternatívája, az asm.js , amely lehetővé teszi a C vagy C++ alkalmazások közvetlen böngészőben történő futtatását is (közel natív sebességgel ), támogatja az AOT fordítást , és a JavaScript nyelv egy részhalmaza, azaz pl. visszafelé kompatibilis azokkal a böngészőkkel, amelyek nem rendelkeznek natív támogatással. A NaCl másik alternatívája (bár eredetileg PNaCl alapú) a WebAssembly .
2016. október 12-én egy megjegyzés [8] jelent meg a Chromium projekt hibakövetőjében , amely a Google Pepper és Native Clientjén dolgozó csapatok feloszlatását említi.
2017. május 30-án a Google bejelentette, hogy megszünteti a PNaCl-t a WebAssembly javára . [9]
A Native Client egy nyílt forráskódú projekt . A mai napig a Quake [10] , a XaoS , a Battle for Wesnoth , a Doom , a Lara Croft and the Guardian of Light , a From Dust és a MAME , valamint a Csound szoftveres hangszintézis rendszer került át a Native Clientre. A technológia a Google Chrome böngészőben a 14-es verziótól [11] érhető el, és alapértelmezés szerint a 31-es verziótól aktiválódik, amelyben a Portable Native Client (PNaCl) hivatalosan is bemutatkozott. [12]
A technológia ARM implementációja 2010 márciusában jelent meg. [13] Az x86-64, IA-32 és MIPS platformok natív támogatást kaptak.
A PNaCl technológiával történő futtatáshoz az alkalmazást LLVM formátumú , architektúrától független bájtkódba kell fordítani . [14] Az így létrehozott végrehajtható fájlokat PNaCl végrehajtható fájlnak (pexe) nevezzük. A PNaCl build eszközök .pexe fájlokat állítanak elő; NaCl - .nexe. A .nexe fájlok aláírása 0x7F 'E' 'L' 'F' (azaz ELF fájlok). A Chrome lefordítja a pexe-t architektúra-specifikus végrehajtható fájlokká, amelyek futtatásához .
A NaCl szoftveres hibaészlelést és sandbox-védelmet használ x86-64 és ARM platformokon. [15] Az x86-32-es megvalósítás a sandboxing új módját tartalmazza. [16] A Native Client sandboxing memóriaszegmenseit x86 architektúrára állítja be . A kódellenőrzőt a nem biztonságos rendszerhívások hívásainak megakadályozására is használják. A hívás nem védett részére történő ugrás elkerülése érdekében a Native Client megköveteli, hogy minden közvetett ugrás 32 bájthoz igazított blokkban kezdődjön, és az utasítások nem hagyhatják el ezeket a blokkokat. [16] E korlátozások miatt a C vagy C++ nyelven írt kódot speciális módon újra kell fordítani, hogy Native Client technológiával futhasson, ami a GNU eszközlánc speciális verzióival , különösen a GNU Compiler Collection , GNU Binutils és LLVM .
A Native Client a Newlib -et használja szabványos C-könyvtárként , de a GNU C Library portja is elérhető. [17]
A Pepper API egy többplatformos ingyenes API modulok létrehozásához a Native Client számára. A Plugin Pepper API ( eng. Pepper Plugin API , rövidítés: PPAPI) egy többplatformos API a Native Client technológiával védett, NPAPI -n alapuló , de teljesen átírt beépülő modulokhoz. Jelenleg a Chromium -szerű böngészőkben használják az Adobe Flash PPAPI verziójának [18] és a beépített PDF - nézegető [19] futtatására .
2009. augusztus 12-én a Google Code oldalán mutatták be a Pepper API bővítmény fejlesztéséhez kapcsolódó Pepper projektet [20] , amely kimondta, hogy a PPAPI az NPAPI módosításainak halmaza, amelyek célja az ilyen bővítmények hordozhatósága és biztonságosabbá tétele [21]. . A beépülő modult a folyamaton kívüli indítás egyszerű megvalósítására hozták létre. A továbbiakban a projekt célja az volt, hogy keretet biztosítson a teljesen keresztplatformos bővítmények létrehozásához. Ezeket a technológiákat tervezték megvalósítani:
Később a PPAPI használata segített a játékvezérlők és a WebSocket támogatásának megvalósításában .
2010. május 13-tól a Chromium lett az egyetlen böngésző, amely támogatja az új beépülő modult. [22] A Mozilla Firefox nem támogatja a Peppert, mivel a Chrome-ban való megvalósításon kívül nincs teljes API specifikáció, amelyet csak a Blink böngészőmotorhoz hoztak létre . 2016-tól a Peppert a Chrome, a Chromium és a Blink-alapú böngészők, például az Opera támogatják .
Van egy The Go Playground nevű webhely , amely 2021. november 17-én archivált a Wayback Machine -nél , amely ezt a technológiát használja, hogy lehetővé tegye a Go -val való kísérletezést közvetlenül a böngészőben.
Chad Austin dicsérte a Native Client módszerét, amellyel nagy teljesítményű webalkalmazásokat készít ( csak %-kal kisebb teljesítménnyel, mint a gépi kód ) , miközben lehetővé tette az ügyfélalkalmazások fejlődését azáltal, hogy választható nyelvi programozást biztosít (a JavaScript kivételével). [23]
John Carmack , az Id Software társtulajdonosa megemlítette a Native Client-t a 2012 -es QuakeConon :
![]() |
Ha valamit tennie kell a böngészőben, sokkal érdekesebb a Native Client, amely egy igazán intelligens x86-os hacknek indult, amely lehetővé teszi, hogy azt csináljon, amit akar, anélkül, hogy elhagyná a felhasználói hozzáférési szintű homokozót. Most van dinamikus újrafordítás, és amit C-ben vagy C++-ban írsz, azt valami nem túl optimalizált gépi kódba fordítják, hanem rendkívül közel áll a gépi kódhoz. Mindenféle őrült műveletet végezhetsz mutatókkal és minden mással, amit a játékfejlesztők hardverszinten megszoktak.Carmack, John [24] |
Ha egy böngészőn belül kell valamit csinálni, akkor a Native Client sokkal érdekesebb, mint valami nagyon átkozottul okos x86-os hacknek indult úgy, hogy érdekes módon mindezt felhasználói módban sandboxba tudták helyezni. Ez most dinamikus újrafordítás, de valami olyasmi, amit C vagy C++ nyelven programoz, és lefordítja valamire, ami nem az Ön -O4 optimalizálási szintje a teljesen natív kódhoz, hanem baromi közel áll a natív kódhoz. Megcsinálhatod az összes gonosz mutatóhajszát, és bármit, amit akarsz, mint fémes játékfejlesztő. |
A Mozilla alelnöke, Jay Sullivan elmondta , hogy a Mozilla nem tervezi natív kód futtatását a böngészőben, mert
![]() |
Ezek a natív alkalmazások fekete dobozok egy weboldalon. […] Hiszünk a HTML technológiában, és erre fektetjük energiánkat.Jay Sullivan [ 25 ] _ |
Ezek a natív alkalmazások csak kis fekete dobozok egy weboldalon. […] Nagyon hiszünk a HTML-ben, és erre szeretnénk összpontosítani. |
A Mozilla munkatársa , Blizzard bírálta a NaCl technológiát, és azzal érvelt, hogy natív kódot soha nem szabad használni az interneten. Azt is összehasonlította a NaCl-t a Microsoft ActiveX technológiájával , amely elérte a DLL pokol szintjét . [négy]
Håkon Wium Lie ( norvégul : Håkon Wium Lie ) , az Opera technikai igazgatója úgy véli , hogy
![]() |
Úgy tűnik, hogy a NaCl „azokban a rossz időkben, a web előtt célozza meg” […] A Native Client lényege egy új platform építése – vagy egy régi portolása a webre […], ami összetettebb és biztonsági problémákat vet fel, és megfosztja a figyelem internetes platformja.Håkon Wium Lie ( norvég Håkon Wium Lie ) [4] |
Úgy tűnik, hogy a NaCl „a régi rossz időkre vágyik, a web előtt” […] A Native Client egy új platform építéséről szól – vagy egy régi platform áthelyezéséről az internetre […], ez összetettséget és biztonsági problémákat fog okozni, és elvonja a hangsúlyt a webes platformról. |
Brendan Eich , a Mozilla műszaki igazgatója elmondta, hogy az ECMAScript 6 minden webalkalmazás-fejlesztési igény kielégítésére elegendő. [26]