stringtranslate.com

Собственный клиент Google

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

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

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

Альтернативой от Mozilla стал asm.js , который также позволяет компилировать приложения, написанные на C или C++ , для запуска в браузере и поддерживает предварительную компиляцию, но является подмножеством JavaScript и, следовательно, обратно совместим с браузерами, которые не поддерживают его напрямую.

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

Обзор

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

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

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

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

Native Client лицензируется в соответствии с лицензией BSD .

Native Client использует Newlib в качестве библиотеки C , но также доступен порт GNU C Library (GNU libc). [25]

Перец

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

ППАПИ

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

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

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

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

PPAPI в Firefox

Разработчики Firefox заявили в 2014 году, что они не будут поддерживать Pepper, поскольку не было полной спецификации API за пределами его реализации в Chrome, который сам по себе был разработан для использования только с движком компоновки Blink и имел частные API, специфичные для плагина Flash Player, которые не были задокументированы. [36] В октябре 2016 года Mozilla объявила, что она пересмотрела и изучает вопрос о включении Pepper API и PDFium в будущие выпуски Firefox, [37] однако никаких таких шагов предпринято не было. В июле 2017 года Adobe прекратила поддержку Flash и объявила о прекращении его поддержки в конце 2020 года. [38] К январю 2021 года Adobe Flash Player, Google Chrome, Firefox, Safari и Windows [39] получили обновления, отключающие или полностью удаляющие Flash.

Приложения

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

Прием

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

Сторонники

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

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

Недоброжелатели

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

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

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

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

Второе поколение

Второе поколение песочницы, разработанное в Google, — это gVisor . [45] [46] Он призван заменить NaCl в Google Cloud , а точнее в Google App Engine . Google также продвигает WebAssembly . [47]

Смотрите также

