Chasing Memory Bugs through V8 and WebAssembly
Blog post from StackBlitz
Roberto Vidal, a Core Tech Engineer, discusses the challenges faced while working with WebAssembly and Rust in the context of WebContainer, a technology that enables CPU-bound tasks on the web. WebAssembly is essential for achieving performance comparable to native toolchains, and Rust is considered the best fit for targeting WebAssembly. However, Vidal highlights the limitations of WebAssembly, such as issues with dynamic memory management and seamless multi-module linking, which led to the discovery of a memory-related bug in V8. This bug was encountered when WebContainer spawned multiple Web Workers, resulting in an "out of memory" error despite using relatively little memory. Investigations revealed that the error was due to an address space reservation limit in V8, intended to enhance security. Although a workaround was found by limiting module instantiations, the issue was eventually resolved in V8 version 9.6.142, allowing for more memory instances. The article also notes that other browser engines like Firefox and Safari handled the situation better, allowing more memory instances without errors.