Google Native Client

Google Native Client (NaCl) – bul toqtatılǵan qorǵanıw texnologiyası bolıp, ol Intel x86, ARM yamasa MIPS nativ (jergilikli) kodınıń bir bólegin, yamasa kóshpeli orınlanatuǵın fayldı qorǵanıw ortalıǵında orınlatıwǵa múmkinshilik beredi. Ol paydalanıwshınıń operaciyalıq sistemasına ǵárezsiz túrde veb-brauzerden jergilikli kodtı qáwipsiz orınlatıwǵa múmkinshilik beredi, bul veb-qosımshalardıń derlik jergilikli tezlikte islewine alıp keledi hám bul Google kompaniyasınıń ChromeOS boyınsha jobaları menen sáykes keledi. Ol sonday-aq brauzer plaginlerin, basqa qosımshalardıń bóleklerin yamasa tolıq qosımshalardı[1] mısalı ZeroVM sıyaqlılardı qorǵaw ushın qollanılıwı múmkin.[2]

Texnologiyanıń tayarlıǵın kórsetiw ushın, 2011-jıldıń 9-dekabr kúni Google óziniń bay hám processordı kóp talap etetuǵın grafikası menen belgili oyınlardıń bir neshe jańa tek Chrome ushın versiyalarınıń jetkilikli ekenligin járiyaladı, sonıń ishinde Bastion (házirgi waqıtta Chrome Web Storeda qollap-quwatlanbaydı). NaCl apparatlıq tezletilgen 3D grafikanı (OpenGL ES 2.0 arqalı), qorǵalǵan jergilikli fayl saqlawdı, dinamikalıq júklewdi, tolıq ekran rejimin hám tıshqanshanı uslap turıwdı ámelge asıradı. Sonday-aq, NaCl di qol qurılmalarında jetkilikli etiw jobaları da bar edi.[3][4]

Portable Native Client (PNaCl) - bul arxitekturadan ǵárezsiz versiya. PNaCl qosımshaları aldın ala kompilyaciya qılınadı. Kópshilik jaǵdaylarda PNaCl di NaCl den artıq qollanıw usınıladı.[5] NaCl dıń ulıwma koncepciyası (veb-brauzerde jergilikli kodtı orınlaw) burın ActiveX te ámelge asırılǵan, ol házirge shekem qollanılıp atırǵan bolsa da, sistemaǵa tolıq kiriw múmkinshiligine iye (disk, yad, paydalanıwshı interfeysi, reestr hám t.b.). Native Client qorǵanıw ortalıǵın paydalanıw arqalı bul máseleni sheshedi.

Mozilla tárepinen usınılǵan alternativa - bul asm.js, ol da C yaki C++ tilinde jazılǵan qosımshalardıń brauzerde islewi ushın kompilyaciya qılınıwına múmkinshilik beredi hám aldın ala kompilyaciyanı qollap-quwatlaydı, biraq ol JavaScript tiń ishki toparı bolıp, onı tikkeley qollap-quwatlamaytuǵın brauzerler menen de sáykes keledi.

2016-jıldıń 12-oktyabr kúni Chromium máseleler trekerindegi pikirde Google kompaniyasınıń Pepper hám Native Client komandalarınıń qısqartılǵanı kórsetilgen.[6] 2017-jıldıń 30-may kúni Google PNaCl dıń WebAssembly paydasına eskirip qalǵanın járiyaladı. Dáslep Google PNaCl di 2018-jıldıń birinshi kvartalında alıp taslawdı jobalastırǵan bolsa da,[7] keyin 2019-jıldıń ekinshi kvartalına keyinge qaldırǵan,[8] ol 2022-jıldıń iyun ayında (Chrome Apps penen birge) alıp taslandı.[9][10]

Sholıw