Ссылки

  1. ^ "Google's Native Client начинает работать в Chrome". The Register . 16 сентября 2011 г. Получено 12 марта 2016 г.
  2. ^ abc Metz, Cade (12 сентября 2011 г.). «Google Native Client: The web of the future – or the past?». The Register . Получено 17 сентября 2011 г.
  3. ^ "ZeroVM Architecture". Архивировано из оригинала 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. ^ ab "Прощай, PNaCl, привет, WebAssembly!". Блог Chromium . Получено 31 мая 2017 г.
  9. ^ "Руководство по миграции WebAssembly - Google Chrome". developer.chrome.com . Получено 20 декабря 2018 г. .
  10. ^ «Изменения в графике поддержки приложений Chrome». Блог Chromium . 10 августа 2020 г.
  11. ^ Ли, Эбнер (10 августа 2020 г.). «Google откладывает прекращение поддержки приложений Chrome на всех платформах». 9to5Google . Получено 2 октября 2021 г. .
  12. ^ "Google Native Client на Google Code" . Получено 25 апреля 2012 г.
  13. ^ davemichael (3 октября 2020 г.). "GitHub - davemichael/NaCl-Quake: Quake для собственного клиента (на основе порта SDL Quake)". GitHub .
  14. ^ «Битва за Веснот».
  15. ^ "Индекс /".
  16. ^ "Chrome Web Store - Lara Croft and the Guardian of Light". Архивировано из оригинала 8 декабря 2013 года . Получено 26 ноября 2013 года .
  17. ^ "From Dust". Архивировано из оригинала 12 марта 2016 года . Получено 24 февраля 2016 года .
  18. ^ Чен, Брэд (8 декабря 2008 г.). «Native Client: A Technology for Run Native Code on the Web». Google-code-updates.blogspot.com . Получено 25 апреля 2012 г. .
  19. ^ "Блог Chromium: Native Client приносит изолированный нативный код в приложения Chrome Web Store". Blog.chromium.org. 18 августа 2011 г. Получено 25 апреля 2012 г.
  20. ^ "Блог Google Code: Портативный собственный клиент: «вершина» скорости, безопасности и портативности». blog.chromium.org. 12 ноября 2013 г. Получено 16 марта 2014 г.
  21. ^ "Google's Native Client выходит на ARM и дальше". The H. 18 марта 2010 г. Получено 19 мая 2010 г.
  22. ^ "PNaCl: Portable Native Client Executables" (PDF) . Архивировано из оригинала (PDF) 2 мая 2012 г. Получено 25 апреля 2012 г.
  23. ^ Sehr, David; Muth, Robert; Biffle, Cliff L.; Khimenko, Victor; Pasko, Egor; Yee, Bennet; Schimpf, Karl; Chen, Brad (2010). «Адаптация изоляции сбоев программного обеспечения к современным архитектурам ЦП». 19-й симпозиум по безопасности USENIX . Получено 31 июля 2011 г.
  24. ^ ab Yee, Bennet; Sehr, David; Dardyk, Greg; Chen, Brad; Muth, Robert; Ormandy, Tavis; Okasaka, Shiki; Narula, Neha; Fullagar, Nicholas (2009). "Native Client: A Sandbox for Portable, Untrusted x86 Native Code". Симпозиум IEEE по безопасности и конфиденциальности (Окленд'09) . Получено 31 июля 2011 г.
  25. ^ "Native Client: Building". developer.chrome.com . Получено 16 марта 2014 г. .
  26. ^ «Технический обзор».[ постоянная мертвая ссылка ]
  27. ^ "Pepper Plugin API project at". Архивировано из оригинала 9 сентября 2016 года . Получено 25 апреля 2012 года .
  28. ^ "Источник Chrome: Индекс /trunk/src/ppapi". Src.chromium.org . Получено 25 апреля 2012 г. .
  29. ^ «Дорога к более безопасному, стабильному и яркому Flash». 8 августа 2012 г. Получено 10 августа 2013 г.
  30. ^ Метц, Кейд (18 июня 2010 г.). «Google крепче обнимает Adobe, объединяя Chrome-PDF». The Register . Получено 25 апреля 2012 г.
  31. ^ "Начало работы: Предыстория и основы – Проекты Chromium". Chromium.org . Получено 25 апреля 2012 г.
  32. ^ "Pepper.wiki". 24 февраля 2012 г. Получено 25 апреля 2012 г.
  33. ^ «Заметки о выпуске».
  34. ^ Метц, Кейд (13 мая 2010 г.). «Google нагревает собственный код для Chrome OS». Theregister.co.uk . Получено 25 апреля 2012 г. .
  35. ^ Энтони Лафорж (10 августа 2020 г.). «Изменения в графике поддержки приложений Chrome». Блог Chromium .
  36. ^ Збарский, Борис. "Ошибка 729481 - Поддержка API плагина "Pepper"" . Получено 15 апреля 2016 г.
  37. Metz, Cade (3 октября 2016 г.). «Project Mortar». Mozilla . Получено 30 октября 2016 г. .
  38. ^ "Flash & The Future of Interactive Content". Adobe Inc. 25 июля 2017 г. Архивировано из оригинала 2 декабря 2017 г. Получено 31 июля 2023 г.
  39. ^ Salter, Jim (4 мая 2021 г.). «Прощай, Flash снова — Microsoft делает удаление из Windows 10 обязательным». Ars Technica . Получено 1 августа 2023 г. .
  40. ^ «Игровая площадка для игры в го».
  41. ^ "Внутри Go Playground - The Go Blog". blog.golang.org . Получено 27 августа 2016 г. .
  42. ^ Остин, Чад (8 января 2011 г.). «Чад Остин: В защиту языковой демократии (или: Зачем браузеру нужна виртуальная машина)». Chadaustin.me . Получено 25 апреля 2012 г.
  43. Кармак, Джон (3 августа 2012 г.). «QuakeCon 2012». youtube.com . Получено 26 августа 2012 г. .
  44. ^ Метц, Кейд (24 июня 2010 г.). «Mozilla: Наш браузер не будет запускать собственный код». The Register . Получено 25 апреля 2012 г.
  45. ^ «Бета-версия PHP 7.2 в стандартной среде Google App Engine | Hacker News».
  46. ^ "Google/Gvisor". GitHub . 15 октября 2021 г.
  47. ^ Аврам, Абель (31 мая 2017 г.). «Google прекращает поддержку PNaCl». InfoQ . Получено 1 августа 2020 г. В качестве замены Google теперь продвигает WebAssembly.

Внешние ссылки

Примеры