![]() |
Разработчики Mozilla представили проект WASI (WebAssembly System Interface), в рамках которого ведётся работа по определению программных интерфейсов, которые можно использовать для организации взаимодействия приложений, поставляемых в формате WebAssembly, с операционной системой. Целью проекта является предоставление API, расширяющего область использования WebAssembly и позволяющего создавать на базе данной технологии обычные программы, выполняемые вне браузера, переносимые на любые платформы и демонстрирующие высокий уровень безопасности.
WASI даёт возможность из окружения для выполнения WebAssembly получить доступ к предоставляемым операционной системой функциям, таким как файлы, файловая система, сетевые сокеты, таймеры и генераторы случайных чисел. API WASI изначально развивается как не привязанный к браузерам и независящий от JavaScript/Web API, но при этом обеспечивающий должный уровень изоляции от основной системы (приложения запускаются в sandbox) и позволяющий явно определять предоставляемые приложению полномочия в стиле CloudABI и Capsicum. В WASI применяется модель безопасности на основе управления возможностями, в рамках которой программа может выполнять только заведомо разрешённые действия. По аналогии с тем, как WebAssembly ограничивает доступ на уровне импорта функций, в WASI осуществляется контроль доступа к системным возможностям. Файлы, каталоги, сокеты и другие ресурсы ассоциируются со специальным типом файловых дескрипторов (capability), а для выполнения действия с каждым из ресурсов приложению должны быть даны полномочия. Полномочия обрабатываются иерархически, т.е. предоставив доступ к каталогу, автоматически открывается и доступ ко всем файлам в нём. Так как WebAssembly является платформонезависимым вариантом языка Ассемблер, благодаря применению JIT можно добиться уровня производительности близкого к нативному коду, сохранив при этом возможность выполнения на различных аппаратных платформах и операционных системах. В настоящее время проектом предоставляется модуль wasi-core с реализацией базовых POSIX API (файлы, сокеты и т.п.), в котором пока отсутствует поддержка блокировок и асинхронного ввода/вывода. В дальнейшем планируется создание модулей с реализацией API для выполнения криптографических операций, работы с 3D-графикой, взаимодействия с датчиками, операциями с процессами (пока не поддерживается вызов fork) и обработки мультимедийных данных. В настоящее время уже доступны для тестирования прототипы следующих компонентов:
https://www.opennet.ru/opennews/pics...1553764118.png Напомним, WebAssembly во многом напоминает Asm.js, но отличается тем, что является бинарным форматом, не завязанным на JavaScript и позволяющим выполнять в браузере низкоуровневый промежуточный код, скомпилированный из различных языков программирования. Среди основных задач WebAssembly выделяется обеспечение переносимости, предсказуемость поведения и идентичности выполнения кода на разных платформах. По сравнению с JavaScript использование WebAssembly также позволяет существенно сократить размер приложений, благодаря компактному промежуточному коду, и увеличить скорость декодирования. В WebAssembly не требуется применение сборщика мусора, так как применяется явное управление памятью. |
| Время: 11:55 |