Interested Article - Native Client

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

Pepper API — кроссплатформенное свободное API для создания модулей для Native Client. Плагин Pepper API ( англ. Pepper Plugin API , сокр. PPAPI) — кроссплатформенное API для защищённых технологией Native Client плагинов, основанное на NPAPI , но полностью переписанное. На данный момент используется в Chromium -подобных браузерах для запуска PPAPI-версии Adobe Flash и встроенной программы просмотра PDF -файлов .

PPAPI

12 августа 2009 на странице Google Code был представлен проект Pepper, связанный с разработкой плагина Pepper API, на которой было написано, что PPAPI — набор модификаций NPAPI для создания подобных плагинов более переносными и безопасными . Плагин был создан для лёгкой реализации запуска вне процесса. В дальнейшем целью проекта стало обеспечение основы для создания полностью кроссплатформенных плагинов. Планировалось реализовать данные технологии:

  • Универсальная семантика NPAPI для всех браузеров.
  • Запуск в отдельном процессе от самого браузера.
  • Стандартизация процесса рендеринга , используя браузер.
  • Определение стандартных событий и растеризация 2D функций.
  • Основа для 3D графики.
  • Плагин регистраций.

В дальнейшем использование PPAPI помогло реализовать поддержку геймпадов и WebSocket . [ источник не указан 2716 дней ]

Начиная с 13 мая 2010 года Chromium стал единственным браузером, поддерживающим новую модель плагинов. Mozilla Firefox не поддерживает Pepper, так как нет полной спецификации API за пределами её реализации в Chrome, которая была создана только для браузерного движка Blink . По состоянию на 2016 год Pepper поддерживается в Chrome, Chromium и браузерах на Blink, например Opera .

Проекты на Native Client

Существует сайт от 17 ноября 2021 на Wayback Machine , использующий данную технологию для того, чтобы позволить экспериментировать с Go прямо в браузере.

  • от 11 декабря 2016 на Wayback Machine Проект Folding@home прямо в браузере используя технологию nacl

Реакция общества

Чад Остин ( англ. Chad Austin , создатель ) похвалил путь Native Client по созданию высокопроизводительных приложений для веб (с производительностью всего лишь на 5 % меньше машинного кода ), в то же время позволяя развивать клиентские приложения, предоставляя возможность выбора языка программирования (кроме JavaScript).

Джон Кармак , совладелец компании Id Software , упомянул Native Client на QuakeCon 2012:

Если вам нужно сделать что-то в браузере, куда более интересен Native Client, который начался как по-настоящему умный хак x86, с помощью которого возможно сделать нужное, не выходя из песочницы уровня доступа пользователя. Теперь есть динамическая перекомпиляция, и то, что вы пишете на C или C++, компилируется в нечто, что не является высокооптимизированным машинным кодом, но чрезвычайно близко к машинному коду. Вы можете делать любые сумасшедшие операции с указателями и всё прочее, что привыкли делать разработчики игр на уровне железа.
Кармак, Джон

Вице-президент Mozilla Джей Салливан ( англ. Jay Sullivan ) сообщил, что у Mozilla нет планов запускать машинный код в браузере, так как

Эти нативные приложения являются чёрными ящиками на веб-странице. […] Мы верим в технологию HTML, и именно в неё мы вложим свои силы.
Джей Салливан ( англ. Jay Sullivan )

Сотрудник Mozilla раскритиковал технологию NaCl, утверждая, что машинный код ни в коей мере не должен быть использован в вебе. Также он сравнил NaCl с технологией Microsoft ActiveX , которая достигла ситуации DLL hell .

Хокон Виум Ли ( норв. Håkon Wium Lie ) , технический директор Opera , верит, что

NaCl как будто «стремится в те старые плохие времена, до веба» […] Суть Native Client в построении новой платформы — или портировании старой в веб […] что привнесёт сложность и проблемы безопасности и лишит веб-платформу внимания.
Хокон Виум Ли ( норв. Håkon Wium Lie )

