Jump to content

WebAssembly

From Wikipedia, the free encyclopedia

WebAssembly
Paradigmstructured;stack machine[1]
Designed byW3C
Developer
First appearedMarch 2017;7 years ago(2017-03)
OSPlatform independent
LicenseApache License 2.0
Filename extensions
  • .wat(text format)
  • .wasm(binary format)
Websitewebassembly.org
Influenced by

WebAssembly(Wasm) defines aportablebinary-codeformat and a corresponding text format forexecutable programs[2]as well assoftwareinterfaces for facilitating interactions between such programs and their host environment.[3][4][5][6]

The main goal of WebAssembly is to enable high-performance applications onweb pages,"but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well."[7]It is anopen standard[8][9]and aims to support any language on any operating system,[10]and in practice all of the most popular languages already have at least some level of support.

Announced in 2015(2015)and first released in March 2017(2017-03),WebAssembly became aWorld Wide Web Consortiumrecommendation on 5 December 2019[11][12][13]and it received theProgramming Languages Software AwardfromACMSIGPLANin 2021.[14]TheWorld Wide Web Consortium(W3C) maintains the standard with contributions fromMozilla,Microsoft,Google,Apple,Fastly,Intel,andRed Hat.[15][16]

History

[edit]

WebAssembly is named to evoke the concept ofassembly language,a term which dates to the 1950s. The name suggests bringing assembly-like programming to theWeb,where it will be executedclient-side— by the website-user's computer via the user'sweb browser.To accomplish this, WebAssembly must be much more hardware-independent than a true assembly language.

WebAssembly was first announced in 2015,[17]and the first demonstration was executingUnity'sAngry BotsinFirefox,[18]Google Chrome,[19]andMicrosoft Edge.[20]The precursor technologies wereasm.jsfromMozillaandGoogle Native Client,[21][22]and the initial implementation was based on the feature set of asm.js.[23]The asm.js technology already provides near-native code execution speeds[24][25]and can be considered a viable alternative for browsers that do not support WebAssembly or have it disabled for security reasons.

In March 2017, the design of theminimum viable product(MVP) was declared to be finished and the preview phase ended.[26]In late September 2017,Safari 11was released with support. In February 2018, the WebAssembly Working Group published three public working drafts for the Core Specification, JavaScript Interface, and Web API.[27][28][29][30]

In June 2019, Chrome 75 was released with WebAssembly threads enabled by default.[31]

Since April 2022,WebAssembly 2.0 is in draft status,[32][33]which adds manySIMD-related instructions and a new v128 datatype, the ability for functions to return multiple values, and mass memory initialize/copy.

Implementations

[edit]

While WebAssembly was initially designed to enable near-native code execution speed in the web browser, it has been considered valuable outside of such, in more generalized contexts.[34][35]Since WebAssembly's runtime environments (RE) are low-levelvirtual stack machines(akin toJVMorFlash VM) that can be embedded into host applications, some of them have found a way to standalone runtime environments likeWasmtimeandWasmer.[9][10]WebAssembly runtime environments are embedded inapplication serversto host "server-side" WebAssembly applications and in other applications to supportplug-in-based software extension architectures, e.g., "WebAssembly for Proxies" (proxy-wasm) which specifies a WebAssembly-basedABIfor extendingproxy servers.[36][37]

Web browsers

[edit]

In November 2017, Mozilla declared support "in all major browsers",[38]after WebAssembly was enabled by default in Edge 16.[39]The support includes mobile web browsers for iOS and Android. As of March 2024,99% of tracked web browsers support WebAssembly (version 1.0),[40]which is more than for its predecessorasm.js,that is not supported by e.g. Safari web browser. For some extensions, from the 2.0 draft standard, support may be lower, but still more than 90% of web browsers may already support, e.g. for reference types extension.[41]

Compilers

[edit]

WebAssembly implementations usually use eitherahead-of-time(AOT) orjust-in-time(JIT) compilation, but may also use aninterpreter.While the first implementations have landed inweb browsers,there are also non-browser implementations for general-purpose use, including Wasmer,[10]Wasmtime[42]or WAMR,[16]wasm3, WAVM, and many others.[43]

