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ı mısalı ZeroVM sıyaqlılardı qorǵaw ushın qollanılıwı múmkin.

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.

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ı. 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. 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, keyin 2019-jıldıń ekinshi kvartalına keyinge qaldırǵan, ol 2022-jıldıń iyun ayında (Chrome Apps penen birge) alıp taslandı.

## Sholıw
Native Client - bul Google tárepinen islep shıǵarılǵan ashıq kodlı joybar. Quake, XaoS, Battle for Wesnoth, Doom, Lara Croft and the Guardian of Light, From Dust, 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. 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.

ARM implementaciyası 2010-jıldıń mart ayında shıǵarıldı. 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. 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ı. 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ı. 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.

## 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. Pepper Plugin API, yamasa PPAPI - 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 hám qurılǵan PDF kóriw quralın iske qosıw ushın qollanılǵan.

### PPAPI
2009-jıldıń 12-avgustında Google Code betinde jańa joybar - Pepper hám oǵan baylanıslı Pepper Plugin API (PPAPI), tanıstırıldı, ol «plaginlerdi kóbirek kóshpeli hám qáwipsiz etiw ushın NPAPIge kirgizilgen ózgerisler toplamı» 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ı.

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. 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ı.

#### 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. 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ı, 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. 2021-jıldıń yanvar ayına kelip, Adobe Flash Player, Google Chrome, Firefox, Safari hám Windows Flashti óshiretuǵın yamasa tolıǵı menen alıp taslaytuǵın jańalanıwlardı aldı.

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

## Veb-brauzerlerden tısqarı qollanılıwı
Ashıq kodlı Unvanquished oyını Dæmon oyın qozǵaltqıshında Q3VM (Quake III virtual mashinası) ornına Native Clientti qollanadı. 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.

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.»

### 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.»

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. 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.

## Derekler

__BÖLİDİMÖNDEMEW__