aboutsummaryrefslogtreecommitdiff
path: root/HighLevelGoals.md
blob: 14e232d9c0438d71af4721511947081b2d5867c6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# WebAssembly High-Level Goals

1. Define a [portable](Portability.md), size- and load-time-efficient
   [binary format](MVP.md#binary-format) to serve as a compilation target which
   can be compiled to execute at native speed by taking advantage of common
   hardware capabilities available on a wide range of platforms, including
   [mobile](https://en.wikipedia.org/wiki/Mobile_device) and
   [IoT](https://en.wikipedia.org/wiki/Internet_of_Things).
2. Specify and implement incrementally:
    * a [Minimum Viable Product (MVP)](MVP.md) for the standard with
      roughly the same functionality as [asm.js](http://asmjs.org), primarily
      aimed at [C/C++](CAndC++.md);
    * an effective and efficient [polyfill](Polyfill.md) library for the
      MVP that translates WebAssembly code into JavaScript in the client so that
      WebAssembly MVP can run on existing browsers;
    * a [follow-up to the MVP](PostMVP.md) which adds several more
      essential features; and
    * [additional features](FutureFeatures.md), specified iteratively and
      prioritized by feedback and experience, including support for languages
      other than C/C++.
3. Design to execute within and integrate well with the *existing*
   [Web platform](Web.md):
    * maintain the versionless, [feature-tested](FeatureTest.md) and
      [backwards-compatible](BinaryEncoding.md#backwards-compatibility)
      evolution story of the Web;
    * execute in the same semantic universe as JavaScript;
    * allow synchronous calls to and from JavaScript;
    * enforce the same-origin and permissions security policies;
    * access browser functionality through the same Web APIs that are accessible
      to JavaScript; and
    * define a human-editable text format that is convertible to and from the
      binary format, supporting View Source functionality.
4. Design to support [non-browser embeddings](NonWeb.md) as well.
5. Make a great platform:
    * build a new LLVM backend for WebAssembly and an accompanying
      clang port;
    * promote other compilers and tools targeting WebAssembly; and
    * enable other useful [tooling](Tooling.md).