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]
Разработчики 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]
качестве замены Google теперь продвигает WebAssembly.