Native Client

Поделись знанием:
Перейти к: навигация, поиск
Native Client
Состояние

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

К:Википедия:Статьи без изображений (тип: не указан)

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

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

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

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





Описание

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

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

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

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

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

Pepper

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

PPAPI

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

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

В дальнейшем использование PPAPI помогло реализовать поддержку геймпадов и WebSocket.К:Википедия:Статьи без источников (тип: не указан)[источник не указан 2820 дней]

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

Проекты на Native Client

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

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

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

Джон Кармак, совладелец компании Id Software упомянул Native Client на QuakeCon 2012:
   
Если есть, что начать делать для веб, Native Client — достаточно интересная технология, чтобы начать разрабатывать это для x86 в песочнице, и это очень увлекает. Здесь есть и динамическая компиляция, всё, что вы запрограммируете на Си или C++, скомпилируется здесь и будет иметь максимально приближенную к машинному коду скорость выполнения. Можно делать практически всё, что вы захотите как крутой разработчик игр. </td>
</td> </td></tr>
Кармак, Джон[19]</td>
  </td>
 </tr>
</table>
 
Вице-президент Mozilla, Джей Суливан (англ. Jay Sullivan), сообщил, что у Mozilla нет планов запускать машинный код в браузере, так как
   
Эти компьютерные программы выбиваются из общего представления о веб страницах. […] Мы верим в технологию HTML, и именно в неё мы вложим свои силы. </td>
</td> </td></tr>
Джей Суливан (англ. Jay Sullivan)[20]</td>
  </td>
 </tr>
</table>
 

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

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

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

См. также

Напишите отзыв о статье "Native Client"

Примечания

  1. 1 2 3 Metz, Cade. [www.theregister.co.uk/2011/09/12/google_native_client_from_all_sides/ Google Native Client: The web of the future - or the past?] (англ.) (12 September 2011). Проверено 6 августа 2016.
  2. Ходаковский, Константин. [www.3dnews.ru/621245 Новая технология Google Chrome приносит игру Bastion в браузер] (13 декабря 2011). Проверено 6 августа 2016.
  3. Stefansen, Christian. [googlecode.blogspot.ru/2011/12/games-apps-and-runtimes-come-to-native.html Games, apps and runtimes come to Native Client] (англ.) (9 December 2011). Проверено 6 августа 2016.
  4. Rosenblatt, Seth. [download.cnet.com/blog/download-blog/native-client-turns-chrome-into-high-end-gaming-platform/ Native Client turns Chrome into high-end gaming platform] (англ.) (9 December 2011). Проверено 6 августа 2016.
  5. Humphries, Matthew. [www.geek.com/games/google-shows-off-quake-clone-running-in-native-client-1239771/ Google shows off Quake-clone running in Native Client] (англ.) (13 May 2010). Проверено 6 августа 2016.
  6. Chen, Brad. [chrome.googleblog.com/2011/09/new-stable-release-of-chrome-expanding.html A new Stable release of Chrome, expanding the frontiers of the web] (англ.) (16 September 2011). Проверено 6 августа 2016.
  7. Sehr, David. [blog.chromium.org/2013/11/portable-native-client-pinnacle-of.html Portable Native Client: The "pinnacle" of speed, security, and portability] (англ.) (12 November 2013). Проверено 6 августа 2016.
  8. Sehr, David. [blog.chromium.org/2013/01/native-client-support-on-arm.html Native Client support on ARM] (англ.) (22 January 2013). Проверено 6 августа 2016.
  9. Alan Donovan, Robert Muth, Brad Chen, David Sehr. [nativeclient.googlecode.com/svn/data/site/pnacl.pdf PNaCl: Portable Native Client Executables] (англ.) (22 February 2010). [web.archive.org/web/20160312024737/nativeclient.googlecode.com/svn/data/site/pnacl.pdf Архивировано из первоисточника 12 марта 2016].
  10. David Sehr, Robert Muth, Cliff L. Biffle, Victor Khimenko, Egor Pasko, Bennet Yee, Karl Schimpf, Brad Chen. [research.google.com/pubs/pub35649.html Adapting Software Fault Isolation to Contemporary CPU Architectures] (англ.) (2010). Проверено 6 августа 2016.
  11. 1 2 Bennet Yee, David Sehr, Greg Dardyk, Brad Chen, Robert Muth, Tavis Ormandy, Shiki Okasaka, Neha Narula, Nicholas Fullagar. [research.google.com/pubs/pub34913.html Native Client: A Sandbox for Portable, Untrusted x86 Native Code] (англ.) (2009). Проверено 6 августа 2016.
  12. [developer.chrome.com/native-client/devguide/devcycle/building Building] (англ.). Проверено 6 августа 2016.
  13. Schuh, Justin. [blog.chromium.org/2012/08/the-road-to-safer-more-stable-and.html The road to safer, more stable, and flashier Flash] (англ.) (8 August 2012). Проверено 6 августа 2016.
  14. Metz, Cade. [www.theregister.co.uk/2010/06/18/chrome_dev_builds_get_built_in_pdf_reader/ Google hugs Adobe harder with Chrome-PDF merge] (англ.) (18 June 2010). Проверено 6 августа 2016.
  15. [code.google.com/archive/p/ppapi/ ppapi] (англ.).
  16. [code.google.com/archive/p/ppapi/wikis/Concepts.wiki ppapi - Concepts.wiki] (англ.).
  17. Metz, Cade. [www.theregister.co.uk/2010/05/13/google_native_client_sdk/ Google heats up native code for Chrome OS] (англ.) (13 May 2010). Проверено 6 августа 2016.
  18. Chad Austin. [chadaustin.me/2011/01/in-defense-of-language-democracy/ In Defense of Language Democracy (Or: Why the Browser Needs a Virtual Machine)] (англ.) (8 January 2011). Проверено 6 августа 2016.
  19. [youtube.com/watch?v=wt-iVFxgFWk&t=2h36m18s Видеоролик QuakeCon 2012 (начало на 2 часу, 36 минута, 18 секунда)] на YouTube
  20. Metz, Cade. [www.theregister.co.uk/2010/06/24/jay_sullivan_on_firefox/ Mozilla: Our browser will not run native code] (англ.) (24 June 2010). Проверено 6 августа 2016.
  21. Krill, Paul. [www.techworld.com/news/apps/javascript-founder-dismisses-google-native-client-pushes-ecmascript-6-3361254/ JavaScript founder dismisses Google Native Client, pushes ECMAScript 6] (англ.) (31 May 2012). Проверено 6 августа 2016.

