Slide 1

Slide 1 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Christian Weyer Co-Founder & CTO @christianweyer

Slide 2

Slide 2 text

§ Technology catalyst § AI-powered solutions § Pragmatic end-to-end architectures § Microsoft Regional Director § Microsoft MVP for Developer Technologies & Azure ASPInsider, AzureInsider § Google GDE for Web Technologies [email protected] @christianweyer https://www.thinktecture.com WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Christian Weyer Co-Founder & CTO @ Thinktecture AG 2

Slide 3

Slide 3 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Our journey today 3 Intro Web Compute Wrap-Up .NET

Slide 4

Slide 4 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Intro 4

Slide 5

Slide 5 text

WebAssembly (Wasm) is a § secure § fast § portable - stack-based execution environment (aka virtual machine), - for running applications by executing - low-level sandboxed bytecode WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados What is WebAssembly? 5

Slide 6

Slide 6 text

Server Server WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Why WebAssembly? Everything, everywhere, by everyone – securely 6 Origins Current developments Future Web Web Web Cloud Cloud Microcontroller Extensibility Extensibility Bare metal Edge

Slide 7

Slide 7 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Web 7

Slide 8

Slide 8 text

§ The browser evolved to a smart client application platform § Browser APIs (file system access, clipboard, sharing data etc.) § Runs on (almost) every platform § Handling updates is easy (and cheap) § Download new version from the server WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Web as a platform for ubiquitous client applications 8

Slide 9

Slide 9 text

§ Native code - fast, efficient, and portable § Low-level bytecode for the web § No plugins needed § Standards and specifications through W3C § Uses existing browser sandbox features § Use native code to run inside the browser, in a secure environment § Interoperability via JavaScript for accessing browser APIs WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados WebAssembly in the browser 9

Slide 10

Slide 10 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados 10 https://caniuse.com/?search=WebAssembly

Slide 11

Slide 11 text

11 WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Wasm & JS architecture (simplified) Compiler Parser JIT Web APIs (DOM, IndexedDb, File Storage etc.) Browser JavaScript (.js) HTML (.html) Inline JS JS Runtime WebAssembly (.wasm)

Slide 12

Slide 12 text

§ Barebones § WebAssembly text Format (WAT) § WebAssembly Binary Toolkit § JS bridge § HTML page § Alternatives § Rust, FTW! § Many other programming languages WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados “Hello Wasm!” in browser 12

Slide 13

Slide 13 text

Hello Wasm in browser - with WAT WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados DEMO 13

Slide 14

Slide 14 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Major scenarios for WebAssembly in the browser 14 Migrate native code (like desktop applications) to the web Augment or speed up web applications

Slide 15

Slide 15 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Migrating native code to the browser (large C++ codebase) 15

Slide 16

Slide 16 text

§ Video games § Music streaming § Video editing § 3D rendering § Encryption § Image recognition/ processing § Running simulations § Neural networks WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Calculation-intensive use cases 16

Slide 17

Slide 17 text

Wasm module with Rust in Angular SPA WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados DEMO 17

Slide 18

Slide 18 text

Offline Web-based Generative AI with LLMs, WebGPU & Wasm WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados DEMO 18

Slide 19

Slide 19 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Compute 19

Slide 20

Slide 20 text

§ Size § Compared to other distributables (containers | VMs), Wasm is super small § Speed § Wasm modules are bootstrapped in “no time” and are fast at runtime § Resource utilization § With same compute power, more applications can be executed § Security § Wasm modules are isolated and every module can have dedicated permissions WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados WebAssembly outside the browser – ubiquitous compute 20

Slide 21

Slide 21 text

§ Enabling Wasm in a Cloud-native world § WASI (WebAssembly System Interface) provides standardized system calls to sandboxed Wasm code § WASI offers capability-based isolation § WASI is platform-agnostic: run Wasm applications on any WASI-compliant platform (device, OS, CPU arch) § WASI offers containerization on the next level WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados WASI 21 https://twitter.com/solomonstre/status/1111004913222324225

Slide 22

Slide 22 text

§ Host infrastructure for executing Wasm applications leveraging APIs specified and provided by WASI § Handle system calls made by Wasm modules and delegate them to the underlying platform, e.g.: § File access § Network access § Environment variables § WASI runtime examples § wasmtime § wasmer § WebAssembly Micro Runtime (WAMR) WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados WASI runtimes 22

Slide 23

Slide 23 text

Hello WASI with Rust and wasmtime WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados DEMO 23

Slide 24

Slide 24 text

§ No infrastructure management § Speed of Wasm allows scale-down to 0 § No impact on request performance § Notable Serverless Wasm platforms today § Fermyon § Spin & Fermyon Cloud § Microsoft is experimenting in Azure § Currently in AKS - not really serverless, yet WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Serverless WebAssembly with WASI 24

Slide 25

Slide 25 text

