El Reg is asking, once again, why IPv6 adoption is so slow... and offering explanations, but not looking at it from an implementation perspective.
Yeah, deployment is awkward, even when someone else has gone to the trouble of providing you with a working IPv6 stack, a typical network connection, and all-IPv6-capable routers. It's still awkward, and sometimes really weird stuff can happen for no obvious reason.
But, a few times over the years, I've looked at the actual spec, and what would be involved in writing an IPv6 stack, and in some cases using it over a constrained link. Gaaah!
It's a classic example of the second-system effect. Not that IPv4 is all that elegant, mind you (especially when you take TCP into account), but it's decently designed for resource-constrained systems.
IPv6, contrariwise, has a grotesquely bloated spec, starting right up front with the decision to use 128-bit addressing instead of 64 bits. OK, so the address space still falls far short of Eddington's Number, but what solar system needs more than 64 bits?
What harm, may you ask, does the extra-long address do? Well... one of the factors that's supposed to drive IPv6 adoption is the Internet of Dinguses. But a Dingus is likely to have a relatively small MCU in it, and to use a low-budget communication channel. So consider poor 6LoWPAN, trying to cram IPv6 packets into 802.15.4 (and similar) packets. The minimum IPv6 packet header is 40 bytes, including two address fields (source and destination) of 16 bytes each. The maximum packet size in normal 802.15.4 is 127 bytes, and some low-power radio products only allow 64 bytes/packet. Do we begin to see an issue here?
Yeah, the sane approach is to use some more appropriate protocol on the radio network, optimized to play nice with the short packets, and then to have a gateway between the Dingus-net protocol (Zigbee or whatever) and the Internet at large. In fact, you'd want to do that anyway, because making all your IoT thingies globally accessible over the 'Net at large is an incredibly dumb move.
Which kind of tosses the whole justification for the appallingly vast address space right in the dumpster, doesn't it? Each Dingus has a globally-unique EUI-64 address, which suffices to avoid collisions, and in a proper security-minded installation they're only visible to the universe at large via a gateway that handles access control, authentication, and all those pesky details that you'd rather not leave to a bunch of cheap gadgets whose firmware is of dubious origin and unlikely to receive security updates.