Fuchsia's libc started as a fork of musl libc. It has since diverged
significantly, but the approximate source code layout remains the same. The
source can be found in
zircon/third_party/ulib/musl
.
TODO(https://fxbug.dev/42106460) Type more here.
Standards
C11
Fuchsia's libc supports most of the C11 standard. This in particular includes the atomic and threading portions of the standard library.
POSIX
Fuchsia implements a subset of POSIX.
Things at least partially supported include the basics of POSIX I/O (open/close/read/write/stat/...), and pthreads (threads and mutexes).
On Fuchsia, the portion of file paths beginning with a sequence of
..
is resolved locally. See this writeup for more
information.
Similarly, symlinks are not supported on Fuchsia.
Conspicuously not supported are UNIX signals, fork, and exec.
FDIO
Fuchsia's libc does not directly support I/O operations. Instead it provides weak symbols that another library can override. This is typically done by fdio.so.
Linking
Statically linking libc is not supported. Everything dynamically links libc.so.
Dynamic linking and loading
libc.so is also the dynamic linker.