Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Google Native Client ( NaCl ) - это технология " песочницы" для запуска в " песочнице" подмножества собственного кода Intel x86 , ARM или MIPS или переносимого исполняемого файла. Он позволяет безопасно запускать собственный код из веб-браузера независимо от операционной системы пользователя , позволяя веб-приложениям работать со скоростью, близкой к исходной, что согласуется с планами Google в отношении Chrome OS . Его также можно использовать для защиты подключаемых модулей браузера и частей других приложений или полных приложений [2], таких как ZeroVM . [3]

Для того, чтобы продемонстрировать готовность технологии, 9 декабря 2011 года Google объявила о выпуске нескольких новых Chrome только для версий игр , известных своими богатыми и процессор -intensive графики , в том числе Бастион (больше не поддерживается на Chrome Web Store). NaCl запускает трехмерную графику с аппаратным ускорением (через OpenGL ES 2.0), изолированное локальное хранилище файлов, динамическую загрузку , полноэкранный режим и захват мыши . Также есть планы сделать NaCl доступным на портативных устройствах. [4] [5]

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

Альтернативой NaCl является asm.js , который также позволяет компилировать приложения, написанные на C или C ++ , для запуска в браузере (с более чем половиной собственной скорости), а также поддерживает предварительную компиляцию, но является подмножество JavaScript и, следовательно, обратно совместимое с браузерами, которые не поддерживают его напрямую. Другой альтернативой (хотя изначально она может работать на PNaCl) является WebAssembly .

12 октября 2016 года комментарий к системе отслеживания проблем Chromium показал, что команды Google Pepper и Native Client были отключены. [7] 30 мая 2017 года Google объявил о прекращении поддержки PNaCl в пользу WebAssembly . [8] Хотя изначально Google планировал удалить PNaCl в первом квартале 2018 года [8], а затем во втором квартале 2019 года [9], в настоящее время его планируется удалить в июне 2022 года (вместе с приложениями Chrome). [10]

Обзор [ править ]

Native Client - это проект с открытым исходным кодом , разрабатываемый Google . [11] На сегодняшний день Quake , [12] XaoS , Battle for Wesnoth , [13] Doom , [14] Лара Крофт и Хранитель Света , [15] From Dust , [16] и MAME , а также звук система обработки Csound , перенесена на Native Client. Собственный клиент доступен в Google Chromeвеб-браузер с версии 14 и был включен по умолчанию с версии 31, когда был выпущен Portable Native Client (PNaCl, произносится: pinnacle). [17] [18] [19]

ARM реализация была выпущена в марте 2010 года [20] x86-64 , IA-32 и MIPS также поддерживаются.

Чтобы приложение было переносимым под PNaCl, оно должно быть скомпилировано в независимое от архитектуры и стабильное подмножество байт-кода промежуточного представления LLVM . [21] Исполняемые файлы называются исполняемыми файлами PNaCl (pexes). PNaCl Toolchain создает файлы .pexe; Файлы NaCl Toolchain .nexe. Магическое число из .nexe файлов 0x7F «E» «L» «F», который является ELF . В Chrome они переводятся в исполняемые файлы, зависящие от архитектуры, чтобы их можно было запускать.

NaCl использует обнаружение и изоляцию программных сбоев для песочницы на x86-64 и ARM. [22] Реализация Native Client для архитектуры x86-32 отличается новым методом «песочницы», в котором используется редко используемое средство сегментации архитектуры x86 . [23] Собственный клиент настраивает сегменты x86, чтобы ограничить диапазон памяти, доступный для изолированного кода. Он использует верификатор кода для предотвращения использования небезопасных инструкций, например, тех, которые выполняют системные вызовы. Чтобы предотвратить переход кода к небезопасной инструкции, скрытой в середине безопасной инструкции, Native Client требует, чтобы все косвенные переходы были переходами к началу блоков, выровненных по 32 байта, и инструкциям не разрешено перебирать эти блоки. [23]Из-за этих ограничений код C и C ++ должен быть перекомпилирован для работы под Native Client, который предоставляет настраиваемые версии инструментальной цепочки GNU , в частности GNU Compiler Collection (GCC), GNU Binutils и LLVM .

Native Client находится под лицензией BSD .

Собственный клиент использует Newlib в качестве библиотеки C , но также доступен порт библиотеки GNU C (GNU libc). [24]

