Русская Википедия:Native Client

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

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

Чтобы показать готовность технологии, 9 декабря 2011 года Google представила игру[2] с богатой графикой (на данный момент игра уже недоступна). NaCl использует аппаратное ускорение 3D-графики через OpenGL ES 2.0, запускаясь в песочнице local storage с возможностью полноэкранного режима и взаимодействием с мышью.[3][4]

Переносимый Native Client Шаблон:L6e — это архитектурно-независимая версия данной технологии. Приложения PNaCl используют технологии AOT-компиляции. Основная идея NaCl (запуск машинного кода в браузере) была реализована ещё в ActiveX, которая имеет множество проблем с безопасностью. Технология NaCl избегает этого, используя песочницу.

Существует альтернатива NaCl под названием asm.js, которая так же позволяет компилировать приложения, написанные на Си или C++, для запуска непосредственно в браузере (со скоростью, приближенной к машинному коду), поддерживает AOT-компиляцию и притом является подмножеством языка JavaScript, т. е. обратно совестима с браузерами, не имеющими её встроенной поддержки. Ещё одной альтернативой NaCl (хотя и изначально основанной на PNaCl) является WebAssembly.

12 октября 2016 в баг-трекере проекта Chromium появился комментарий[5], упоминающий о роспуске команд, работающих над Google's Pepper и Native Client.

30 мая 2017 Google объявила об отказе от PNaCl в пользу WebAssembly.[6]

Описание

Native Client является проектом с открытым исходным кодом. К настоящему времени Quake[7], Шаблон:Нп5, Battle for Wesnoth, Doom, Lara Croft and the Guardian of Light, From Dust и MAME, а также система программного синтезирования звука Csound были портированы на Native Client. Технология доступна в браузере Google Chrome начиная с версии 14[8] и активирована по умолчанию начиная с версии 31, в которой был официально представлен Portable Native Client (PNaCl).[9]

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

Для запуска при помощи технологии PNaCl приложение должно быть скомпилировано в архитектурно-независимый байт-код формата LLVM.[11] Созданные таким образом исполняемые файлы называются PNaCl executable (pexe). Средства сборки PNaCl производят .pexe файлы; NaCl — .nexe. .nexe файлы имеют сигнатуру 0x7F 'E' 'L' 'F' (т.е. являются ELF файлами). Chrome для запуска транслирует pexe в архитектурно-зависимые исполняемые файлы.

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

Native Client использует Newlib в качестве стандартной библиотеки языка Си, однако порт GNU C Library также доступен.[14]

Pepper

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

PPAPI

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

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

Шаблон:Нет АИ 2

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

Проекты на Native Client

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

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

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

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

Вице-президент Mozilla Джей Салливан Шаблон:L6e сообщил, что у Mozilla нет планов запускать машинный код в браузере, так как Шаблон:Coquote

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

Хокон Виум Ли Шаблон:L6e, технический директор Opera, верит, что Шаблон:Coquote

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

См. также

Примечания

Шаблон:Примечания

Ссылки

Шаблон:Google Шаблон:Свободное и открытое программное обеспечение Google