Oof I was unaware of the string ABI break (just had to look it up) - that’s kind of gross :-/
That said in general ABI compatibility is expected of all changes, without very good reasons - security seems like a good one, performance alas not - I assume std::string got the small string optimization because they were already going to break ABI for the threading issues.
Of course it doesn’t help that c++ is still C like so implementations/use of data layout gets compiled directly into the client application :-/