From 14bf81e1e62c6b7aa15d6787a5025102a5e7affe Mon Sep 17 00:00:00 2001 From: Martijn Stevenson Date: Thu, 28 Nov 2024 04:18:20 +0000 Subject: [PATCH 1/8] feat: Publish the first Proxy-Wasm roadmap. This is sure to be a living document, subject to much discussion. Signed-off-by: Martijn Stevenson --- README.md | 3 ++ docs/Roadmap.md | 111 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 docs/Roadmap.md diff --git a/README.md b/README.md index 99c2086..3d7dedd 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,10 @@ Proxy-Wasm extensions across different proxies. The latest and widely implemented version of the specification is [v0.2.1]. +The envisioned evolution for Proxy-Wasm is described in the [roadmap]. + [v0.2.1]: abi-versions/v0.2.1/README.md +[roadmap]: docs/Roadmap.md ## Implementations diff --git a/docs/Roadmap.md b/docs/Roadmap.md new file mode 100644 index 0000000..efb1e5e --- /dev/null +++ b/docs/Roadmap.md @@ -0,0 +1,111 @@ +# Proxy-Wasm Roadmap + +The Proxy-Wasm community and maintainers envision an evolution path that has the +following tracks: + +* [Spec / ABI](#abi) +* [SDKs / language support](#sdks) +* [Host features](#host) +* [Envoy integration](#envoy) + +Each track is described in more detail below, with owners and ETAs listed for +efforts currently in development. This roadmap should not be construed as a set +of commitments, but rather a set of directions that are subject to change in +response to community interest and investment. + +The overarching goals of this document are to: + +* Publish areas of current investment. +* Encourage external contributors by pointing out feature gaps. +* Align this repository with the vision of WebAssembly: a portable technology + that is cross-language, cross-platform, and cross-provider. + +## Spec / ABI {#abi} + +* (Q1'25: @piotrsikora, @mpwarres) Publish ABI v0.3, containing at least: + * Feature negotiation (#71 and #56) + * Better header/body buffering support (#63) + * Async shared data (#54) + * Repeated header support (#53) +* (Help wanted) WASI convergence. We want to adopt the component model at WASI + 1.0. There is a lot of overlap between Proxy-Wasm and some WASI proposals + (wasi-http, wasi-keyvalue, etc). In the short term, we'd like to define the + Proxy-Wasm ABI in + [WIT](https://github.com/WebAssembly/component-model/blob/main/design/mvp/WIT.md), + to understand: + * How do + [Proxy-Wasm interfaces](https://github.com/proxy-wasm/proxy-wasm-cpp-host/blob/main/include/proxy-wasm/context_interface.h) + map to components? + * What are the API gaps? How should we evolve Proxy-Wasm to become + WASI-compatible? + * Are there any performance gaps? +* (Help wanted) Evaluate uses of foreign functions to identify feature gaps. + * For example, Envoy + [registers foreign functions](https://github.com/search?q=repo%3Aenvoyproxy%2Fenvoy%20RegisterForeignFunction&type=code) + for signature checking, compression, filter state, route cache, and CEL + expressions. + * Are there similar extensions in Nginx? Apache Traffic Server? + * Which of these features should be promoted to ABI interfaces? + +## SDKs / language support {#sdks} + +* (Q1'25: @leonm1) Fork the abandoned Go SDK + support full Golang. +* (Google exploring) Build a Python SDK using a MicroPython port. +* (Help wanted) Stop using Emscripten in the C++ SDK. Instead use Clang / + wasi-sdk (proxy-wasm-cpp-sdk#167). +* (Help wanted) Merge LeakSignal's + [proxy-sdk](https://crates.io/crates/proxy-sdk) crate into the Rust SDK. +* (Help wanted) Build a Lua SDK using a Lua interpreter. + * Seems feasible given projects like https://github.com/vvanders/wasm_lua + * Could replace Envoy's + [Lua filter](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter) + * Could benefit NGINX's Lua-based [OpenResty](https://openresty.org/) + ecosystem +* (Help wanted) Optimize Rust SDK module size. It seems compiler dead-code + elimination is thwarted by the use of Context traits. + +## Host features {#host} + +* (Q1'25: @mpwarres) CppHost maintenance. + * Update v8 and upstream some patches for v8 warming / extension. + * Update the protobuf dependency. + * Set up dependabot. +* (Help wanted) Prototype + [HyperLight](https://github.com/hyperlight-dev/hyperlight) as a KVM-based + sandboxing layer around wasm runtimes. The allure is getting an inexpensive + and transparent second layer of security at a thread boundary, which makes + it more feasible to run fully untrusted workloads with Proxy-Wasm. +* (Help wanted) Performance benchmarks. One of Proxy-Wasm's strengths is its + ability to swap between multiple wasm runtimes. Help users make an informed + decision by benchmarking cold start and execution costs across runtimes. +* (Help wanted) Adopt CPU metering as a first-class feature. Leverage + instruction counting where available. For other engines (e.g. v8), use a + watchdog thread. +* (Help wanted) Support dynamic (per VM) limits for RAM and CPU. +* (Help wanted) Expand the use of SharedArrayBuffer to reduce memcpy into wasm + runtimes. This is especially promising for HTTP body chunks. See relevant + [WASI issue](https://github.com/WebAssembly/WASI/issues/594). Also reduce + [binary memcpy](https://github.com/proxy-wasm/proxy-wasm-cpp-host/blob/21a5b089f136712f74bfa03cde43ae8d82e066b6/src/v8/v8.cc#L272). +* (Help wanted) Implement NullVM for Rust and/or Go. For proxy owners with + trusted extensions, achieve native performance while maintaining + WebAssembly's portability. +* (Help wanted) Finish the implementation of DynVM (proxy-wasm-cpp-host#379). + This allows dynamic loading of trusted (NullVm) wasm modules. + +## Envoy integration {#envoy} + +* (Q1'25: @mpwarres, @botengyao) Get Envoy's inline wasm filter out of alpha + (envoyproxy/envoy#36996). Documentation, security scanning, tests, bug + fixes, etc. +* (TBD: @mpwarres) Implement the v0.3 Proxy-Wasm ABI. +* (Help wanted) Decouple from the thread-local execution model. As wasm + modules become more CPU intensive and leverage multiple async APIs, consider + managing a separate Proxy-Wasm threadpool. Each VM needs a work queue, and + requests need affinity to a single VM. This architecture allows for + independent thread scaling (expensive wasms get more CPU), improved + parallelism (multiple requests' wasm at the same time), and reduced memory + costs (one VM serves multiple Envoy threads). +* (Help wanted) Envoy has a single implementation for the entire Proxy-Wasm + host. Add extension points for different Proxy-Wasm interfaces (telemetry, + network calls, key value, shared queue), so Envoy operators may provide + their own implementations. From 8a6e149356b0f33ceb30326611ed083650d2f2c4 Mon Sep 17 00:00:00 2001 From: Martijn Stevenson Date: Thu, 28 Nov 2024 04:27:16 +0000 Subject: [PATCH 2/8] Formatting fixes Signed-off-by: Martijn Stevenson --- docs/Roadmap.md | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/docs/Roadmap.md b/docs/Roadmap.md index efb1e5e..f6186bd 100644 --- a/docs/Roadmap.md +++ b/docs/Roadmap.md @@ -20,13 +20,15 @@ The overarching goals of this document are to: * Align this repository with the vision of WebAssembly: a portable technology that is cross-language, cross-platform, and cross-provider. -## Spec / ABI {#abi} +## Spec / ABI + + * (Q1'25: @piotrsikora, @mpwarres) Publish ABI v0.3, containing at least: - * Feature negotiation (#71 and #56) - * Better header/body buffering support (#63) - * Async shared data (#54) - * Repeated header support (#53) + * Feature negotiation (proxy-wasm/spec#71 and proxy-wasm/spec#56) + * Better header/body buffering support (proxy-wasm/spec#63) + * Async shared data (proxy-wasm/spec#54) + * Repeated header support (proxy-wasm/spec#53) * (Help wanted) WASI convergence. We want to adopt the component model at WASI 1.0. There is a lot of overlap between Proxy-Wasm and some WASI proposals (wasi-http, wasi-keyvalue, etc). In the short term, we'd like to define the @@ -47,16 +49,19 @@ The overarching goals of this document are to: * Are there similar extensions in Nginx? Apache Traffic Server? * Which of these features should be promoted to ABI interfaces? -## SDKs / language support {#sdks} +## SDKs / language support + + * (Q1'25: @leonm1) Fork the abandoned Go SDK + support full Golang. * (Google exploring) Build a Python SDK using a MicroPython port. * (Help wanted) Stop using Emscripten in the C++ SDK. Instead use Clang / - wasi-sdk (proxy-wasm-cpp-sdk#167). + wasi-sdk (proxy-wasm/proxy-wasm-cpp-sdk#167). * (Help wanted) Merge LeakSignal's [proxy-sdk](https://crates.io/crates/proxy-sdk) crate into the Rust SDK. * (Help wanted) Build a Lua SDK using a Lua interpreter. - * Seems feasible given projects like https://github.com/vvanders/wasm_lua + * Seems quite feasible given projects like + [wasm_lua](https://github.com/vvanders/wasm_lua). * Could replace Envoy's [Lua filter](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter) * Could benefit NGINX's Lua-based [OpenResty](https://openresty.org/) @@ -64,7 +69,9 @@ The overarching goals of this document are to: * (Help wanted) Optimize Rust SDK module size. It seems compiler dead-code elimination is thwarted by the use of Context traits. -## Host features {#host} +## Host features + + * (Q1'25: @mpwarres) CppHost maintenance. * Update v8 and upstream some patches for v8 warming / extension. @@ -89,10 +96,13 @@ The overarching goals of this document are to: * (Help wanted) Implement NullVM for Rust and/or Go. For proxy owners with trusted extensions, achieve native performance while maintaining WebAssembly's portability. -* (Help wanted) Finish the implementation of DynVM (proxy-wasm-cpp-host#379). - This allows dynamic loading of trusted (NullVm) wasm modules. +* (Help wanted) Finish the implementation of DynVM + (proxy-wasm/proxy-wasm-cpp-host#379). This allows dynamic loading of trusted + (NullVm) wasm modules. + +## Envoy integration -## Envoy integration {#envoy} + * (Q1'25: @mpwarres, @botengyao) Get Envoy's inline wasm filter out of alpha (envoyproxy/envoy#36996). Documentation, security scanning, tests, bug From 2e09fbfe0d05fcdb2b5ef968dfe38880a9df098f Mon Sep 17 00:00:00 2001 From: Martijn Stevenson Date: Thu, 28 Nov 2024 04:32:44 +0000 Subject: [PATCH 3/8] Move anchor tags Signed-off-by: Martijn Stevenson --- docs/Roadmap.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/Roadmap.md b/docs/Roadmap.md index f6186bd..7ab7d52 100644 --- a/docs/Roadmap.md +++ b/docs/Roadmap.md @@ -20,10 +20,10 @@ The overarching goals of this document are to: * Align this repository with the vision of WebAssembly: a portable technology that is cross-language, cross-platform, and cross-provider. -## Spec / ABI - +## Spec / ABI + * (Q1'25: @piotrsikora, @mpwarres) Publish ABI v0.3, containing at least: * Feature negotiation (proxy-wasm/spec#71 and proxy-wasm/spec#56) * Better header/body buffering support (proxy-wasm/spec#63) @@ -49,10 +49,10 @@ The overarching goals of this document are to: * Are there similar extensions in Nginx? Apache Traffic Server? * Which of these features should be promoted to ABI interfaces? -## SDKs / language support - +## SDKs / language support + * (Q1'25: @leonm1) Fork the abandoned Go SDK + support full Golang. * (Google exploring) Build a Python SDK using a MicroPython port. * (Help wanted) Stop using Emscripten in the C++ SDK. Instead use Clang / @@ -69,10 +69,10 @@ The overarching goals of this document are to: * (Help wanted) Optimize Rust SDK module size. It seems compiler dead-code elimination is thwarted by the use of Context traits. -## Host features - +## Host features + * (Q1'25: @mpwarres) CppHost maintenance. * Update v8 and upstream some patches for v8 warming / extension. * Update the protobuf dependency. @@ -100,10 +100,10 @@ The overarching goals of this document are to: (proxy-wasm/proxy-wasm-cpp-host#379). This allows dynamic loading of trusted (NullVm) wasm modules. -## Envoy integration - +## Envoy integration + * (Q1'25: @mpwarres, @botengyao) Get Envoy's inline wasm filter out of alpha (envoyproxy/envoy#36996). Documentation, security scanning, tests, bug fixes, etc. @@ -117,5 +117,5 @@ The overarching goals of this document are to: costs (one VM serves multiple Envoy threads). * (Help wanted) Envoy has a single implementation for the entire Proxy-Wasm host. Add extension points for different Proxy-Wasm interfaces (telemetry, - network calls, key value, shared queue), so Envoy operators may provide + network calls, key value, shared queue), so that Envoy operators may provide their own implementations. From 55db3bb76eda2e698a39dacbd72460168f44b6cb Mon Sep 17 00:00:00 2001 From: Martijn Stevenson Date: Thu, 28 Nov 2024 04:43:09 +0000 Subject: [PATCH 4/8] Few nits and links Signed-off-by: Martijn Stevenson --- docs/Roadmap.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/Roadmap.md b/docs/Roadmap.md index 7ab7d52..7416012 100644 --- a/docs/Roadmap.md +++ b/docs/Roadmap.md @@ -11,7 +11,7 @@ following tracks: Each track is described in more detail below, with owners and ETAs listed for efforts currently in development. This roadmap should not be construed as a set of commitments, but rather a set of directions that are subject to change in -response to community interest and investment. +response to community interest and contributions. The overarching goals of this document are to: @@ -31,15 +31,16 @@ The overarching goals of this document are to: * Repeated header support (proxy-wasm/spec#53) * (Help wanted) WASI convergence. We want to adopt the component model at WASI 1.0. There is a lot of overlap between Proxy-Wasm and some WASI proposals - (wasi-http, wasi-keyvalue, etc). In the short term, we'd like to define the - Proxy-Wasm ABI in + ([wasi-http](https://github.com/WebAssembly/wasi-http), + [wasi-keyvalue](https://github.com/WebAssembly/wasi-keyvalue), etc). In the + short term, we'd like to define the Proxy-Wasm ABI in [WIT](https://github.com/WebAssembly/component-model/blob/main/design/mvp/WIT.md), to understand: * How do [Proxy-Wasm interfaces](https://github.com/proxy-wasm/proxy-wasm-cpp-host/blob/main/include/proxy-wasm/context_interface.h) map to components? * What are the API gaps? How should we evolve Proxy-Wasm to become - WASI-compatible? + WASI-compatible? What are good incremental steps? * Are there any performance gaps? * (Help wanted) Evaluate uses of foreign functions to identify feature gaps. * For example, Envoy @@ -66,7 +67,7 @@ The overarching goals of this document are to: [Lua filter](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter) * Could benefit NGINX's Lua-based [OpenResty](https://openresty.org/) ecosystem -* (Help wanted) Optimize Rust SDK module size. It seems compiler dead-code +* (Help wanted) Optimize Rust SDK binary size. It seems compiler dead-code elimination is thwarted by the use of Context traits. From 0a7fd71119699fdc52a84e49dc335a85f475827c Mon Sep 17 00:00:00 2001 From: Martijn Stevenson Date: Thu, 29 May 2025 03:45:31 +0000 Subject: [PATCH 5/8] Respond to PR feedback. Trim some smaller items. Signed-off-by: Martijn Stevenson --- docs/Roadmap.md | 118 +++++++++++++++++++++++------------------------- 1 file changed, 56 insertions(+), 62 deletions(-) diff --git a/docs/Roadmap.md b/docs/Roadmap.md index 7416012..211fe4c 100644 --- a/docs/Roadmap.md +++ b/docs/Roadmap.md @@ -3,10 +3,10 @@ The Proxy-Wasm community and maintainers envision an evolution path that has the following tracks: -* [Spec / ABI](#abi) -* [SDKs / language support](#sdks) -* [Host features](#host) -* [Envoy integration](#envoy) +- [Spec / ABI](#abi) +- [SDKs / language support](#sdks) +- [Host features](#host) +- [Envoy integration](#envoy) Each track is described in more detail below, with owners and ETAs listed for efforts currently in development. This roadmap should not be construed as a set @@ -15,108 +15,102 @@ response to community interest and contributions. The overarching goals of this document are to: -* Publish areas of current investment. -* Encourage external contributors by pointing out feature gaps. -* Align this repository with the vision of WebAssembly: a portable technology +- Publish areas of current investment. +- Encourage external contributors by pointing out feature gaps. +- Align this repository with the vision of WebAssembly: a portable technology that is cross-language, cross-platform, and cross-provider. ## Spec / ABI -* (Q1'25: @piotrsikora, @mpwarres) Publish ABI v0.3, containing at least: - * Feature negotiation (proxy-wasm/spec#71 and proxy-wasm/spec#56) - * Better header/body buffering support (proxy-wasm/spec#63) - * Async shared data (proxy-wasm/spec#54) - * Repeated header support (proxy-wasm/spec#53) -* (Help wanted) WASI convergence. We want to adopt the component model at WASI +- (Q1'25: @piotrsikora, @mpwarres) Publish ABI v0.3. The list of + [planned changes](proxy-wasm/spec/milestone/1) includes: + - Feature negotiation (proxy-wasm/spec#71 and proxy-wasm/spec#56) + - Better header/body buffering support (proxy-wasm/spec#63) + - Support for HTTP fields with multiple values (proxy-wasm/spec#53) +- (Help wanted) WASI convergence. We want to adopt the component model at WASI 1.0. There is a lot of overlap between Proxy-Wasm and some WASI proposals ([wasi-http](https://github.com/WebAssembly/wasi-http), [wasi-keyvalue](https://github.com/WebAssembly/wasi-keyvalue), etc). In the short term, we'd like to define the Proxy-Wasm ABI in [WIT](https://github.com/WebAssembly/component-model/blob/main/design/mvp/WIT.md), to understand: - * How do - [Proxy-Wasm interfaces](https://github.com/proxy-wasm/proxy-wasm-cpp-host/blob/main/include/proxy-wasm/context_interface.h) - map to components? - * What are the API gaps? How should we evolve Proxy-Wasm to become - WASI-compatible? What are good incremental steps? - * Are there any performance gaps? -* (Help wanted) Evaluate uses of foreign functions to identify feature gaps. - * For example, Envoy + - How does the ABI surface map to WASI types and components? + - Can WASI ABIs wholly replace Proxy-Wasm ABIs? Is performance on par? + - Is there room for language SDKs, or is wit-bindgen the future? + - How should we evolve Proxy-Wasm to become WASI-compatible? What are good + incremental steps? + - See also: https://github.com/krinkinmu/wasi-http +- (Help wanted) Evaluate uses of foreign functions to identify feature gaps. + - For example, Envoy [registers foreign functions](https://github.com/search?q=repo%3Aenvoyproxy%2Fenvoy%20RegisterForeignFunction&type=code) for signature checking, compression, filter state, route cache, and CEL expressions. - * Are there similar extensions in Nginx? Apache Traffic Server? - * Which of these features should be promoted to ABI interfaces? + - Are there similar extensions in Nginx? Apache Traffic Server? + - When/how do we promote these FFIs? Do they become negotiated features or + full members of the ABI? ## SDKs / language support -* (Q1'25: @leonm1) Fork the abandoned Go SDK + support full Golang. -* (Google exploring) Build a Python SDK using a MicroPython port. -* (Help wanted) Stop using Emscripten in the C++ SDK. Instead use Clang / +- (@leonm1, done!) Fork the abandoned Go SDK + support full Golang. +- (Google exploring) Build a Python SDK using a MicroPython port. +- (Help wanted) Stop using Emscripten in the C++ SDK. Instead use Clang / wasi-sdk (proxy-wasm/proxy-wasm-cpp-sdk#167). -* (Help wanted) Merge LeakSignal's - [proxy-sdk](https://crates.io/crates/proxy-sdk) crate into the Rust SDK. -* (Help wanted) Build a Lua SDK using a Lua interpreter. - * Seems quite feasible given projects like - [wasm_lua](https://github.com/vvanders/wasm_lua). - * Could replace Envoy's - [Lua filter](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter) - * Could benefit NGINX's Lua-based [OpenResty](https://openresty.org/) - ecosystem -* (Help wanted) Optimize Rust SDK binary size. It seems compiler dead-code - elimination is thwarted by the use of Context traits. +- (Help wanted) Build a Lua SDK using a Lua interpreter. Creates a safer + alternative to Envoy's + [Lua filter](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/lua_filter), + and could benefit Nginx's Lua-based [OpenResty](https://openresty.org/) + ecosystem. ## Host features -* (Q1'25: @mpwarres) CppHost maintenance. - * Update v8 and upstream some patches for v8 warming / extension. - * Update the protobuf dependency. - * Set up dependabot. -* (Help wanted) Prototype - [HyperLight](https://github.com/hyperlight-dev/hyperlight) as a KVM-based - sandboxing layer around wasm runtimes. The allure is getting an inexpensive - and transparent second layer of security at a thread boundary, which makes - it more feasible to run fully untrusted workloads with Proxy-Wasm. -* (Help wanted) Performance benchmarks. One of Proxy-Wasm's strengths is its +- (@mpwarres) CppHost maintenance. + - Update v8 and upstream some patches for v8 warming / extension. + - Update the protobuf dependency. + - Set up dependabot. +- (Help wanted) Prototype + [HyperLight](https://github.com/hyperlight-dev/hyperlight-wasm) as a + KVM-based sandboxing layer around wasm runtimes. The allure is getting an + inexpensive and transparent second layer of security at a thread boundary, + which makes it more feasible to run fully untrusted workloads with + Proxy-Wasm. +- (Help wanted) Performance benchmarks. One of Proxy-Wasm's strengths is its ability to swap between multiple wasm runtimes. Help users make an informed decision by benchmarking cold start and execution costs across runtimes. -* (Help wanted) Adopt CPU metering as a first-class feature. Leverage +- (Help wanted) Adopt CPU metering as a first-class feature. Leverage instruction counting where available. For other engines (e.g. v8), use a watchdog thread. -* (Help wanted) Support dynamic (per VM) limits for RAM and CPU. -* (Help wanted) Expand the use of SharedArrayBuffer to reduce memcpy into wasm - runtimes. This is especially promising for HTTP body chunks. See relevant - [WASI issue](https://github.com/WebAssembly/WASI/issues/594). Also reduce - [binary memcpy](https://github.com/proxy-wasm/proxy-wasm-cpp-host/blob/21a5b089f136712f74bfa03cde43ae8d82e066b6/src/v8/v8.cc#L272). -* (Help wanted) Implement NullVM for Rust and/or Go. For proxy owners with +- (Help wanted) Support dynamic (per VM) limits for RAM and CPU. +- (Help wanted) Expand the use of SharedArrayBuffer to reduce memcpy into wasm + runtimes. This is promising for HTTP body chunks (see relevant + [WASI issue](https://github.com/WebAssembly/WASI/issues/594)) and + [wasm binaries](https://github.com/proxy-wasm/proxy-wasm-cpp-host/blob/21a5b089f136712f74bfa03cde43ae8d82e066b6/src/v8/v8.cc#L272). +- (Help wanted) Implement NullVM for Rust and/or Go. For proxy owners with trusted extensions, achieve native performance while maintaining WebAssembly's portability. -* (Help wanted) Finish the implementation of DynVM - (proxy-wasm/proxy-wasm-cpp-host#379). This allows dynamic loading of trusted - (NullVm) wasm modules. ## Envoy integration -* (Q1'25: @mpwarres, @botengyao) Get Envoy's inline wasm filter out of alpha +- (@mpwarres, @botengyao) Get Envoy's inline wasm filter out of alpha (envoyproxy/envoy#36996). Documentation, security scanning, tests, bug fixes, etc. -* (TBD: @mpwarres) Implement the v0.3 Proxy-Wasm ABI. -* (Help wanted) Decouple from the thread-local execution model. As wasm +- (@mpwarres) Implement the v0.3 Proxy-Wasm ABI. +- (Help wanted) Decouple from the thread-local execution model. As wasm modules become more CPU intensive and leverage multiple async APIs, consider managing a separate Proxy-Wasm threadpool. Each VM needs a work queue, and requests need affinity to a single VM. This architecture allows for independent thread scaling (expensive wasms get more CPU), improved parallelism (multiple requests' wasm at the same time), and reduced memory - costs (one VM serves multiple Envoy threads). -* (Help wanted) Envoy has a single implementation for the entire Proxy-Wasm + costs (one VM serves multiple Envoy threads). It adds performance risks (CPU + scheduling latency, CPU cache misses, NUMA hopping). +- (Help wanted) Envoy has a single implementation for the entire Proxy-Wasm host. Add extension points for different Proxy-Wasm interfaces (telemetry, network calls, key value, shared queue), so that Envoy operators may provide their own implementations. From 2472f911a47dfe0f0d33a4aca7cc234e848aca9b Mon Sep 17 00:00:00 2001 From: Martijn Stevenson Date: Thu, 29 May 2025 03:51:22 +0000 Subject: [PATCH 6/8] Move from docs/Roadmap.md to ROADMAP.md Signed-off-by: Martijn Stevenson --- docs/Roadmap.md => ROADMAP.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/Roadmap.md => ROADMAP.md (100%) diff --git a/docs/Roadmap.md b/ROADMAP.md similarity index 100% rename from docs/Roadmap.md rename to ROADMAP.md From f23699c2599dca64979211eaf4dbf1467039fae9 Mon Sep 17 00:00:00 2001 From: Martijn Stevenson Date: Thu, 29 May 2025 03:53:16 +0000 Subject: [PATCH 7/8] And the README link to ROADMAP, doh Signed-off-by: Martijn Stevenson --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3d7dedd..aa8cb1e 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ The latest and widely implemented version of the specification is [v0.2.1]. The envisioned evolution for Proxy-Wasm is described in the [roadmap]. [v0.2.1]: abi-versions/v0.2.1/README.md -[roadmap]: docs/Roadmap.md +[roadmap]: ROADMAP.md ## Implementations From e86c767fd6e1fc7643690811da6aa71f34e50730 Mon Sep 17 00:00:00 2001 From: Martijn Stevenson Date: Thu, 29 May 2025 04:01:02 +0000 Subject: [PATCH 8/8] Fix link Signed-off-by: Martijn Stevenson --- ROADMAP.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 211fe4c..768b220 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -24,8 +24,8 @@ The overarching goals of this document are to: ## Spec / ABI -- (Q1'25: @piotrsikora, @mpwarres) Publish ABI v0.3. The list of - [planned changes](proxy-wasm/spec/milestone/1) includes: +- (@piotrsikora, @mpwarres) Publish ABI v0.3. The list of + [planned changes](https://github.com/proxy-wasm/spec/milestone/1) includes: - Feature negotiation (proxy-wasm/spec#71 and proxy-wasm/spec#56) - Better header/body buffering support (proxy-wasm/spec#63) - Support for HTTP fields with multiple values (proxy-wasm/spec#53)