Because WebAssemblyexecutablesare precompiled, it is possible to use a variety of programming languages to make them.[44]This is achieved either through direct compilation to Wasm, or through implementation of the correspondingvirtual machinesin Wasm. There have been around 40 programming languages reported to support Wasm as a compilation target.[45]

EmscriptencompilesCandC++to Wasm[26]using the Binaryen andLLVMas backend.[46]TheEmscripten SDKcan compile anyLLVM-supported languages (such asC,C++orRust,among others) source code into a binary file which runs in the samesandboxas JavaScript code.[note 1]Emscripten provides bindings for several commonly used environment interfaces likeWebGL.

As of version 8, a standaloneClangcan compileCandC++to Wasm.[51] Its initial aim was to supportcompilationfromCandC++,[52]though support for other sourcelanguagessuch asRust,.NET languages[53][54][45]andAssemblyScript[55](TypeScript-like) is also emerging.

After the MVP release, WebAssembly added support formultithreadingandgarbage collection[56][57]which enabled compilation for garbage-collected programming languages likeC#(supported viaBlazor),F#(supported via Bolero[58]with help of Blazor),Python,and evenJavaScriptwhere the browser'sjust-in-time compilationspeed is considered too slow.

A number of other languages have some support includingPython,[59]Julia,[60][61][62]andRuby.[63]

A number of systems can compile Java and other bytecode languages to JavaScript and WebAssembly. These include CheerpJ,[64] JWebAssembly[65]and TeaVM.[66]These all take Java byte code.class files as input allowing otherJVM languageslikeGroovy,andScalato be used as well.Kotlinsupports WebAssembly directly.[67][68]

Limitations

[edit]

Web browsersdo not allow WebAssembly code to directly access theDocument Object Model.Wasm code must defer toJavaScriptfor this.[note 2]

In an October 2023 survey of developers, less than half of the 303 participants were satisfied with the state of WebAssembly. A large majority cited the need for improvement in four areas: WASI, debugging support, integration with JavaScript and browser APIs, and build tooling.[71]

For memory-intensive allocations in WebAssembly, there are "grave limitations that make many applications infeasible to bereliablydeployed on mobile browsers [..] Currently allocating more than ~300MB of memory is not reliable on Chrome on Android without resorting to Chrome-specific workarounds, nor in Safari on iOS. "[72]

All major browsers allow WebAssembly if Content-Security-Policy is not specified, or if "unsafe-eval" is used, but otherwise they behave differently.[73]Chrome requires "unsafe-eval",[74][75]though a worker thread can be a workaround.[75]

In 2022, thestartup companynamed Zaplib summarized in a blog why they were shutting down.[76]Their goal had been to significantly increase the performance of existingweb appsby incrementally porting them toRust/Wasm. However, porting a customer's simulator from JavaScript only yielded a 5% improvement.[76]RegardingFigma,they stated: "upon closer inspection it seems that their use of Wasm is more due to historical accidents—wanting to build inC++to hedge for their native app—than for critical performance needs. Figma files are processed in C++/Wasm, and this is likely a huge speedup, but most of Figma's performance magic is due to theirWebGLrenderer. "[76]

Security considerations

[edit]

In June 2018, a security researcher presented the possibility of using WebAssembly to circumvent browser mitigations forSpectreandMeltdownsecurity vulnerabilities once support forthreadswith shared memory is added. Due to this concern, WebAssembly developers put the feature on hold.[77][78][79]However, in order to explore these future language extensions, Google Chrome added experimental support for the WebAssembly thread proposal in October 2018.[80]

