It turns out that there is a lot that I agree with you on...and some that I don't.
I'm not sure that treating a mobile device as a singular endpoint is the worst thing. Of course this does not allow for the broadband over 3/4/5G scenario, which should obviously be handled in some other fashion.
I get the historical reasoning, but the trouble is, from the network's perspective, a UE is a UE is a UE, and a given SIM card could be inserted into any "class" of device, and even be swapped between devices from time to time. The same SIM card that is in a "phone" one minute could be in a "MiFi" the next. On top of that, virtually all smartphone operating systems these days allow you to use your phone AS a mobile hotspot, so the lines are rather blurred. Is it a "singular endpoint", or is it a "router"? Maybe it's both, and the separate categories don't make any sense any longer. In fact, any of the already-deployed "singular endpoints" were all just a download away from becoming a "router", even if when initially released they lacked the feature...the only thing needed to become a packet forwarder/gateway is a sufficiently powerful enough CPU, the right code running on that CPU, and at least two network interfaces...and to be a cellular-based one, one 3GPP WWAN client interface and one of any other kind (WiFi, USB Ethernet dongle, etc.).
It's all just software, after all.
There is certainly a lot of blame to go around. (Actually this is the discussion that I wanted to avoid, but I'm getting in the mood for it

) Here goes my entirely subjective account of the ipv6 project.
[snip much of overall good synopsis]
Now this could have been adopted and it would have probably become ubiquitous quite fast. I'm not advocating that this would have been the correct thing to do.
You might not be willing to go out on that limb, but I will.

This is *absolutely* the road that should have been traveled.
the world pretty much got used to NAT, port forwarding etc. Generally this has resulted in no marked improvement for the end user.
I'm neither rabid pro- or anti-NAT. I can see the arguments for both, and am rather indifferent to the whole thing. For the most part, I'm satisfied with knowing that we will eventually (for the most part) no longer be having hosts masquerading behind other addresses once IPv6 has finally penetrated everything.
I *do*, however, predict that there *will* be more lapses in security that happen as a result of a growing number of IPv6 hosts that are not being put behind a NAT, though. I know, I know: "NAT is not a firewall", "security through obscurity is not actual security", etc. ...spare me. Yes, it's true that if you have a hypothetical gateway that is performing NAT but is *not* properly firewalling unsolicited inbound traffic (something you are unlikely to encounter with the average consumer gateway, but certainly could be accomplished with RouterOS if you actually wanted to!), all it would take to talk to hosts on the "LAN" side of that gateway from the "WAN" side is knowing what RFC 1918 range they're using internally. But the thing is, even if you had a specific target in mind, since no RFC 1918 space is going to leak from any AS (and even if it did, most other ASes will filter out the announcement anyway), and since networks even intra-AS are not going to have the particular 1918 prefix of the user whose LAN you want to infiltrate in their own tables, you practically have to be the target's direct neighbor on the same ISP to even have the chance to attempt that. Certainly you can't do that "over the internet". The same cannot be said for a world without NAT and where everything is "end-to-end" addressable...you make a tiny mistake in your firewall rules in that world, and you will probably live to regret it, fast. But make the same mistake in a world with NAT, and you likely would never know.
I admit I am also ever so slightly sympathetic to the view of NAT as more of a "PBX" type architecture / solution than it is an actual security mechanism. Not all of the phone extensions in an organization necessarily needs to have public DIDs, nor is that always desirable. Sometimes some phones should be forced to have incoming calls going through the central switchboard, it's nice to be able to be allowed to freely address them internally without regard to some external convention, and there should be a clear demarcation between what is the public network, and what is YOUR network.
* Let's do SLAAC - no state has to be maintained. Okay.
* Let's propagate basic information about the network in RAs. (MTU, gateway, DNS) Okay. Actually nice.
These two together I have actually grown to actively dislike. (I had an open mind at the beginning, and am still willing to be won over to them, but so far have not been impressed as the practical reality of the situation has made itself more manifest over time.) At first, the promise of stateless sounded great. You mean devices can just assume their own address & I don't have to maintain complicated centralized systems to assign and track them? Great! But scalability and administration/maintainability I think have proven to be problems. And I also think that this whole SLAAC thing has come to be something of the poster child representing the larger problems that have been the real cause behind the lack of quick IPv6 adoption around the world.
In IPv4 land, DHCP becoming ubiquitous was a sort of blessing in disguise, not a burden that now needs to be shucked. Even just on a small residential network, the fact that a DHCP lease is typically relatively long, and that practically-speaking the entry tends to persist in the lease table for as long as the client is actually connected to the network, makes it really easy for somebody to look at it at a glance and KNOW what is on that LAN. Especially for network / help desk people, this is a boon. It sure beats browsing through ARP caches, that's for sure!
Yet in IPv6 SLAAC land, we are now reduced to what is effectively the equivalent of browsing through ARP caches again. ND entries can expire rather quickly, and it's hard to know if you actually have a complete picture of the active hosts on a network simply by looking at that. (It also took RouterOS FOREVER to add any adjustable neighbor table expiration/timeout dials to their IPv6 settings!! It wasn't possible to make this longer until VERY recently!)
Being able to centrally control things from one location has other advantages, too, like being able to reserve "sticky" addresses that you want certain hosts to always use, for whatever reason. Yes, you could argue it is best practice to do that kind of thing within the settings of the host itself, but especially if you are support / help desk for someone else, being able to do that all from one location without needing direct access to the device ITSELF in order to change the configuration within it is nice. Not to mention that if it's something with a real crappy admin interface (who wants to type out the last 64 bits in hex of an IPv6 address on a resistive touch screen on some janky office printer?), you get to avoid that, plus the experience is consistent from device to device. And finally, maybe the host in question moves on and off your network & also visits different networks, where it wouldn't be appropriate for it to try to use your reserved address...you only want it to do so WHILE it is on your network.
"Well sure," you say, "but that's not taken away from you, since DHCPv6 exists. So if you really have those needs, use that!" Except that for all intents and purposes, DHCPv6 is treated by a lot of clients/hosts as "optional". Android, as I have mentioned before, is the biggest offender here. (It also didn't help that RouterOS for the longest time did not even have a DHCPv6 *server* that would run in anything except PD mode, even though its DHCPv6 *client* supported requesting single addresses...ARGH. I'm glad to see that it looks like they have finally addressed this.) And if you can't use the central management tool for 100% of your hosts, then...what's the point?
The RA mechanism of SLAAC that's built on the back of NDP also was not really thought through very well, as was discovered shortly after people started trying to run IPv6 on WiFi networks. It certainly was one of the first experiences *I* had when I started dabbling with IPv6 on my LAN many moons ago, and it left a bad taste in my mouth. So, apparently, when a client first brings up a network interface, it can transmit an active Router Solicitation (RS). The RA that is transmitted in response to that is sent *unicast* back to the client who solicited it. But after that, the client has to depend on hearing *multicast* RAs transmitted by the gateway at fixed intervals...there's no affordance in the RFC given to the host to actively re-solicit an RA again in the future. On WiFi, both broadcast and multicast frames are treated differently by the AP than unicast frames are...and most notably,
they can be lost in the air. If things are especially bad, it's possible that your client could be in a position where it can't hear the majority of broadcast or multicast being transmitted by the BSS. I experienced this, and wondered why in the
heck my IPv6 on some clients would work great upon initial connection, only for it to stop working some time later. Turns out, after timing it, it was because the Valid Lifetime included in the last RA it heard had been reached. And since it hadn't heard another RA to refresh that lifetime value, it expired its SLAAC addresses.
The solution that AP vendors have come up with? There's now a setting on virtually all of them one can enable which will convert one IPv6 MLD frame to multiple unicast frames, one independently sent to every actively associated WiFi client on the BSS.

