Why do we use the Linux kernel's TCP stack?
Please don't rewrite your network stack unless you can afford to dedicate a team to support it full time.<p>Twice in my career I have been on teams where we decided to rewrite IP or TCP stacks.  The justifications were different each time, though never perf.<p>The projects were filled with lots of early confidence and successes.  "So much faster" and "wow, my code is a lot simpler than the kernel equivalent,  I am smart!"  We shipped versions that worked, with high confidence and enthusiasm.  It was fun.  We were smart.  We could rewrite core Internet protocol implementations and be better!<p>Then the bug reports started to roll in.  Our clean implementations started to get cluttered with nuances in the spec we didn't appreciate.  We wasted weeks chasing implementation bugs in other network stack that were defacto but undocumented parts of the internet's "real" spec.   Accommodating these cluttered that pretty code further.  Performance decreased.<p>In both cases, after about a year, we found ourselves wishing we had not rewritten the network stack.  We started making plans to eliminate the dependency, now much more complicated because we had to transition active deployments away.<p>I have not made that mistake a 3d time.<p>If you are Google, Facebook or another internet behemoth that is optimizing for efficiently at scale and can afford to dedicate a team to the problem, do it.  But if you are a startup trying to get a product off the ground, this is Premature optimization.  Stay far, far away.