Ссылки

  • Chen, Brad. [googlecode.blogspot.ru/2008/12/native-client-technology-for-running.html Native Client: A Technology for Running Native Code on the Web] (англ.) (8 December 2008). Проверено 6 августа 2016.
  • Light Media. [www.naclbox.com NaclBox] (англ.).


Отрывок, характеризующий Native Client

– Ваше превосходительство…
– Ну что «ваше превосходительство»? Ваше превосходительство! Ваше превосходительство! А что ваше превосходительство – никому неизвестно.
– Ваше превосходительство, это Долохов, разжалованный… – сказал тихо капитан.
– Что он в фельдмаршалы, что ли, разжалован или в солдаты? А солдат, так должен быть одет, как все, по форме.
– Ваше превосходительство, вы сами разрешили ему походом.
– Разрешил? Разрешил? Вот вы всегда так, молодые люди, – сказал полковой командир, остывая несколько. – Разрешил? Вам что нибудь скажешь, а вы и… – Полковой командир помолчал. – Вам что нибудь скажешь, а вы и… – Что? – сказал он, снова раздражаясь. – Извольте одеть людей прилично…
И полковой командир, оглядываясь на адъютанта, своею вздрагивающею походкой направился к полку. Видно было, что его раздражение ему самому понравилось, и что он, пройдясь по полку, хотел найти еще предлог своему гневу. Оборвав одного офицера за невычищенный знак, другого за неправильность ряда, он подошел к 3 й роте.
– Кааак стоишь? Где нога? Нога где? – закричал полковой командир с выражением страдания в голосе, еще человек за пять не доходя до Долохова, одетого в синеватую шинель.
Долохов медленно выпрямил согнутую ногу и прямо, своим светлым и наглым взглядом, посмотрел в лицо генерала.
– Зачем синяя шинель? Долой… Фельдфебель! Переодеть его… дря… – Он не успел договорить.
– Генерал, я обязан исполнять приказания, но не обязан переносить… – поспешно сказал Долохов.
– Во фронте не разговаривать!… Не разговаривать, не разговаривать!…
– Не обязан переносить оскорбления, – громко, звучно договорил Долохов.
Глаза генерала и солдата встретились. Генерал замолчал, сердито оттягивая книзу тугой шарф.
– Извольте переодеться, прошу вас, – сказал он, отходя.