Native Client - bul Google tárepinen islep shıǵarılǵan ashıq kodlı joybar.[11] Quake,[12] XaoS, Battle for Wesnoth,[13] Doom,[14] Lara Croft and the Guardian of Light,[15] From Dust,[16] hám MAME sıyaqlı oyınlar, sonday-aq Csound sesti qayta islew sisteması Native Client ke kóshirilgen. Native Client Google Chrome veb-brauzeriniń 14-versiyasınan baslap qoljetimli bolǵan hám 31-versiyasınan baslap ádepki boyınsha iske qosılǵan, bul waqıtta Portable Native Client (PNaCl, aytılıwı: pinnacle) shıǵarılǵan.[17][18][19] Native Client jáne veb-brauzerlerden basqa programmalıq támiynatlarda, mısalı Dæmon oyın qozǵaltqıshında, júklep alınǵan kodtı qáwipsiz orınlatıw ushın qollanılǵan.[20]

ARM implementaciyası 2010-jıldıń mart ayında shıǵarıldı.[21] x86-64, IA-32 hám MIPS te qollap-quwatlanǵan.

PNaCl astında qolaylı túrde qosımshanı orınlatıw ushın, ol LLVM aralıq kórsetiw baytkodınıń arxitekturadan ǵárezsiz hám turaqlı bólegine kompilyaciya etiliwi kerek.[22] Bul orınlanatuǵın fayllar PNaCl orınlanatuǵın faylları (pexes) dep ataladı. PNaCl Qural-úskeneler toplamı .pexe faylların jaratadı; al NaCl Qural-úskeneler toplamı .nexe faylların jaratadı. .nexe fayllarınıń sıyqırlı sanı 0x7F 'E' 'L' 'F' bolıp, bul ELF bolıp tabıladı. Chrome brauzerinde, olar arxitekturaǵa baylanıslı orınlanatuǵın fayllarǵa awdarıladı, solay etip olar iske qosıla aladı.

NaCl x86-64 hám ARM arxitekturalarında programmalıq qáte anıqlaw hám izolyaciyalaw arqalı qorǵawlı ornalastırıwdı qollanadı.[23] Native Client'tiń x86-32 implementaciyası óziniń jańasha qorǵawlı ornalastırıw usılı menen ayrıqsha, ol x86 arxitekturasınıń siyrek qollanılatuǵın segmentaciya múmkinshiligin paydalanadı.[24] Native Client x86 segmentlerin qorǵawlı ornalastırılǵan kodtıń kire alatuǵın yad aralıǵın sheklew ushın ornatadı. Ol sistemalı shaqırıwlardı orınlaytuǵın qáwipsiz emes buyrıqlardı paydalanıwdıń aldın alıw ushın kod tekseriwshini qollanadı. Kodtıń qáwipsiz buyrıqtıń ortasına jasırılǵan qáwipsiz emes buyrıqqa sekiriwiniń aldın alıw ushın, Native Client barlıq tikkeley emes sekiriwlerdiń 32 baytqa dál keletuǵın bloklardıń basına sekiriwin talap etedi, hám buyrıqlardıń bul bloklardan shıǵıp ketiwine jol qoyılmaydı. Bul sheklewler sebepli, C hám C++ kodı Native Client astında islewi ushın qayta kompilyaciya etiliwi kerek, ol GNU qural-úskeneler toplamınıń arnawlı versiyaların, atap aytqanda GNU Compiler Collection (GCC), GNU Binutils hám LLVM'di usınadı.

Native Client BSD stilindegi licenziya astında tarqatıladı.

Native Client óziniń C kitapxanası sıpatında Newlib-ti qollanadı, biraq GNU C Library (GNU libc) portıda qoljetimli.[25]

Pepper

NaCl natriy xloridti, yaǵnıy ádettegi as duzın ańlatadı; sóz oyını retinde «pepper» (burısh) ataması da qollanılǵan. Pepper API - bul Native Client modullerin jaratıw ushın platformaǵa ǵárezsiz, ashıq kodlı API.[26] Pepper Plugin API, yamasa PPAPI[27][28] - bul Native Client arqalı qáwipsizlendirilgen veb-brauzer plaginleri ushın platformaǵa ǵárezsiz API bolıp, dáslep Netscape-tiń NPAPI tiykarında islengen, keyin tolıǵı menen qayta jazılǵan. Ol Chromium hám Google Chromeda Adobe Flashtıń PPAPI versiyasın[29] hám qurılǵan PDF kóriw quralın iske qosıw ushın qollanılǵan.[30]

