Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support WebAssembly (Mono Runtime) #38367

Closed
richlander opened this issue Jun 25, 2020 · 7 comments
Closed

Support WebAssembly (Mono Runtime) #38367

richlander opened this issue Jun 25, 2020 · 7 comments
Labels
arch-wasm WebAssembly architecture area-Meta Epic Groups multiple user stories. Can be grouped under a theme. runtime-mono specific to the Mono runtime
Milestone

Comments

@richlander
Copy link
Member

Support WebAssembly (Mono Runtime)

WebAssembly is a relatively new virtual machine execution environment that can run any program that can be described in and target the web assembly binary instruction format. It is supported by all major browsers, although isn’t browser-specific. We expect more general uses of WebAssembly to become commonplace in the coming years. It is important that .NET developers can publish apps to environments that support WebAssembly.

We released a first version of support for WebAssembly with Bazor WebAssembly 3.2. It was based on the Mono runtime and libraries. Uno Platform also relies on Mono for its WebAssembly support.

In .NET 5.0, we will continue to use the Mono runtime, and will switch to using the .NET 5.0 libraries. There are two major benefits to this change: better throughput performance, and higher compatibility with .NET 5.0 non-WebAssembly code. The compatbility isn’t perfect, since we’re using two different runtimes (Mono for WebAssembly and CoreCLR for everything else), and the WebAssembly environment imposes restrictions on what .NET code can do.

The following work items describe the work items required for the project. These bullets will be changed to links as we create new issues for them.

Mono Runtime Performance

  • Interpreter performance improvements
  • V8 performance improvement reports
  • Add browser wasm support for BenchmarkDotNet

Adopt .NET Runtime Libraries

  • Add support for browser based networking
  • Enable globalization with ICU
  • Support async/tasks in an environment without explicit threads
  • Add new library decorations and IL linker capabilities to reduce final application sizes and improve trimming reliability

SDK

  • Create browser wasm runtime pack for net5.0 tfm
  • Add a reference to the runtime pack in SDK for building and publishing Blazor wasm projects
@richlander richlander added Epic Groups multiple user stories. Can be grouped under a theme. arch-wasm WebAssembly architecture runtime-mono specific to the Mono runtime labels Jun 25, 2020
@richlander richlander added this to the 5.0.0 milestone Jun 25, 2020
@Dotnet-GitSync-Bot Dotnet-GitSync-Bot added area-System.Net untriaged New issue has not been triaged by the area owner labels Jun 25, 2020
@ghost
Copy link

ghost commented Jun 25, 2020

Tagging subscribers to this area: @dotnet/ncl
Notify danmosemsft if you want to be subscribed.

@richlander richlander removed the untriaged New issue has not been triaged by the area owner label Jun 25, 2020
@benaadams
Copy link
Member

Is AoT to WebAssembly in scope? e.g. to convert everything to WebAssembly rather than using a WebAssembly IL interpreter

@marek-safar
Copy link
Contributor

Is AoT to WebAssembly in scope

WebAssembly AOT support is planned for .NET 6.0 release

@srxqds
Copy link
Contributor

srxqds commented Aug 9, 2020

will mono runtime replaced by coreclr runtime in the feature?

@RChrisCoble
Copy link

Support async/tasks in an environment without explicit threads

Chrome started supporting WebAsembly Threads in 2018:

https://developers.google.com/web/updates/2018/10/wasm-threads

@Rand-Random
Copy link

Can you explain in more detail why the mono runtime is used?
The reason I am picking up is you are using the Mono runtime over the CoreCLR runtime because the uno platform uses it?

If that is the case can you explain how uno and blazor are linked together, so why uno running on mono makes a difference for blazor?

What are the plans to switching to CoreCLR?

@danmoseley
Copy link
Member

danmoseley commented Aug 24, 2020

Closing as we have completed 5.0 work planned

@ghost ghost locked as resolved and limited conversation to collaborators Dec 8, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
arch-wasm WebAssembly architecture area-Meta Epic Groups multiple user stories. Can be grouped under a theme. runtime-mono specific to the Mono runtime
Projects
None yet
Development

No branches or pull requests

8 participants