The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Доступен Wasmer 5.0, инструментарий для создания приложений на базе WebAssembly

30.10.2024 08:36

Представлен выпуск проекта Wasmer 5.0, развивающего runtime для выполнения модулей WebAssembly, который можно использовать для создания универсальных приложений, способных выполняться в разных операционных системах. Wasmer также можно применять для изолированного выполнения не заслуживающих доверия блоков кода в составе обычных приложений. Код проекта написан на языке Rust и распространяется под лицензией MIT.

Возможность запуска одного приложения на разных платформах реализована через компиляцию в низкоуровневый промежуточный код WebAssembly, который может запускаться в любых ОС или встраиваться в программы на других языках программирования. Программы представляют собой легковесные контейнеры, в которых выполняется псевдокод WebAssembly. Данные контейнеры не привязаны к операционной системе и могут включать код, изначально написанный на любом языке программирования.

Для для выполнения промежуточного кода WebAssembly или его трансляции в машинный код целевой платформы предлагаются разные бэкенды:

  • Бэкенд на базе компилятора Singlepass, оптимальный для использования в блокчейнах.
  • Бэкенд на базе генератора кода Cranelift, оптимальный для использования в процессе разработки.
  • Бэкенд на базе компилятора LLVM, оптимальный для использования в рабочих внедрениях.
  • Бэкенд для запуска в web-браузере.
  • Бэкенд на базе JavaScript-движка JavascriptCore, оптимальный для использования на платформе macOS.
  • Бэкенд на базе JavaScript-движка V8, оптимальный для приложений для платформ iOS и Android.
  • Бэкенд на базе интерпретатора Wasmi, оптимальный для блокчейнов и Rust-проектов, не использующих стандартную библиотеку (nostd).
  • Бэкенд на базе runtime WAMR, оптимальный для платфлормы iOS

Приложения изолируются от основной системы в sandbox-окружении и имеют доступ только к заявленной функциональности. Для изоляции применяется механизм на основе управления возможностями - для действий с каждым из ресурсов (файлы, каталоги, сокеты, системные вызовы и т.п.) приложению должны быть даны соответствующие полномочия. Управление доступом и взаимодействие с системой обеспечивается при помощи API WASI (WebAssembly System Interface), предоставляющего программные интерфейсы для работы с файлами, сокетами и другими системными функциями.

Платформа позволяет добиться производительности выполнения приложений, близкой к выполнению родных сборок. При помощи Native Object Engine для WebAssembly-модуля можно сгенерировать машинный код, для запуска которого требуется минимальный runtime, но сохраняются все возможности sandbox-изоляции. Возможна поставка предкомпилированных программ со встроенным Wasmer. Для создания надстроек и дополнений предлагаются Rust API и Wasm-C-API.

Для запуска WebAssembly-контейнера достаточно установить в системе runtime Wasmer, который поставляется без внешних зависимостей ("curl https://get.wasmer.io -sSfL | sh"), и запустить необходимый файл ("wasmer test.wasm"). Программы распространяются в форме обычных WebAssembly-модулей, для управления которыми можно использовать пакетный менеджер WAPM. Wasmer также доступен в форме библиотеки, которую можно использовать для встраивания кода WebAssembly в программы на языках Rust, С/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir и Java.

