The answer to the lack of IPv4 addresses may be at hand,
and it doesn't involve a radical shift to IPv6.
IP addresses are stored in 4 8-bit numbers.
Traditionally these are regarded as integers.
The problem is that integers have a very small range.
Even combined these 4 bytes only span a measly 4 billion
or so potential addresses.
But there's another way to store numbers on a computer, called
'floating point'.
This storage format reserves a few bits to denote the order of
magnitude of the number.
This trick allows a vastly greater range of numbers to be store
using the same number of bits.
Using floating point IP addresses, rather than integer, we can
potentially address 3.4 * (10 ^ 38) numbers, that's around
340,000,000,000,000,000,000,000,000,000,000,000,000
Note that this is the same number of addresses as offered by IPv6,
but without the need to painfully upgrade your network infrastructure!
Purists may be concerned by the 'lack of precision' of floating point
numbers: Floating point operations suffer from 'round off' errors.
This concerns would be valid if we used IP addresses in arithmetic
equations.
Raw IP addresses would shift from the current dotted-decimal notation
http://10.11.3.4/SomePage
to a floating point format:
http://1.234e+10/SomePage
Negative exponents could be used for private address ranges, giving
plenty of space to avoid the dreaded "192.168.0" clashes.
As always the raw addresses would be masked by the user-friendly
DNS mappings so end-users would never even know anything has changed.
https://en.wikipedia.org/wiki/Single-precision_floating-point_format