POSIX Compatibility Layer
SeptemberOS provides POSIX emulation layer, which implements common
file descriptor functions (open(), dup(), read(), write(), ...),
provides interfaces to filesystem, device drivers, sockets and
pipes/FIFOs, pthreads front-end (translation API to task manager) and
execve() emulation (also via translation API to task manager).
POSIX compatibility layer provides configuration of stdin, stdout and
stderr to be descriptors of files/devices. The most common
configuration of them is to UART.
emulation deviates from POSIX standard. Under UNIX-like OS
completely replaces address space of the calling process with a new
process from a disk. Usually exec() family calls are used after fork(),
which creates a complete duplicate of calling process'es address space;
after that one copy of the parent process continues execution and the
other executes execve().
Under SeptemberOS there are no separate
address spaces, therefore fork() semantics are senseless. So are
execve()'s original semantics. SeptemberOS implementation of execve()
just starts a new task with command-line parameters, which are then
transferred to the new task's main function (with the same prototype as
standard C main(), but with different name).