This section contains misc notes about the system as a whole. First, don't even try to use anything other than GCC. While almost all of the code is in C, there is still a good amount of inline asm sprinkled throughout as well as some other GCC-isms such as __attribute__ etc.
Second, man of the kernel data structures have been mapped read-only into each process. This avoids having to decide what information to expose to applications and which to hide. This is done by allocating most kernel data structures out of pages all mapped by the same page-directory. This page-directory can then be inserted into each application's page tables and marked RO.
Third, each system call usually takes an explicitly argument of
which environment to operate on and a capability(s) proving
access to the resources being manipulated. To save programmer
effort and speed system calls, each system call usually has
an abbreviated form that defaults to operating on the caller's
environment. Thus, there are typically two variants of each
system call: sys_foo and sys_self_foo.