Native Client (Native Client)
Native Client | |
---|---|
Разработчик | |
Написана на | Си и C++ |
Операционная система | кроссплатформенность |
Первый выпуск | 16 сентября 2011[1] |
Аппаратные платформы | x86, x86-64, ARM[2] и MIPS |
Последняя версия |
|
Репозиторий | chromium.googlesource.com/… |
Состояние | Закрыт |
Лицензия | модифицированная лицензия BSD[вд] |
Сайт | developer.chrome.com/doc… |
Native Client (NaCl) — технология песочницы для запуска кода на платформах x86, x86-64, ARM и MIPS, позволяющая безопасно запускать машинный код непосредственно в браузере независимо от операционной системы со скоростью, приближённой к запуску машинного кода. Эта технология также может быть использована для создания защищённых плагинов для браузера, частей какого-либо приложения либо самих приложений[4], например ZeroVM[англ.].
Чтобы показать готовность технологии, 9 декабря 2011 года Google представила игру[5] с богатой графикой (на данный момент игра уже недоступна). NaCl использует аппаратное ускорение 3D-графики через OpenGL ES 2.0, запускаясь в песочнице local storage с возможностью полноэкранного режима и взаимодействием с мышью.[6][7]
Переносимый Native Client (англ. Portable Native Client, сокр. PNaCl) — это архитектурно-независимая версия данной технологии. Приложения PNaCl используют технологии AOT-компиляции. Основная идея NaCl (запуск машинного кода в браузере) была реализована ещё в ActiveX, которая имеет множество проблем с безопасностью. Технология NaCl избегает этого, используя песочницу.
Существует альтернатива NaCl под названием asm.js, которая так же позволяет компилировать приложения, написанные на Си или C++, для запуска непосредственно в браузере (со скоростью, приближенной к машинному коду), поддерживает AOT-компиляцию и притом является подмножеством языка JavaScript, т. е. обратно совестима с браузерами, не имеющими её встроенной поддержки. Ещё одной альтернативой NaCl (хотя и изначально основанной на PNaCl) является WebAssembly.
12 октября 2016 в баг-трекере проекта Chromium появился комментарий[8], упоминающий о роспуске команд, работающих над Google's Pepper и Native Client.
30 мая 2017 Google объявила об отказе от PNaCl в пользу WebAssembly.[9]
Описание
[править | править код]Native Client является проектом с открытым исходным кодом. К настоящему времени Quake[10], XaoS[англ.], Battle for Wesnoth, Doom, Lara Croft and the Guardian of Light, From Dust и MAME, а также система программного синтезирования звука Csound были портированы на Native Client. Технология доступна в браузере Google Chrome начиная с версии 14[11] и активирована по умолчанию начиная с версии 31, в которой был официально представлен Portable Native Client (PNaCl).[12]
Реализация технологии на платформе ARM была выпущена в марте 2010.[13] Платформы x86-64, IA-32 и MIPS поддерживались изначально.
Для запуска при помощи технологии PNaCl приложение должно быть скомпилировано в архитектурно-независимый байт-код формата LLVM.[14] Созданные таким образом исполняемые файлы называются PNaCl executable (pexe). Средства сборки PNaCl производят .pexe файлы; NaCl — .nexe. .nexe файлы имеют сигнатуру 0x7F 'E' 'L' 'F' (т.е. являются ELF файлами). Chrome для запуска транслирует pexe в архитектурно-зависимые исполняемые файлы.
NaCl использует программное обнаружение ошибок и защиту песочницы в платформах x86-64 и ARM.[15] Реализация в x86-32 отличается новым способом организации песочницы.[16] По технологии песочницы Native Client устанавливает свои сегменты памяти в архитектуре x86. Также используется верификатор кода для предотвращения вызова небезопасных системных вызовов. Для предотвращения перехода в незащищённую часть вызова Native Client требует, чтобы все косвенные переходы начинались с 32-байт-выровненных блоков, кроме того, инструкциям не разрешается покидать данные блоки.[16] Из-за этих ограничений код, написанный на Си или C++, должен быть перекомпилирован особым образом для запуска с применением технологии Native Client, что может быть сделано с помощью специализированных версий GNU toolchain, в частности, GNU Compiler Collection, GNU Binutils и LLVM.
Native Client использует Newlib в качестве стандартной библиотеки языка Си, однако порт GNU C Library также доступен.[17]
Pepper
[править | править код]Pepper API — кроссплатформенное свободное API для создания модулей для Native Client. Плагин Pepper API (англ. Pepper Plugin API, сокр. PPAPI) — кроссплатформенное API для защищённых технологией Native Client плагинов, основанное на NPAPI, но полностью переписанное. На данный момент используется в Chromium-подобных браузерах для запуска PPAPI-версии Adobe Flash[18] и встроенной программы просмотра PDF-файлов[19].
PPAPI
[править | править код]12 августа 2009 на странице Google Code был представлен проект Pepper, связанный с разработкой плагина Pepper API,[20] на которой было написано, что PPAPI — набор модификаций NPAPI для создания подобных плагинов более переносными и безопасными[21]. Плагин был создан для лёгкой реализации запуска вне процесса. В дальнейшем целью проекта стало обеспечение основы для создания полностью кроссплатформенных плагинов. Планировалось реализовать данные технологии:
- Универсальная семантика NPAPI для всех браузеров.
- Запуск в отдельном процессе от самого браузера.
- Стандартизация процесса рендеринга, используя браузер.
- Определение стандартных событий и растеризация 2D функций.
- Основа для 3D графики.
- Плагин регистраций.
В дальнейшем использование PPAPI помогло реализовать поддержку геймпадов и WebSocket.[источник не указан 2945 дней]
Начиная с 13 мая 2010 года Chromium стал единственным браузером, поддерживающим новую модель плагинов.[22] Mozilla Firefox не поддерживает Pepper, так как нет полной спецификации API за пределами её реализации в Chrome, которая была создана только для браузерного движка Blink. По состоянию на 2016 год Pepper поддерживается в Chrome, Chromium и браузерах на Blink, например Opera.
Проекты на Native Client
[править | править код]Существует сайт The Go Playground Архивная копия от 17 ноября 2021 на Wayback Machine, использующий данную технологию для того, чтобы позволить экспериментировать с Go прямо в браузере.
- Folding@home Архивная копия от 11 декабря 2016 на Wayback Machine Проект Folding@home прямо в браузере используя технологию nacl
Реакция общества
[править | править код]Чад Остин (англ. Chad Austin, создатель IMVU[англ.]) похвалил путь Native Client по созданию высокопроизводительных приложений для веб (с производительностью всего лишь на 5 % меньше машинного кода), в то же время позволяя развивать клиентские приложения, предоставляя возможность выбора языка программирования (кроме JavaScript).[23]
Джон Кармак, совладелец компании Id Software, упомянул Native Client на QuakeCon 2012:
![]() |
Если вам нужно сделать что-то в браузере, куда более интересен Native Client, который начался как по-настоящему умный хак x86, с помощью которого возможно сделать нужное, не выходя из песочницы уровня доступа пользователя. Теперь есть динамическая перекомпиляция, и то, что вы пишете на C или C++, компилируется в нечто, что не является высокооптимизированным машинным кодом, но чрезвычайно близко к машинному коду. Вы можете делать любые сумасшедшие операции с указателями и всё прочее, что привыкли делать разработчики игр на уровне железа. Кармак, Джон[24]
|
Вице-президент Mozilla Джей Салливан (англ. Jay Sullivan) сообщил, что у Mozilla нет планов запускать машинный код в браузере, так как
![]() |
Эти нативные приложения являются чёрными ящиками на веб-странице. […] Мы верим в технологию HTML, и именно в неё мы вложим свои силы. Джей Салливан (англ. Jay Sullivan)[25]
|
Сотрудник Mozilla Кристофер Близзард[англ.] раскритиковал технологию NaCl, утверждая, что машинный код ни в коей мере не должен быть использован в вебе. Также он сравнил NaCl с технологией Microsoft ActiveX, которая достигла ситуации DLL hell.[4]
Хокон Виум Ли (норв. Håkon Wium Lie), технический директор Opera, верит, что
![]() |
NaCl как будто «стремится в те старые плохие времена, до веба» […] Суть Native Client в построении новой платформы — или портировании старой в веб […] что привнесёт сложность и проблемы безопасности и лишит веб-платформу внимания. Хокон Виум Ли (норв. Håkon Wium Lie) [4]
|
Брендан Эйх, технический директор Mozilla, сказал, что ECMAScript 6 вполне достаточно, чтобы удовлетворить все потребности в создании приложения для веб.[26]
См. также
[править | править код]Примечания
[править | править код]- ↑ Google's Native Client goes live in Chrome — 2011.
- ↑ Native Client support on ARM — 2013.
- ↑ https://developer.chrome.com/native-client/sdk/release-notes#chrome-pepper-49
- ↑ 1 2 3 Metz, Cade (2011-09-12). "Google Native Client: The web of the future - or the past?" (англ.). Архивировано 6 августа 2016. Дата обращения: 6 августа 2016.
- ↑ Ходаковский, Константин (2011-12-13). "Новая технология Google Chrome приносит игру Bastion в браузер". Архивировано 21 августа 2016. Дата обращения: 6 августа 2016.
- ↑ Stefansen, Christian (2011-12-09). "Games, apps and runtimes come to Native Client" (англ.). Архивировано 19 августа 2016. Дата обращения: 6 августа 2016.
- ↑ Rosenblatt, Seth (2011-12-09). "Native Client turns Chrome into high-end gaming platform" (англ.). Архивировано 27 апреля 2016. Дата обращения: 6 августа 2016.
- ↑ Bugs.chromium.org (англ.). bugs.chromium.org (12 ноября 2016). Дата обращения: 7 марта 2018. Архивировано 18 августа 2017 года.
- ↑ "Goodbye PNaCl, Hello WebAssembly!". Chromium Blog (англ.). 2017-05-30. Архивировано 30 мая 2017. Дата обращения: 7 марта 2018.
- ↑ Humphries, Matthew (2010-05-13). "Google shows off Quake-clone running in Native Client" (англ.). Архивировано 21 августа 2016. Дата обращения: 6 августа 2016.
- ↑ Chen, Brad (2011-09-16). "A new Stable release of Chrome, expanding the frontiers of the web" (англ.). Архивировано 20 августа 2016. Дата обращения: 6 августа 2016.
- ↑ Sehr, David (2013-11-12). "Portable Native Client: The "pinnacle" of speed, security, and portability" (англ.). Архивировано 13 мая 2016. Дата обращения: 6 августа 2016.
- ↑ Sehr, David (2013-01-22). "Native Client support on ARM" (англ.). Архивировано 27 июля 2016. Дата обращения: 6 августа 2016.
- ↑ Alan Donovan, Robert Muth, Brad Chen, David Sehr. PNaCl: Portable Native Client Executables (англ.) (22 февраля 2010). Архивировано 12 марта 2016 года.
- ↑ David Sehr, Robert Muth, Cliff L. Biffle, Victor Khimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen. Adapting Software Fault Isolation to Contemporary CPU Architectures (англ.) (2010). Дата обращения: 6 августа 2016. Архивировано 24 июля 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 (англ.) (2009). Дата обращения: 6 августа 2016. Архивировано 12 сентября 2016 года.
- ↑ Building (англ.). Дата обращения: 6 августа 2016. Архивировано 9 ноября 2016 года.
- ↑ Schuh, Justin (2012-08-08). "The road to safer, more stable, and flashier Flash" (англ.). Архивировано 29 июля 2016. Дата обращения: 6 августа 2016.
- ↑ Metz, Cade (2010-06-18). "Google hugs Adobe harder with Chrome-PDF merge" (англ.). Архивировано 6 августа 2016. Дата обращения: 6 августа 2016.
- ↑ ppapi (англ.). Дата обращения: 6 августа 2016. Архивировано 6 октября 2016 года.
- ↑ ppapi - Concepts.wiki (англ.). Дата обращения: 6 августа 2016. Архивировано 6 октября 2016 года.
- ↑ Metz, Cade (2010-05-13). "Google heats up native code for Chrome OS" (англ.). Архивировано 17 января 2019. Дата обращения: 6 августа 2016.
- ↑ Chad Austin. In Defense of Language Democracy (Or: Why the Browser Needs a Virtual Machine) (англ.) (8 января 2011). Дата обращения: 6 августа 2016. Архивировано 16 августа 2016 года.
- ↑ Видеоролик QuakeCon 2012 (начало на 2 часу, 36 минута, 18 секунда) на YouTube, начиная с 2:36:18
- ↑ Metz, Cade (2010-06-24). "Mozilla: Our browser will not run native code" (англ.). Архивировано 26 августа 2016. Дата обращения: 6 августа 2016.
- ↑ Krill, Paul (2012-05-31). "JavaScript founder dismisses Google Native Client, pushes ECMAScript 6" (англ.). Архивировано 20 сентября 2016. Дата обращения: 6 августа 2016.
Ссылки
[править | править код]- Chen, Brad (2008-12-08). "Native Client: A Technology for Running Native Code on the Web" (англ.). Архивировано 19 августа 2016. Дата обращения: 6 августа 2016.
- Light Media. NaclBox (англ.). Дата обращения: 15 марта 2022. Архивировано 18 сентября 2021 года.