– Едет! – закричал в это время махальный.
Полковой командир, покраснел, подбежал к лошади, дрожащими руками взялся за стремя, перекинул тело, оправился, вынул шпагу и с счастливым, решительным лицом, набок раскрыв рот, приготовился крикнуть. Полк встрепенулся, как оправляющаяся птица, и замер.
– Смир р р р на! – закричал полковой командир потрясающим душу голосом, радостным для себя, строгим в отношении к полку и приветливым в отношении к подъезжающему начальнику.
По широкой, обсаженной деревьями, большой, бесшоссейной дороге, слегка погромыхивая рессорами, шибкою рысью ехала высокая голубая венская коляска цугом. За коляской скакали свита и конвой кроатов. Подле Кутузова сидел австрийский генерал в странном, среди черных русских, белом мундире. Коляска остановилась у полка. Кутузов и австрийский генерал о чем то тихо говорили, и Кутузов слегка улыбнулся, в то время как, тяжело ступая, он опускал ногу с подножки, точно как будто и не было этих 2 000 людей, которые не дыша смотрели на него и на полкового командира.
Раздался крик команды, опять полк звеня дрогнул, сделав на караул. В мертвой тишине послышался слабый голос главнокомандующего. Полк рявкнул: «Здравья желаем, ваше го го го го ство!» И опять всё замерло. Сначала Кутузов стоял на одном месте, пока полк двигался; потом Кутузов рядом с белым генералом, пешком, сопутствуемый свитою, стал ходить по рядам.
По тому, как полковой командир салютовал главнокомандующему, впиваясь в него глазами, вытягиваясь и подбираясь, как наклоненный вперед ходил за генералами по рядам, едва удерживая подрагивающее движение, как подскакивал при каждом слове и движении главнокомандующего, – видно было, что он исполнял свои обязанности подчиненного еще с большим наслаждением, чем обязанности начальника. Полк, благодаря строгости и старательности полкового командира, был в прекрасном состоянии сравнительно с другими, приходившими в то же время к Браунау. Отсталых и больных было только 217 человек. И всё было исправно, кроме обуви.
Кутузов прошел по рядам, изредка останавливаясь и говоря по нескольку ласковых слов офицерам, которых он знал по турецкой войне, а иногда и солдатам. Поглядывая на обувь, он несколько раз грустно покачивал головой и указывал на нее австрийскому генералу с таким выражением, что как бы не упрекал в этом никого, но не мог не видеть, как это плохо. Полковой командир каждый раз при этом забегал вперед, боясь упустить слово главнокомандующего касательно полка. Сзади Кутузова, в таком расстоянии, что всякое слабо произнесенное слово могло быть услышано, шло человек 20 свиты. Господа свиты разговаривали между собой и иногда смеялись. Ближе всех за главнокомандующим шел красивый адъютант. Это был князь Болконский. Рядом с ним шел его товарищ Несвицкий, высокий штаб офицер, чрезвычайно толстый, с добрым, и улыбающимся красивым лицом и влажными глазами; Несвицкий едва удерживался от смеха, возбуждаемого черноватым гусарским офицером, шедшим подле него. Гусарский офицер, не улыбаясь, не изменяя выражения остановившихся глаз, с серьезным лицом смотрел на спину полкового командира и передразнивал каждое его движение. Каждый раз, как полковой командир вздрагивал и нагибался вперед, точно так же, точь в точь так же, вздрагивал и нагибался вперед гусарский офицер. Несвицкий смеялся и толкал других, чтобы они смотрели на забавника.
Кутузов шел медленно и вяло мимо тысячей глаз, которые выкатывались из своих орбит, следя за начальником. Поровнявшись с 3 й ротой, он вдруг остановился. Свита, не предвидя этой остановки, невольно надвинулась на него.
– А, Тимохин! – сказал главнокомандующий, узнавая капитана с красным носом, пострадавшего за синюю шинель.
Казалось, нельзя было вытягиваться больше того, как вытягивался Тимохин, в то время как полковой командир делал ему замечание. Но в эту минуту обращения к нему главнокомандующего капитан вытянулся так, что, казалось, посмотри на него главнокомандующий еще несколько времени, капитан не выдержал бы; и потому Кутузов, видимо поняв его положение и желая, напротив, всякого добра капитану, поспешно отвернулся. По пухлому, изуродованному раной лицу Кутузова пробежала чуть заметная улыбка.
– Еще измайловский товарищ, – сказал он. – Храбрый офицер! Ты доволен им? – спросил Кутузов у полкового командира.
И полковой командир, отражаясь, как в зеркале, невидимо для себя, в гусарском офицере, вздрогнул, подошел вперед и отвечал:
– Очень доволен, ваше высокопревосходительство.
– Мы все не без слабостей, – сказал Кутузов, улыбаясь и отходя от него. – У него была приверженность к Бахусу.
Полковой командир испугался, не виноват ли он в этом, и ничего не ответил. Офицер в эту минуту заметил лицо капитана с красным носом и подтянутым животом и так похоже передразнил его лицо и позу, что Несвицкий не мог удержать смеха.
Кутузов обернулся. Видно было, что офицер мог управлять своим лицом, как хотел: в ту минуту, как Кутузов обернулся, офицер успел сделать гримасу, а вслед за тем принять самое серьезное, почтительное и невинное выражение.
Третья рота была последняя, и Кутузов задумался, видимо припоминая что то. Князь Андрей выступил из свиты и по французски тихо сказал:
– Вы приказали напомнить о разжалованном Долохове в этом полку.
– Где тут Долохов? – спросил Кутузов.
Долохов, уже переодетый в солдатскую серую шинель, не дожидался, чтоб его вызвали. Стройная фигура белокурого с ясными голубыми глазами солдата выступила из фронта. Он подошел к главнокомандующему и сделал на караул.
– Претензия? – нахмурившись слегка, спросил Кутузов.
– Это Долохов, – сказал князь Андрей.
– A! – сказал Кутузов. – Надеюсь, что этот урок тебя исправит, служи хорошенько. Государь милостив. И я не забуду тебя, ежели ты заслужишь.
Голубые ясные глаза смотрели на главнокомандующего так же дерзко, как и на полкового командира, как будто своим выражением разрывая завесу условности, отделявшую так далеко главнокомандующего от солдата.
– Об одном прошу, ваше высокопревосходительство, – сказал он своим звучным, твердым, неспешащим голосом. – Прошу дать мне случай загладить мою вину и доказать мою преданность государю императору и России.
Кутузов отвернулся. На лице его промелькнула та же улыбка глаз, как и в то время, когда он отвернулся от капитана Тимохина. Он отвернулся и поморщился, как будто хотел выразить этим, что всё, что ему сказал Долохов, и всё, что он мог сказать ему, он давно, давно знает, что всё это уже прискучило ему и что всё это совсем не то, что нужно. Он отвернулся и направился к коляске.
Полк разобрался ротами и направился к назначенным квартирам невдалеке от Браунау, где надеялся обуться, одеться и отдохнуть после трудных переходов.
– Вы на меня не претендуете, Прохор Игнатьич? – сказал полковой командир, объезжая двигавшуюся к месту 3 ю роту и подъезжая к шедшему впереди ее капитану Тимохину. Лицо полкового командира выражало после счастливо отбытого смотра неудержимую радость. – Служба царская… нельзя… другой раз во фронте оборвешь… Сам извинюсь первый, вы меня знаете… Очень благодарил! – И он протянул руку ротному.
– Помилуйте, генерал, да смею ли я! – отвечал капитан, краснея носом, улыбаясь и раскрывая улыбкой недостаток двух передних зубов, выбитых прикладом под Измаилом.
– Да господину Долохову передайте, что я его не забуду, чтоб он был спокоен. Да скажите, пожалуйста, я всё хотел спросить, что он, как себя ведет? И всё…
– По службе очень исправен, ваше превосходительство… но карахтер… – сказал Тимохин.
– А что, что характер? – спросил полковой командир.
– Находит, ваше превосходительство, днями, – говорил капитан, – то и умен, и учен, и добр. А то зверь. В Польше убил было жида, изволите знать…
– Ну да, ну да, – сказал полковой командир, – всё надо пожалеть молодого человека в несчастии. Ведь большие связи… Так вы того…
– Слушаю, ваше превосходительство, – сказал Тимохин, улыбкой давая чувствовать, что он понимает желания начальника.
– Ну да, ну да.
Полковой командир отыскал в рядах Долохова и придержал лошадь.
– До первого дела – эполеты, – сказал он ему.
Долохов оглянулся, ничего не сказал и не изменил выражения своего насмешливо улыбающегося рта.
– Ну, вот и хорошо, – продолжал полковой командир. – Людям по чарке водки от меня, – прибавил он, чтобы солдаты слышали. – Благодарю всех! Слава Богу! – И он, обогнав роту, подъехал к другой.