PPAPI

2009-jıldıń 12-avgustında Google Code betinde jańa joybar - Pepper hám oǵan baylanıslı Pepper Plugin API (PPAPI),[31] tanıstırıldı, ol «plaginlerdi kóbirek kóshpeli hám qáwipsiz etiw ushın NPAPIge kirgizilgen ózgerisler toplamı»[32] dep sıpatlanǵan. Bul keńeytiw ayrıqsha procesten tıs plagin orınlawın ámelge asırıwdı ańsatlastırıw ushın jobalanǵan. Bunnan tısqarı, joybardıń maqseti plaginlerdi tolıq platformaǵa ǵárezsiz etiw ushın freymvork usınıw bolıp tabıladı. Qarastırılǵan máseleler qatarına tómendegiler kiredi:

  • Brauzerler arasında NPAPI ushın birdey semantika.
  • Renderer-brauzerden ayırım proceste orınlanıw.
  • Brauzerdiń kompoziciyalaw procesin paydalanıp renderlewdi standartlastırıw.
  • Standartlastırılǵan hádiyselerdi hám 2D rastrlaw funkciyaların anıqlaw.
  • 3D grafikaǵa kiriwdi támiyinlewdiń dáslepki háreketi.
  • Plagin reestri.

Pepper API sonday-aq Gamepadlardı (19-versiya) hám WebSocketlerdi (18-versiya) qollaydı.[33]

2010-jıl 13-may kúnine [jańalanǵan] Googledıń ashıq kodlı brauzeri Chromium jańa brauzer plagin modelin qollanǵan jalǵız veb-brauzer edi.[34] 2020-jılǵa kelip, Pepper Chrome, Chromium hám Opera hám Microsoft Edge sıyaqlı Blink maket qozǵaltqıshına tiykarlanǵan brauzerler tárepinen qollanıladı.

2020-jıldıń avgust ayında Google PPAPI qollawı 2022-jıldıń iyun ayında Google Chrome hám Chromiumnan alıp taslanatuǵının járiyaladı.[35]

PPAPI in Firefox

Firefox baǵdarlamashıları 2014-jılı Pepperdi qollamaytuǵının bildirdi, sebebi APIdiń Chromeǵa implementaciyasınan tısqarı tolıq specifikaciyası joq edi, ol ózi tek Blink maket qozǵaltqıshı menen paydalanıw ushın dúzilgen edi hám hújjetlestirilmegen Flash Player plaginine tán jeke APIları bar edi.[36] 2016-jıldıń oktyabr ayında Mozilla qayta qarap shıqqanın hám Firefoxtıń keleshek versiyalarına Pepper API hám PDFiumdı kirgiziw múmkinshiligin izertlep atırǵanın járiyaladı,[37] biraq bunday basqıshlar ámelge asırılmadı. 2017-jıldıń iyul ayında Adobe Flashtı eskirgen dep járiyaladı hám onıń 2020-jıldıń aqırında qollanıwdan shıǵarılatuǵının bildirdi.[38] 2021-jıldıń yanvar ayına kelip, Adobe Flash Player, Google Chrome, Firefox, Safari hám Windows[39] Flashti óshiretuǵın yamasa tolıǵı menen alıp taslaytuǵın jańalanıwlardı aldı.

Qosımshalar

Bir veb-sayt[40] paydalanıwshılarǵa óz brauzerlerinen Go programmalastırıw tilin sınap kóriwge múmkinshilik beriw ushın serverde NaCLdı qollanǵan.[41]

Veb-brauzerlerden tısqarı qollanılıwı

Ashıq kodlı Unvanquished oyını Dæmon oyın qozǵaltqıshında[42] Q3VM (Quake III virtual mashinası) ornına Native Clientti qollanadı.[43][44] Bunday oyın qozǵaltqıshında, Native Client qorǵawlı ortalıǵı oyın serverlerinen júklep alınǵan qálegen oyın kodın (modlardı) qáwipsiz orınlaw ushın qollanıladı. Native Client texnologiyasın qollanıw oyın islep shıǵıwshılarǵa virtual mashinada jumıs isleytuǵın oyınlar ushın C++ tilin qollanıwǵa, C++ kitapxanaların paydalanıwǵa, oyın menen qozǵaltqısh arasında kodtı bólisiwge hám Q3VMge qaraǵanda jaqsıraq ónimdarlıqqa erisiwge múmkinshilik beredi.

