Besides, “there are only two sexes” is rather obviously inaccurate. While intersex people aren’t terribly common, they do exist and are well-documented – as are the genetic reasons for why they’re intersex. XX men and XY women are also a thing. Genetics are inherently messy.
But acknowledging all that would mean having to admit that sex is a complex matter and can’t be handled with simple statements like “the one you were born with is the one you should have”. It’s easier to just pretend intersex people don’t exist.
Of course you wouldn’t use an existing database engine as the foundation of a new database engine. But you would use an existing database engine as the foundation of an ERP software, which is a vastly different use case even if the software does spend a lot of time dealing with data.
If I want to build an application I don’t want to reimplement everything. That’s what middleware is for. The use case of my application is most likely not to speak a certain protocol; the protocol is just the means to what I actually want to do. There’s no reason for me to roll my own implementation from scratch and keep up with current developments except if I’m unhappy with all current implementations of that protocol.
Of course one can overdo it with middleware (the JS world is rife with this) but implementing a communication protocol is one of the classic cases where it makes sense.