Now, I know with v4, IGMP proxies have been a thing for a while, so this concept in general is not actually anything new. But applying it to this kind of problem is (and is a terrible hack, to boot)...after all, ARP and DHCP both are transmitted as broadcast, and both are used over WiFi seemingly with no issue, so how is THAT possible? Well, because they actually behave in reasonable ways and do reasonable things,
like retry a request if they fail to get a response. Geez louise, what a concept...I mean, wouldn't it be nice if, when an IPv6 host with a SLAAC'd address is finding itself nearing the end of its addresses' valid lifetimes but hasn't heard a multicast RA for a while, maybe just MAYBE it could ACTIVELY try to re-solicit another RA, rather than just shrug its shoulders, go "well gee, I guess there must no longer be any IPv6 gateways hanging out on this network...oh well", and sit there like an idiot?
Anyway, circling back to the "DHCPv6 vs. SLAAC wars", it is my view that the attitude of influential people like those on the Android development team exemplifies why IPv6 has failed so hard to reach majority penetration in any reasonable amount of time: there is a rather vocal contingent of those with influence in the IPv6 ecosystem that are zealots/idealists, and who will insist that you must deploy IPv6 their way, or not at all (or that if you deploy it but do so in what they deem a "subpar" fashion, they will publicly berate you). If it were up to them, Android will never get a DHCPv6 client, and router platforms like RouterOS would never have NAT66 or a DHCPv6 server that is capable of anything but DHCPv6-PD. Given the differences in the v4 and v6 paradigms, IT admins see (what seems to them to be) the vast amount of work required to implement the IPv6-side of a dual-stack network, and as a result it gets deprioritized. Because they are being told they have to start from scratch on many things and aren't just allowed to roll out IPv6 reachability across their *existing* infrastructure in the same way they already deal with IPv4, v6 roll-out gets delayed within their org again and again & the can gets kicked down the road.
Turns out if network operators must up-end all of their existing infrastructure in order to implement IPv6 the "ideal" way, and if you dictate to them that the "ideal" way is the ONLY acceptable way, then what ends up happening is that it either takes people longer, or they give you the finger and don't do it at all. And when this happens world-wide, you don't get the nice snowball adoption effect everyone was hoping for.
Chapter 2. Let's implement this.
[snip]
Yes, all of this is true, but let me also add that when your vendors introduce IPv6 support into their gear via software updates, but it does not rise to the level of having feature-parity with the IPv4 stack on the same product, and you are dependent on some of those features, this ALSO causes a delay in adoption. I can't count the number of times we, as largely a MikroTik shop, wanted to roll out IPv6 much earlier, but were constantly hampered by LACK OF FEATURES in RouterOS that we took for granted on the IPv4 side, and that if we wanted our network & our customers' experience with the IPv6 side to not suck, needed to happen first before we could start pushing it out.
So altogether I'm clearly not saying that everything wrong is to be attributed to network operators, or more specifically to ISPs. But a lot are.
* ISPs do have ASes (or are a significant enough part of one to have their voices heard) and getting ipv6 allocations is neither hard not expensive.
Of course getting an allocation from your RIR is not hard! The hard part comes when you try to make it usable to your end-users on the last mile, over the network that already exists, with the gear you already spent $$ on and deployed, which already actively serves thousands of paying customers!!!
Were they to allocate the recommended /48, /56 or /60, 99% of their users would be happy. Disregarding what technology they use to do this, it is definitely in their power to do so. Many don't.
As established already with the LTE/3GPP example, it is NOT always in their power to do so.
The reason I've been able to speak to this issue is that I work for a small, regional ISP; our network has grown up very, erm, "organically" over the years, and even on the last mile side runs a hodge-podge of access technologies, including fixed wireless (of many different vendors), fiber (both GPON and active ethernet), and even our own private (not attached to outside networks / no roaming) 3GPP network, for fixed access (non-mobile).
Our 3GPP network vendors' products do not support prefix delegation. It is unclear whether they ever will. So it is out of our hands! Furthermore, although we would have LOVED to, the particular regulatory environment here surrounding the specific radio band that we deployed the LTE network in basically makes the possibility of using MikroTik as LTE UE completely impractical. So, we have to buy and deploy CPE from our 3GPP network vendor (high-gain dual-pol panel antenna on the outside, ethernet cable coming inside that plugs into end-user's own router). And since we have deployed many MikroTik hAP-class devices as the end-user gateway sitting
behind those LTE UE's, but we have NO ABILITY to do IPv6 PD to them, THIS is why I am fired up about things like the lack of proxy-ndp in RouterOS! We can't do our IPv6 roll-out over our 3GPP network
without this feature! (Or at least, cannot do it in a scalable and practical way.)
If our vendors don't act, we can't act. And we also can't afford to rip-and-replace everything with somebody else's gear every time one of them fails to act, either. It seems the only leverage I have is to resort to public begging.
* Many ISPs actually allocate the prefixes dynamically, in the sense that it actually changes depending on "things". Again, this is a major problem for many users, and one that is absolutely in their power to solve. Many don't.
This is another area where I am going to have to push back. This narrative that dynamic prefix allocation is "the devil" is just another manifestation of gatekeeping IPv6 idealism/zealotry/ideology/what-have-you. Sometimes it is necessary. Just because you don't know the reasons why a given network might have deployed that way, does not mean that they didn't have a good reason.
In our case, our non-3GPP side of the network, for better or worse, still relies on PPPoE. (Just...don't even start...not in the mood

) If we were running pure IPoE then perhaps we could give everyone a static PD while also not completely blowing up our IGP tables by using VRRP for redundancy between customer gateways / access concentrators, but instead what we have are multiple PPPoE concentrators that are geographically diversified yet all exposed to the same underlying VPLS mesh, where a given customer will likely connect to the one with the shortest RTT (== closest), but could in theory end up connecting to any of them. And if one of our POPs drops offline, then everyone's tunnels will get picked up by a different access concentrator at a different data center. If we gave everyone static PD allocations with this architecture, we would have to carry EVERY customer's individual prefix in our IGP, instead of aggregating the announcements per POP/concentrator. That didn't scale in IPv4 with single /32s which is why customers *by default* get a dynamic (but public/routable!) v4 address, and it doesn't scale in IPv6, either.
If you are a customer of ours, you will get a dynamic prefix by default. If you want a static, just ask. No problem. If only the people who actually want or need one have one, that kind of extra prefix load is manageable. My bet is that vast majority won't know and won't care.
But when people just insist out of ignorance that "all ISPs should be providing static PDs at all times to everyone by default! And they better be /48s, too, by golly!", they are just continuing to perpetuate the whole "if you don't roll it out on your network in whatever way *I* deem to be the perfect, ideal way, all other considerations be damned, then just forget it" mindset. And all that leads to is no deployment. As the saying goes, don't let the perfect be the enemy of the good. Would you rather have access to the IPv6 internet
now but (in your estimation) imperfectly, or do you NOT want any access to IPv6? Because if we have to wreck out our entire network in order to re-build it from scratch such that we can deploy IPv6 in the so-called "ideal" way, well, then you are going to be waiting a lot longer before you see any IPv6 from us.
Sigh. And people wonder why it's 2025 and IPv6 still hasn't made the kind of traction that they expected it to by this point.
(Well, it felt good to get that rant out; heh.)