Slide 1

Slide 1 text

1 Why should I care about WebAssembly? Adrian Cole OSS Engineer

Slide 2

Slide 2 text

“WebAssembly was invented to beat JavaScript in terms of performance and naming confusion. 2

Slide 3

Slide 3 text

WebAssembly in the browser is controlled by javascript 3 javascript html css webassembly VM module module WebAssembly is JavaScript’s buddy code in another language!

Slide 4

Slide 4 text

WebAssembly’s core specification is usable outside the browser 4 golang runtime module WebAssembly can be your buddy, too! code in another language! WASI module wazero.io

Slide 5

Slide 5 text

WebAssembly is often an implementation detail of plugins 5 thing binary Using WebAssembly might look more like this.. plugin code in another language! thing SDK plugin.wasm thing yaml

Slide 6

Slide 6 text

Hype check! Only the core is a Web Standard. Interop and good execution require more. Coding for WebAssembly is not easy, even in your favorite language! WebAssembly is not the only way to do extensibility or fast startup 6 "WebAssembly aims to execute at native speed", but your mileage will vary WebAssembly is not a "write once, run anywhere" panacea

Slide 7

Slide 7 text

Missing links.. things about WebAssembly not everyone gets 7

Slide 8

Slide 8 text

WebAssembly is Web Biased WebAssembly is a Web standard. Two of its specs are around browser use. Features are acceptable if used by at least two browsers. Its virtual stack machine and bytecode formats are used outside the browser. 8

Slide 9

Slide 9 text

WebAssembly is not Assembly WebAssembly defines a virtual stack machine with instructions similar to real hardware. Common hardware are register machines, not stack machines, and their assembly code is architecture specific. 9

Slide 10

Slide 10 text

A WebAssembly Module is a library or application binary 10 ● Wasm is bytecode, not a package or image format ● WebAssembly is a compile target for a possibly constrained language ● WebAssembly has no standard library programming WebAssembly is different

Slide 11

Slide 11 text

WebAssembly is a sandbox, architecture that cooperates with its host via shared memory, globals and functions 11 ● no capabilities besides number crunching, more more is often needed ● WASI are function imports for I/O, time, random numbers, ENV, etc ● When acting like an entrypoint, it is using WASI WebAssembly is a coprocessor

Slide 12

Slide 12 text

See also.. things like WebAssembly you already know 12

Slide 13

Slide 13 text

13 ● Oracle JCP ● Dominates the backend ● Language bias. Ex field instructions ● Other languages share object model, GC, stdlib ● W3C Working Group ● Dominates the browser ● Hardware bias. Ex SIMD instructions ● Other languages bring their own object model, GC, stlib Virtual Stack Machines

Slide 14

Slide 14 text

14 ● Images built with Dockerfile instructions ● OS-layer host ● containers shouldn’t see their host ● Binaries built by language compiler ● Application-layer host ● wasm often use host hooks Sandboxes

Slide 15

Slide 15 text

15 ● commodity integration ● maybe testable ● latency causing, can cause outages ● hit the ground running ● deep integration ● testable ● low latency, can handle partitions ● experts only Remote APIs (Webhooks, gRPC, OpenAPI, etc.)

Slide 16

Slide 16 text

Examples in practice A couple ways WebAssembly is used in Cloud Native architecture 16

Slide 17

Slide 17 text

Add your own library code to envoy or another proxy without custom builds ● alternative to DSLs and custom builds to manipulate HTTP ● istio (go) configures and distribute proxy-plugins ● envoy is the wasm runtime (v8 c++) ● ABI is proxy-wasm 17 HTTP Proxy Extension envoyproxy.io v8.dev github.com/proxy-wasm/spec

Slide 18

Slide 18 text

Implement your own admission policies or re-use those made by others. 18 ● kubewarden validates incoming k8s requests with wasm ● controller (go) integrates with k8s and configures ● policy evaluation rust+wasmtime. ● ABI is based on waPC k8s dynamic admission controller kubewarden.io wasmtime.dev wapc.io

Slide 19

Slide 19 text

Extend a security scanner without changing its code 19 ● Trivy modules allow custom vulnerability detection, or custom severities. ● Trivy (go) downloads (OCI), configures and executes policy modules ● wazero is the runtime vulnerability and misconfiguration scanner aquasecurity.github.io/trivy wazero.io

Slide 20

Slide 20 text

Why do we care? The title of this presentation is about this, right?! 20

Slide 21

Slide 21 text

Serverless, Service Mesh, Event Driven ● Wasm can decouple language support from “official lists” ● Extend your service mesh control and data plane ● Is fast start a game changer? 21

Slide 22

Slide 22 text

Developer tools, Delivery, Observability & Monitoring ● Programming in WebAssembly is more constrained than a natural language. What do you do about it? ● How do you plan to distribute or sign wasm? ● Do you know what’s happening inside the Wasm? 22

Slide 23

Slide 23 text

DevOps and Production ● Can you share a model between frontend and backend? ● How does compiling to wasm effect your pipeline? ● Host functions and cooperation can create coupling 23

Slide 24

Slide 24 text

There’s a place for you to start learning about WebAssembly relevantly 24 ● Mesh already uses wasm, so you can practice ● Many projects use an SDK approach to enable success ● WebAssembly has a vibrant Spec and OSS ecosystem Closing thoughts

Slide 25

Slide 25 text

No content