Qabıllaw

Brauzer baǵdarlamashılarınıń geypara toparları Native Client texnologiyasın qollap-quwatlaǵan bolsa, basqaları qollap-quwatlamadı.

Qollap-quwatlawshılar

IMVU kompaniyasınıń Chad Ostin Native Client texnologiyasınıń joqarı ónimli qosımshalardı qáwipsiz túrde internetke alıp keliw usılın (nativlik kodqa salıstırǵanda shama menen 5% joǵaltıw menen) maqtadı, sonday-aq qollanılatuǵın programmalastırıw tilin tańlaw múmkinshiligin beriw arqalı (JavaScript tilinen tısqarı) klient táreptegi qosımshalardıń rawajlanıwın tezlestiriwin atap ótti.[45]

Id Software kompaniyasınıń Djon D. Karmak 2012-jılǵı QuakeCon konferenciyasında Native Client haqqında bılay dep maqtadı: «eger siz brauzer ishinde bir nárse islewińiz kerek bolsa, Native Client ádewir qızıqlı, sebebi ol dáslep paydalanıwshı rejiminde bulardıń hámmesin qızıqlı túrde izolyaciyalay alatuǵın shınında da ájayıp aqıllı x86 xak sıpatında baslanǵan edi. Házir bul dinamikalıq qayta kompilyaciya, biraq siz C yaki C++ tilinde programmalasańız hám ol tolıq nativlik kod ushın -O4 optimizaciya dárejeńiz bolmaytuǵın, biraq nativlik kodqa júdá jaqın bir nársege kompilyaciya boladı. Siz ózińizdiń barlıq jawız kórsetkish quwıwlarıńızdı hám metalǵa shekemgi oyın baǵdarlamashısı sıpatında islegińiz kelgen hár qanday nárseni isley alasız.»[46]

Qarsılaslar

Basqa IT qánigeleri bul izolyaciyalaw texnologiyasına ádewir sın kóz benen qaradı, sebebi onıń aytarlıqtay yaki mánili óz-ara islesiw máseleleri bar edi.

Mozilla kompaniyasınıń ónimler boyınsha vice-prezidenti Djey Sallivan, Mozilla kompaniyasınıń brauzer ishinde nativlik kodtı orınlatıw boyınsha hesh qanday jobası joq ekenin ayttı, sebebi «Bul nativlik qosımshalar veb-bette tek kishi qara qutılar bolıp tabıladı. [...] Biz shın mánisinde HTML ge isenemiz hám usı baǵdarǵa itibar qaratqımız keledi.»[47]

Mozilla kompaniyasınıń Kristofer Blizzard NaCl di sınǵa alıp, nativlik kod derek kodı tiykarında isleytuǵın veb sıyaqlı rawajlana almaydı dep pikir bildirdi. Ol jáne de NaCl di Microsoft kompaniyasınıń ActiveX texnologiyasına salıstırdı, ol DLL Hell máselesine ushıraǵan edi.

Opera kompaniyasınıń bas texnologiya xızmetkeri Xokon Vium Li, «NaCl 'vebten aldınǵı eski jaman kúnlerdi saǵınıp atırǵanday' kórinedi» dep esapladı, hám «Native Client jańa platformanı qurıw – yaki eski platformanı vebke kóshirip ótkeriw haqqında [...] bul quramalılıq hám qáwipsizlik máselelerin alıp keledi, hám veb platformasınan dıqqattı alıp taslaydı.»

Ekinshi áwlad

Google da islep shıǵılǵan izolyaciyalawdıń ekinshi áwladı – gVisor.[48][49] Ol Google Cloud te, anıǵıraǵı Google App Engine de NaCl dıń ornın basıwǵa arnalǵan. Google jáne de WebAssembly di alǵa ilgerletip atır.[50]

