Skip to content

Latest commit

 

History

History
68 lines (51 loc) · 4.27 KB

README.md

File metadata and controls

68 lines (51 loc) · 4.27 KB

W.A.T.E.R.: WebAssembly Transport Executables Runtime

GitHub License FOSSA Status Build & Test Status

WATER-rs provides a Rust runtime for WebAssembly Transport Modules(WATM) as a pluggable application-layer transport protocol provider. It is designed to be highly portable and lightweight, allowing for rapidly deployable pluggable transports. While other pluggable transport implementations require a fresh client deployment (and app-store review) to update their protocol WATER allows dynamic delivery of new transports in real time over the network.

WATER wasm transport

The Go implementation of the runtime library can be found in water-go. We now also support building WATM in Go, please refer to watm for examples and helper libraries interfacing Pluggable Transports-like interfaces. Official Go compiler is currently not supported until further notice.

Cite our work

If you quoted or used our work in your own project/paper/research, please cite our paper Just add WATER: WebAssembly-based Circumvention Transports, which is published in the proceedings of Free and Open Communications on the Internet (FOCI) in 2024 issue 1, pages 22-28.

BibTeX
@inproceedings{water-foci24,
    author = {Erik Chi and Gaukas Wang and J. Alex Halderman and Eric Wustrow and Jack Wampler},
    title = {Just add {WATER}: {WebAssembly}-based Circumvention Transports},
    booktitle = {Free and Open Communications on the Internet},
    publisher = {},
    year = {2024},
    url = {https://www.petsymposium.org/foci/2024/foci-2024-0003.pdf},
}

Update: our paper has been accepted by FOCI and presented at FOCI 2024!

Be Water

Empty your mind, be formless, shapeless, like water. If you put water into a cup, it becomes the cup. You put water into a bottle and it becomes the bottle. You put it in a teapot, it becomes the teapot. Now, water can flow or it can crash. Be water, my friend.

-- Bruce Lee

Contents

The repo contains 2 main components:

  1. A Rust crate water runtime library used to interact with .wasm WebAssembly Transport Modules(WATM).
  2. A Rust crate watm_v0 for the v0 WATM-development where developers can easily create their own .wasm (the general version of watm is still under development).

Also include examples for demonstration of usage:

  1. ⭐ A standalone cli tool which is compatible with both v0 and v1_preview, and can run all different roles with all of our example WATM binaries.
  2. A few examples WATM implementations with water_wasm crate, see water-rs/tree/main/examples/water_bins.
  3. Examples of using the above WATM examples with our water library, see tests for usage.

Running tests

# runs ALL tests
cargo test --workspace --verbose

# run tests for a single crate
cargo test -p <crate_name> --verbose

# run a single test (or test matching name prefix) in a single crate
cargo test -p <crate_name> --verbose -- <test_name>