WebAssembly has been criticized for allowing greater ease of hiding the evidence formalwarewriters, scammers andphishingattackers; WebAssembly is present on the user's machine only in its compiled form, which "[makes malware] detection difficult".[81]The speed and concealability of WebAssembly have led to its use in hiddencrypto miningon the website visitor's device.[81][82][77]Coinhive,a now defunct service facilitating cryptocurrency mining in website visitors' browsers, claims their "miner uses WebAssembly and runs with about 65% of the performance of a native Miner."[77]A June 2019 study from theTechnische Universität Braunschweiganalyzed the usage of WebAssembly in the Alexa top 1 million websites and found the prevalent use was for malicious crypto mining, and that malware accounted for more than half of the WebAssembly-using websites studied.[83][84]An April 2021 study fromUniversität Stuttgartfound that since then crypto mining has been marginalized, falling to below 1% of all WebAssembly modules gathered from a wide range of sources, also including the Alexa top 1 million websites.[85]

The ability to effectively obfuscate large amounts of code can also be used to bypassad blockingand privacy tools that preventweb trackinglikePrivacy Badger.[citation needed]

As WebAssembly supports only structuredcontrol flow,it is amenable toward security verification techniques includingsymbolic execution.[86]Current efforts in this direction include the Manticore symbolic execution engine.[87]

WASI

[edit]

WebAssembly System Interface (WASI) is a simple interface (ABIandAPI) designed byMozillaintended to be portable to any platform.[88]It providesPOSIX-like features like file I/O constrained bycapability-based security.[89][90]There are also a few other proposed ABI/APIs.[91][92]

WASI is influenced byCloudABIandCapsicum.

Solomon Hykes, a co-founder ofDocker,wrote in 2019, "If WASM+WASI existed in 2008, we wouldn't have needed to create Docker. That's how important it is. WebAssembly on the server is the future of computing."[93]Wasmer,out in version 1.0, provides "software containerization, we create universal binaries that work anywhere without modification, including operating systems like Linux, macOS, Windows, and web browsers. Wasm automatically sandboxes applications by default for secure execution".[93]

Specification

[edit]

Host environment

[edit]

The general standard provides core specifications for JavaScript API and details on embedding.[5]

Virtual machine

[edit]

Wasm code (binary code, i.e. bytecode) is intended to be run on aportablevirtualstack machine(VM).[94]The VM is designed to be faster to parse and execute than JavaScript and to have a compact code representation.[52]Any external functionality (likesyscalls) that may be expected by Wasm binary code is not stipulated by the standard. It rather provides a way to deliver interfacing via modules by the host environment that the VM implementation runs in.[95][9]

Wasm program

[edit]

A Wasm program is designed to be a separate module containing collections of various Wasm-defined values and program type definitions. These are expressed in either binary or textual format (see below) that both have a common structure.[96]Such module may provide a start function that is executed upon instantiation of a wasm binary.

Instruction set

[edit]

The core standard for the binary format of a Wasm program defines aninstruction set architecture(ISA) consisting of specificbinary encodingsof types of operations which are executed by the VM (without specifying how exactly they must be executed).[97]The list of instructions includes standard memory load/store instructions, numeric, parametric,control of flowinstruction typesand Wasm-specific variable instructions.[98]

The number of opcodes used in the original standard (MVP) was a bit fewer than 200 of the 256 possible opcodes. Subsequent versions of WebAssembly pushed the number of opcodes a bit over 200. TheWebAssembly SIMDproposal (for parallel processing) introduces an alternate opcode prefix (0xfd) for128-bitSIMD. The concatenation of the SIMD prefix, plus an opcode that is valid after the SIMD prefix, forms a SIMD opcode. The SIMD opcodes bring an additional 236 instructions for the "minimum viable product" (MVP) SIMD capability (for a total of around 436 instructions).[99][100]Those instructions, the "finalized opcodes"[101]are enabled by default across Google's V8 (in Google Chrome), the SpiderMonkey engine in Mozilla Firefox, and the JavaScriptCore engine in Apple's Safari[102]and there are also some additional proposal for instructions for later "post SIMD MVP", and there's also a separate "relaxed-simd" proposal on the table.[103]

