(For comparison, see WebAssembly's original High-Level Goals.)
- Define a portable, load- and run-time-efficient binary format for separately-compiled components built from WebAssembly core modules that enable portable, cross-language composition.
- Support the definition of portable, virtualizable, statically-analyzable, capability-safe, language-agnostic interfaces, especially those being defined by WASI.
- Maintain and enhance WebAssembly's unique value proposition:
- Language neutrality: avoid biasing the component model toward just one language or family of languages.
- Embeddability: design components to be embedded in a diverse set of host execution environments, including browsers, servers, intermediaries, small devices, and data-intensive systems.
- Optimizability: maximize the static information available to Ahead-of-Time compilers to minimize the cost of instantiation and startup.
- Formal semantics: define the component model within the same semantic framework as core wasm.
- Web platform integration: ensure components can be natively supported in browsers by extending the existing WebAssembly integration points: the JS API, Web API and ESM-integration. Before native support is implemented, ensure components can be polyfilled in browsers via Ahead-of-Time compilation to currently-supported browser functionality.
- Define the component model incrementally: starting from a set of initial use cases and expanding the set of use cases over time, prioritized by feedback and experience.
- Don't attempt to solve 100% of WebAssembly embedding scenarios.
- Some scenarios will require features in conflict with the above-mentioned goals.
- With the layered approach to specification, unsupported embedding scenarios can be solved via alternative layered specifications or by directly embedding the existing WebAssembly core specification.
- Don't attempt to solve problems that are better solved by some combination
of the toolchain, the platform or higher layer specifications, including:
- package management and version control;
- deployment and live upgrade / dynamic reconfiguration;
- persistence and storage; and
- distributed computing and partial failure.
- Don't specify a set of "component services".
- Specifying services that may be implemented by a host and exposed to components is the domain of WASI and out of scope of the component model.
- See also the WASI FAQ entry.