IPV6 has never been adopted because it sucks. It came into being at a time when 32 bit computing was pushing limits, so some idiot decided to jump to a 128 bit ( so we would never run out) hex notation instead of moving to 48 or 64 bits tagging on a couple more octets on the front that were implied zero. While they were at it they made it 100% incompatible with the current scheme, from notation to packet headers to "FIX" the problems with IP.
Tossing backward compatability was abundantly stupid; similar arguments were used to try and get CPU's to use 128 bit addressing. Fortunately level headed engineers shot most of that stupidity down. Even today most hardware doesn't decode more than 48 address bits because it's approaches pointless. 2^64 is a fraking big number. It all goes back to the old story of paying me a penny a day but double my salary every day for a month. Most people can't even grok compound interest. When you repeatedly DOUBLE something, the numbers get really really really big down the line. I wonder, if INTEL had a chance to rethink the 64-bit "ITANIUM" RISC vs x86 compatability if AMD would even be around.
(TCP)/IP itself was somewhat slow in widespread adoption. Internal networks runing IPX/burst were noticeably faster without the added overhead of IP packetization. It was adopted because it was fairly simple and allowed compartmentalizing and routing traffic more easily in wide area environment than other solutions at the time. ( I want an X.25 PAD! ). IPV6 packet overhead is a topic for another thread.
Changing an IP address from a 32 bit entity to a 64 bit one could have been done with a minimum of fuss, about the same as 'time_t' moving from a signed 32 to 64 bit entity. Once the libraries were adjusted, and the packet headers re-aligned, with some compatible extent marker traffic could have been trivially routed by the network stacks, but noooooo....
I'm a geek, I dissect packets for a living, but Im sorry 22.214.171.124.55.101 is a bit easier to grok than 45:26:AF:B7:2C:5A:99:27:39:87:26:45:67:89:FA:4C. Now just at a glance can you tell if I have all 128 bits there? And before you hand me the leave out zero's crap, don't even go there. I can't remember the rules. FF::01 but not FF:07::05::01, blah, blah. and if you don't need all that then why did you put it there in the first place? Don't get me started on the MAC address bullsh*t.
We "ran out" of phone numbers too. We fixed it by adding numbers to the front
7657 -> 5-7657-> 495-6757 -> 703-495-6757 -> 01+ 703-495-6757
Not by re-creating completely new dialing rules and changing to hex dialpads on the phones.
For 95% of folks NAT is quite sufficient and adds a modicum of security to most networks. As I recall IPV5 was on the right track then de-railed. Religious rants on NAT do not impress.
PS Yea, I'm old. I've been doing this a LONG time, and I miss NOVELL. :).