The comment about "libraries" is very important.
Applications may run in many different environments, where the actual mechanisms for "making a system call" may vary (as will the actual list of calls available). So, they don't make system-calls directly.
Instead, they avail themselves of libraries of existing code. (There are many hundreds in any system.) The libraries eventually make the system calls.
Libraries have major, minor, and tertiary version-numbers. What matters is the version of the library, not the version of the kernel. As long as the library is installed-and-working on a particular system, you may safely assume that it is, in fact, the appropriate library-version for use with that kernel (because it is, after all, "working").
If you, say, use "threads" in a 2.4.x-kernel system, they will "work," but they will work in a different way on a 2.6.x system. Your app may see the difference but it won't care about the difference. It's using "POSIX threads." It's using a library with a stable interface. The library that implements "POSIX threads," however, will have a very different implementation (and more capability, in the 2.6.x world).
|