Перец [ править ]

NaCl обозначает поваренную поваренную соль хлорид натрия ; в качестве каламбура использовалось также название перца . Pepper API - это кроссплатформенный API с открытым исходным кодом для создания модулей Native Client. [25] Pepper Plugin API или PPAPI [26] [27] - это кроссплатформенный API для подключаемых модулей веб-браузеров, защищенных собственным клиентом, сначала основанный на NPAPI Netscape , а затем переписанный с нуля. В настоящее время он используется в Chromium и Google Chrome для включения версии Adobe Flash [28] PPAPI и встроенного средства просмотра PDF . [29]

PPAPI [ править ]

12 августа 2009 года на странице Google Code был представлен новый проект Pepper и связанный с ним Pepper Plugin API (PPAPI) [30], «набор модификаций NPAPI, чтобы сделать плагины более переносимыми и безопасными». [31] Это расширение разработано специально , чтобы облегчить реализацию внеконкурсных процесса плагина исполнения. Кроме того, цель проекта - предоставить основу для создания полностью кроссплатформенных плагинов. Рассматриваемые темы включают:

  • Единая семантика NPAPI во всех браузерах.
  • Выполнение в отдельном процессе от рендерера-браузера.
  • Стандартизируйте рендеринг с помощью процесса компоновки браузера.
  • Определение стандартизированных событий и функций 2D-растеризации.
  • Первоначальная попытка предоставить доступ к 3D-графике.
  • Реестр плагинов.

Pepper API также поддерживает Gamepads (версия 19) и WebSockets (версия 18). [32]

По состоянию на 13 мая 2010 года браузер Google с открытым исходным кодом, Chromium , был единственным веб-браузером, который использовал новую модель подключаемого модуля браузера. [33] По состоянию на 2020 год Pepper поддерживается браузерами на основе движка макетов Chrome, Chromium и Blink, такими как Opera и Microsoft Edge.

В августе 2020 года Google объявил, что поддержка PPAPI будет удалена из Google Chrome и Chromium в июне 2022 года. [34]

PPAPI в Firefox [ править ]

Mozilla Firefox заявил в 2014 году, что они не будут поддерживать Pepper, поскольку нет полной спецификации API, кроме его реализации в Chrome, который сам предназначен для использования только с механизмом макета Blink и имеет частные API, специфичные для плагина Flash Player, который не задокументированы. [35] В октябре 2016 года Mozilla объявила, что она пересмотрела и изучает возможность включения Pepper API и PDFium в будущие выпуски Firefox, [36] однако таких шагов предпринято не было.

Приложения [ править ]

Один веб-сайт [37] использует NaCL на сервере, чтобы пользователи могли экспериментировать с языком программирования Go из своих браузеров. [38]

Прием [ править ]

Некоторые группы разработчиков браузеров поддерживают технологию Native Client, а другие нет.

Сторонники [ править ]

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

Id Software «s Джон Д. Кармак хвалили Native Client на QuakeCon 2012, говоря:«если у вас есть что - то сделать в браузере, Native Client гораздо более интересно , как то , что начиналось как на самом деле чертовски умный x86 хак в пути интересно, что они могут изолировать все это в пользовательском режиме. Теперь это динамическая перекомпиляция, но то, что вы программируете на C или C ++, и оно компилируется до чего-то, что не будет вашим уровнем оптимизации -O4 для полностью нативного кода, но чертовски близко в собственный код. Вы можете делать все свои злые поиски указателей и все, что хотите, как настоящий разработчик игр ". [40]

Недоброжелатели [ править ]

Другие ИТ-специалисты более критически относятся к этой технологии «песочницы», поскольку у нее есть существенные или существенные проблемы совместимости.

Вице-президент Mozilla по продуктам Джей Салливан сказал, что Mozilla не планирует запускать собственный код внутри браузера, поскольку «Эти собственные приложения представляют собой просто маленькие черные ящики на веб-странице. [...] Мы действительно верим в HTML, и это то, на чем мы хотим сосредоточиться ». [41]

Кристофер Близзард из Mozilla раскритиковал NaCl, заявив, что собственный код не может развиваться так же, как веб-сайт, управляемый исходным кодом. Он также сравнил NaCl с технологией Microsoft ActiveX , страдающей от DLL Hell . [2]

