Inbyggd klient

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 29 september 2017; kontroller kräver 16 redigeringar .
Inbyggd klient
Utvecklaren Google
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]

Beskrivning

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]

Peppers

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

PPAPI

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 .

Projekt på Native Client

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.

Offentlig reaktion

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]
  Originaltext  (engelska) : 
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 ] _
  Originaltext  (engelska) : 
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]
  Originaltext  (engelska) : 
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]

Se även

Anteckningar

  1. Googles Native Client går live i Chrome - 2011.
  2. Native Client-stöd på ARM - 2013.
  3. https://developer.chrome.com/native-client/sdk/release-notes#chrome-pepper-49
  4. 1 2 3 Metz, Cade . Google Native Client: Framtidens webb - eller det förflutna?  (engelska)  (12 september 2011). Arkiverad från originalet den 6 augusti 2016. Hämtad 6 augusti 2016.
  5. Chodakovskij, Konstantin . Ny Google Chrome-teknik ger Bastion till webbläsaren  (13 december 2011). Arkiverad från originalet den 21 augusti 2016. Hämtad 6 augusti 2016.
  6. Stefansen, Christian . Spel, appar och körtider kommer till Native Client  (  9 december 2011). Arkiverad från originalet den 19 augusti 2016. Hämtad 6 augusti 2016.
  7. Rosenblatt, Seth . Native Client förvandlar Chrome till en avancerad spelplattform  (  9 december 2011). Arkiverad från originalet den 27 april 2016. Hämtad 6 augusti 2016.
  8. Bugs.chromium.org  . _ bugs.chromium.org (12 november 2016). Hämtad 7 mars 2018. Arkiverad från originalet 18 augusti 2017.
  9. Adjö PNaCl, Hej WebAssembly!  (eng.) , Chromium Blog  (30 maj 2017). Arkiverad från originalet den 30 maj 2017. Hämtad 7 mars 2018.
  10. Humphries, Matthew . Google visar upp Quake-clone som körs i Native Client  (  13 maj 2010). Arkiverad från originalet den 21 augusti 2016. Hämtad 6 augusti 2016.
  11. Chen, Brad . En ny stabil version av Chrome som utökar webbens gränser  (  16 september 2011). Arkiverad från originalet den 20 augusti 2016. Hämtad 6 augusti 2016.
  12. Sehr, David . Portable Native Client: "höjdpunkten" av hastighet, säkerhet och portabilitet  (  12 november 2013). Arkiverad från originalet den 13 maj 2016. Hämtad 6 augusti 2016.
  13. Sehr, David . Native Client-support på ARM  (eng.)  (22 januari 2013). Arkiverad från originalet den 27 juli 2016. Hämtad 6 augusti 2016.
  14. Alan Donovan, Robert Muth, Brad Chen, David Sehr. PNaCl: Portable Native Client Executables  (engelska) (22 februari 2010). Arkiverad från originalet den 12 mars 2016.
  15. David Sehr, Robert Muth, Cliff L. Biffle, Victor Khimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen. Anpassa programvarufelisolering till samtida CPU-arkitekturer  ( 2010). Hämtad 6 augusti 2016. Arkiverad från originalet 24 juli 2016.
  16. 1 2 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  (engelska) (2009). Hämtad 6 augusti 2016. Arkiverad från originalet 12 september 2016.
  17. Byggnad  _ _ Hämtad 6 augusti 2016. Arkiverad från originalet 9 november 2016.
  18. Schuh, Justin . Vägen till säkrare, stabilare och flashigare Flash  (  8 augusti 2012). Arkiverad från originalet den 29 juli 2016. Hämtad 6 augusti 2016.
  19. Metz, Cade . Google kramar Adobe hårdare med Chrome-PDF-fusion  (  18 juni 2010). Arkiverad från originalet den 6 augusti 2016. Hämtad 6 augusti 2016.
  20. ppapi  . _ Hämtad 6 augusti 2016. Arkiverad från originalet 6 oktober 2016.
  21. ppapi -  Concepts.wiki . Hämtad 6 augusti 2016. Arkiverad från originalet 6 oktober 2016.
  22. Metz, Cade . Google värmer upp inbyggd kod för Chrome OS  (  13 maj 2010). Arkiverad från originalet den 17 januari 2019. Hämtad 6 augusti 2016.
  23. Tchad Austin. In Defense of Language Democracy (Eller: Varför webbläsaren behöver en virtuell maskin)  (engelska) (8 januari 2011). Hämtad 6 augusti 2016. Arkiverad från originalet 16 augusti 2016.
  24. QuakeCon 2012-video (startar 2 timmar, 36 minuter, 18 sekunder)YouTube , med start 2:36:18
  25. Metz, Cade . Mozilla: Vår webbläsare kommer inte att köra inbyggd kod  (  24 juni 2010). Arkiverad från originalet den 26 augusti 2016. Hämtad 6 augusti 2016.
  26. Crill, Paul . JavaScript-grundaren avfärdar Google Native Client, driver ECMAScript 6  (  31 maj 2012). Arkiverad från originalet den 20 september 2016. Hämtad 6 augusti 2016.

Länkar