To my knowledge, they generally don't. Shared libraries are a massive pain from a programming perspective, so it's largely been avoided (even though there are some advantages for Linux distro maintainers and sysadmins).
Modern languages usually bring along their own package manager, which downloads the libraries you want to use from a central repository and then bundles them into your build artifact that you hand to users.
In 'semi-modern' languages, like the JVM languages and I think also Python, you get the dependencies in a folder as part of a larger archive.
With Go and Rust, they decided to include those libraries directly into the executable, so that many programs can just ship a single executable.
To my knowledge, they generally don't. Shared libraries are a massive pain from a programming perspective, so it's largely been avoided (even though there are some advantages for Linux distro maintainers and sysadmins).
Modern languages usually bring along their own package manager, which downloads the libraries you want to use from a central repository and then bundles them into your build artifact that you hand to users.
In 'semi-modern' languages, like the JVM languages and I think also Python, you get the dependencies in a folder as part of a larger archive.
With Go and Rust, they decided to include those libraries directly into the executable, so that many programs can just ship a single executable.