So I think the difference here is then is gradual migration of the same IP stacks / infrastructure, and not introducing an entirely new "separate" stack.
My only experience with IPv6 was converting an IPV4 distributed database to IPV6. It wasn't... fun. Looking up separate flags and settings, weird errors (thank the gods for stack overflow), frustration.
Nowhere was it suggested, demonstrated, or detailed such a backwards compatibility / migration strategy.
That's what we have with v6. It's not entirely separate; it tends to be implemented together with v4 in the same stack of code and deployed on the same infrastructure. It's designed to allow you to migrate gradually.
> My only experience with IPv6 was converting an IPV4 distributed database to IPV6
I assume you mean patching the software to handle it... there are basically two socket APIs, the old one which was v4-only and the new one which works with any generic IP family. v6 had to add the second one because the first one was v4-only, but any replacement protocol for v4 would have had to do the same.