Innebygd klient
| Innebygd klient | |
|---|---|
| Utvikler | |
| Skrevet i | C og C++ |
| Operativsystem | kryssplattform |
| Første utgave | 16. september 2011 [1] |
| Maskinvareplattform | x86 , x86_64 , ARM [2] og MIPS |
| siste versjon |
|
| Stat | Utviklet |
| Tillatelse | endret BSD-lisens [d] |
| Nettsted | developer.chrome.com/doc... |
Native Client ( NaCl ) er en sandkasseteknologi for kjøring av kode på x86 , x86-64 , ARM og MIPS-plattformene , som lar deg trygt kjøre native kode direkte i nettleseren, uavhengig av operativsystemet, med en hastighet nær kjøring opprinnelig kode . Denne teknologien kan også brukes til å lage sikre nettleserplugins , deler av en applikasjon eller applikasjoner selv [4] , for eksempel ZeroVM .
For å vise teknologiens beredskap, introduserte Google 9. desember 2011 et spill [5] med rik grafikk (spillet er ikke lenger tilgjengelig for øyeblikket). NaCl bruker maskinvareakselerert 3D-grafikk via OpenGL ES 2.0, kjører i en lokal lagringssandkasse med fullskjermfunksjon og museinteraksjon. [6] [7]
Portable Native Client ( engelsk Portable Native Client , forkortelse PNaCl) er en arkitekturuavhengig versjon av denne teknologien. PNaCl-applikasjoner bruker AOT-kompileringsteknologier . Den grunnleggende ideen om NaCl (å kjøre innfødt kode i en nettleser) ble implementert i ActiveX , som har mange sikkerhetsproblemer. NaCl-teknologi unngår dette ved å bruke en sandkasse.
Det er et alternativ til NaCl kalt asm.js , som også lar deg kompilere C- eller C++-applikasjoner for å kjøre direkte i nettleseren (ved nesten naturlig hastighet ), støtter AOT-kompilering og er en undergruppe av JavaScript-språket, dvs. bakoverkompatibel med nettlesere som ikke har innebygd støtte for det. Et annet alternativ til NaCl (men opprinnelig basert på PNaCl) er WebAssembly .
Den 12. oktober 2016 dukket det opp en kommentar [8] i Chromium - prosjektet bug tracker , som nevner oppløsningen av teamene som jobber med Googles Pepper og Native Client.
30. mai 2017 kunngjorde Google at de avviklet PNaCl til fordel for WebAssembly . [9]
Beskrivelse
Native Client er et åpen kildekode-prosjekt . Til dags dato har Quake [10] , XaoS , Battle for Wesnoth , Doom , Lara Croft and the Guardian of Light , From Dust og MAME , samt Csound- programvarens lydsyntesesystem, blitt portert til Native Client. Teknologien er tilgjengelig i Google Chrome-nettleseren fra og med versjon 14 [11] og er aktivert som standard fra og med versjon 31, der Portable Native Client (PNaCl) offisielt ble introdusert. [12]
En ARM-implementering av teknologien ble utgitt i mars 2010. [13] x86-64, IA-32 og MIPS-plattformene ble støttet innbygget.
For å kjøre med PNaCl-teknologien, må applikasjonen kompileres til en arkitekturuavhengig bytekode i LLVM -formatet . [14] Kjørbare filer opprettet på denne måten kalles PNaCl-kjørbare (pexe). PNaCl-byggeverktøyene produserer .pexe-filer; NaCl - .nexe. .nexe-filer har signaturen 0x7F 'E' 'L' 'F' (dvs. de er ELF - filer). Chrome oversetter pexe til arkitekturspesifikke kjørbare filer for å kjøre .
NaCl bruker programvarefeildeteksjon og sandkassebeskyttelse på x86-64 og ARM-plattformer. [15] Implementeringen i x86-32 har en ny måte å sandboxe på. [16] Native Client sandboxing setter minnesegmentene til x86-arkitektur . En kodeverifikator brukes også for å forhindre at usikre systemanrop ringes opp. For å forhindre hopping til den ubeskyttede delen av samtalen, krever Native Client at alle indirekte hopp starter i 32-byte-justerte blokker, og instruksjoner er ikke tillatt å forlate disse blokkene. [16] På grunn av disse begrensningene, må kode skrevet i C eller C++ rekompileres på en spesiell måte for å kjøre med Native Client-teknologi, noe som kan gjøres ved hjelp av spesialiserte versjoner av GNU-verktøykjeden , spesielt GNU Compiler Collection , GNU Binutils og LLVM .
Den opprinnelige klienten bruker Newlib som standard C-bibliotek , men en port til GNU C-biblioteket er også tilgjengelig. [17]
Peppers
Pepper API er en gratis API på tvers av plattformer for å lage moduler for Native Client. Plugin Pepper API ( eng. Pepper Plugin API , forkortelse PPAPI) er en plattform-API for plugin-moduler beskyttet av Native Client-teknologi, basert på NPAPI , men fullstendig omskrevet. Brukes for tiden i Chromium - lignende nettlesere for å kjøre PPAPI-versjonen av Adobe Flash [18] og den innebygde PDF - visningen [19] .
PPAPI
Den 12. august 2009 ble Pepper-prosjektet knyttet til utviklingen av Pepper API-plugin [20] presentert på Google Code -siden , som uttalte at PPAPI er et sett med NPAPI-modifikasjoner for å gjøre slike plugins mer bærbare og sikre [21] . Programtillegget ble opprettet for enkelt å implementere ut-av-prosess lansering. Fremover var målet med prosjektet å gi et rammeverk for å lage plugins på tvers av plattformer. Det var planlagt å implementere disse teknologiene:
- Universell NPAPI- semantikk for alle nettlesere.
- Kjør i en separat prosess fra selve nettleseren.
- Standardisering av gjengivelsesprosessen ved hjelp av nettleseren.
- Definisjon av standardhendelser og rasterisering av 2D-funksjoner.
- Grunnlag for 3D-grafikk.
- Registrering plugin.
Senere hjalp bruken av PPAPI til å implementere støtte for gamepads og WebSocket .
Fra 13. mai 2010 ble Chromium den eneste nettleseren som støttet den nye plugin-modellen. [22] Mozilla Firefox støtter ikke Pepper siden det ikke finnes noen fullstendig API-spesifikasjon utenfor implementeringen i Chrome, som kun ble laget for Blink -nettlesermotoren . Fra og med 2016 støttes Pepper i Chrome-, Chromium- og Blink-baserte nettlesere som Opera .
Prosjekter på Native Client
Det er et nettsted kalt The Go Playground Arkivert 17. november 2021 på Wayback Machine som bruker denne teknologien for å tillate eksperimentering med Go rett i nettleseren.
- Folding@home Arkivert 11. desember 2016 på Wayback Machine Folding@home-prosjektet direkte i nettleseren ved hjelp av nacl- teknologi
Offentlig reaksjon
Chad Austin berømmet Native Clients måte å bygge høyytelses webapplikasjoner på ( med bare % mindre ytelse enn maskinkode ) samtidig som klientapplikasjonene kan utvikle seg ved å tilby et valg av språkprogrammering (unntatt JavaScript). [23]
John Carmack , medeier av Id Software , nevnte Native Client på QuakeCon 2012:
|
Hvis du trenger å gjøre noe i nettleseren, er Native Client mye mer interessant, som startet som et virkelig smart x86-hack som lar deg gjøre hva du vil uten å forlate sandkassen på brukertilgangsnivået. Nå er det dynamisk rekompilering, og det du skriver i C eller C++ er kompilert til noe som ikke er svært optimalisert maskinkode, men ekstremt nær maskinkode. Du kan gjøre alle slags sprø operasjoner med pekere og alt annet som spillutviklere er vant til å gjøre på maskinvarenivå. Carmack, John [24]
|
hvis du må gjøre noe inne i en nettleser, er Native Client mye mer interessant som noe som startet som et ganske smart x86-hack på den måten at de kunne sandkasse alt dette i brukermodus interessant. Det er nå dynamisk rekompilering, men noe som du programmerer i C eller C++ og det kompilerer ned til noe som ikke kommer til å være ditt -O4-optimaliseringsnivå for helt innebygd kode, men ganske nær native kode. Du kan gjøre alle de onde pekejaktene dine, og hva du enn vil gjøre som en metallisk spillutvikler. |
Mozillas visepresident Jay Sullivan sa at Mozilla ikke har noen planer om å kjøre innfødt kode i nettleseren fordi
|
Disse innfødte appene er svarte bokser på en nettside. […] Vi tror på HTML-teknologi, og det er der vi skal legge energien vår. Jay Sullivan [ 25 ] _
|
Disse innfødte appene er bare små svarte bokser på en nettside. […] Vi tror virkelig på HTML, og det er her vi ønsker å fokusere. |
Mozilla-bidragsyter Blizzard kritiserte NaCl-teknologien og hevdet at innfødt kode aldri bør brukes på nettet. Han sammenlignet også NaCl med Microsofts ActiveX -teknologi , som nådde punktet av DLL-helvete . [fire]
Operaens tekniske direktør , Håkon Wium Lie ( norsk: Håkon Wium Lie ) , mener at
|
NaCl ser ut til å "sikte på de dårlige gamle dagene, før nettet" […] Essensen av Native Client er å bygge en ny plattform – eller portere en gammel til nettet […] som vil introdusere kompleksitet og sikkerhetsproblemer og frata oppmerksomhetens nettplattform. Håkon Wium Lie ( norsk Håkon Wium Lie ) [4]
|
NaCl ser ut til å "lengte etter de dårlige gamle dagene, før nettet" […] Native Client handler om å bygge en ny plattform – eller portere en gammel plattform til nettet […] det vil bringe inn kompleksitet og sikkerhetsproblemer, og det vil ta bort fokus fra nettplattformen. |
Brendan Eich , CTO i Mozilla, sa at ECMAScript 6 er tilstrekkelig for alle behov for utvikling av nettapplikasjoner. [26]
Se også
- Applikasjonsvirtualisering
- Sandboxie
- asm.js
- nettmontering
- XBAP
Merknader
- ↑ Googles Native Client publiseres i Chrome - 2011.
- ↑ Native Client-støtte på ARM - 2013.
- ↑ https://developer.chrome.com/native-client/sdk/release-notes#chrome-pepper-49
- ↑ 1 2 3 Metz, Cade . Google Native Client: Fremtidens nett – eller fortiden? (engelsk) (12. september 2011). Arkivert fra originalen 6. august 2016. Hentet 6. august 2016.
- ↑ Khodakovsky, Konstantin . Ny Google Chrome-teknologi bringer Bastion til nettleseren (13. desember 2011). Arkivert fra originalen 21. august 2016. Hentet 6. august 2016.
- ↑ Stefansen, Christian . Spill, apper og kjøretider kommer til Native Client ( 9. desember 2011). Arkivert fra originalen 19. august 2016. Hentet 6. august 2016.
- ↑ Rosenblatt, Seth . Native Client gjør Chrome til en avansert spillplattform ( 9. desember 2011). Arkivert fra originalen 27. april 2016. Hentet 6. august 2016.
- ↑ Bugs.chromium.org . _ bugs.chromium.org (12. november 2016). Hentet 7. mars 2018. Arkivert fra originalen 18. august 2017.
- ↑ Farvel PNaCl, Hei WebAssembly! (eng.) , Chromium Blog (30. mai 2017). Arkivert fra originalen 30. mai 2017. Hentet 7. mars 2018.
- ↑ Humphries, Matthew . Google viser frem Quake-clone som kjører i Native Client ( 13. mai 2010). Arkivert fra originalen 21. august 2016. Hentet 6. august 2016.
- ↑ Chen, Brad . En ny stabil versjon av Chrome som utvider grensene til nettet ( 16. september 2011). Arkivert fra originalen 20. august 2016. Hentet 6. august 2016.
- ↑ Sehr, David . Portable Native Client: "høydepunktet" av hastighet, sikkerhet og portabilitet ( 12. november 2013). Arkivert fra originalen 13. mai 2016. Hentet 6. august 2016.
- ↑ Sehr, David . Native Client-støtte på ARM (eng.) (22. januar 2013). Arkivert fra originalen 27. juli 2016. Hentet 6. august 2016.
- ↑ Alan Donovan, Robert Muth, Brad Chen, David Sehr. PNaCl: Portable Native Client Executables (engelsk) (22. februar 2010). Arkivert fra originalen 12. mars 2016.
- ↑ David Sehr, Robert Muth, Cliff L. Biffle, Victor Khimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen. Tilpasning av programvarefeilisolering til moderne CPU-arkitekturer ( 2010). Hentet 6. august 2016. Arkivert fra originalen 24. juli 2016.
- ↑ 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 (engelsk) (2009). Hentet 6. august 2016. Arkivert fra originalen 12. september 2016.
- ↑ Bygning . _ Hentet 6. august 2016. Arkivert fra originalen 9. november 2016.
- ↑ Schuh, Justin . Veien til sikrere, mer stabil og prangende Flash ( 8. august 2012). Arkivert fra originalen 29. juli 2016. Hentet 6. august 2016.
- ↑ Metz, Cade . Google klemmer Adobe hardere med Chrome-PDF-sammenslåing ( 18. juni 2010). Arkivert fra originalen 6. august 2016. Hentet 6. august 2016.
- ↑ ppapi . _ Hentet 6. august 2016. Arkivert fra originalen 6. oktober 2016.
- ↑ ppapi - Concepts.wiki . Hentet 6. august 2016. Arkivert fra originalen 6. oktober 2016.
- ↑ Metz, Cade . Google varmer opp innebygd kode for Chrome OS ( 13. mai 2010). Arkivert fra originalen 17. januar 2019. Hentet 6. august 2016.
- ↑ Chad Austin. In Defense of Language Democracy (Eller: Why the Browser Needs a Virtual Machine) (engelsk) (8. januar 2011). Hentet 6. august 2016. Arkivert fra originalen 16. august 2016.
- ↑ QuakeCon 2012-video (starter på 2 timer, 36 minutter, 18 sekunder) på YouTube , starter på 2:36:18
- ↑ Metz, Cade . Mozilla: Nettleseren vår vil ikke kjøre innfødt kode ( 24. juni 2010). Arkivert fra originalen 26. august 2016. Hentet 6. august 2016.
- ↑ Crill, Paul . JavaScript-grunnlegger avviser Google Native Client, sender ECMAScript 6 ( 31. mai 2012). Arkivert fra originalen 20. september 2016. Hentet 6. august 2016.
Lenker
- Chen, Brad . Native Client: A Technology for Running Native Code on the Web ( 8. desember 2008). Arkivert fra originalen 19. august 2016. Hentet 6. august 2016.
- lette medier. NaclBox (engelsk) . Hentet 15. mars 2022. Arkivert fra originalen 18. september 2021.