Open dicej opened 7 months ago
Tagging subscribers to this area: @dotnet/ncl See info in area-owners.md if you want to be subscribed.
Author: | dicej |
---|---|
Assignees: | - |
Labels: | `area-System.Net.Http`, `untriaged` |
Milestone: | - |
Tagging subscribers to 'arch-wasm': @lewing See info in area-owners.md if you want to be subscribed.
Author: | dicej |
---|---|
Assignees: | - |
Labels: | `arch-wasm`, `area-System.Net.Http`, `untriaged`, `os-wasi` |
Milestone: | - |
Would wasi-sockets
require some new API like WebSockets
and WebRTC
do or are they compatible with normal Socket
s?
Would
wasi-sockets
require some new API likeWebSockets
andWebRTC
do or are they compatible with normalSocket
s?
Unlike WebSockets
and WebRTC
, which represent novel protocols, wasi-sockets
is only concerned with TCP and UDP network sockets (plus domain name lookups). It intentionally mirrors the Berkeley/POSIX interface for Internet sockets, with tweaks to make it more capability-oriented in keeping with the WASI security model. And even that capability model is abstracted away by wasi-libc
, so .NET's existing System.Net.Sockets
APIs should work fine. In fact, we should be able to share the existing implementation of those APIs with other POSIX-style systems .NET already supports.
let's do it 😄
WASI 0.2.0 introduces two new networking APIs: wasi-sockets (for TCP/UDP networking and hostname lookup) and wasi-http (a high-level API for handling inbound HTTP requests and sending outbound ones). Ideally, the WASI port of the .NET should support both.
Dave Bakker and I have implemented
wasi-sockets
in a temporary fork ofwasi-libc
, and I'm currently in the process of incrementally merging that work upstream, with the aim of making it available as part of the forthcoming WASI-SDK 22 release. I've also created temporary forks of Rust and CPython based on thewasi-libc
work and plan to upstream those changes as well. Similarly, I'm hoping it will be straightforward to addwasi-sockets
support to .NET as well by way of the POSIX APIs provided bywasi-libc
.Given that there's no C standard library or POSIX interface for HTTP, it won't be supported as part of
wasi-libc
, so porting e.g.System.Net.Http
to usewasi-http
will presumably involve wrappingwit-bindgen
-generated C or C# code, depending on how solid the C# binding generator is.I should note that I have close to zero experience with .NET, so I'm happy to defer to the experts here about the details of how all this should proceed. I'm also happy to learn and contribute as appropriate.