Inbyggd klient | |
---|---|
Utvecklaren | |
Skrivet i | C och C++ |
Operativ system | plattformsoberoende |
Första upplagan | 16 september 2011 [1] |
Hårdvaruplattform | x86 , x86_64 , ARM [2] och MIPS |
senaste versionen |
|
stat | Tagit fram |
Licens | modifierad BSD-licens [d] |
Hemsida | developer.chrome.com/doc... |
Native Client ( NaCl ) är en sandlådeteknik för att köra kod på plattformarna x86 , x86-64 , ARM och MIPS , som gör att du säkert kan köra inbyggd kod direkt i webbläsaren, oavsett operativsystem, med en hastighet nära att köras ursprunglig kod . Denna teknik kan också användas för att skapa säkra webbläsarplugin , delar av en applikation eller själva applikationer [4] , såsom ZeroVM .
För att visa teknikens beredskap introducerade Google den 9 december 2011 ett spel [5] med rik grafik (spelet är inte längre tillgängligt för tillfället). NaCl använder hårdvaruaccelererad 3D-grafik via OpenGL ES 2.0, körs i en lokal lagringssandlåda med fullskärmskapacitet och musinteraktion. [6] [7]
Portable Native Client ( engelska Portable Native Client , förkortning PNaCl) är en arkitekturoberoende version av denna teknik. PNaCl-applikationer använder AOT-kompileringsteknik . Grundidén med NaCl (att köra inbyggd kod i en webbläsare) implementerades i ActiveX , som har många säkerhetsproblem. NaCl-teknik undviker detta genom att använda en sandlåda.
Det finns ett alternativ till NaCl som heter asm.js , som också låter dig kompilera C- eller C++-applikationer för att köras direkt i webbläsaren (med nästan ursprunglig hastighet ), stöder AOT-kompilering och är en delmängd av JavaScript-språket, d.v.s. bakåtkompatibel med webbläsare som inte har inbyggt stöd för det. Ett annat alternativ till NaCl (dock ursprungligen baserat på PNaCl) är WebAssembly .
Den 12 oktober 2016 dök en kommentar [8] upp i Chromium- projektets buggspårare , som nämnde upplösningen av teamen som arbetar med Googles Pepper och Native Client.
Den 30 maj 2017 meddelade Google att de avskaffade PNaCl till förmån för WebAssembly . [9]
Native Client är ett projekt med öppen källkod . Hittills har Quake [10] , XaoS , Battle for Wesnoth , Doom , Lara Croft and the Guardian of Light , From Dust och MAME , såväl som ljudsyntessystemet Csound- programvaran, porterats till Native Client. Tekniken är tillgänglig i webbläsaren Google Chrome från och med version 14 [11] och aktiveras som standard från version 31, där Portable Native Client (PNaCl) officiellt introducerades. [12]
En ARM-implementering av tekniken släpptes i mars 2010. [13] x86-64, IA-32 och MIPS-plattformarna stöddes inbyggt.
För att köra med PNaCl-tekniken måste applikationen kompileras till en arkitekturoberoende bytekod av LLVM -formatet . [14] Körbara filer som skapas på detta sätt kallas PNaCl-körbara (pexe). PNaCl-byggverktygen producerar .pexe-filer; NaCl - .nexe. .nexe-filer har signaturen 0x7F 'E' 'L' 'F' (dvs. de är ELF- filer). Chrome översätter pexe till arkitekturspecifika körbara filer för att köras .
NaCl använder feldetektering av programvara och sandlådeskydd på x86-64 och ARM-plattformar. [15] Implementeringen i x86-32 har ett nytt sätt att sandboxa. [16] Native Client sandboxing ställer in sina minnessegment till x86-arkitektur . En kodverifierare används också för att förhindra att osäkra systemsamtal anropas. För att förhindra att man hoppar till den oskyddade delen av samtalet kräver Native Client att alla indirekta hopp startar i 32-byte-justerade block, och instruktioner får inte lämna dessa block. [16] På grund av dessa begränsningar måste kod skriven i C eller C++ kompileras om på ett speciellt sätt för att kunna köras med Native Client-teknik, vilket kan göras med hjälp av specialiserade versioner av GNU-verktygskedjan , särskilt GNU Compiler Collection , GNU Binutils och LLVM .
Den ursprungliga klienten använder Newlib som standard C-bibliotek , men en port för GNU C-biblioteket är också tillgänglig. [17]
Pepper API är ett plattformsoberoende gratis API för att skapa moduler för Native Client. Plugin Pepper API ( eng. Pepper Plugin API , förkortning PPAPI) är ett plattformsoberoende API för plugin-program som skyddas av Native Client-teknik, baserat på NPAPI , men helt omskrivet. Används för närvarande i Chromium -liknande webbläsare för att köra PPAPI-versionen av Adobe Flash [18] och den inbyggda PDF - visaren [19] .
Den 12 augusti 2009 presenterades Pepper-projektet i samband med utvecklingen av Pepper API-plugin [20] på Google Code -sidan , där det stod att PPAPI är en uppsättning NPAPI-modifieringar för att göra sådana plugins mer portabla och säkra [21] . Insticksprogrammet skapades för att enkelt implementera out-of-proces lansering. Framöver var målet med projektet att tillhandahålla ett ramverk för att skapa helt plattformsoberoende plugins. Det var planerat att implementera dessa tekniker:
Senare hjälpte användningen av PPAPI till att implementera stöd för gamepads och WebSocket .
Från och med den 13 maj 2010 blev Chromium den enda webbläsaren som stödde den nya plugin-modellen. [22] Mozilla Firefox stöder inte Pepper eftersom det inte finns någon fullständig API-specifikation utanför dess implementering i Chrome, som skapades endast för Blink -webbläsarmotorn . Från och med 2016 stöds Pepper i Chrome, Chromium och Blink-baserade webbläsare som Opera .
Det finns en sida som heter The Go Playground Arkiverad 17 november 2021 på Wayback Machine som använder denna teknik för att tillåta experiment med Go direkt i webbläsaren.
Chad Austin berömde Native Clients sätt att bygga högpresterande webbapplikationer ( med endast % lägre prestanda än maskinkod ) samtidigt som klientapplikationerna kunde utvecklas genom att tillhandahålla ett val av språkprogrammering (förutom JavaScript). [23]
John Carmack , delägare av Id Software , nämnde Native Client på QuakeCon 2012:
![]() |
Om du behöver göra något i webbläsaren är Native Client mycket mer intressant, vilket började som ett riktigt smart x86-hack som låter dig göra vad du vill utan att lämna sandlådan för användaråtkomstnivån. Nu sker dynamisk omkompilering, och det du skriver i C eller C++ kompileras till något som inte är särskilt optimerad maskinkod, utan extremt nära maskinkod. Du kan göra alla typer av galna operationer med pekare och allt annat som spelutvecklare är vana vid att göra på hårdvarunivå.Carmack, John [24] |
om du måste göra något i en webbläsare är Native Client mycket mer intressant som något som började som ett riktigt jäkla smart x86-hack på det sättet att de kunde sandboxa allt detta i användarläge intressant. Det är nu dynamisk omkompilering, men något som du programmerar i C eller C++ och det kompilerar ner till något som inte kommer att vara din -O4-optimeringsnivå för helt inbyggd kod utan ganska nära inbyggd kod. Du kan göra alla dina onda pekarjakter, och vad du än vill göra som spelutvecklare i metall. |
Mozillas vicepresident Jay Sullivan sa att Mozilla inte har några planer på att köra inbyggd kod i webbläsaren eftersom
![]() |
Dessa inbyggda appar är svarta lådor på en webbsida. […] Vi tror på HTML-teknik, och det är där vi ska lägga vår energi.Jay Sullivan [ 25 ] _ |
Dessa inbyggda appar är bara små svarta lådor på en webbsida. […] Vi tror verkligen på HTML, och det är här vi vill fokusera. |
Mozilla-bidragsgivaren Blizzard kritiserade NaCl-tekniken och hävdade att inbyggd kod aldrig bör användas på webben. Han jämförde också NaCl med Microsofts ActiveX -teknik , som nådde punkten av DLL-helvetet . [fyra]
Håkon Wium Lie ( norska: Håkon Wium Lie ) , Operas tekniska chef , menar att
![]() |
NaCl verkar "sikta på de gamla dåliga dagarna, före webben" […] Kärnan i Native Client är att bygga en ny plattform – eller porta en gammal till webben […] vilket kommer att introducera komplexitet och säkerhetsproblem och beröva uppmärksamhetens webbplattform.Håkon Wium Lie ( norska Håkon Wium Lie ) [4] |
NaCl verkar "längta efter de gamla dåliga dagarna, innan webben" […] Native Client handlar om att bygga en ny plattform – eller porta en gammal plattform till webben […] det kommer att medföra komplexitet och säkerhetsproblem, och det kommer att ta bort fokus från webbplattformen. |
Brendan Eich , CTO för Mozilla, sa att ECMAScript 6 är tillräckligt för alla behov av webbapplikationsutveckling. [26]