Closed djugei closed 5 years ago
Interesting. We welcome input from the SCTP implementers as well, @phsym @simmons @danclive
We've covered this a lot of times before, discord history is full of it and Reddit as well. Please have a look at the following discussions:
@TimonPost Then lets use this issue as a basis for a document that contrasts SCTP and laminar so people can more easily evaluate which usecases fit what protocol.
Those discussions do not seem very... full of content though. Its basically just a mention of sctp, a mention of how layer-3-sctp probably will not work and a response that sctp is usually deployed on top of udp. no further followup happening.
I totally understand your concerns. The discussions are all over the place (Github, Reddit, discord), I would like to get all the differences listed, but we decided that we would not spend any more time on it. Because it is always the same thing, we mention laminar, people are coming up with millions of other alternatives (little dramatic), sure QUIC is an other example, probably one I would go for over SCTP. It is a bit like Apple vs Android discussion.
Fortunately, we fixed that problem with our new networking implementation, where everyone is able to implement whatever protocol they want for their game. In the future, we are probably going to provide our own QUIC implementation in amethyst as a separate transport layer provider.
Laminar is not about whether SCTP or QUICK might be better, it is about building a protocol according to what gaffer wrote in a series of block posts, this library happens to be used by amethyst. Nothing more nothing less.
We see a lot of potential in our protocol as well as we see potential in other protocols. If we would switch to other protocols, we would still need to build our own abstractions on top of SCTP or QUIC to match our needs. Laminar is in such a developed state that it would be hard to just throw it away and starting all over again on top of other protocols.
In the end, there is totally no need for discussion 1) people are going to be able to use whatever protocol they want 2) we do not design our own stuff, we build a similar protocol used by millions of games. Similar to: steam network socket and netcode.io which has it's the foundation in the articles gaffer wrote. 3) laminar is a protocol as well, an alternative to others on the market. It will be up to the end-user to decide if they use it or not. 4) it is going to take time, to start all over again on top of other protocols (having no idea how much time that would take).
Closing this now because it is irrelevant.
This might seem like a troll, but SCTP is a rather mature protocol that is widely used in WebRTC and has all the features listed on the README. There is even some (incomplete) rust implementations.
Specifically SCTP has heartbeats, any combination of reliability and ordering, transmission timeouts and multiple streams just like laminar. It also has stuff like multipathing/multihoming (especially relevant for mobile!), DDOS-resistant handshakes, mature reference implementations and years of engineering.
Networking protocols are really hard to get right. It is kinda easy to get the packets flowing, but the details are a lot of work. Especially congestion control is crazy complicated, in fact complicated enough that even the linux-kernel sometimes has bugs in it.
Building a mature SCTP implementation in rust seems like it would remove a nontrivial amount of duplication of work, plus the benefit of having free WebRTC-compatibility and other synergies.
If this is not the way this project wants to go then please at least add a section to the README that contrasts laminar to other network protocols to counter nih-claims.
clarification: sctp would be deployed as SCTP over UDP, thereby avoiding problems with middleboxes.