Native Client

Native Client (NaCl) — технология песочницы для запуска кода на платформах x86, x86-64, ARM и MIPS, позволяющая безопасно запускать машинный код непосредственно в браузере независимо от операционной системы со скоростью, приближённой к запуску машинного кода. Эта технология также может быть использована для создания защищённых плагинов для браузера, частей какого-либо приложения либо самих приложений[4], например ZeroVM.

Native Client
Разработчик Google
Написана на Си и C++
Операционная система кроссплатформенность
Первый выпуск 16 сентября 2011[1]
Аппаратная платформа x86, x86_64, ARM[2] и MIPS
Последняя версия
Состояние Разрабатывается
Лицензия модифицированная лицензия BSD[d]
Сайт developers.google.com/na…

Чтобы показать готовность технологии, 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.

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

Проекты на Native Client

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

  • Folding@home Проект 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]

См. также

Примечания

  1. Google's Native Client goes live in Chrome — 2011.
  2. Native Client support on ARM — 2013.
  3. https://developer.chrome.com/native-client/sdk/release-notes#chrome-pepper-49
  4. Metz, Cade. Google Native Client: The web of the future - or the past? (англ.) (12 September 2011). Дата обращения 6 августа 2016.
  5. Ходаковский, Константин. Новая технология Google Chrome приносит игру Bastion в браузер (13 декабря 2011). Дата обращения 6 августа 2016.
  6. Stefansen, Christian. Games, apps and runtimes come to Native Client (англ.) (9 December 2011). Дата обращения 6 августа 2016.
  7. Rosenblatt, Seth. Native Client turns Chrome into high-end gaming platform (англ.) (9 December 2011). Дата обращения 6 августа 2016.
  8. Bugs.chromium.org (англ.). bugs.chromium.org (12 ноября 2016). Дата обращения: 7 марта 2018.
  9. Goodbye PNaCl, Hello WebAssembly! (англ.), Chromium Blog (30 May 2017). Дата обращения 7 марта 2018.
  10. Humphries, Matthew. Google shows off Quake-clone running in Native Client (англ.) (13 May 2010). Архивировано 21 августа 2016 года. Дата обращения 6 августа 2016.
  11. Chen, Brad. A new Stable release of Chrome, expanding the frontiers of the web (англ.) (16 September 2011). Дата обращения 6 августа 2016.
  12. Sehr, David. Portable Native Client: The "pinnacle" of speed, security, and portability (англ.) (12 November 2013). Дата обращения 6 августа 2016.
  13. Sehr, David. Native Client support on ARM (англ.) (22 January 2013). Дата обращения 6 августа 2016.
  14. Alan Donovan, Robert Muth, Brad Chen, David Sehr. PNaCl: Portable Native Client Executables (англ.) (22 февраля 2010). Архивировано 12 марта 2016 года.
  15. 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.
  16. 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.
  17. Building (англ.). Дата обращения: 6 августа 2016.
  18. Schuh, Justin. The road to safer, more stable, and flashier Flash (англ.) (8 August 2012). Дата обращения 6 августа 2016.
  19. Metz, Cade. Google hugs Adobe harder with Chrome-PDF merge (англ.) (18 June 2010). Дата обращения 6 августа 2016.
  20. ppapi (англ.).
  21. ppapi - Concepts.wiki (англ.).
  22. Metz, Cade. Google heats up native code for Chrome OS (англ.) (13 May 2010). Дата обращения 6 августа 2016.
  23. Chad Austin. In Defense of Language Democracy (Or: Why the Browser Needs a Virtual Machine) (англ.) (8 января 2011). Дата обращения: 6 августа 2016.
  24. Видеоролик QuakeCon 2012 (начало на 2 часу, 36 минута, 18 секунда) на YouTube, начиная с 2:36:18
  25. Metz, Cade. Mozilla: Our browser will not run native code (англ.) (24 June 2010). Дата обращения 6 августа 2016.
  26. Krill, Paul. JavaScript founder dismisses Google Native Client, pushes ECMAScript 6 (англ.) (31 May 2012). Дата обращения 6 августа 2016.

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.