Собственный клиент Google
Разработчик(и) | Гугл , другие |
---|---|
Первоначальный выпуск | 16 сентября 2011 г [1] |
Стабильная версия | SDK: Pepper 45/10 июля 2015 г Клиенты: такие же, как Google Chrome. |
Репозиторий | |
Написано в | С , С++ |
Операционная система | Windows , Linux , macOS , ChromeOS |
Платформа | x86 , ARM , MIPS |
Преемник | Веб-сборка |
Тип | Песочница в веб-браузерах для нативного кода |
Лицензия | Новый БСД |
Веб-сайт | разработчик |
Google Native Client ( NaCl ) — это устаревшая технология изолированной программной среды, позволяющая запускать в изолированной программной среде либо подмножество собственного кода Intel x86 , ARM или MIPS , либо переносимый исполняемый файл. Он позволяет безопасно запускать собственный код из веб-браузера пользователя независимо от операционной системы , позволяя веб-приложениям работать со скоростью, близкой к исходной, что соответствует планам Google в отношении ChromeOS . Его также можно использовать для защиты плагинов браузера и частей других приложений или полных приложений. [2] например, ZeroVM . [3]
Чтобы продемонстрировать готовность технологии, 9 декабря 2011 года Google объявил о доступности нескольких новых версий игр Chrome, известных своей богатой и ресурсоемкой только для графикой , включая Bastion (больше не поддерживается в Интернет-магазине Chrome ). 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 , Битва за Веснот , [14] Рок , [15] Лара Крофт и Хранитель Света , [16] Из пыли , [17] и MAME , а также система обработки звука Csound были портированы на Native Client. Native Client доступен в веб-браузере Google Chrome с версии 14 и включен по умолчанию с версии 31, когда был выпущен Portable Native Client (PNaCl, произносится: вершина). [18] [19] [20]
Реализация ARM была выпущена в марте 2010 года. [21] x86-64 , IA-32 и MIPS Также поддерживались .
Для переносимого запуска приложения под PNaCl его необходимо скомпилировать в независимое от архитектуры и стабильное подмножество LLVM промежуточного представления байт-кода . [22] Исполняемые файлы называются исполняемыми файлами PNaCl (пексами). PNaCl Toolchain создает файлы .pexe; Файлы .nexe NaCl Toolchain. Магическое число файлов .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 , в частности GNU Compiler Collection (GCC), GNU Binutils и LLVM .
Native Client лицензируется по лицензии BSD .
Native Client использует Newlib в качестве библиотеки C порт библиотеки GNU C (GNU libc). , но также доступен [25]
Перец
[ редактировать ]NaCl означает хлорид натрия , поваренную соль ; в качестве каламбура название перца использовалось и . Pepper API — это кроссплатформенный API с открытым исходным кодом для создания модулей Native Client. [26] API плагина Pepper или PPAPI [27] [28] Netscape — это кросс-платформенный API для плагинов веб-браузера, защищенных Native Client, сначала основанный на NPAPI , а затем переписанный с нуля. Он использовался в Chromium и Google Chrome для включения PPAPI-версии Adobe Flash. [29] и встроенный просмотрщик PDF . [30]
ППАПИ
[ редактировать ]12 августа 2009 года на странице Google Code был представлен новый проект Pepper и связанный с ним API плагина Pepper (PPAPI). [31] «набор модификаций NPAPI, чтобы сделать плагины более портативными и безопасными». [32] Это расширение разработано специально для упрощения реализации внепроцессного выполнения плагинов. Кроме того, цели проекта — предоставить основу для создания полностью кроссплатформенных плагинов. Рассматриваемые темы включают:
- Единая семантика для NPAPI во всех браузерах.
- Выполнение в отдельном процессе от рендерера-браузера.
- Стандартизируйте рендеринг с помощью процесса композитинга браузера.
- Определение стандартизированных событий и функций растрирования 2D.
- Первоначальная попытка предоставить доступ к 3D-графике.
- Реестр плагинов.
Pepper API также поддерживает геймпады (версия 19) и WebSockets (версия 18). [33]
По состоянию на 13 мая 2010 г. [update]Браузер Google с открытым исходным кодом Chromium был единственным веб-браузером, который использовал новую модель подключаемого модуля браузера. [34] По состоянию на 2020 год Pepper поддерживается браузерами на основе механизмов компоновки Chrome, Chromium и Blink, такими как Opera и Microsoft Edge.
В августе 2020 года Google объявил, что поддержка PPAPI будет удалена из Google Chrome и Chromium в июне 2022 года. [35]
PPAPI в Firefox
[ редактировать ]В 2014 году разработчики Firefox заявили, что они не будут поддерживать 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 с технологией Microsoft ActiveX , пораженной DLL Hell . [2]
Хокон Виум Ли , технический директор Opera, считал, что «NaCl, похоже, «тоскует по старым плохим временам, до появления Интернета»», и что «Native Client — это создание новой платформы или перенос старой платформы в Интернет [. ..] это создаст сложности и проблемы с безопасностью, а также отвлечет внимание от веб-платформы». [2]
Второе поколение
[ редактировать ]Второе поколение песочницы, разработанное в Google, — gVisor . [45] [46] Он призван заменить NaCl в Google Cloud , точнее в Google App Engine . Google также продвигает WebAssembly . [47]
См. также
[ редактировать ]- Виртуализация приложений
- Эмскрипты
- Sandboxie , запуск программ Windows в песочнице.
- WebAssembly , стандарт байт-кода для веб-браузеров.
- Браузерные приложения XAML (XBAP)
Ссылки
[ редактировать ]- ^ «Нативный клиент Google доступен в Chrome» . Регистр . 16 сентября 2011 года . Проверено 12 марта 2016 г.
- ^ Jump up to: а б с Мец, Кейд (12 сентября 2011 г.). «Google Native Client: сеть будущего или прошлого?» . Регистр . Проверено 17 сентября 2011 г.
- ^ «Архитектура ZeroVM» . Архивировано из оригинала 8 февраля 2014 года . Проверено 16 марта 2014 г.
- ^ Розенблатт, Сет (9 декабря 2011 г.). «Native Client превращает Chrome в высококлассную игровую платформу» . CNET. Архивировано из оригинала 28 августа 2012 года . Проверено 9 декабря 2011 года .
- ^ «Блог Google Code: игры, приложения и среды выполнения теперь доступны в Native Client» . Googlecode.blogspot.com. 9 декабря 2011 года . Проверено 25 апреля 2012 г.
- ^ «NaCl и PNaCl» .
- ^ «Bugs.chromium.org» . 12 октября 2016 г. Проверено 12 октября 2016 г.
- ^ Jump up to: а б «Прощай, PNaCl, здравствуй, WebAssembly!» . Блог Хрома . Проверено 31 мая 2017 г.
- ^ «Руководство по миграции WebAssembly — Google Chrome» . разработчик.chrome.com . Проверено 20 декабря 2018 г.
- ^ «Изменения в графике поддержки приложений Chrome» . Блог Хрома . 10 августа 2020 г.
- ^ Ли, Абнер (10 августа 2020 г.). «Google откладывает прекращение поддержки приложений Chrome на всех платформах» . 9to5Google . Проверено 2 октября 2021 г.
- ^ «Нативный клиент Google в Google Code» . Проверено 25 апреля 2012 г.
- ^ Дэвемайкл (3 октября 2020 г.). «GitHub — davemichael/NaCl-Quake: Quake для собственного клиента (на основе порта Quake SDL)» . Гитхаб .
- ^ «Битва за Веснот» .
- ^ «Индекс /» .
- ^ «Интернет-магазин Chrome — Лара Крофт и Хранитель Света» . Архивировано из оригинала 8 декабря 2013 года . Проверено 26 ноября 2013 г.
- ^ «Из праха» . Архивировано из оригинала 12 марта 2016 года . Проверено 24 февраля 2016 г. .
- ^ Чен, Брэд (8 декабря 2008 г.). «Нативный клиент: технология запуска собственного кода в Интернете» . Google-code-updates.blogspot.com . Проверено 25 апреля 2012 г.
- ^ «Блог Chromium: Native Client добавляет изолированный нативный код в приложения Интернет-магазина Chrome» . Блог.chromium.org. 18 августа 2011 года . Проверено 25 апреля 2012 г.
- ^ «Блог Google Code: Портативный собственный клиент: «вершина» скорости, безопасности и переносимости» . blog.chromium.org. 12 ноября 2013 года . Проверено 16 марта 2014 г.
- ^ «Нативный клиент Google выходит за рамки ARM» . Х. 18 марта 2010 г. Проверено 19 мая 2010 г.
- ^ «PNaCl: переносимые исполняемые файлы собственного клиента» (PDF) . Архивировано из оригинала (PDF) 2 мая 2012 года . Проверено 25 апреля 2012 г.
- ^ Сер, Дэвид; Мут, Роберт; Биффл, Клифф Л.; Хименко Виктор; Пасько, Егор; Да, Беннет; Шимпф, Карл; Чен, Брэд (2010). «Адаптация изоляции ошибок программного обеспечения к современным архитектурам ЦП» . 19-й симпозиум USENIX по безопасности . Проверено 31 июля 2011 г.
- ^ Jump up to: а б Да, Беннет; Сер, Дэвид; Дардик, Грег; Чен, Брэд; Мут, Роберт; Орманди, Тэвис; Окасака, Сики; Нарула, Неха; Фуллагар, Николас (2009). «Родной клиент: песочница для переносимого, ненадежного собственного кода x86» . Симпозиум IEEE по безопасности и конфиденциальности (Окленд, 2009 г.) . Проверено 31 июля 2011 г.
- ^ «Родной клиент: Строительство» . разработчик.chrome.com . Проверено 16 марта 2014 г.
- ^ «Технический обзор» . [ постоянная мертвая ссылка ]
- ^ «Проект API плагина Pepper» . Архивировано из оригинала 9 сентября 2016 года . Проверено 25 апреля 2012 г.
- ^ «Источник Chrome: индекс /trunk/src/ppapi» . Сайт chromium.org . Проверено 25 апреля 2012 г.
- ^ «Путь к более безопасному, стабильному и яркому Flash» . 8 августа 2012 года . Проверено 10 августа 2013 г.
- ^ Мец, Кейд (18 июня 2010 г.). «Google сильнее обнимает Adobe благодаря слиянию Chrome-PDF» . Регистр . Проверено 25 апреля 2012 г.
- ^ «Начало работы: предыстория и основы – проекты Chromium» . Хром.орг . Проверено 25 апреля 2012 г.
- ^ «Пеппер.вики» . 24 февраля 2012 года . Проверено 25 апреля 2012 г.
- ^ «Примечания к выпуску» .
- ^ Мец, Кейд (13 мая 2010 г.). «Google нагревает нативный код Chrome OS» . Thereregister.co.uk . Проверено 25 апреля 2012 г.
- ^ Энтони Лафорж (10 августа 2020 г.). «Изменения в графике поддержки приложений Chrome» . Блог Хрома .
- ^ Збарский Борис. «Ошибка 729481 — Поддержка API плагина Pepper» . Проверено 15 апреля 2016 г.
- ^ Мец, Кейд (3 октября 2016 г.). «Проект Миномет» . Мозилла . Проверено 30 октября 2016 г.
- ^ «Flash и будущее интерактивного контента» . Adobe Inc. , 25 июля 2017 г. Архивировано из оригинала 2 декабря 2017 г. Проверено 31 июля 2023 г.
- ^ Солтер, Джим (4 мая 2021 г.). «Еще раз до свидания, Flash — Microsoft делает удаление из Windows 10 обязательным» . Арс Техника . Проверено 1 августа 2023 г.
- ^ «Игровая площадка Го» .
- ^ «Внутри игровой площадки для го — блог о го» . blog.golang.org . Проверено 27 августа 2016 г.
- ^ Остин, Чад (8 января 2011 г.). «Чад Остин: В защиту языковой демократии (или: Зачем браузеру виртуальная машина)» . Чадаустин.me . Проверено 25 апреля 2012 г.
- ^ Кармак, Джон (3 августа 2012 г.). «КвейкКон 2012» . youtube.com . Проверено 26 августа 2012 г.
- ^ Мец, Кейд (24 июня 2010 г.). «Mozilla: Наш браузер не запускает собственный код» . Регистр . Проверено 25 апреля 2012 г.
- ^ «Бета-версия PHP 7.2 в стандартной среде Google App Engine | Hacker News» .
- ^ «Гугл/Гвизор» . Гитхаб . 15 октября 2021 г.
- ^ Аврам, Авель (31 мая 2017 г.). «Google прекратит поддержку PNaCl» . ИнфоQ . Проверено 1 августа 2020 г.
В качестве замены Google теперь продвигает WebAssembly.
Внешние ссылки
[ редактировать ]- Официальный сайт
- «Проблемы — родной клиент» . bugs.chromium.org . Проверено 2 июля 2022 г.
- Google I/O 2013 – введение в портативный собственный клиент (PNaCl) на YouTube
- Google I/O 2009 Собственный код для веб-приложений с интенсивными вычислениями на YouTube – Технический доклад на Google I/O 2009
- Список проектов OSS, портированных на Native Client
- Исходный код собственного клиента в Git
Примеры
[ редактировать ]- Складной@дома
- Примеры PNaCl (работает в Chrome 31+, PNaCl, т.е. установка не требуется)
- Галерея собственных клиентских SDK
- torapp.info , векторный редактор, особенно мощный для защищенной печати (не PNaCl)
- NACLBox , порт DOSBox на Native Client (PNaCl)
- SodaSynth , синтезатор для Native Client (не PNaCl)
- Abadía del Crimen , порт SDL-версии Vigasoco (римейк La Abadía del Crimen ) на Native Client (PNaCl)
- Bennugd , порт примеров видеоигр Bennugd на Native Client (PNaCl)