Neither is an issue in Go, since everything’s statically compiled and it doesn’t make any ABI guarantee.
Making this opt-out (or making precise layout opt-in) actually improves the situation there, because then you have clear, explicit guarantees.
As for the documentation,
Check -dynlink and -shared on "go compile"
https://pkg.go.dev/cmd/[email protected]
Also -buildmode and -shared on "go link"
https://pkg.go.dev/cmd/link#hdr-Command_Line
You can either create a dynamic linked package, that will dynamically link with other Go compiled code (from same toolchain), or expose a C ABI from a Go compiled .so (which may or may not include the runtime as well).
As for one possible example,
https://www.ardanlabs.com/blog/2020/07/extending-python-with...
I submit it's mostly solvable in language design. They're not all lazy of course, but claiming to be very performance-oriented is a half truth as long as you don't have a strong story here.
There is more to it than lazy language designers.