Indfødt klient

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 29. september 2017; checks kræver 16 redigeringer .
Indfødt klient
Udvikler Google
Skrevet i C og C++
Operativ system på tværs af platforme
Første udgave 16. september 2011 [1]
Hardware platform x86 , x86_64 , ARM [2] og MIPS
nyeste version
Stat Udviklede sig
Licens ændret BSD-licens [d]
Internet side developer.chrome.com/doc...

Native Client ( NaCl ) er en sandbox -teknologi til at køre kode på x86 , x86-64 , ARM og MIPS platformene , som giver dig mulighed for sikkert at køre native kode direkte i browseren, uanset operativsystemet, med en hastighed tæt på at køre indfødt kode . Denne teknologi kan også bruges til at skabe sikre browser- plugins , dele af en applikation eller selve applikationer [4] , såsom ZeroVM .

For at vise teknologiens parathed introducerede Google den 9. december 2011 et spil [5] med rig grafik (spillet er ikke længere tilgængeligt i øjeblikket). NaCl bruger hardwareaccelereret 3D-grafik via OpenGL ES 2.0, der kører i en lokal lagringssandkasse med fuldskærmskapacitet og museinteraktion. [6] [7]

Portable Native Client ( engelsk  Portable Native Client , forkortelse PNaCl) er en arkitektur-uafhængig version af denne teknologi. PNaCl-applikationer bruger AOT-kompileringsteknologier . Den grundlæggende idé med NaCl (køre native kode i en browser) blev implementeret i ActiveX , som har mange sikkerhedsproblemer. NaCl-teknologi undgår dette ved at bruge en sandkasse.

Der er et alternativ til NaCl kaldet asm.js , som også giver dig mulighed for at kompilere C- eller C++-applikationer til at køre direkte i browseren (ved næsten native speed ), understøtter AOT-kompilering og er en delmængde af JavaScript-sproget, dvs. bagudkompatibel med browsere, der ikke har indbygget understøttelse af det. Et andet alternativ til NaCl (dog oprindeligt baseret på PNaCl) er WebAssembly .

Den 12. oktober 2016 dukkede en kommentar [8] op i Chromium - projektets fejlsporing , der nævner opløsningen af ​​de teams, der arbejder på Googles Pepper og Native Client.

Den 30. maj 2017 meddelte Google, at de afskaffede PNaCl til fordel for WebAssembly . [9]

Beskrivelse

Native Client er et open source-projekt . Til dato er Quake [10] , XaoS , Battle for Wesnoth , Doom , Lara Croft and the Guardian of Light , From Dust og MAME , samt Csound- softwarens lydsyntesesystem, blevet overført til Native Client. Teknologien er tilgængelig i Google Chrome-browseren fra version 14 [11] og aktiveres som standard fra version 31, hvor Portable Native Client (PNaCl) officielt blev introduceret. [12]

En ARM-implementering af teknologien blev frigivet i marts 2010. [13] x86-64-, IA-32- og MIPS-platformene blev understøttet indbygget.

For at køre med PNaCl-teknologien skal applikationen kompileres i en arkitekturuafhængig bytekode i LLVM -formatet . [14] Eksekverbare filer, der er oprettet på denne måde, kaldes PNaCl eksekverbare (pexe). PNaCl-byggeværktøjerne producerer .pexe-filer; NaCl - .nexe. .nexe-filer har signaturen 0x7F 'E' 'L' 'F' (dvs. de er ELF - filer). Chrome oversætter pexe til arkitekturspecifikke eksekverbare filer for at køre .

NaCl bruger softwarefejldetektion og sandkassebeskyttelse på x86-64- og ARM-platforme. [15] Implementeringen i x86-32 byder på en ny måde at sandboxe på. [16] Native Client-sandboxing indstiller sine hukommelsessegmenter til x86-arkitektur . En kodeverifikator bruges også til at forhindre usikre systemopkald i at blive kaldt. For at forhindre at hoppe til den ubeskyttede del af opkaldet, kræver Native Client, at alle indirekte hop starter i 32-byte-justerede blokke, og instruktioner må ikke forlade disse blokke. [16] På grund af disse begrænsninger skal kode skrevet i C eller C++ genkompileres på en særlig måde for at køre ved hjælp af Native Client-teknologi, hvilket kan gøres ved hjælp af specialiserede versioner af GNU-værktøjskæden , især GNU Compiler Collection , GNU Binutils og LLVM .

Den oprindelige klient bruger Newlib som standard C-bibliotek , men en port til GNU C-biblioteket er også tilgængelig. [17]

Peppers

