We'll just invent mobile devices that everyone in the world gets a dozen of that take up sixteen IP addresses each. After all, if we're not actively attempting to deplete the world's IP address supplies as fast as possible, we're not making scientific progress.
As a countermeasure, I propose that IPv8 uses an arbitrary series of
these, arranged in a tree that can expand both downwards (sub-networks), and upwards (inter-solar networking). Then, define ports as simply addresses that exist in a sub-tree of the host PC.
There, each program can open an unlimited number of ports while taking up a single parent port, a virtual machine looks exactly like a real machine from the outside network, and there are enough addresses that we will literally never run out, even giving every human one billion addresses per phone, 1000 phones each, and a human population in the trillions per star system, of which there are millions inhabited.
(Downside: Ban evaders and spambots now have as many addresses they want, though banning their subnet would solve that...)
Really, it's just an extrapolation of IPv6's network prefix and host parts into an arbitrarily long tree-based identifier, and the jump from 1 byte per chunk to two (11.111.111.41 vs af42:24ed:...) to infinite potential bytes per level of the infinite-potential-level-deep tree, then combining ports with subnetworks. ("infinite" in this case means "as large as your hardware limits it" rather than "as large as the protocol limits it", so that as the hardware improves, the protocol and software can instantaneously take advantage of the improvement without even needing to recompile.)