Native Client

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Native Client
Тип

песочница

Разработчик

Google

Написана на

Си и C++

Операционная система

кроссплатформенное программное обеспечение

Первый выпуск

16 сентября 2011[1]

Аппаратная платформа

x86, x86-64, ARM[2] и MIPS

Последняя версия

49[3]

Состояние

Разрабатывается

Лицензия

лицензия BSD

Сайт

developers.google.com/native-client/

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

Чтобы показать готовность технологии, 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 или C++ прямо в браузере (опять же со скоростью, приближенной к машинному коду), однако факт того, что она написана на JavaScript даёт знать, что нет прямой поддержки обратной совместимости. Ещё одна версия NaCl (основанная уже на PNaCl) — это WebAssembly.

Описание[править | править вики-текст]

Native Client является проектом с открытым исходным кодом. Такие проекты как Quake[8], XaoS[en], Battle for Wesnoth, Doom, Lara Croft and the Guardian of Light, From Dust и MAME, как хорошие примеры по использованию программного синтезирования Csound были портированы на Native Client. Технология была доступна в браузере Google Chrome с версии 14[9], а также активирована по-умолчанию с версии 31, когда был официально представлен PNaCl[10].

Реализация технологии на платформе ARM произошла в марте 2010.[11] Платформы x86-64, IA-32 и MIPS поддерживались изначально.

Для запуска приложения при помощи технологии PNaCl нужно скомпилировать его в архитектурно-независимый байт-код формата LLVM.[12] Созданные таким образом расширения называются PNaCl-запускаемыми (pexe). В Chrome они будут транслированы под соответствующую архитектуру и запущены.

NaCl использует программное обнаружение ошибок и защиту песочницы в платформах x86-64 и ARM.[13] Реализация в x86-32 отличается новым способом организации песочницы.[14] По технологии песочницы Native Client устанавливает свои сегменты памяти в архитектуре x86. Также используется верификатор кода для предотвращения вызова небезопасных системных вызовов. Для предотвращения перехода в незащищённую часть вызова, Native Client требует, чтобы все косвенные переходы начинались с 32-байт-выровненных блоков, кроме того инструкциям не разрешается покидать данные блоки.[14] В связи с подобными требованиями, код C и C++ должен быть перекомпилирован в код с поддержкой Native Client, что можно сделать с помощью некоторых версий GNU toolchain, а именно в GNU Compiler Collection, GNU Binutils и LLVM.

Native Client использует библиотеку Си под названием Newlib, однако существует свободная версия GNU C Library.[15]

Pepper[править | править вики-текст]

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

PPAPI[править | править вики-текст]

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

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

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

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

Проекты на Native Client[править | править вики-текст]

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

Реакция общества[править | править вики-текст]

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

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

Cquote3.svg
Если есть, что начать делать для веб, Native Client — достаточно интересная технология, чтобы начать разрабатывать это для x86 в песочнице, и это очень увлекает. Здесь есть и динамическая компиляция, всё, что вы запрограммируете на Си или C++, скомпилируется здесь и будет иметь максимально приближенную к машинному коду скорость выполнения. Можно делать практически всё, что вы захотите как крутой разработчик игр.
Кармак, Джон[22]
 

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

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

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

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

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

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

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  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. 1 2 3 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. Humphries, Matthew. Google shows off Quake-clone running in Native Client (англ.) (13 May 2010). Проверено 6 августа 2016.
  9. Chen, Brad. A new Stable release of Chrome, expanding the frontiers of the web (англ.) (16 September 2011). Проверено 6 августа 2016.
  10. Sehr, David. Portable Native Client: The "pinnacle" of speed, security, and portability (англ.) (12 November 2013). Проверено 6 августа 2016.
  11. Sehr, David. Native Client support on ARM (англ.) (22 January 2013). Проверено 6 августа 2016.
  12. Alan Donovan, Robert Muth, Brad Chen, David Sehr. PNaCl: Portable Native Client Executables (англ.) (22 February 2010). Архивировано из первоисточника 12 марта 2016.
  13. 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.
  14. 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.
  15. Building (англ.). Проверено 6 августа 2016.
  16. Schuh, Justin. The road to safer, more stable, and flashier Flash (англ.) (8 August 2012). Проверено 6 августа 2016.
  17. Metz, Cade. Google hugs Adobe harder with Chrome-PDF merge (англ.) (18 June 2010). Проверено 6 августа 2016.
  18. ppapi (англ.).
  19. ppapi - Concepts.wiki (англ.).
  20. Metz, Cade. Google heats up native code for Chrome OS (англ.) (13 May 2010). Проверено 6 августа 2016.
  21. Chad Austin. In Defense of Language Democracy (Or: Why the Browser Needs a Virtual Machine) (англ.) (8 January 2011). Проверено 6 августа 2016.
  22. Видеоролик QuakeCon 2012 (начало на 2 часу, 36 минута, 18 секунда) на YouTube
  23. Metz, Cade. Mozilla: Our browser will not run native code (англ.) (24 June 2010). Проверено 6 августа 2016.
  24. Krill, Paul. JavaScript founder dismisses Google Native Client, pushes ECMAScript 6 (англ.) (31 May 2012). Проверено 6 августа 2016.

Ссылки[править | править вики-текст]