Re: Official Linux system wrapper library?
flat view
From: Daniel Colascione <hidden>
Date: 2018-11-10 19:06:49
Also in:
lkml
On Sat, Nov 10, 2018 at 11:01 AM, Willy Tarreau [off-list ref] wrote:
On Sat, Nov 10, 2018 at 10:52:06AM -0800, Daniel Colascione wrote:quoted
Now that glibc is basically not adding any new system call wrappers, how about publishing an "official" system call glue library as part of the kernel distribution, along with the uapi headers? I don't think it's reasonable to expect people to keep using syscall(__NR_XXX) for all new functionality, especially as the system grows increasingly sophisticated capabilities (like the new mount API, and hopefully the new process API) outside the strictures of the POSIX process.It's partly related, but you may be interested in something I did that is in the the RCU tree. It's called "nolibc", it's a set of syscall wrappers defined only in include files. It's not complete, but still enough to boot some small init wrappers. Mine can extract tar files and do stuff like this with it. Here is the kernel port in the RCU tree and an example of code using it : https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git/tree/tools/testing/selftests/rcutorture/bin/nolibc.h?h=rcu/next https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git/tree/tools/testing/selftests/rcutorture/bin/mkinitrd.sh?h=rcu/next The original one is maintained here (not very active since it works well enough for my use cases now eventhough it's far from being complete) : http://git.formilux.org/?p=people/willy/nolibc.git Maybe something along this could be done for the vast majority of syscalls and the thicker stuff be left to glibc ? That would allow simple userland to build without glibc using only kernel headers, or by occasionally defining a few extra stuff or glue.
Reminds me of LSS: https://chromium.googlesource.com/linux-syscall-support/ I'm not a fan of this approach for general-purpose use. There's value in having *some* common function-level indirection before actually issuing system calls, e.g., for LD_PRELOAD stuff.