These SIMD opcodes are also portable and translate to native instruction sets like x64 and ARM. In contrast, neither Java'sJVMnorCILsupport SIMD, at theiropcode level,i.e. in the standard; both do have some parallel APIs which provide SIMD speedup. There is an extension for Java addingintrinsicsfor x64 SIMD,[104]that isn't portable, i.e. not usable on ARM or smartphones. Smartphones can support SIMD by calling assembly code with SIMD, and C# has similar support.

Code representation

[edit]

In March 2017, the WebAssembly Community Group reached consensus on the initial (MVP) binary format, JavaScript API, and reference interpreter.[105]It defines a WebAssembly binary format (.wasm), which is not designed to be used by humans, as well as a human-readable WebAssembly text format (.wat) that resembles a cross between S-expressions and traditional assembly languages.

The table below shows an example of afactorialfunction written inCand its corresponding WebAssembly code after compilation, shown both in.wattext format (a human-readable textual representation of WebAssembly) and in.wasmbinary format (the rawbytecode,expressed below inhexadecimal), that is executed by a Web browser or run-time environment that supports WebAssembly.

C source code and corresponding WebAssembly
C source code WebAssembly.wattext format WebAssembly.wasmbinary format
intfactorial(intn){
if(n==0)
return1;
else
returnn*factorial(n-1);
}
(func(parami64)(resulti64)
local.get0
i64.eqz
if(resulti64)
i64.const1
else
local.get0
local.get0
i64.const1
i64.sub
call0
i64.mul
end)
00 61 73 6D 01 00 00 00
01 06 01 60 01 7E 01 7E
03 02 01 00
0A 17 01
15 00
20 00
50
04 7E
42 01
05
20 00
20 00
42 01
7D
10 00
7E
0B
0B

All integer constants are encoded using a space-efficient, variable-lengthLEB128encoding.[106]

The WebAssembly text format is more canonically written in a folded format usingS-expressions.For instructions and expressions, this format is purelysyntactic sugarand has no behavioral differences with the linear format.[107]Throughwasm2wat,the code above decompiles to:

(module
(type$t0(func(parami64)(resulti64)))
(func$f0(type$t0)(param$p0i64)(resulti64)
(if$I0(resulti64);; $I0 is an unused label name
(i64.eqz
(local.get$p0));; the name $p0 is the same as 0 here
(then
(i64.const1))
(else
(i64.mul
(local.get$p0)
(call$f0;; the name $f0 is the same as 0 here
(i64.sub
(local.get$p0)
(i64.const1))))))))

Note that a module is implicitly generated by the compiler. The function is actually referenced by an entry of the type table in the binary, hence a type section and thetypeemitted by the decompiler.[108]The compiler and decompiler can be accessed online.[109]

See also

[edit]

Notes

[edit]
  1. ^According to official documentation, the Emscripten SDK may be used to create.wasmfiles which then may be executed in a web browser.[47][48][49]Even though Emscripten can consume various languages when usingClang,some problems may arise.[50]
  2. ^ForRust/Wasm development, third-party libraries can provide some of the necessary JavaScript I/O.[69][70]

References