Хокон Виум Ли (Håkon Wium Lie) , технический директор Opera, считает, что «NaCl, похоже,« тоскует по плохим старым временам, до Интернета »», и что «Native Client предназначен для создания новой платформы - или переноса старой платформы в Интернет [. ..] это вызовет сложности и проблемы с безопасностью, а также отвлечет внимание от веб-платформы ». [2]

Второе поколение [ править ]

Второе поколение песочницы, разработанной в Google, - это gVisor . [42] [43] Он предназначен для замены NaCl в Google Cloud , а точнее в Google App Engine . Google также продвигает WebAssembly . [44]

См. Также [ править ]

  • Виртуализация приложений
  • Emscripten
  • Песочница , запускающая программы Windows в песочнице
  • WebAssembly , стандарт байт-кода для веб-браузеров
  • Приложения браузера XAML (XBAP)

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

  1. ^ "Собственный клиент Google запускается в Chrome" . Реестр . 16 сентября 2011 . Проверено 12 марта +2016 .
  2. ^ a b c Мец, Кейд (12 сентября 2011 г.). "Google Native Client: Интернет будущего или прошлого?" . Реестр . Проверено 17 сентября 2011 года .
  3. ^ "Архитектура ZeroVM" . Архивировано из оригинала 8 февраля 2014 года . Проверено 16 марта 2014 года .
  4. Розенблатт, Сет (9 декабря 2011 г.). «Native Client превращает Chrome в высокопроизводительную игровую платформу» . CNET. Архивировано из оригинального 28 августа 2012 года . Проверено 9 декабря 2011 года .
  5. ^ «Блог Google Code: игры, приложения и среда выполнения входят в Native Client» . Googlecode.blogspot.com. 9 декабря 2011 . Проверено 25 апреля 2012 года .
  6. ^ «NaCl и PNaCl» .
  7. ^ "Bugs.chromium.org" . 12 октября 2016 . Проверено 12 октября +2016 .
  8. ^ a b "Прощай, PNaCl, привет, WebAssembly!" . Блог Chromium . Проверено 31 мая 2017 года .
  9. ^ "Руководство по миграции WebAssembly - Google Chrome" . developer.chrome.com . Проверено 20 декабря 2018 года .
  10. ^ «Изменения в графике поддержки приложений Chrome» . Блог Chromium . 10 августа 2020.
  11. ^ "Google Native Client на Google Code" . Проверено 25 апреля 2012 года .
  12. ^ Дэвмайкл. «GitHub - davemichael / NaCl-Quake: Quake для собственного клиента (на основе порта SDL Quake)» . GitHub .
  13. ^ «Битва за Веснот» .
  14. ^ "Индекс /" .
  15. ^ "Архивная копия" . Архивировано из оригинала 8 декабря 2013 года . Проверено 26 ноября 2013 года .CS1 maint: заархивированная копия как заголовок ( ссылка )
  16. ^ "Из пыли" . Архивировано из оригинального 12 марта 2016 года . Проверено 24 февраля +2016 .
  17. Чен, Брэд (8 декабря 2008 г.). «Собственный клиент: технология для запуска собственного кода в сети» . Google-code-updates.blogspot.com . Проверено 25 апреля 2012 года .
  18. ^ «Блог Chromium: нативный клиент переносит изолированный нативный код в приложения из Интернет-магазина Chrome» . Blog.chromium.org. 18 августа 2011 . Проверено 25 апреля 2012 года .
  19. ^ «Блог Google Code: Portable Native Client:« вершина »скорости, безопасности и портативности» . blog.chromium.org. 12 ноября 2013 . Проверено 16 марта 2014 года .
  20. ^ "Собственный клиент Google выходит за рамки ARM и выше" . H. 18 марта 2010 . Проверено 19 мая 2010 года .
  21. ^ «PNaCl: Portable Native Client Executables» (PDF) . Архивировано 2 мая 2012 года из оригинального (PDF) . Проверено 25 апреля 2012 года .
  22. ^ Sehr, Дэвид; Мут, Роберт; Biffle, Cliff L .; Хименко Виктор; Пасько, Егор; Да, Беннет; Шимпф, Карл; Чен, Брэд (2010). «Адаптация изоляции сбоев программного обеспечения к современным архитектурам ЦП» . 19-й симпозиум по безопасности USENIX . Проверено 31 июля 2011 года .
  23. ^ а б Йи, Беннет; Сер, Дэвид; Дардык, Грег; Чен, Брэд; Мут, Роберт; Орманди, Тэвис; Окасака, Шики; Нарула, Неха; Фуллагар, Николас (2009). «Собственный клиент: песочница для переносимого ненадежного собственного кода x86» . Симпозиум IEEE по безопасности и конфиденциальности (Окленд'09) . Проверено 31 июля 2011 года .
  24. ^ "Родной клиент: Строительство" . developer.chrome.com . Проверено 16 марта 2014 года .
  25. ^ «Технический обзор» .
  26. ^ «Проект Pepper Plugin API в» . Проверено 25 апреля 2012 года .
  27. ^ "Источник Chrome: индекс / trunk / src / ppapi" . Src.chromium.org . Проверено 25 апреля 2012 года .
  28. ^ «Путь к более безопасному, стабильному и яркому Flash» . 8 августа 2012 . Проверено 10 августа 2013 года .
  29. ^ Metz, Кейд (18 июня 2010). «Google крепче поддерживает Adobe благодаря слиянию Chrome и PDF» . Реестр . Проверено 25 апреля 2012 года .
  30. ^ «Начало работы: предыстория и основы - проекты Chromium» . Chromium.org . Проверено 25 апреля 2012 года .
  31. ^ "Pepper.wiki" . 24 февраля 2012 . Проверено 25 апреля 2012 года .
  32. ^ «Примечания к выпуску» .
  33. ^ Metz, Кейд (13 мая 2010). «Google нагревает нативный код для Chrome OS» . Theregister.co.uk . Проверено 25 апреля 2012 года .
  34. ^ Энтони Laforge (10 августа 2020). «Изменения в графике поддержки приложений Chrome» . Блог Chromium .
  35. Збарский, Борис. "Ошибка 729481 - Поддержка api плагина" Pepper " . Проверено 15 апреля 2016 года .
  36. Metz, Cade (3 октября 2016 г.). «Проектный миномет» . Mozilla . Проверено 30 октября 2016 года .
  37. ^ "Игровая площадка Go" .
  38. ^ "Внутри игровой площадки Го - Блог Гоу" . blog.golang.org . Проверено 27 августа 2016 года .
  39. Остин, Чад (8 января 2011 г.). «Чад Остин: в защиту языковой демократии (или: почему браузеру нужна виртуальная машина)» . Chadaustin.me . Проверено 25 апреля 2012 года .
  40. Кармак, Джон (3 августа 2012 г.). «QuakeCon 2012» . youtube.com . Проверено 26 августа 2012 года .
  41. ^ Metz, Кейд (24 июня 2010). «Mozilla: наш браузер не будет запускать собственный код» . Реестр . Проверено 25 апреля 2012 года .
  42. ^ https://news.ycombinator.com/item?id=17810591
  43. ^ https://github.com/google/gvisor
  44. Аврам, Авель (31 мая 2017 г.). «Google прекращает поддержку PNaCl» . InfoQ . Дата обращения 1 августа 2020 . В качестве замены Google теперь продвигает WebAssembly.

Внешние ссылки [ править ]

  • Официальный сайт , Google Project (срок действия истек, проект перемещен)
  • Официальный сайт , разработчики
  • Google I / O 2013 - Знакомство с Portable Native Client (PNaCl) на YouTube
  • Google I / O 2009 Native Code for Compute Intensive Web Apps on YouTube - Технический доклад на Google I / O 2009
  • Список проектов OSS, перенесенных на Native Client
  • Исходный код собственного клиента в Git

Примеры [ править ]

  • Складной @ дома
  • Примеры PNaCl (работает в Chrome 31+, PNaCl, т.е. установка не требуется)
  • Галерея SDK для собственного клиента
  • torapp.info , векторный редактор, особенно мощный для защищенной печати (не PNaCl)
  • NACLBox , порт DOSBox для собственного клиента (PNaCl)
  • SodaSynth , синтезатор для Native Client (не PNaCl)
  • pnacl-amiga-emulator , порт ОАЭ , эмулятор Amiga 500
  • Abadía del crimen , перенос SDL-версии Vigasoco (римейк La Abadía del Crimen ) на собственный клиент (PNaCl)
  • Bennugd , перенос примеров видеоигр Bennugd на собственный клиент (PNaCl)