libp2p / go-libp2p

libp2p implementation in Go
MIT License
5.83k stars 1.04k forks source link

webtransport-go >v0.7 breaks compatibility with earlier versions #2789

Open MarcoPolo opened 1 month ago

MarcoPolo commented 1 month ago

webtransport-go v0.7 introduced this breaking change:

Before v0.7.0, the server (incorrectly) didn't advertise support the Extended CONNECT extension. With https://github.com/quic-go/quic-go/pull/4341, it now does. The client now checks for Extended CONNECT support, and aborts the handshake if the server doesn't support it. This means that v0.7.0 clients are now incompatible with pre-v0.7.0 servers.

from https://github.com/quic-go/webtransport-go/releases.

This means that by updating webtranport-go we will break compatibility with earlier versions of webtransport-go.

I think this is fine because the largest use case for webtransport is a browser client interacting with a webtransport server, and that won't change. A go-libp2p client connecting to a go-libp2p server should prefer quic over webtransport.

This is also probably fine because webtransport itself is experimental and still a draft. So there is an expectation that versions may not be compatible.

This issue is mostly for documentation, but if folks feel like I'm missing something, please let me know.

marten-seemann commented 1 month ago

@MarcoPolo, your analysis is correct.

I'd like to point out that it's (almost) guaranteed that compatibility with the currently deployed WebTransport will break at least once more, namely when browsers update from the current draft version to the final RFC version (and multiple times if we go through more draft versions before the RFC).