Until fairly recently ISPs could get all the IPv4 addresses they could justify. Most fixed-line ISPs in the west got an IPv4 IP for every subscriber.
Mobile providers on the other hand tended to run widespread NAT at the ISP level, I suspect this is because while it would have been easy enough to get an IP for each subscriber it would have been difficult to get enough IPs to have large local pools "just in case" a large number of subscribers converge on a given area.
However now IPv4 IPs have run out at ICANN and most RIRs and even privately held stocks are dwindling. Plain IPv6 is not a solution because the majority of Internet services do not support it yet. Many ISPs who did not previously implement address sharing have either recently had to do so or are looking at having to do so in the foreseeable future.
So some form of mechanism for sharing IPv4 addresses is needed. There are a number out there each with their pros and cons including.
- Conventional IPv4 NAT
- NAT64+DNS64 (Using DNS to point clients at a stateful ISP based stateful NAT64)
- DS-lite (encapsulating packets and sending them to a special stateful ISP based NAT44)
- 464XLAT (a mostly stateless* NAT46 on the client side combined with a stateful NAT64 on the ISP side)
- MAP-T (a stateful NAT44 with port range restriction and a mostly stateless NAT46 on the client side combined with a mostly stateless NAT64 on the ISP side)
- MAP-E (a stateful NAT44 with port range restriction on the client side, then encapsulating the packets and sending them over a tunnel to a special routing/encapsulation box at the ISP).
(and probably several others I haven't been following)
Another wrinkle on the mobile side is that some mobile networks are running out of private IPv4 or worse have already resorted to "squat space". Much of the "squat space" that mobile networks were using has now been allocated for use on the Internet. I recall having problems with T-Mobile USA subscribers being unable to access my server because it had an IP address from 22.214.171.124/8.
This has led to a number of mobile networks (beginning with T-Mobile USA) starting to gradually move away from traditional IPv4 NAT and towards NAT64/DNS64. On Andriod and Windows Mobile 464XLAT has been implemented to ease the transition for legacy applications. Apple decided not to implement 464XLAT and instead require application developers to make their applications work in a NAT64 environment.
Which address sharing mechanisms will become the most popular for fixed-line connections is still an open question at this point.
* Translation between IPv6 and IPv4 requires fragment handling, so even if the IP/port processing is stateless the overall translation process is not.