The IPv6 Mess
DJB explains this quite well; I just want to add a few things.
The real problem facing IPv6 is/was glacially slow adoption. Internet protocols are not adopted by fiat; they are adopted when the protocol offers each incremental adopter enough benefit compared to the burden of adoption. IPv6 blew it on both counts: compared to competing IPng proposals it does not provide enough benefit to the incremental adopter and it is too burdensome to implement.
Excessive Incremental Burden
I worked as an undergrad intern for Sun Microsystems in the late 90's. My job was to implement parts of the Solaris IPv6 stack. It was such a nightmare that they couldn't get any of the full-time engineers to do it.
To see how simple it could have been take a look at RFC1710.
Insufficient Incremental Benefit
Clearly if we all switched to IPv6 tomorrow we would all reap great benefit. But the Internet doesn't work that way. Early adopters will only switch if they can gain some benefit before all but a tiny fraction of the population has switched.
Here's the crux of the problem:
A good IPng proposal should not have this flaw.
Furthermore, a good IPng propsal should:
As originally proposed, IPv6 has none of these properties. The 2002::xx addresses do not meet the first criterion – they are not routable.
In the last 3-4 years the IPv6 folks have cobbled together a bunch of hacks (6over4, NAT64) to offer the services in the last two points. Unfortunately none of these are mandatory, so it is not safe to assume that every IPv6 host has access to these services. The protocols for these hacks are also hideously complex, mostly because they weren't designed into IPv6 from day one. Even if you know that a given IPv6 address has access to NAT64, 6on4, 6in4, etc, you cannot calculate the address of its NAT simply by looking at its IPv6 address. This in turn requires complicated “discovery” mechanisms.
Had IPv6 included the properties above from day one, it would be the case that an IPv6 address would be at least as useful as a IPv4 address behind a NAT. Slightly more useful, in fact, since the IPv6 address space would provide a standardized way for hosts behind different NATs to find each other (something we don't have with IPv4). I speculate that peer-to-peer software like Skype would then have become the driver for IPv6 adoption (well ahead of IPv4 exhaustion!) because IPv6 would have become the preferred way to do tunneling through NATs, something people have valued for many years now.
As it is, an IPv6 address is considerably less useful than a NATted IPv4 address. I can't see why anybody would want to go through the effort of acquiring an IPv6 address.