[edit]
  1. ^"WebAssembly/design/Semantics.md".GitHub.Retrieved23 February2021.WebAssembly code can be considered astructured stack machine;a machine where most computations use a stack of values, but control flow is expressed in structured constructs such as blocks, ifs, and loops. In practice, implementations need not maintain an actual value stack, nor actual data structures for control; they need only behave as if they did so.
  2. ^Mozilla."Understanding WebAssembly text format".MDN Web Docs.Retrieved9 December2019.
  3. ^"Introduction — WebAssembly 1.0".webassembly.github.io.Retrieved18 June2019.WebAssembly is an open standard...
  4. ^"Introduction — WebAssembly 1.0".webassembly.github.io.Retrieved18 June2019.WebAssembly is a... code format
  5. ^ab"Conventions — WebAssembly 1.0".webassembly.github.io.Retrieved17 May2019.WebAssembly is a programming language that has multiple concrete representations (its binary format and the text format). Both map to a common structure.
  6. ^"Introduction — WebAssembly 1.0".webassembly.github.io.Retrieved18 June2019.... this specification is complemented by additional documents defining interfaces to specific embedding environments such as the Web. These will each define a WebAssembly application programming interface (API) suitable for a given environment.
  7. ^"Introduction — WebAssembly 1.1".webassembly.github.io.Retrieved19 February2021.Its main goal is to enable high performance applications on the Web, but it does not make any Web-specific assumptions or provide Web-specific features, so it can be employed in other environments as well.
  8. ^Haas, Andreas; Rossberg, Andreas; Schuff, Derek L.; Titzer, Ben L.; Holman, Michael; Gohman, Dan; Wagner, Luke; Zakai, Alon; Bastien, JF (14 June 2017)."Bringing the Web Up to Speed with WebAssembly".SIGPLAN Notices.52(6): 185–200.doi:10.1145/3140587.3062363.ISSN0362-1340.While the Web is the primary motivation for WebAssembly, nothing in its design depends on the Web or a JavaScript environment. It is an open standard specifically designed for embedding in multiple contexts, and we expect that stand-alone implementations will become available in the future.
  9. ^abc"Outside the web: standalone WebAssembly binaries using Emscripten · V8".v8.dev.Retrieved28 July2020.
  10. ^abc"Wasmer - The Universal WebAssembly Runtime".wasmer.io.Retrieved19 February2021.Compile everything to WebAssembly. Run it on any OS or embed it into other languages.
  11. ^World Wide Web Consortium."WebAssembly Core Specification".World Wide Web Consortium (W3).Retrieved9 December2019.
  12. ^Couriol, Bruno."WebAssembly 1.0 Becomes a W3C Recommendation and the Fourth Language to Run Natively in Browsers".infoq.Retrieved9 December2019.
  13. ^"WebAssembly Specification — WebAssembly 1.1".webassembly.github.io.Retrieved22 March2021.
  14. ^"Programming Languages Software Award".sigplan.org.
  15. ^Bright, Peter (18 June 2015)."The Web is getting its bytecode: WebAssembly".Ars Technica.Condé Nast.
  16. ^ab"New Bytecode Alliance Brings the Security, Ubiquity, and Interoperability of the Web to the World of Pervasive Computing".Mozilla.12 November 2019.Retrieved27 May2019.
  17. ^"Launch bug".GitHub/ WebAssembly / design.11 June 2015.
  18. ^Wagner, Luke (14 March 2016)."A WebAssembly Milestone: Experimental Support in Multiple Browsers".Mozilla Hacks.
  19. ^Thompson, Seth (15 March 2016)."Experimental support for WebAssembly in V8".V8 Blog.
  20. ^Zhu, Limin (15 March 2016)."Previewing WebAssembly experiments in Microsoft Edge".Microsoft Edge dev blog.
  21. ^Lardinois, Frederic (17 June 2015)."Google, Microsoft, Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web".TechCrunch.Retrieved24 December2017.
  22. ^Avram, Abel (31 May 2017)."Google Is to Remove Support for PNaCl".InfoQ.Retrieved22 December2017.
  23. ^"WebAssembly: a binary format for the web".②ality – JavaScript and more.18 June 2015.
  24. ^"Staring at the Sun: Dalvik vs. ASM.js vs. Native".blog.mozilla.org.August 2013.Retrieved7 December2019.Even discarding the one score where asm.js did better, it executes at around 70% of the speed of native C++ code.
  25. ^Arjun, Jangda, Abhinav Powers, Bobby Berger, Emery Guha (25 January 2019).Not So Fast: Analyzing the Performance of WebAssembly vs. Native Code.OCLC1106328738.{{cite book}}:CS1 maint: multiple names: authors list (link)
  26. ^abKrill, Paul (6 March 2017)."WebAssembly is now ready for browsers to use".InfoWorld.Retrieved23 December2017.
  27. ^"WebAssembly First Public Working Drafts".W3C. 15 February 2018.Retrieved20 April2018.
  28. ^"WebAssembly Core Specification".W3C. 15 February 2018.Retrieved20 April2018.
  29. ^"WebAssembly JavaScript Interface".W3C. 15 February 2018.Retrieved20 April2018.
  30. ^"WebAssembly Web API".W3C. 15 February 2018.Retrieved20 April2018.
  31. ^"WebAssembly Worker Based Threads - Chrome Platform Status".chromestatus.Retrieved19 February2022.
  32. ^"WebAssembly Specification — WebAssembly 2.0 (Draft 2022-09-01)".webassembly.github.io.Retrieved9 September2022.
  33. ^"WebAssembly 2.0 First Public Working Drafts | W3C News".19 April 2022.Retrieved9 September2022.
  34. ^"Non-Web Embeddings".WebAssembly.Retrieved15 May2019.
  35. ^"Non-Web Embeddings".GitHub/ WebAssembly.Retrieved15 May2019.
  36. ^Freese, Danny (October 3, 2023)."Proxy-Wasm: It's WebAssembly for Proxies".Blog.Kong.Retrieved2024-05-06.
  37. ^"proxy-wasm/spec: WebAssembly for Proxies (ABI specification)".GitHub.Retrieved6 May2024.
  38. ^"WebAssembly support now shipping in all major browsers".The Mozilla Blog.Retrieved21 November2017.
  39. ^"Introducing new JavaScript optimizations, WebAssembly, SharedArrayBuffer, and Atomics in EdgeHTML 16".Microsoft Edge Dev Blog.31 October 2017.Retrieved21 November2017.
  40. ^"WebAssembly | Can I use... Support tables for HTML5, CSS3, etc".canIuse.Retrieved1 March2024.
  41. ^"WebAssembly Reference Types | Can I use... Support tables for HTML5, CSS3, etc".caniuse.Retrieved3 March2024.
  42. ^"Wasmtime — a small and efficient runtime for WebAssembly & WASI".wasmtime.dev.Retrieved18 December2020.
  43. ^"Roadmap".Retrieved7 December2021.
  44. ^Ball, Kevin (26 June 2018)."How WebAssembly is Accelerating the Future of Web Development".Archived fromthe originalon 12 February 2019.Retrieved22 October2018.
  45. ^ab"Awesome WebAssembly Languages".GitHub.26 June 2018.Retrieved15 February2022.
  46. ^Zakai, Alon [@kripken] (21 October 2019)."Emscripten has switched to the upstream LLVM wasm backend by default! / Details:https://groups.google /forum/#!topic/emscripten-discuss/NpxVAOirSl4…"(Tweet).Retrieved22 October2019– viaTwitter.
  47. ^"Developer's Guide - WebAssembly".webassembly.org.Retrieved10 June2019.
  48. ^"Compiling a New C/C++ Module to WebAssembly".MDN Web Docs.Retrieved10 June2019.
  49. ^"Building to WebAssembly — Emscripten 1.38.33 documentation".emscripten.org.Retrieved10 June2019.
  50. ^"Emscripting a C library to Wasm | Web".Google Developers.Retrieved10 June2019.
  51. ^"LLVM 8.0.0 Release Notes — LLVM 8 documentation".releases.llvm.org.Retrieved22 October2019.
  52. ^ab"WebAssembly High-Level Goals".GitHub/ WebAssembly / design.11 December 2015.
  53. ^Krill, Paul (29 November 2017)."Direct WebAssembly compilation comes to Rust language".InfoWorld.Retrieved24 December2017.
  54. ^"Frequently asked questions (FAQ) about Blazor".blazor.net.Retrieved18 June2018.
  55. ^AssemblyScript/assemblyscript,The AssemblyScript Project, 9 September 2020,retrieved9 September2020
  56. ^"A new way to bring garbage collected programming languages efficiently to WebAssembly · V8".v8.dev.Retrieved11 December2023.
  57. ^"WebAssembly Garbage Collection (WasmGC) now enabled by default in Chrome | Blog".Chrome for Developers.Retrieved11 December2023.
  58. ^"Bolero: F# in WebAssembly".fsbolero.io.Retrieved25 July2019.
  59. ^"Pyodide: Bringing the scientific Python stack to the browser – Mozilla Hacks - the Web developer blog".Mozilla Hacks – the Web developer blog.Retrieved9 September2020.
  60. ^"Julia in the Browser".nextjournal.Retrieved9 April2019.
  61. ^"WebAssembly platform by tshort · Pull Request #2 · JuliaPackaging/Yggdrasil".GitHub.Retrieved9 April2019.
  62. ^Fischer, Keno (22 July 2019),GitHub - Keno/julia-wasm: Running julia on wasm.,retrieved25 July2019
  63. ^"MRuby in Your Browser".ruby.dj.Retrieved25 July2019.
  64. ^"Java to WebAssembly Compiler - CheerpJ".Retrieved27 April2023.
  65. ^JWebAssembly,27 April 2023 – via GitHub
  66. ^"TeaVM — Overview".teavm.org.Retrieved27 April2023.
  67. ^"Bringing Kotlin to the Web".Retrieved11 December2023.
  68. ^Deleuze, Sébastien (13 February 2023)."The huge potential of Kotlin/Wasm".seb.deleuze.fr.Retrieved11 December2023.
  69. ^"stdweb - Rust".docs.rs.Retrieved5 June2019.The goal of this crate is to provide Rust bindings to the Web APIs and to allow a high degree of interoperability between Rust and JavaScript.
  70. ^"web_sys - Rust".docs.rs.Retrieved5 June2019.Raw API bindings for Web APIs. This is a procedurally generated crate from browser WebIDL which provides a binding to all APIs that browser provide on the web.
  71. ^"The State of WebAssembly 2023".Scott Logic. 18 October 2023.Retrieved14 March2024.
  72. ^"Wasm needs a better memory management story · Issue #1397 · WebAssembly/design".GitHub.Retrieved15 February2021.
  73. ^"WebAssembly/content-security-policy".GitHub.Retrieved17 February2021.
  74. ^"948834 - chromium - An open-source project to help move the web forward. - Monorail".bugs.chromium.org.Retrieved17 February2021.
  75. ^ab"No way to use WebAssembly on Chrome without 'unsafe-eval' · Issue #7 · WebAssembly/content-security-policy".GitHub.Retrieved17 February2021.
  76. ^abc"Zaplib post-mortem".zaplib.April 2022.Retrieved14 March2024.
  77. ^abcNeumann, Robert; Toro, Abel (19 April 2018)."In-browser mining: Coinhive and WebAssembly".Forcepoint.Retrieved8 June2019.
  78. ^Cimpanu, Catalin (24 June 2018)."Changes in WebAssembly Could Render Meltdown and Spectre Browser Patches Useless".Bleeping Computer.Retrieved8 June2019.
  79. ^Sanders, James (25 June 2018)."How opaque WebAssembly code could increase the risk of Spectre attacks online".Tech Republic.Retrieved9 June2019.
  80. ^R, Bhagyashree (30 October 2018)."Google Chrome 70 now supports WebAssembly threads to build multi-threaded web applications".Packt Pub.Retrieved9 June2019.
  81. ^abLonkar, Aishwarya; Chandrayan, Siddhesh (October 2018)."The dark side of WebAssembly".Virus Bulletin.Retrieved8 June2019.
  82. ^Segura, Jérôme (29 November 2017)."Persistent drive-by cryptomining coming to a browser near you".Malwarebytes.Retrieved8 June2019.
  83. ^"Recent Study Estimates That 50% of Websites Using WebAssembly Apply It for Malicious Purposes".InfoQ.Retrieved3 November2019.
  84. ^Musch, Marius; Wressnegger, Christian; Johns, Martin; Rieck, Konrad (June 2019). "New Kid on the Web: A Study on the Prevalence of WebAssembly in the Wild".Detection of Intrusions and Malware, and Vulnerability Assessment(PDF).Lecture Notes in Computer Science. Vol. 11543.Detection of Intrusions and Malware, and Vulnerability Assessment.pp. 23–42.doi:10.1007/978-3-030-22038-9_2.ISBN978-3-030-22037-2.S2CID184482682.Archived fromthe original(PDF)on 26 July 2022.Retrieved15 February2022.Slides (PDF)Archived3 November 2019 at theWayback Machine
  85. ^Aaron Hilbig, Daniel Lehmann, and Michael Pradel (April 2021). "An Empirical Study of Real-World WebAssembly Binaries: Security, Languages, Use Cases." (Archived April 2021)https://software-lab.org/publications/www2021.pdf
  86. ^Watt, Conrad (8 January 2018)."Mechanising and verifying the WebAssembly specification".Proceedings of the 7th ACM SIGPLAN International Conference on Certified Programs and Proofs.CPP 2018. Los Angeles CA USA: ACM. pp. 53–65.doi:10.1145/3167082.ISBN978-1-4503-5586-5.S2CID9401691.
  87. ^"Symbolically Executing WebAssembly in Manticore".31 January 2020.Retrieved10 February2020.
  88. ^"WebAssembly System Interface Repo".GitHub/ WebAssembly.10 February 2020.
  89. ^"Additional background on Capabilities".GitHub.bytecodealliance. 4 March 2022.
  90. ^"Standardizing WASI: A system interface to run WebAssembly outside the web – Mozilla Hacks - the Web developer blog".Mozilla Hacks – the Web developer blog.
  91. ^"reference-sysroot Repo".GitHub/ WebAssembly.12 January 2020.
  92. ^"wasm-c-api Repo".GitHub/ WebAssembly.3 February 2020.
  93. ^ab"The" Wasmer "WebAssembly Runtime is Generally Available".InfoQ.Retrieved19 February2021.
  94. ^"Design Rationale".GitHub/ WebAssembly / design.1 October 2016.
  95. ^"Portability - WebAssembly".webassembly.org.Retrieved28 July2020.
  96. ^"Conventions — WebAssembly 1.0".webassembly.github.io.Retrieved12 November2019.
  97. ^"Introduction — WebAssembly 1.0".webassembly.github.io.Retrieved17 May2019.
  98. ^"Instructions — WebAssembly 1.0".webassembly.github.io.Retrieved12 November2019.
  99. ^ Lively, Thomas (19 February 2021) [Pull Request opened on 2021-02-05]."Final opcodes by tlively · Pull Request #452 · WebAssembly/simd · GitHub".Bytecode Alliance.Retrieved12 May2021– viaGitHub.
  100. ^ Delendik, Yury (19 February 2021) [SIMD changes committed on 2021-02-19]."File wasm-tools/expr.rs at b5c3d98e40590512a3b12470ef358d5c7b983b15 · bytecodealliance/wasm-tools · GitHub".Bytecode Alliance.Retrieved12 May2021– viaGitHub.
  101. ^"Update interpreter and text with finalized opcodes by ngzhian · Pull Request #486 · WebAssembly/simd".GitHub.Retrieved14 May2021.
  102. ^"WebAssembly/simd".GitHub.Retrieved14 May2021.
  103. ^WebAssembly/relaxed-simd,WebAssembly, 3 May 2021,retrieved14 May2021
  104. ^"How we made the JVM 40x faster".astojanov.github.io.Retrieved17 February2021.
  105. ^"Roadmap".WebAssembly.March 2017.
  106. ^WebAssembly Community Group (January 2020)."WebAssembly Specification Release 1.0".Retrieved13 January2020.
  107. ^"Folded instructions".GitHub./ WebAssembly / spec
  108. ^"Modules (Binary)".WebAssembly 1.0.
  109. ^"WebAssembly Binary Toolkit (wabt) demos".webassembly.github.io.

This article incorporates text from afree contentwork. Licensed under Apache License 2.0 (license statement/permission). Text taken fromText Format​,jfbastien; rossberg-chromium; kripken; titzer; s3ththompson; sunfishcode; lukewagner; flagxor; enricobacis; c3d; binji; andrewosh, GitHub. WebAssembly/design.

[edit]