aboutsummaryrefslogtreecommitdiff
path: root/HighLevelGoals.md
blob: bd23ea76786b5370a304024ada719e8bf1f7b71b (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
# 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](http://en.wikipedia.org/wiki/Mobile_device) and
   [IoT](http://en.wikipedia.org/wiki/Internet_of_Things).
2. Specify and implement incrementally:
    * design [a Minimum Viable Product (MVP)](MVP.md) for the standard with
      roughly the same functionality as [asm.js](http://asmjs.org);
    * ship 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;
    * ship a [follow-up to the MVP](PostMVP.md) which adds several more
      essential features; and
    * continue to iteratively specify [additional features](FutureFeatures.md),
      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 an [LLVM backend](https://github.com/WebAssembly/llvm) and
      accompanying [clang port](https://github.com/WebAssembly/clang);
    * promote other compilers and tools targeting WebAssembly; and
    * enable other useful [tooling](Tooling.md).