Derekler

  1. «ZeroVM Architecture». 8-fevral 2014-jılda túp nusqadan arxivlendi. Qaraldı: 16-mart 2014-jıl.
  2. «ZeroVM Architecture». 8-fevral 2014-jılda túp nusqadan arxivlendi. Qaraldı: 16-mart 2014-jıl.
  3. Rosenblatt. «Native Client turns Chrome into high-end gaming platform». CNET (9-dekabr 2011-jıl). 28-avgust 2012-jılda túp nusqadan arxivlendi. Qaraldı: 9-dekabr 2011-jıl.
  4. «Google Code Blog: Games, apps and runtimes come to Native Client». Googlecode.blogspot.com (9-dekabr 2011-jıl). Qaraldı: 25-aprel 2012-jıl.
  5. «NaCl and PNaCl».
  6. «Bugs.chromium.org» (12-oktyabr 2016-jıl). Qaraldı: 12-oktyabr 2016-jıl.
  7. "Goodbye PNaCl, Hello WebAssembly!". https://blog.chromium.org/2017/05/goodbye-pnacl-hello-webassembly.html. 
  8. «WebAssembly Migration Guide - Google Chrome». developer.chrome.com. Qaraldı: 20-dekabr 2018-jıl.
  9. «Changes to the Chrome App Support Timeline». Chromium Blog (10-avgust 2020-jıl).
  10. Li. «Google delays deprecation of Chrome Apps on all platforms» (en-US). 9to5Google (10-avgust 2020-jıl). Qaraldı: 2-oktyabr 2021-jıl.
  11. «Google Native Client on Google Code». Qaraldı: 25-aprel 2012-jıl.
  12. davemichael. «GitHub - davemichael/NaCl-Quake: Quake for Native Client (based on the SDL Quake port)». GitHub (3-oktyabr 2020-jıl).
  13. «The Battle for Wesnoth».
  14. «Index of /».
  15. «Chrome Web Store - Lara Croft and the Guardian of Light». 8-dekabr 2013-jılda túp nusqadan arxivlendi. Qaraldı: 26-noyabr 2013-jıl.
  16. «From Dust». 12-mart 2016-jılda túp nusqadan arxivlendi. Qaraldı: 24-fevral 2016-jıl.
  17. Chen. «Native Client: A Technology for Running Native Code on the Web». Google-code-updates.blogspot.com (8-dekabr 2008-jıl). Qaraldı: 25-aprel 2012-jıl.
  18. «The Chromium Blog: Native Client Brings Sandboxed Native Code to Chrome Web Store Apps». Blog.chromium.org (18-avgust 2011-jıl). Qaraldı: 25-aprel 2012-jıl.
  19. «Google Code Blog: Portable Native Client: The "pinnacle" of speed, security, and portability». blog.chromium.org (12-noyabr 2013-jıl). Qaraldı: 16-mart 2014-jıl.
  20. «Unvanquished Continues Work On Its PNaCl Support». Phoronix (15-mart 2014-jıl). — „PNaCl sandboxes allow game-play developers to use modern C++ and C/C++ libraries directly within their virtual machines and will allow for better code sharing between the engine code and game logic. PNaCl is also reported to offer better performance than the original Quake III virtual machines.“. Qaraldı: 3-dekabr 2024-jıl.
  21. «Google's Native Client goes ARM and beyond». The H (18-mart 2010-jıl). Qaraldı: 19-may 2010-jıl.
  22. «PNaCl: Portable Native Client Executables». 2-may 2012-jılda túp nusqadan arxivlendi. Qaraldı: 25-aprel 2012-jıl.
  23. Sehr. «Adapting Software Fault Isolation to Contemporary CPU Architectures». 19th USENIX Security Symposium (2010). Qaraldı: 31-iyul 2011-jıl.
  24. Yee. «Native Client: A Sandbox for Portable, Untrusted x86 Native Code». IEEE Symposium on Security and Privacy (Oakland'09) (2009). Qaraldı: 31-iyul 2011-jıl.
  25. «Native Client: Building». developer.chrome.com. Qaraldı: 16-mart 2014-jıl.
  26. «Technical Overview». 28-fevral 2014-jılda túp nusqadan arxivlendi.
  27. «Pepper Plugin API project at». 9-sentyabr 2016-jılda túp nusqadan arxivlendi. Qaraldı: 25-aprel 2012-jıl.
  28. «Chrome Source: Index of /trunk/src/ppapi». Src.chromium.org. Qaraldı: 25-aprel 2012-jıl.
  29. «The road to safer, more stable, and flashier Flash» (8-avgust 2012-jıl). Qaraldı: 10-avgust 2013-jıl.
  30. Metz. «Google hugs Adobe harder with Chrome-PDF merge». The Register (18-iyun 2010-jıl). Qaraldı: 25-aprel 2012-jıl.
  31. «Getting Started: Background and Basics – The Chromium Projects». Chromium.org. Qaraldı: 25-aprel 2012-jıl.
  32. «Pepper.wiki» (24-fevral 2012-jıl). Qaraldı: 25-aprel 2012-jıl.
  33. «Release Notes».
  34. Metz. «Google heats up native code for Chrome OS». Theregister.co.uk (13-may 2010-jıl). Qaraldı: 25-aprel 2012-jıl.
  35. Anthony Laforge. «Changes to the Chrome App Support Timeline». Chromium Blog (10-avgust 2020-jıl).
  36. Zbarsky. «Bug 729481 - Support the "Pepper" Plugin api». Qaraldı: 15-aprel 2016-jıl.
  37. Metz. «Project Mortar». Mozilla (3-oktyabr 2016-jıl). Qaraldı: 30-oktyabr 2016-jıl.
  38. «Flash & The Future of Interactive Content». Adobe Inc. (25-iyul 2017-jıl). 2-dekabr 2017-jılda túp nusqadan arxivlendi. Qaraldı: 31-iyul 2023-jıl.
  39. Salter. «Goodbye again, Flash—Microsoft makes removal from Windows 10 mandatory» (en-us). Ars Technica (4-may 2021-jıl). Qaraldı: 1-avgust 2023-jıl.
  40. «The Go Playground».
  41. «Inside the Go Playground - The Go Blog». blog.golang.org. Qaraldı: 27-avgust 2016-jıl.
  42. Larabel. «Unvanquished Alpha 41 Released, Still Moving Towards NaCl VM Usage». Phoronix (9-iyul 2015-jıl). — „They've continued moving along with their open-source game and Daemon engine. […] their libRocket implementation has moved into the NaCl VM.“. Qaraldı: 3-dekabr 2024-jıl.
  43. «Unvanquished Continues Work On Its PNaCl Support». Phoronix (15-mart 2014-jıl). — „Open-source Unvanquished developers continue working on support for using Google's Portable Native Client (PNaCl) to replace Quake III QVMs.“. Qaraldı: 3-dekabr 2024-jıl.
  44. «Unvanquished Alpha 34 Brings Fixes, Still Being Ported To PNaCl». Phoronix (8-dekabr 2014-jıl). — „Under the hood, they remain hard at work on porting the game logic from QVMs to Portable Native Client (PNaCl).“. Qaraldı: 3-dekabr 2024-jıl.
  45. Austin. «Chad Austin: In Defense of Language Democracy (Or: Why the Browser Needs a Virtual Machine)». Chadaustin.me (8-yanvar 2011-jıl). Qaraldı: 25-aprel 2012-jıl.
  46. Carmack. «QuakeCon 2012». youtube.com (3-avgust 2012-jıl). Qaraldı: 26-avgust 2012-jıl.
  47. Metz. «Mozilla: Our browser will not run native code». The Register (24-iyun 2010-jıl). Qaraldı: 25-aprel 2012-jıl.
  48. «Beta release of PHP 7.2 in the Google App Engine standard environment | Hacker News».
  49. «Google/Gvisor». GitHub (15-oktyabr 2021-jıl).
  50. Avram. «Google Is to Remove Support for PNaCl» (en). InfoQ (31-may 2017-jıl). — „As a replacement, Google is now pushing WebAssembly.“. Qaraldı: 1-avgust 2020-jıl.