Pepper API er en gratis API på tværs af platforme til oprettelse af moduler til Native Client. Plugin Pepper API ( eng. Pepper Plugin API , forkortelse PPAPI) er en cross-platform API til plug-ins beskyttet af Native Client-teknologi, baseret på NPAPI , men fuldstændig omskrevet. Bruges i øjeblikket i Chromium - lignende browsere til at køre PPAPI-versionen af ​​Adobe Flash [18] og den indbyggede PDF - fremviser [19] .  

PPAPI

Den 12. august 2009 blev Pepper-projektet i forbindelse med udviklingen af ​​Pepper API-plugin [20] præsenteret på Google Code- siden , som sagde, at PPAPI er et sæt NPAPI-modifikationer for at gøre sådanne plugins mere bærbare og sikre [21] . Pluginnet blev oprettet for nemt at implementere lancering uden for processen. Fremadrettet var målet med projektet at skabe en ramme for at skabe fuldt ud cross-platform plugins. Det var planlagt at implementere disse teknologier:

Senere hjalp brugen af ​​PPAPI med at implementere support til gamepads og WebSocket .

Fra den 13. maj 2010 blev Chromium den eneste browser, der understøttede den nye plugin-model. [22] Mozilla Firefox understøtter ikke Pepper, da der ikke er nogen komplet API-specifikation uden for dens implementering i Chrome, som kun blev oprettet til Blink -browsermotoren . Fra 2016 understøttes Pepper i Chrome-, Chromium- og Blink-baserede browsere såsom Opera .

Projekter på Native Client

Der er et websted kaldet The Go Playground Arkiveret 17. november 2021 på Wayback Machine , der bruger denne teknologi til at tillade eksperimenter med Go direkte i browseren.

Offentlig reaktion

Chad Austin roste Native Clients måde at bygge højtydende webapplikationer på ( med  kun % mindre ydeevne end maskinkode ), samtidig med at klientapplikationer kunne udvikle sig ved at tilbyde et valg af sprogprogrammering (undtagen JavaScript). [23]

John Carmack , medejer af Id Software , nævnte Native Client ved QuakeCon 2012:

Hvis du skal gøre noget i browseren, er Native Client meget mere interessant, som startede som et rigtig smart x86-hack, der giver dig mulighed for at gøre, hvad du vil uden at forlade sandkassen på brugeradgangsniveauet. Nu er der dynamisk rekompilering, og det man skriver i C eller C++ er kompileret til noget, der ikke er højoptimeret maskinkode, men ekstremt tæt på maskinkode. Du kan lave alle slags skøre operationer med pointere og alt det andet, som spiludviklere er vant til at lave på hardwareniveau.Carmack, John [24]
  Originaltekst  (engelsk) : 
hvis du skal gøre noget inde i en browser, er Native Client meget mere interessant som noget, der startede som et virkelig ret smart x86-hack på den måde, at de kunne sandboxe alt dette i brugertilstand interessant. Det er nu dynamisk rekompilering, men noget, som du programmerer i C eller C++, og det kompilerer ned til noget, der ikke vil være dit -O4 optimeringsniveau for fuldstændig native kode, men temmelig tæt på native kode. Du kan gøre alle dine onde pointer jagter, og hvad du vil gøre som en metal-spiludvikler.

Mozillas vicepræsident Jay Sullivan sagde , at Mozilla ikke har  planer om at køre indbygget kode i browseren, fordi

Disse indbyggede apps er sorte bokse på en webside. […] Vi tror på HTML-teknologi, og det er der, vi vil lægge vores energi.Jay Sullivan [  25 ] _
  Originaltekst  (engelsk) : 
Disse native apps er bare små sorte bokse på en webside. […] Vi tror virkelig på HTML, og det er her, vi vil fokusere.

Mozilla-bidragyder Blizzard kritiserede NaCl-teknologien og argumenterede for, at indbygget kode aldrig bør bruges på nettet. Han sammenlignede også NaCl med Microsofts ActiveX -teknologi , som nåede punktet af DLL-helvede . [fire]

Håkon Wium Lie ( norsk:  Håkon Wium Lie ) , Operas tekniske direktør , mener, at

NaCl ser ud til at "sigte i de dårlige gamle dage, før internettet" […] Essensen af ​​Native Client er at bygge en ny platform – eller portere en gammel til nettet […], hvilket vil introducere kompleksitet og sikkerhedsproblemer og fratage opmærksomhedens webplatform.Håkon Wium Lie ( norsk  Håkon Wium Lie ) [4]
  Originaltekst  (engelsk) : 
NaCl ser ud til at 'længe efter de dårlige gamle dage, før internettet' […] Native Client handler om at bygge en ny platform – eller portere en gammel platform til nettet […] det vil medføre kompleksitet og sikkerhedsproblemer, og det vil fjerne fokus fra webplatformen.

Brendan Eich , CTO for Mozilla, sagde, at ECMAScript 6 er tilstrækkeligt til alle behov for udvikling af webapplikationer. [26]

Se også

Noter

  1. Googles Native Client går live i Chrome - 2011.
  2. Native Client-support 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: Fremtidens web - eller fortiden?  (engelsk)  (12. september 2011). Arkiveret fra originalen den 6. august 2016. Hentet 6. august 2016.
  5. Khodakovsky, Konstantin . Ny Google Chrome-teknologi bringer Bastion til browseren  (13. december 2011). Arkiveret fra originalen den 21. august 2016. Hentet 6. august 2016.
  6. Stefansen, Christian . Spil, apps og kørselstider kommer til Native Client  (  9. december 2011). Arkiveret fra originalen den 19. august 2016. Hentet 6. august 2016.
  7. Rosenblatt, Seth . Native Client gør Chrome til en avanceret spilleplatform  (  9. december 2011). Arkiveret fra originalen den 27. april 2016. Hentet 6. august 2016.
  8. Bugs.chromium.org  . _ bugs.chromium.org (12. november 2016). Hentet 7. marts 2018. Arkiveret fra originalen 18. august 2017.
  9. Farvel PNaCl, Hej WebAssembly!  (eng.) , Chromium Blog  (30. maj 2017). Arkiveret fra originalen den 30. maj 2017. Hentet 7. marts 2018.
  10. Humphries, Matthew . Google viser Quake-clone, der kører i Native Client  (  13. maj 2010). Arkiveret fra originalen den 21. august 2016. Hentet 6. august 2016.
  11. Chen, Brad . En ny stabil udgivelse af Chrome, der udvider grænserne for nettet  (  16. september 2011). Arkiveret fra originalen den 20. august 2016. Hentet 6. august 2016.
  12. Sehr, David . Portable Native Client: "Højdepunktet" af hastighed, sikkerhed og portabilitet  (  12. november 2013). Arkiveret fra originalen den 13. maj 2016. Hentet 6. august 2016.
  13. Sehr, David . Native Client-support på ARM  (eng.)  (22. januar 2013). Arkiveret fra originalen den 27. juli 2016. Hentet 6. august 2016.
  14. Alan Donovan, Robert Muth, Brad Chen, David Sehr. PNaCl: Portable Native Client Executables  (engelsk) (22. februar 2010). Arkiveret fra originalen den 12. marts 2016.
  15. David Sehr, Robert Muth, Cliff L. Biffle, Victor Khimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen. Tilpasning af softwarefejlsisolering til nutidige CPU-arkitekturer  ( 2010). Hentet 6. august 2016. Arkiveret fra originalen 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  (engelsk) (2009). Hentet 6. august 2016. Arkiveret fra originalen 12. september 2016.
  17. Bygning  . _ Hentet 6. august 2016. Arkiveret fra originalen 9. november 2016.
  18. Schuh, Justin . Vejen til sikrere, mere stabil og prangende Flash  (  8. august 2012). Arkiveret fra originalen den 29. juli 2016. Hentet 6. august 2016.
  19. Metz, Cade . Google krammer Adobe hårdere med Chrome-PDF-fusion  (  18. juni 2010). Arkiveret fra originalen den 6. august 2016. Hentet 6. august 2016.
  20. ppapi  . _ Hentet 6. august 2016. Arkiveret fra originalen 6. oktober 2016.
  21. ppapi -  Concepts.wiki . Hentet 6. august 2016. Arkiveret fra originalen 6. oktober 2016.
  22. Metz, Cade . Google opvarmer den oprindelige kode til Chrome OS  (  13. maj 2010). Arkiveret fra originalen den 17. januar 2019. Hentet 6. august 2016.
  23. Chad Austin. Til forsvar for sprogdemokratiet (Eller: Hvorfor browseren har brug for en virtuel maskine)  (engelsk) (8. januar 2011). Hentet 6. august 2016. Arkiveret fra originalen 16. august 2016.
  24. QuakeCon 2012-video (starter ved 2 timer, 36 minutter, 18 sekunder)YouTube , starter ved 2:36:18
  25. Metz, Cade . Mozilla: Vores browser kører ikke indbygget kode  (  24. juni 2010). Arkiveret fra originalen den 26. august 2016. Hentet 6. august 2016.
  26. Crill, Paul . JavaScript-grundlægger afviser Google Native Client, skubber ECMAScript 6  (  31. maj 2012). Arkiveret fra originalen den 20. september 2016. Hentet 6. august 2016.

Links