> I see systems making it more  difficult for code to make syscalls,
> not easier.

That's true.

I think it's because other systems can afford to keep that ABI unstable.
Since Linux is an independently developed kernel, it _must_ be possible
to target the kernel directly with no user space component in-between.
Someone might write a freestanding program with nothing but system calls
and boot Linux directly into it.

This feature also makes it ideal for other programming languages.
On every other operating system, you need to link to some C library.
On Linux, that library is not actually necessary due to stable ABIs.
Rust programmers could conceivably recreate the entire Linux userspace
in Rust given enough time and effort. I created a programming language
based entirely around that concept, a lisp variant which uses nothing
but system calls and provides a system-call primitive to lisp code.
It's still in its infancy due to my limited free time but it's a fact
that with system calls it could do anything, it could mount disks.

> I also think that this could be misleading.

I don't see how. The __builtin_ prefix makes it clear
that it's a compiler feature rather than a libc function.

> There are sometimes subtle differences between the
> syscall interface and the interface exported by libc.

Yes. The C libraries seem to have some kind of cancellation mechanism
built right into it, for example. Using the system calls directly
eliminates them. This lets other languages build their own mechanisms.

Reply via email to