Основные новшества Wasmer 5.0:

  • Реализована возможность использования интерпретаторов WebAssembly.
  • Добавлен экспериментальный бэкенд на базе легковесного интерпретатора Wasmi, позволяющего выполнять промежуточный код WebAssembly в окружениях с ограниченными ресурсами.
  • Добавлен экспериментальный бэкенд на базе WebAssembly runtime WAMR (WebAssembly Micro Runtime), оптимизированного для минимального потребления ресурсов и пригодного для применения на устройствах с небольшим объёмом оперативной памяти.
  • Добавлен экспериментальный бэкенд на базе JavaScript-движка v8, используемого в браузерах на кодовой базе Chromium. Основным достоинством применения бэкенда на базе V8 называется возможность использования встроенного в данный движок отладчика и инструментария для web-разработчиков, а также доступность в V8 расширенной функциональности WebAssembly, такой как обработка исключений и сборка мусора.
  • В бэкенд, использующий LLVM, добавлена экспериментальная поддержка архитектуры Loongarch64.
  • Добавлена поддержка платформы iOS, доступная при использовании бэкендов WAMR, Wasmi и V8.
  • Прекращена поддержка компилятора Emscripten.
  • Обновлены зависимости, среди которых LLVM 18, генератор кода Cranelift 27 и фреймворк rkyv 0.8.
  • Проведена оптимизация производительности. Например, при выполнении операций десериализации модулей наблюдается прирост производительности до 50%.















  1. Главная ссылка к новости (https://wasmer.io/posts/introd...)
  2. OpenNews: Опубликован Wasmer 4.0, инструментарий для создания приложений на базе WebAssembly
  3. OpenNews: Первый выпуск wasm3, быстрого интерпретатора WebAssembly
  4. OpenNews: Доступен Emscripten 3.0, компилятор из C/C++ в WebAssembly
  5. OpenNews: Доступен предварительный вариант стандарта WebAssembly 2.0
  6. OpenNews: Анонсирован язык программирования Moonbit, оптимизированный для WebAssembly
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/62137-wasmer
Ключевые слова: wasmer, webassembly
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (39) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.6, Аноним (6), 09:37, 30/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Unbound collaboration
    >Packages are limited by their languages no more. Collaborate across stacks, leverage the ecosystem and contribute your own packages.

    Линус: "Может, поспорим?"

     
     
  • 2.9, Аноним (9), 10:03, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Линус: Я - AMDшник!
     
     
  • 3.15, 12yoexpert (ok), 10:47, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    он же вроде продался эпплу и рекламирует армовские муляжи процессоров
     
     
  • 4.23, tt (??), 11:38, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    муляжи, которые нынче уделывают x86 bloatware ?
     

  • 1.7, Аноним (7), 09:49, 30/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ничего не понял. Как сделать десктопное приложение или приложение для андроид?
     
     
  • 2.8, Доброжелатель (??), 10:02, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    в браузере
     
     
  • 3.16, 12yoexpert (ok), 10:49, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    но тогда зачем оно?
     
     
  • 4.18, Аноним (18), 11:05, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Перформанс. Просто для справки реализовать функционал фигмы без васм невозможно.
     
     
  • 5.22, Аноним (22), 11:25, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ниже уже пояснил за "перформанс". Нужен перформанс - не пихайте в браузер. Не надо всякую тяжёлую гадость, особенно обфусцированную, пихать в браузер. В браузере должен исполняться исключительно необфусцированный открытый для реверс-инжиниринга cleartext. Остальным - GTFO.
     
     
  • 6.24, Аноним (-), 11:49, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Нужен перформанс - не пихайте в браузер. Не надо всякую тяжёлую гадость, особенно обфусцированную, пихать в браузер.

    А то что? (с)

    >  В браузере должен исполняться исключительно необфусцированный открытый для реверс-инжиниринга cleartext.

    Кому должен? Может даже такой закон есть?
    Почему мой великолепный cleartext должны смотреть какие-то васяны?
    Хочу и обфусцирую, я их на свой сайт не приглашал.

    >  Остальным - GTFO.

    Можешь сделать свой интернет)

     
     
  • 7.27, Аноним (27), 12:09, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Было дополнение к Фуррифоксу, которое запрещало выполнение скриптов под несвободными лицензиями.
     
     
  • 8.29, Аноним (-), 12:23, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Хм не сомневаюсь И много кто им пользуется Интернет вообще открывается Пон... текст свёрнут, показать
     
  • 8.35, Аноним (35), 12:58, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    И как свободный код противоречит wasm Никак... текст свёрнут, показать
     
  • 7.33, Аноним (33), 12:52, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Хочу и обфусцирую, я их на свой сайт не приглашал.

    Хочу - и сру на копирайт.

     
  • 6.26, Аноним (18), 12:04, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А я тебе сейчас поясню за юзабилити. Как ты блондинке дизайнеру Даш ссылку на свой супер дизайн в стороннем приложении например адоб хд? Тем более если у неё его нет? А ссылку в браузере ей дать изее лёгкого и сразу там же можно совместно работать. И перформанса как раз хватит рисовать квадраты с закругленными углами.
     
     
  • 7.40, penetrator (?), 13:28, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    ух ты а как ты передашь авто своему коллеге по СТО, если у него нет даже отвертки?

    о точно будем брать инструмент в аренду, во время заказа

    и внезапно становится понятно что нет никакой разницы, кроме неудобства

    многопользовательской работы никогда не было без браузера!? ))

     
     
  • 8.42, Аноним (-), 13:53, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    А этот коллега и не должен в нем ковыряться отверткой А только посмотреть и нап... текст свёрнут, показать
     
  • 6.34, Аноним (35), 12:57, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >В браузере должен исполняться исключительно необфусцированный открытый для реверс-инжиниринга cleartext

    Минифицированый js(а это почти все современные сайты) ничем не лучше wasm. Реверс-инженерить можно всё что угодно, хоть проприетарные бинарники под виндой.

     
     
  • 7.39, Аноним (33), 13:26, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Очень даже лучше, и реверсится на ура. Если это не виртуальная машина, скомпилированная в JS. С виртуальными машинами всегда такой ужас...
     
     
  • 8.41, Аноним (35), 13:40, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    И как же вы будете реверсить приложение на условном реакте ... текст свёрнут, показать
     
  • 4.44, Аноним (44), 13:58, 30/10/2024 Скрыто ботом-модератором     [к модератору]
  • +/
     

     ....ответы скрыты (16)

  • 1.10, Аноним (10), 10:16, 30/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    iOS же не позволяет приложению долго работать. То есть, написать можно, но работать оно не будет?
     
  • 1.11, Аноним (11), 10:17, 30/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Дано: программа с pthreads, WASI SDK, цель wasm32-wasi-threads, собран clang 20 (никаких emcc и прочего многогигового мусора, ещё он кажется вообще не для WASI) c помощью CMake (файлы тулчейна - из репозитория, файлы для сборки с помощью CMake - из другого репозитория, пришлось их немного пофиксить правда, так как они малость устарели)

    wasmer run --enable-all --mapdir .:. --enable-verifier --llvm -- ./x264.wasm --preset placebo --tune film -o ./test.264 ./test.y4m

    y4m [info]: 480x828p 1:1 @ 30/1 fps (cfr)
    x264 [error]: malloc of size 397440 failed
    Error: failed to run main module './x264.wasm'

    В wasmtime такие же результаты, как и в других рантаймах. wasmedge вообще отказывается запускать, не нравится ему импорт памяти, хотя якобы треды он поддерживает, а импорт памяти почему-то является частью спецификации тредов

    Таргет wasm32-wasi работает на всех рантаймах. Нативная сборка тоже работает.

     
     
  • 2.20, Флудер (?), 11:09, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да
     

  • 1.12, Аноним (11), 10:34, 30/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    И замечу: на этих графиках не хватает одной очень важной линии. Время исполнения программы, скомпилированной в нативный код (и ещё AOT-скомпилированный васм добавить). Не хватает намеренно: при её наличии стало бы очевидно: весь этот wasm и wasi - это просто хайп, а программы, в него скомпилированные - bloatware.

    x264 --preset medium --tune film -o ./test.264 ./test.y4m # real    0m6.409s user    0m10.440s sys     0m0.215s
    wasmedge --enable-all --dir ./:./ -- ./x264.wasm.so --preset medium --tune film -o ./test.264 ./test.y4m # real    1m35.694s user    1m34.667s sys     0m0.260s


    Проц - двухядерный, "кора дуба" и "калькулятор".
    0m6.409s/1m35.694s ≈ 0.066973896
    поскольку васмовая реализация в этом случае была однопоточной, помножим на два: 0.13
    Получается, что васмовая реализация в самом идеальном случае (мы же знаем, что в соответствии с законом Амдала 2 - это недостижимая верхняя грань, а ещё у нас всё AOT-скомпилировано, jit-компилированный вариант ещё на порядок медленнее) в 30 раз медленнее. Это мы забили на все гарантии - когда мы васм AOT-компилируем (если честно - то и jit-даже), все гарантии песочницы исчезают.

     
     
  • 2.13, Аноним (11), 10:46, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ой, извиняюсь, не в 30, а в 7. Скобки забыл.
     
     
  • 3.25, Аноним (-), 11:55, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Ну чуть-чуть ошибся, бывает))

    Но вообще, тебе не кажется что ты сравниваешь теплое с мягким?
    Нужно сравнивать не с нативным кодом, а с реализацией, которую можно получить в браузере на js.

    Потому что стояла задача именно запуска в браузере: ты не всегда можешь и еще реже хочешь устанавливать софтину локально. У тебя даже прав на это может не быть. Зато если есть браузер - ты можешь запустить софт везде.
    И это позволяет делать софт для браузера, который раньше сделать было просто невозможно из-за перформанса.

    Твое сравнение - это как грузоподъемность патриота и камаза.
    Камаз конечно круче в 30 раз, но мне вообще-то нужно чтобы тачка в подземный паркинг влазила.

     
     
  • 4.38, Аноним (33), 13:23, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Нужно сравнивать не с нативным кодом, а с реализацией, которую можно получить в браузере на js.

    Да?! WASI продвигают именно как замену десктопным бинарникам, что-то типа джавы и дотнета, только от нужных ребят (Bytecode Alliance вместо Oracle-орков и Micro$oft) - а ты мне про реализацию в браузере на JS рассказываешь.

    А на JS в действительности побыстрее будет - там нужно одно браузерное API дёрнуть, а не плясать с самокомпилированными бинарями, нужный кодек в браузере есть, в виде нативного кода. Гораздо проще, понятнее, реверсопригоднее, менее опасно (васм попахивает rowhammerом  и микроархитектурными, а также обходом песочницы).

    На десктопе есть применение этому WASM + WASI - использование в режиме эмуляции для обработки файлов, эксплуатирующих уязвимости. Так как эмулятор проверяет границы на каждый чих - то с высокой вероятностью сломается. Так как эмулятор не использует нативный код - все эксплоиты на основе нативного кода сломаются.

    Другого применения для WASI на десктопе - не вижу.

     
  • 2.14, Аноним (14), 10:46, 30/10/2024 Скрыто ботом-модератором     [к модератору]
  • –1 +/
     
  • 2.17, Аноним (-), 10:50, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Проц - двухядерный, "кора дуба" и "калькулятор".

    М... а не приходило в голову, что оно и не предполагало запуск на таком хламе?
    Не хочешь протестировать хотя бы на шестиядернике с современной архитектурой?

     
     
  • 3.19, Аноним (18), 11:09, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Джава апплеты тоже не предполагались для запуска на том железе которое тогда существовало. Первое железо на котором нормально могли работать джава апплеты появилось лет через после деприкейта джава апплетов.      
     
  • 3.21, Аноним (11), 11:14, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Хлам - это нынешняя WASM-экосистема. При AOT-компиляции васма я ожидаю производительности, соответствующей компиляции непосредственно в машинный код. Ведь что такое васм? По сути - другой синтаксис для биткода LLVM. И нативный x264 был скомпилирован именно так -- шланг в другой -flto не умеет, при -flto все объектные файлы содержат биткод, а готовый бинарник оптимизируется уже LLVMой, и это правильно.

    Коль рожа кривая - нечего на зеркало пенять.

    >Не хочешь протестировать хотя бы на шестиядернике с современной архитектурой?

    Вот ты и протестируй, а у меня другого камня нет, и не будет, я вам не Линус.

     
     
  • 4.28, Аноним (18), 12:12, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Мне кажется ты не очень понимаешь что такое кроссплатформа и зачем она нужна. То что кроссплатформа достаточно быстрая это уже успех, число пи в стотысячном знаке на ней все равно считать на будут.
     
     
  • 5.37, Аноним (33), 13:14, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Кроссплатформа - это когда под целевую платформу можно aot скомпилировать бинарник. Хочешь - из LLVM-биткода, хочешь - из исходников.
     
  • 4.31, Аноним (35), 12:49, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >По сути - другой синтаксис для биткода LLVM

    Нет. Их семантика различается. LLVM IR может делать произвольные вещи с памятью, это почти как обычный ассемблер, в то время как WASM ограничен в возможностях. Вот как человек пытался сборщик мусор и исключения к wasm прикрутить https://habr.com/ru/articles/757182/.

     
     
  • 5.36, Аноним (33), 13:13, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Если васм рантаймы там на каждую третью  операцию с памятью границы проверяют - то понятно, куда вся производительность улетучилась...

    Спасибо за ссылку на статью. Негодования автора по поводу W^X не разделяю. W^X - must have, и точка.

     

  • 1.30, Аноним (-), 12:29, 30/10/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если верить информации из наших интернетов, то WASM уже давно в проде - 96.02% браузеров его поддерживают[1] и отлично готов к запросам пользователей.

    Понятно, что всякие сидящие на фурифокс50 или третепнях оценить прогресс не смогут, но много ли таких пользователей?

    [1] caniuse.com/wasm

     
     
  • 2.32, Аноним (32), 12:52, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    у меня на 3 пне 115 фаерфокс, где мне оценить мощь сабжа?
     
     
  • 3.43, Аноним (-), 13:55, 30/10/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >  у меня на 3 пне 115 фаерфокс, где мне оценить мощь сабжа?

    "мощь" и "третий пень" в одном предложении? Серьезно?
    Ну, попробуй запусти какую-то демку. Но скорее всего ты попадешь в 4% неподдерживаемых систем.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру