Skip to content

Conversation

@alexcrichton
Copy link
Member

This commit is an extension/refactor of #12377 and #12379. Notably this
decouples the runtime behavior of Wasmtime from enabled/disabled
WebAssembly proposals. This enables the wasmtime serve subcommand, for
example, to continue to disallow component-model-async by default but
continue to use *_concurrent under the hood.

Specifically a new Config::concurrency_support knob is added. This is
plumbed directly through to Tunables and takes over the preexisting
component_model_concurrency field. This field configures whether
tasks/etc are enabled at runtime for component-y things. The default
value of this configuration option is the same as cfg!(feature = "component-model-async"), and this field is required if
component-model-async wasm proposals are enabled. It's intended that
eventually this'll affect on-by-default wasm features in Wasmtime
depending if the support is compiled in.

This results in a subtle shift in behavior where component-model-async
concurrency is used by default now because the feature is turned on by
default, even though the wasm features are off-by-default. This required
adjusting a few indices expected in runtime tests due to tasks/threads
being allocated in index spaces.

Finally, this additionally denies access at runtime to
Linker::*_concurrent when concurrent support is disabled as otherwise
the various runtime data structures won't be initialized and panics will
happen.

Closes #12393

fitzgen and others added 2 commits January 23, 2026 12:14
This commit is an extension/refactor of bytecodealliance#12377 and bytecodealliance#12379. Notably this
decouples the runtime behavior of Wasmtime from enabled/disabled
WebAssembly proposals. This enables the `wasmtime serve` subcommand, for
example, to continue to disallow component-model-async by default but
continue to use `*_concurrent` under the hood.

Specifically a new `Config::concurrency_support` knob is added. This is
plumbed directly through to `Tunables` and takes over the preexisting
`component_model_concurrency` field. This field configures whether
tasks/etc are enabled at runtime for component-y things. The default
value of this configuration option is the same as `cfg!(feature =
"component-model-async")`, and this field is required if
component-model-async wasm proposals are enabled. It's intended that
eventually this'll affect on-by-default wasm features in Wasmtime
depending if the support is compiled in.

This results in a subtle shift in behavior where component-model-async
concurrency is used by default now because the feature is turned on by
default, even though the wasm features are off-by-default. This required
adjusting a few indices expected in runtime tests due to tasks/threads
being allocated in index spaces.

Finally, this additionally denies access at runtime to
`Linker::*_concurrent` when concurrent support is disabled as otherwise
the various runtime data structures won't be initialized and panics will
happen.

Closes bytecodealliance#12393
@alexcrichton alexcrichton requested review from a team as code owners January 23, 2026 20:54
@alexcrichton alexcrichton requested review from cfallin and fitzgen and removed request for a team January 23, 2026 20:54
Used to update disas tests to show that, when disabled, old codegen
quality is preserved
@alexcrichton
Copy link
Member Author

cc @dicej too

@alexcrichton alexcrichton added this pull request to the merge queue Jan 23, 2026
Merged via the queue into bytecodealliance:main with commit 21797bb Jan 23, 2026
45 checks passed
@alexcrichton alexcrichton deleted the concurrency-support branch January 23, 2026 23:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants