That doesn’t even work in all situations. What if the system requires development packages? What if it’s a different OS or architecture? Packaging is a nightmare.
Static, portable binaries on Linux are hard.
Linux backwards-compatibility is pretty good, in that a static binary should run just fine on newer systems. I've had far worse experiences with OpenBSD, where a build on an older version of the OS would never seem to run on a newer system.
You have a container that will run anywhere, but it has a bigger attack surface and needs updates.
I also would disagree that it's easier than using virtual environments for development, and only for packaging in some narrow use cases.
That’s why it can’t be an afterthought. It must be baked into the language as part of the design (golang)