Rock Alternative Music Prize
- 1 year ago
- 0
- 0
Native Client ( NaCl ) — технология песочницы для запуска кода на платформах x86 , x86-64 , ARM и MIPS , позволяющая безопасно запускать машинный код непосредственно в браузере независимо от операционной системы со скоростью, приближённой к запуску машинного кода . Эта технология также может быть использована для создания защищённых плагинов для браузера, частей какого-либо приложения либо самих приложений , например .
Чтобы показать готовность технологии, 9 декабря 2011 года Google представила игру с богатой графикой (на данный момент игра уже недоступна). NaCl использует аппаратное ускорение 3D-графики через OpenGL ES 2.0, запускаясь в песочнице local storage с возможностью полноэкранного режима и взаимодействием с мышью.
Переносимый Native Client ( англ. Portable Native Client , сокр. PNaCl) — это архитектурно-независимая версия данной технологии. Приложения PNaCl используют технологии AOT-компиляции . Основная идея NaCl (запуск машинного кода в браузере) была реализована ещё в ActiveX , которая имеет множество проблем с безопасностью. Технология NaCl избегает этого, используя песочницу.
Существует альтернатива NaCl под названием asm.js , которая так же позволяет компилировать приложения, написанные на Си или C++, для запуска непосредственно в браузере (со скоростью, приближенной к машинному коду ), поддерживает AOT-компиляцию и притом является подмножеством языка JavaScript, т. е. обратно совестима с браузерами, не имеющими её встроенной поддержки. Ещё одной альтернативой NaCl (хотя и изначально основанной на PNaCl) является WebAssembly .
12 октября 2016 в баг-трекере проекта Chromium появился комментарий , упоминающий о роспуске команд, работающих над Google's Pepper и Native Client.
30 мая 2017 Google объявила об отказе от PNaCl в пользу WebAssembly .
Native Client является проектом с открытым исходным кодом . К настоящему времени Quake , , Battle for Wesnoth , Doom , Lara Croft and the Guardian of Light , From Dust и MAME , а также система программного синтезирования звука Csound были портированы на Native Client. Технология доступна в браузере Google Chrome начиная с версии 14 и активирована по умолчанию начиная с версии 31, в которой был официально представлен Portable Native Client (PNaCl).
Реализация технологии на платформе ARM была выпущена в марте 2010. Платформы x86-64, IA-32 и MIPS поддерживались изначально.
Для запуска при помощи технологии PNaCl приложение должно быть скомпилировано в архитектурно-независимый байт-код формата LLVM . Созданные таким образом исполняемые файлы называются PNaCl executable (pexe). Средства сборки PNaCl производят .pexe файлы; NaCl — .nexe. .nexe файлы имеют сигнатуру 0x7F 'E' 'L' 'F' (т.е. являются ELF файлами). Chrome для запуска транслирует pexe в архитектурно-зависимые исполняемые файлы.
NaCl использует программное обнаружение ошибок и защиту песочницы в платформах x86-64 и ARM. Реализация в x86-32 отличается новым способом организации песочницы. По технологии песочницы Native Client устанавливает свои сегменты памяти в архитектуре x86 . Также используется верификатор кода для предотвращения вызова небезопасных системных вызовов. Для предотвращения перехода в незащищённую часть вызова Native Client требует, чтобы все косвенные переходы начинались с 32-байт-выровненных блоков, кроме того, инструкциям не разрешается покидать данные блоки. Из-за этих ограничений код, написанный на Си или C++, должен быть перекомпилирован особым образом для запуска с применением технологии Native Client, что может быть сделано с помощью специализированных версий GNU toolchain , в частности, GNU Compiler Collection , GNU Binutils и LLVM .
Native Client использует Newlib в качестве стандартной библиотеки языка Си , однако порт GNU C Library также доступен.
Pepper API — кроссплатформенное свободное API для создания модулей для Native Client. Плагин Pepper API ( англ. Pepper Plugin API , сокр. PPAPI) — кроссплатформенное API для защищённых технологией Native Client плагинов, основанное на NPAPI , но полностью переписанное. На данный момент используется в Chromium -подобных браузерах для запуска PPAPI-версии Adobe Flash и встроенной программы просмотра PDF -файлов .
12 августа 2009 на странице Google Code был представлен проект Pepper, связанный с разработкой плагина Pepper API, на которой было написано, что PPAPI — набор модификаций NPAPI для создания подобных плагинов более переносными и безопасными . Плагин был создан для лёгкой реализации запуска вне процесса. В дальнейшем целью проекта стало обеспечение основы для создания полностью кроссплатформенных плагинов. Планировалось реализовать данные технологии:
В дальнейшем использование PPAPI помогло реализовать поддержку геймпадов и WebSocket . [ источник не указан 2716 дней ]
Начиная с 13 мая 2010 года Chromium стал единственным браузером, поддерживающим новую модель плагинов. Mozilla Firefox не поддерживает Pepper, так как нет полной спецификации API за пределами её реализации в Chrome, которая была создана только для браузерного движка Blink . По состоянию на 2016 год Pepper поддерживается в Chrome, Chromium и браузерах на Blink, например Opera .
Существует сайт от 17 ноября 2021 на Wayback Machine , использующий данную технологию для того, чтобы позволить экспериментировать с Go прямо в браузере.
Чад Остин ( англ. Chad Austin , создатель ) похвалил путь Native Client по созданию высокопроизводительных приложений для веб (с производительностью всего лишь на 5 % меньше машинного кода ), в то же время позволяя развивать клиентские приложения, предоставляя возможность выбора языка программирования (кроме JavaScript).
Джон Кармак , совладелец компании Id Software , упомянул Native Client на QuakeCon 2012:
Если вам нужно сделать что-то в браузере, куда более интересен Native Client, который начался как по-настоящему умный хак x86, с помощью которого возможно сделать нужное, не выходя из песочницы уровня доступа пользователя. Теперь есть динамическая перекомпиляция, и то, что вы пишете на C или C++, компилируется в нечто, что не является высокооптимизированным машинным кодом, но чрезвычайно близко к машинному коду. Вы можете делать любые сумасшедшие операции с указателями и всё прочее, что привыкли делать разработчики игр на уровне железа.
Кармак, Джон
|
if you have to do something inside a browser, Native Client is much more interesting as something that started out as a really pretty darn clever x86 hack in the way that they could sandbox all of this in user mode interestingly. It's now dynamic recompilation, but something that you program in C or C++ and it compiles down to something that's going to be not your -O4 optimization level for completely native code but pretty damn close to native code. You could do all of your evil pointer chasings, and whatever you want to do as a to-the-metal game developer.
|
Вице-президент Mozilla Джей Салливан ( англ. Jay Sullivan ) сообщил, что у Mozilla нет планов запускать машинный код в браузере, так как
Эти нативные приложения являются
чёрными ящиками
на веб-странице. […] Мы верим в технологию HTML, и именно в неё мы вложим свои силы.
Джей Салливан
(
англ.
Jay Sullivan
)
|
These native apps are just little black boxes in a webpage. […] We really believe in HTML, and this is where we want to focus.
|
Сотрудник Mozilla раскритиковал технологию NaCl, утверждая, что машинный код ни в коей мере не должен быть использован в вебе. Также он сравнил NaCl с технологией Microsoft ActiveX , которая достигла ситуации DLL hell .
Хокон Виум Ли ( норв. Håkon Wium Lie ) , технический директор Opera , верит, что
NaCl как будто «стремится в те старые плохие времена, до веба» […] Суть Native Client в построении новой платформы — или портировании старой в веб […] что привнесёт сложность и проблемы безопасности и лишит веб-платформу внимания.
Хокон Виум Ли
(
норв.
Håkon Wium Lie
)
|
NaCl seems to be 'yearning for the bad old days, before the web' […] Native Client is about building a new platform – or porting an old platform into the web […] it will bring in complexity and security issues, and it will take away focus from the web platform.
|
Брендан Эйх , технический директор Mozilla, сказал, что ECMAScript 6 вполне достаточно, чтобы удовлетворить все потребности в создании приложения для веб.