Native Client

Материал из Википедии — свободной энциклопедии
Текущая версия страницы покане проверялась опытными участниками и может значительно отличаться отверсии, проверенной 29 сентября 2017 года; проверки требуют24 правки.
Перейти к навигацииПерейти к поиску
Native Client
РазработчикGoogle
Написана наСи и C++
Операционная системакроссплатформенность
Дата выпуска16 сентября2011[1]
Аппаратные платформыX86, x86-64, ARM architecture[2] и MIPS
Последняя версия
Репозиторийchromium.googlesource.com/…
СостояниеЗакрыт
Лицензиямодифицированная лицензия BSD
Сайтdeveloper.chrome.com/… (англ.)

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

Чтобы показать готовность технологии, 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]. Изначально Google планировала удалить PNaCl в первом квартале 2018 года[9], а позже и во втором квартале 2019 года[10], но окончательно PNaCl был удалён в июне 2022 года (вместе с приложениями Chrome)[11].

Содержание

Описание

[править |править код]

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

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

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

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

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

Pepper

[править |править код]

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

PPAPI

[править |править код]

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

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

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

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

Проекты на Native Client

[править |править код]

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

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

[править |править код]

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

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

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

Оригинальный текст (англ.)
if you have to do something inside a browser, Native Client is much more interesting as something that started out as a really pretty darn clever x86 hack in the way that they could sandbox all of this in user mode interestingly. It's now dynamic recompilation, but something that you program in C or C++ and it compiles down to something that's going to be not your -O4 optimization level for completely native code but pretty damn close to native code. You could do all of your evil pointer chasings, and whatever you want to do as a to-the-metal game developer.

Кармак, Джон[26]

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

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

Оригинальный текст (англ.)
These native apps are just little black boxes in a webpage. […] We really believe in HTML, and this is where we want to focus.

Джей Салливан(англ. Jay Sullivan)[27]

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

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

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

Оригинальный текст (англ.)
NaCl seems to be 'yearning for the bad old days, before the web' […] Native Client is about building a new platform – or porting an old platform into the web […] it will bring in complexity and security issues, and it will take away focus from the web platform.

Хокон Виум Ли(норв. Håkon Wium Lie)[4]

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

См. также

[править |править код]

Примечания

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

Ссылки

[править |править код]
Перейти к шаблону «Google»
  • Председатель совета директоров:Эрик Шмидт
  • Директор, президент по технологиям и сооснователь:Сергей Брин
  • Главный исполнительный директор и сооснователь:Ларри Пейдж
    Материнская компания:Alphabet
Реклама
Коммуникации
ПО
Платформы
Инструменты
разработки
Публикация
Поиск (PageRank)
Тематические проекты
Закрытые проекты
См. также
Перейти к шаблону «Свободное и открытое программное обеспечение Google»
Свободное и открытое программное обеспечениеGoogle
Программное обеспечение
Приложения
Языки программирования
Фреймворки и
инструменты разработки
Операционные системы
Связанное
Источник —https://ru.wikipedia.org/w/index.php?title=Native_Client&oldid=150911824
Категории:
Скрытые категории: