But I do see the advantage of big addresses. They give you room for meaningful cryptographic semantic information and stateless auto configuration, both of which are very valuable in big distributed systems and for security.
So yeah, could have been simpler but not a big deal. Things like struct sockaddr_storage make programming it pretty easy too, but most older devs aren't familiar with them.
And you'd still have to rewrite all software to take advantage of it.
Everyone who thinks they could've come up with a better solution seems to conveniently forget that no solution would've both extended the address space while providing free backward compatibility with v4. Those are, quite literally, incompatible goals.
Any hacky solution you do come up with (like, say, NAT64) applies to IPv6, as well.
Meanwhile, IPv6 goes on to address a whole host of other issues, like the mess that is CIDR, simplified autoconfiguration, built in address randomization/privacy extensions, etc.
How do you extend the address space such that old devices in legacy addresses can communicate with new devices in an extended address space without NAT64-like hacks.
https://tools.ietf.org/html/rfc1454
Section 6 (Transition Plans) talks about plans to use new headers or IP Options to carry the extra information for the new protocol in an IPv4 packet. In the end they went for the alternative which was not to have a transition plan, they went for the dual stack approach instead.
The SIP proposal is interesting, it's basically the same as v4 but with 64 bit addresses. They were worried that it might not be enough, of course their predictions about exhausting the 32 bit address space were off by decades.
(a) That IPng hosts can also use IPv4 or (b) There is translation by an intermediate system
And that "The transition plans espoused by the various proposals are simply different combinations of the above."
Those options are precisely equivalent to dual stack and NAT64 respectively. No method of extending the address space van avoid doing one of the two.
Amusingly, it even predicts the situation today, noting that "Experience would tend to show that all these things will in fact happen, regardless of which protocol is chosen."
The mistake the committee made was dismissing NAT immediately instead of standardizing and approach alongside dual stack, to provide operators with options.
Huh? That's what abstractions like sockaddr_storage are for. Who cares how the address maps to the underlying CPU word size?
It's the same reason you shouldn't be storing pointers in ints. Portability requires effort. That's just life.
Look, if by the 50's somebody make some calculations and said "if we don't change our ways, we'll be out of X by 2030", and X runs out in 2030, this person will be perfectly on time, not late by 80 years.