https://webassembly-summit.org/
https://www.youtube.com/watch?v=IBZFJzGnBoU
- the missing functionality alongside WASI and Interface Types is something that provides "capability-based security".
- Delegation of permissions to propagate down transitive dependencies
- plan to use fine-grain form of per-module virtualization
- A "WebAssembly nanoprocess" is just wasm, but follows a particular pattern.
- Build dependency trees of isolated packages, each wrapped in a nanoprocess
- Principle of Least Authority
- This is a pattern and set of conventions that we need to bake into our tools
- ByteCode Alliance is building tools to make it easier to integrate these patterns
So. Not super new. I just missed didn't actually read this stuff when ByteCode Alliance was announced:
- https://hacks.mozilla.org/2019/11/announcing-the-bytecode-alliance/
- https://news.ycombinator.com/item?id=21515725
- https://www.reddit.com/r/rust/comments/dvs9od/wasm_nanoprocesses_and_rust_how/
https://www.youtube.com/watch?v=_lLqZR4ufSI
- C/C++ traditionally doesn't try to optimize for small builds
- libc is often packed in modules
- Binaryen's wasm-opt can help optimize wasm file size. Usually ~20% smaller
- Emscripten, wasm-pack, AssemblyScript run this for you
- Otherwise
wasm-opt input.wasm -o output.wasm -O
- Web App: https://webassembly.github.io/binaryen/shrink.html
- C/C++ stuff to consider disabling
- -fno-exceptions
- -fno-rtti
- C++ virtual calls break dead-code elimination
- In general, prefer simple C over C++ standard lib
- With Emscripten, consider using emmalloc over dlmalloc (-s MALLOC=emmalloc), which is 1/3 the size
- Rust
- dynamic dispatch inhibit DCE
- You can consider no_std
- Go. The full runtime is 2MB, so use TinyGo instead
- AssemblyScript generally integrates best practices
- Wasm won't kill JS
- Call to arms to get Wasm to the point of Adobe Flash deployment
https://www.youtube.com/watch?v=1v4wPoMskfo
- General Overview of Apple's JIT compilers in Safari / WebKit
- Two-tier JIT. Added Interpreter in front.
- Chiptunes Synth stuff like the Amiga...
- https://petersalomonsen.com/webassemblymusic/livecodev2/?gist=a74d2d036b3ecaa01af4e0f6d03ae7c4
- Wasm Micro Runtime - https://github.com/bytecodealliance/wasm-micro-runtime
- Specialized Unikernels.. Discussed Unikraft.
- WaMR has been ported to Unikraft. Showed video running on Pi3. ~400kb with graphics, network stack, pthread-embedded, libc
- Wasm3 - "The fastest WebAssembly Interpreter" written in C. https://github.com/wasm3/wasm3
- Call to arms to compile "mosquitto", "libcoap" reference implementations to Wasm
- Author of "Programming WebAssembly with Rust" - https://www.oreilly.com/library/view/programming-webassembly-with/9781680506846/
- Discussion of the sandboxing properties of Wasm for backend applications by someone that doesn't like browsers
- Low Level Runtimes - https://github.com/appcypher/awesome-wasm-runtimes
- "Mid Level" Runtimes: RPC - https://docs.rs/wapc/0.2.1/wapc/, https://crates.io/crates/wascap
- "High Level" Runtimes - Wasm-based Actor System: https://wascc.dev/
- Several demos showing advantages of Wasm over containerized distributed systems
- "WebAssembly is the future of distributed computing"
https://www.youtube.com/watch?v=rGhasYrH5Vo
- Wikipedia polyfills video on certain browsers with Wasm. 🤔
- Interesting history lesson on patents and licensing on media formats in open-source browsers
- Discussion of SIMD vector ops
- Issue is the combinatorial explosion of build options for threads, SIMD, etc., especially for companies with a generous browser support matrix
- Story of Wasm, getting the MVP
- Proposals, etc.
- Reference Types, SOIL Initiative
- Wasm C API. https://github.com/WebAssembly/wasm-c-api
- wasi - wix
Videos: https://www.youtube.com/watch?v=WZp0sPDvWfw&feature=youtu.be