Joerg Sonnenberger has proposed breaking apart
sys/types.h into two files – one that follows POSIX, and the other that does not. His proposal is pasted here.
“At the moment most header files depend on the inclusion of sys/types.h
and the file included there. The types defined there fall in one of following
– POSIX complaient types used both by system-dependent and portable code
– BSD specific types (e.g. u_intN_t), not needed by portable code
– machine dependent types of interest only for kernel apps (e.g. vm_size_t)
My proposal is to split sys/types.h in two part:
– sys/_types.h which defined only POSIX types and includes only those
files necessary for general userland applications or files which have
proper _KERNEL/_KERNEL_STRUCTURES guard
– sys/types.h which includes sys/_types.h and defines the rest
Afterwards all system headers must either depend on _KERNEL/_KERNEL_STRUCTURES
to be defined or only use types defined in other sytem headers or _types.h.
Esp. the use of historic BSD types like u_short, u_intN_t and similiar has
to be exchanged by either protected names like __u_short or POSIX types.
The rational is that most header file will break anyway if your programs
don’t follow POSIX, so obfuscating the system headers for POSIX types is
unnecessary. The situation is somewhat different for types not defined there.”