Serverless HTTP API with Spin & WASI WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados DEMO 25

Slide 26

Slide 26 text

§ Current milestone (Jan 2024), based on § WIT IDL § Component Model § New APIs § wasi-cli § wasi-io § wasi-clocks § wasi-random § wasi-filesystem § wasi-sockets § wasi-http WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados WASI Preview 2 – aka WASI 0.2 26

Slide 27

Slide 27 text

§ Addresses lack of module composition § Interface types, canonical ABI (application binary interface), component linking mechanism § Package & reuse code without duplication & static linking § Enables inter-component & inter-module communication WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados WebAssembly Component Model 27 https://raw.githubusercontent.com/WebAssembly/component-model/main/design/mvp/examples/images/shared-everything-dynamic-linking.svg

Slide 28

Slide 28 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados .NET 28

Slide 29

Slide 29 text

§ .NET went live in 2002 § Desktop and single servers were dominating § .NET wants and needs to be ready for modern distributed Cloud-native software solutions § Original .NET Core was one step into that direction § .NET has different runtime form factors § Including WebAssembly – for ubiquitous execution WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados .NET in 2024 29

Slide 30

Slide 30 text

§ .NET’s current Wasm support builds on Mono § Relies on emscripten § Creates .NET assemblies & interprets them on .NET runtime compiled to Wasm § AOT mode enables ahead-of-time compilation § .NET-compiled Wasm & JS interop § Take your C# / .NET code into the browser § Integrate it with any JS code in the browser, e.g. JS SPA frameworks § Blazor WebAssembly § Build C#- / .NET-based SPAs with Razor components WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados .NET & WebAssembly - browser 30

Slide 31

Slide 31 text

Blazor WebAssembly - File – New – Project… WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados DEMO 31

Slide 32

Slide 32 text

§ wasmtime-dotnet lets us use Wasm modules in .NET § .NET WASI SDK (experimental, archived) § Console and ASP.NET support § .NET 8 WASI experimental workload § Console support § .NET NativeAOT-LLVM (very experimental today) § NativeAOT can make .NET binaries smaller & faster § Future Wasm support could be based on NativeAOT, in addition to Mono WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados .NET & WebAssembly – WASI 32

Slide 33

Slide 33 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados DEMO 33 WASI with .NET § Console app § ASP.NET Core app § Spin with .NET § [Something crazy]

Slide 34

Slide 34 text

§ .NET code can run other .NET code in an isolated environment with WASI § Create IsolatedRuntime instances § Each is a WebAssembly sandbox built with dotnet-wasi-sdk and running on Wasmtime § Each has completely separate memory space, no direct access to the host machine's disk/network/OS/etc. § Make .NET calls into IsolatedRuntime instances § Either create IsolatedObject instances within those runtimes, then invoke their methods - or call lambda method directly § Pass/capture/return arbitrary values across boundary - will be serialized via MessagePack WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Isolating code in .NET 34

Slide 35

Slide 35 text

Isolating code in .NET with WASI WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados DEMO 35

Slide 36

Slide 36 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Wrap-Up 36

Slide 37

Slide 37 text

§ Secure, fast, portable “write once, run anywhere” § A compiler target, in the end § Also, for .NET developers (but… ⌛) § A lot of things are still moving, though § Specifications & standards § Technologies § Developer tooling § .NET embraces Wasm & WASI (party experimental) – make yourself familiar today & think about possibilities WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Wasm & WASI will be big for ubiquitous computing 🙌 37 Server Future Web Cloud Microcontroller Extensibility Bare metal Edge

Slide 38

Slide 38 text

WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados … one more thing … 38

Slide 39

Slide 39 text

Thank you! Christian Weyer https://thinktecture.com/christian-weyer Demos: https://github.com/thinktecture-labs/dotnet-wasm-wasi-samples 39

Slide 40

Slide 40 text

§ Specifications, Standards § https://github.com/WebAssembly/proposals § https://webassembly.org/roadmap/ § https://github.com/WebAssembly/WASI/blob /main/Proposals.md § WebAssembly Binary Toolkit § https://github.com/WebAssembly/wabt § Web-LLM § https://mlc.ai/web-llm/ § WASI § https://wasi.dev/ § https://github.com/WebAssembly/WASI/blob /main/preview2/README.md § WebAssembly Component Model § https://component- model.bytecodealliance.org/ § Fermyon Spin § https://www.fermyon.com/spin § Wasmtime .NET § https://github.com/bytecodealliance/wasmti me-dotnet § .NET Form Factors § https://github.com/dotnet/designs/blob/main /accepted/2020/form- factors.md#webassembly § .NET WASI Workload § https://devblogs.microsoft.com/dotnet/exten ding-web-assembly-to-the-cloud/ § .NET WASI support tracking § https://github.com/dotnet/runtime/issues/65 895 WASM, WASI, WTF? WebAssembly everywhere 101 – for .NET aficionados Links 40