Klient natywny
| Klient natywny | |
|---|---|
| Deweloper | |
| Napisane w | C i C++ |
| System operacyjny | wieloplatformowy |
| Pierwsza edycja | 16 września 2011 [1] |
| Platforma sprzętowa | x86 , x86_64 , ARM [2] i MIPS |
| Ostatnia wersja |
|
| Państwo | Rozwinięty |
| Licencja | zmodyfikowana licencja BSD [d] |
| Stronie internetowej | programista.chrome.com/doc… |
Native Client ( NaCl ) to technologia piaskownicy do uruchamiania kodu na platformach x86 , x86-64 , ARM i MIPS , która pozwala bezpiecznie uruchamiać kod natywny bezpośrednio w przeglądarce, niezależnie od systemu operacyjnego, z prędkością zbliżoną do uruchamiania kod natywny . Technologia ta może być również wykorzystana do tworzenia bezpiecznych wtyczek do przeglądarek , części aplikacji lub samych aplikacji [4] , takich jak ZeroVM .
Aby pokazać gotowość technologii, 9 grudnia 2011 r. firma Google wprowadziła grę [5] z bogatą grafiką (w tej chwili gra nie jest już dostępna). NaCl wykorzystuje sprzętowo akcelerowaną grafikę 3D za pośrednictwem OpenGL ES 2.0, działającą w lokalnej piaskownicy pamięci masowej z możliwością pełnego ekranu i interakcji z myszą. [6] [7]
Portable Native Client ( ang . Portable Native Client , skrót PNaCl ) to niezależna od architektury wersja tej technologii. Aplikacje PNaCl wykorzystują technologie kompilacji AOT . Podstawowa idea NaCl (uruchamianie natywnego kodu w przeglądarce) została zaimplementowana w ActiveX , który ma wiele problemów z bezpieczeństwem. Technologia NaCl pozwala uniknąć tego dzięki zastosowaniu piaskownicy.
Istnieje alternatywa dla NaCl o nazwie asm.js , która umożliwia również kompilowanie aplikacji C lub C++ do uruchamiania bezpośrednio w przeglądarce (z niemal natywną prędkością ), obsługuje kompilację AOT i jest podzbiorem języka JavaScript, tj. wstecznie kompatybilny z przeglądarkami, które nie mają dla niego natywnej obsługi. Inną alternatywą dla NaCl (choć pierwotnie opartą na PNaCl) jest WebAssembly .
12 października 2016 r. w narzędziu do śledzenia błędów projektu Chromium pojawił się komentarz [8] , w którym wspomniano o rozwiązaniu zespołów pracujących nad Pepperem i klientem natywnym Google.
30 maja 2017 r. Google ogłosił, że wycofuje PNaCl na rzecz WebAssembly . [9]
Opis
Klient natywny to projekt typu open source . Do tej pory Quake [10] , XaoS , Battle for Wesnoth , Doom , Lara Croft and the Guardian of Light , From Dust i MAME , a także system syntezy dźwięku w oprogramowaniu Csound zostały przeniesione do klienta natywnego. Technologia jest dostępna w przeglądarce Google Chrome od wersji 14 [11] i jest domyślnie aktywowana od wersji 31, w której oficjalnie wprowadzono Portable Native Client (PNaCl). [12]
Implementacja technologii ARM została wydana w marcu 2010 r. [13] Platformy x86-64, IA-32 i MIPS były obsługiwane natywnie.
Aby uruchomić przy użyciu technologii PNaCl, aplikacja musi być skompilowana do niezależnego od architektury kodu bajtowego w formacie LLVM . [14] Pliki wykonywalne utworzone w ten sposób nazywane są plikami wykonywalnymi PNaCl (pexe). Narzędzia do budowania PNaCl tworzą pliki .pexe; NaCl - .nex. Pliki .nex mają sygnaturę 0x7F 'E' 'L' 'F' (tzn. są to pliki ELF ). Chrome tłumaczy pexe na pliki wykonywalne specyficzne dla architektury do uruchomienia .
NaCl wykorzystuje wykrywanie błędów oprogramowania i ochronę piaskownicy na platformach x86-64 i ARM. [15] Implementacja w x86-32 zawiera nowy sposób piaskownicy. [16] Sandboxing klienta natywnego ustawia swoje segmenty pamięci na architekturę x86 . Weryfikator kodu służy również do zapobiegania wywoływaniu niebezpiecznych wywołań systemowych. Aby zapobiec przeskakiwaniu do niezabezpieczonej części połączenia, klient natywny wymaga, aby wszystkie skoki pośrednie rozpoczynały się w 32-bajtowych blokach, a instrukcje nie mogą opuszczać tych bloków. [16] Ze względu na te ograniczenia, kod napisany w C lub C++ musi zostać ponownie skompilowany w specjalny sposób, aby działał przy użyciu technologii klienta natywnego, co można zrobić przy użyciu wyspecjalizowanych wersji GNU toolchain , w szczególności GNU Compiler Collection , GNU Binutils i LLVM .
Klient natywny używa Newlib jako standardowej biblioteki C , jednak dostępny jest również port biblioteki GNU C. [17]
Papryka
Pepper API to wieloplatformowy darmowy interfejs API do tworzenia modułów dla klienta natywnego. Plugin Pepper API ( ang. Pepper Plugin API , w skrócie PPAPI) to wieloplatformowe API dla wtyczek chronionych technologią Native Client, oparte na NPAPI , ale całkowicie przepisane. Obecnie używany w przeglądarkach podobnych do Chromium do uruchamiania wersji PPAPI programu Adobe Flash [18] i wbudowanej przeglądarki PDF [19] .
PPAPI
12 sierpnia 2009 na stronie Google Code zaprezentowany został projekt Pepper związany z rozwojem wtyczki Pepper API [20] , w którym stwierdzono, że PPAPI to zestaw modyfikacji NPAPI, aby takie wtyczki były bardziej przenośne i bezpieczne [21] . Wtyczka została stworzona w celu łatwego wdrożenia uruchamiania poza procesem. Idąc dalej, celem projektu było dostarczenie frameworka do tworzenia w pełni wieloplatformowych wtyczek. Zaplanowano wdrożenie tych technologii:
- Uniwersalna semantyka NPAPI dla wszystkich przeglądarek.
- Uruchom w oddzielnym procesie niż sama przeglądarka.
- Standaryzacja procesu renderowania za pomocą przeglądarki.
- Definiowanie standardowych zdarzeń i rasteryzacja funkcji 2D.
- Podstawa grafiki 3D.
- Wtyczka rejestracyjna.
Później użycie PPAPI pomogło zaimplementować wsparcie dla gamepadów i WebSocket .
Od 13 maja 2010 r. Chromium stał się jedyną przeglądarką obsługującą nowy model wtyczek. [22] Mozilla Firefox nie obsługuje Peppera, ponieważ nie ma pełnej specyfikacji API poza jego implementacją w Chrome, która została stworzona tylko dla silnika przeglądarki Blink . Od 2016 r. Pepper jest obsługiwany w przeglądarkach Chrome, Chromium i Blink, takich jak Opera .
Projekty na kliencie natywnym
Istnieje witryna o nazwie The Go Playground Archived 17 listopada 2021 w Wayback Machine , która wykorzystuje tę technologię, aby umożliwić eksperymentowanie z Go bezpośrednio w przeglądarce.
- Folding@home Zarchiwizowane 11 grudnia 2016 r. w projekcie Wayback Machine Folding@home bezpośrednio w przeglądarce przy użyciu technologii nacl
Reakcja społeczna
Chad Austin pochwalił sposób, w jaki Native Client tworzy wysokowydajne aplikacje internetowe ( z zaledwie % mniejszą wydajnością niż kod maszynowy ) , jednocześnie pozwalając aplikacjom klienckim na ewolucję poprzez zapewnienie wyboru języka programowania (z wyjątkiem JavaScript). [23]
John Carmack , współwłaściciel Id Software , wspomniał o kliencie natywnym na QuakeCon 2012:
|
Jeśli potrzebujesz zrobić coś w przeglądarce, Native Client jest znacznie bardziej interesujący, który rozpoczął się jako naprawdę sprytny hack x86, który pozwala robić, co chcesz, bez opuszczania piaskownicy na poziomie dostępu użytkownika. Teraz jest dynamiczna rekompilacja, a to, co piszesz w C lub C++, jest kompilowane w coś, co nie jest wysoce zoptymalizowanym kodem maszynowym, ale bardzo zbliżonym do kodu maszynowego. Możesz wykonywać wszelkiego rodzaju szalone operacje za pomocą wskaźników i wszystkiego, do czego twórcy gier są przyzwyczajeni na poziomie sprzętowym. Carmack, Jan [24]
|
jeśli musisz coś zrobić w przeglądarce, Native Client jest o wiele bardziej interesujący jako coś, co zaczęło się jako naprawdę cholernie sprytny hack x86 w sposób, w jaki mogliby to wszystko piaskować w interesującym trybie użytkownika. Jest to teraz dynamiczna rekompilacja, ale coś, co programujesz w C lub C++ i kompilujesz do czegoś, co nie będzie twoim poziomem optymalizacji -O4 dla całkowicie natywnego kodu, ale cholernie zbliżonym do kodu natywnego. Mógłbyś robić wszystkie swoje pogoń za złymi wskaźnikami i cokolwiek chcesz robić jako twórca gier do metalu. |
Wiceprezes Mozilli Jay Sullivan powiedział , że Mozilla nie planuje uruchamiania kodu natywnego w przeglądarce, ponieważ
|
Te natywne aplikacje to czarne skrzynki na stronie internetowej. […] Wierzymy w technologię HTML i na to zamierzamy włożyć naszą energię. Jay Sullivan [ 25 ] _
|
Te natywne aplikacje to tylko małe czarne pola na stronie internetowej. […] Naprawdę wierzymy w HTML i na tym chcemy się skupić. |
Współtwórca Mozilli , Blizzard , skrytykował technologię NaCl, argumentując, że natywnego kodu nigdy nie należy używać w sieci. Porównał też NaCl do technologii Microsoft ActiveX , która osiągnęła punkt piekło DLL . [cztery]
Håkon Wium Lie ( norweski: Håkon Wium Lie ) , dyrektor techniczny Opery , uważa , że
|
Wydaje się, że NaCl „celuje w te stare złe czasy, przed internetem” […] Istotą Native Clienta jest budowanie nowej platformy — lub przeniesienie starej do sieci […], która wprowadzi złożoność i problemy z bezpieczeństwem oraz pozbawi internetowa platforma uwagi. Håkon Wium Lie ( norweski Håkon Wium Lie ) [4]
|
Wydaje się, że NaCl „tęskni za starymi, złymi czasami, przed internetem” […] Klient natywny polega na zbudowaniu nowej platformy – lub przeniesieniu starej platformy do sieci […] przyniesie to złożoność i problemy z bezpieczeństwem, a to odciągnie uwagę od platformy internetowej. |
Brendan Eich , CTO firmy Mozilla, powiedział, że ECMAScript 6 jest wystarczający dla wszystkich potrzeb związanych z tworzeniem aplikacji internetowych. [26]
Zobacz także
- Wirtualizacja aplikacji
- Piaskownica
- asm.js
- montaż wstęgi
- XBAP
Notatki
- ↑ Natywny klient Google zostaje uruchomiony w Chrome – 2011.
- ↑ Obsługa klienta natywnego w ARM - 2013.
- ↑ https://developer.chrome.com/native-client/sdk/release-notes#chrome-pepper-49
- ↑ 1 2 3 Metz, Cade . Klient natywny Google: sieć przyszłości – czy przeszłość? (angielski) (12 września 2011). Zarchiwizowane z oryginału 6 sierpnia 2016 r. Źródło 6 sierpnia 2016 .
- ↑ Chodakowski, Konstantin . Nowa technologia Google Chrome wprowadza Bastion do przeglądarki (13 grudnia 2011 r.). Zarchiwizowane z oryginału 21 sierpnia 2016 r. Źródło 6 sierpnia 2016 .
- ↑ Stefansen, Chrześcijanin . Gry, aplikacje i środowiska uruchomieniowe trafiają do klienta natywnego ( 9 grudnia 2011). Zarchiwizowane z oryginału w dniu 19 sierpnia 2016 r. Źródło 6 sierpnia 2016 .
- ↑ Rosenblatt, Seth . Klient natywny zmienia Chrome w wysokiej klasy platformę do gier ( 9 grudnia 2011). Zarchiwizowane z oryginału 27 kwietnia 2016 r. Źródło 6 sierpnia 2016 .
- ↑ Bugs.chromium.org . _ bugs.chromium.org (12 listopada 2016). Pobrano 7 marca 2018 r. Zarchiwizowane z oryginału 18 sierpnia 2017 r.
- ↑ Żegnaj PNaCl, witaj WebAssembly! (ang.) , Chromium Blog (30 maja 2017 r.). Zarchiwizowane z oryginału 30 maja 2017 r. Źródło 7 marca 2018 .
- ↑ Humphries, Mateusz . Google pokazuje Quake-clone działający w kliencie natywnym ( 13 maja 2010). Zarchiwizowane z oryginału 21 sierpnia 2016 r. Źródło 6 sierpnia 2016 .
- ↑ Chen, Brad . Nowa stabilna wersja Chrome, poszerzająca granice internetu ( 16 września 2011). Zarchiwizowane z oryginału 20 sierpnia 2016 r. Źródło 6 sierpnia 2016 .
- ↑ Sehr, David . Portable Native Client: „szczyt” szybkości, bezpieczeństwa i przenośności ( 12 listopada 2013 r.). Zarchiwizowane z oryginału 13 maja 2016 r. Źródło 6 sierpnia 2016 .
- ↑ Sehr, David . Wsparcie klienta natywnego w ARM (ang.) (22 stycznia 2013 r.). Zarchiwizowane z oryginału 27 lipca 2016 r. Źródło 6 sierpnia 2016 .
- ↑ Alan Donovan, Robert Muth, Brad Chen, David Sehr. PNaCl: Portable Native Client Executables (angielski) (22 lutego 2010). Zarchiwizowane z oryginału w dniu 12 marca 2016 r.
- ↑ David Sehr, Robert Muth, Cliff L. Biffle, Victor Chimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen. Adaptacja izolacji błędów oprogramowania do współczesnych architektur procesorów ( 2010). Pobrano 6 sierpnia 2016 r. Zarchiwizowane z oryginału w dniu 24 lipca 2016 r.
- ↑ 1 2 Bennet Yee, David Sehr, Greg Dardyk, Brad Chen, Robert Muth, Tavis Ormandy, Shiki Okasaka, Neha Narula, Nicholas Fullagar. Klient natywny: Piaskownica dla przenośnego, niezaufanego kodu natywnego x86 (w języku angielskim) (2009). Pobrano 6 sierpnia 2016 r. Zarchiwizowane z oryginału 12 września 2016 r.
- ↑ Budynek _ _ Pobrano 6 sierpnia 2016 r. Zarchiwizowane z oryginału 9 listopada 2016 r.
- ↑ Schuh, Justin . Droga do bezpieczniejszego, stabilniejszego i bardziej błyskotliwego Flasha ( 8 sierpnia 2012). Zarchiwizowane z oryginału 29 lipca 2016 r. Źródło 6 sierpnia 2016 .
- ↑ Metz, Cade . Google mocniej ściska Adobe dzięki scaleniu Chrome-PDF ( 18 czerwca 2010). Zarchiwizowane z oryginału 6 sierpnia 2016 r. Źródło 6 sierpnia 2016 .
- pppapi . _ _ Pobrano 6 sierpnia 2016 r. Zarchiwizowane z oryginału 6 października 2016 r.
- ppapi - Concepts.wiki . Pobrano 6 sierpnia 2016 r. Zarchiwizowane z oryginału 6 października 2016 r.
- ↑ Metz, Cade . Google nagrzewa kod natywny dla systemu operacyjnego Chrome ( 13 maja 2010). Zarchiwizowane od oryginału 17 stycznia 2019 r. Źródło 6 sierpnia 2016 .
- ↑ Czad Austin. In Defense of Language Democracy (lub: Dlaczego przeglądarka potrzebuje maszyny wirtualnej) (angielski) (8 stycznia 2011 r.). Pobrano 6 sierpnia 2016 r. Zarchiwizowane z oryginału 16 sierpnia 2016 r.
- ↑ Film z QuakeCon 2012 (zaczyna się o 2 godziny, 36 minut, 18 sekund) na YouTube , zaczyna się o 2:36:18
- ↑ Metz, Cade . Mozilla: Nasza przeglądarka nie uruchomi kodu natywnego ( 24 czerwca 2010). Zarchiwizowane z oryginału 26 sierpnia 2016 r. Źródło 6 sierpnia 2016 .
- ↑ Crill, Paul . Założyciel JavaScript odrzuca klienta natywnego Google, wypycha ECMAScript 6 ( 31 maja 2012). Zarchiwizowane z oryginału 20 września 2016 r. Źródło 6 sierpnia 2016 .
Linki
- Chen, Brad . Klient natywny: technologia uruchamiania kodu natywnego w sieci ( 8 grudnia 2008). Zarchiwizowane z oryginału w dniu 19 sierpnia 2016 r. Źródło 6 sierpnia 2016 .
- lekkie media. NaclBox (angielski) . Pobrano 15 marca 2022. Zarchiwizowane z oryginału 18 września 2021.