Брендан Эйх , технический директор Mozilla, сказал, что ECMAScript 6 вполне достаточно, чтобы удовлетворить все потребности в создании приложения для веб.

См. также

Примечания

  1. — 2011.
  2. — 2013.
  3. Metz, Cade (2011-09-12). (англ.) . из оригинала 6 августа 2016 . Дата обращения: 6 августа 2016 .
  4. Ходаковский, Константин (2011-12-13). . из оригинала 21 августа 2016 . Дата обращения: 6 августа 2016 .
  5. Stefansen, Christian (2011-12-09). (англ.) . из оригинала 19 августа 2016 . Дата обращения: 6 августа 2016 .
  6. Rosenblatt, Seth (2011-12-09). (англ.) . из оригинала 27 апреля 2016 . Дата обращения: 6 августа 2016 .
  7. (англ.) . bugs.chromium.org (12 ноября 2016). Дата обращения: 7 марта 2018. 18 августа 2017 года.
  8. . Chromium Blog (англ.) . 2017-05-30. из оригинала 30 мая 2017 . Дата обращения: 7 марта 2018 .
  9. Humphries, Matthew (2010-05-13). (англ.) . из оригинала 21 августа 2016 . Дата обращения: 6 августа 2016 .
  10. Chen, Brad (2011-09-16). (англ.) . из оригинала 20 августа 2016 . Дата обращения: 6 августа 2016 .
  11. Sehr, David (2013-11-12). (англ.) . из оригинала 13 мая 2016 . Дата обращения: 6 августа 2016 .
  12. Sehr, David (2013-01-22). (англ.) . из оригинала 27 июля 2016 . Дата обращения: 6 августа 2016 .
  13. Alan Donovan, Robert Muth, Brad Chen, David Sehr. (англ.) (22 февраля 2010). 12 марта 2016 года.
  14. David Sehr, Robert Muth, Cliff L. Biffle, Victor Khimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen. (англ.) (2010). Дата обращения: 6 августа 2016. 24 июля 2016 года.
  15. Bennet Yee, David Sehr, Greg Dardyk, Brad Chen, Robert Muth, Tavis Ormandy, Shiki Okasaka, Neha Narula, Nicholas Fullagar. (англ.) (2009). Дата обращения: 6 августа 2016. 12 сентября 2016 года.
  16. (англ.) . Дата обращения: 6 августа 2016. 9 ноября 2016 года.
  17. Schuh, Justin (2012-08-08). (англ.) . из оригинала 29 июля 2016 . Дата обращения: 6 августа 2016 .
  18. Metz, Cade (2010-06-18). (англ.) . из оригинала 6 августа 2016 . Дата обращения: 6 августа 2016 .
  19. (англ.) . Дата обращения: 6 августа 2016. 6 октября 2016 года.
  20. (англ.) . Дата обращения: 6 августа 2016. 6 октября 2016 года.
  21. Metz, Cade (2010-05-13). (англ.) . из оригинала 17 января 2019 . Дата обращения: 6 августа 2016 .
  22. Chad Austin. (англ.) (8 января 2011). Дата обращения: 6 августа 2016. 16 августа 2016 года.
  23. на YouTube , начиная с 2:36:18
  24. Metz, Cade (2010-06-24). (англ.) . из оригинала 26 августа 2016 . Дата обращения: 6 августа 2016 .
  25. Krill, Paul (2012-05-31). (англ.) . из оригинала 20 сентября 2016 . Дата обращения: 6 августа 2016 .

Ссылки

  • Chen, Brad (2008-12-08). (англ.) . из оригинала 19 августа 2016 . Дата обращения: 6 августа 2016 .
  • Light Media. (англ.) . Дата обращения: 15 марта 2022. 18 сентября 2021 года.
Источник —

Same as Native Client