
Brandon S Allbery KF8NH wrote:
On 8/26/10 10:23 , David Leimbach wrote:
Go, for example, has no shared libraries, and the runtime fits in every binary. It does not even depend on libc. Go binaries call the system call interface of the kernel, and the net result is that I get to test my go code, deploy it, and not worry about the state of deployed go environments quite so much as I do in the presence of shared libraries.
Um. That's a really good way to have all your programs stop working when the Linux kernel interface changes yet again ("ABIs? We don't need no steenking ABIs!" --- see in /usr/src/linux/Documentation). Solaris is similar; the only approved interface is via libc and you must link to it shared if you want your program to work across versions/releases.
If you don't mind, I'd like a proper reference for this; looking at the Linux kernel documentation as you suggest tells me that the kernelspace to userspace ABI is supposed to be 100% stable, such that I can take all the binaries (including shared libraries) from an i386 Linux 2.0 system, and run them in a chroot on my x86-64 Linux 2.6.35 system. It's the in-kernel ABI (for loadable kernel modules and the like) that's not guaranteed to remain stable. -- Simon