OpenProninx Handbook
This handbook documents the Core 0.1.0-dev system, its commands, and its public userspace interface.
Starting a session
Boot the QEMU image with bmake qemu. The system launches PSH on the local console.
ls cat /fnusvc.status top status services health
Accounts
Create an account locally with adduser NAME; add -w to place that account in wheel. The password is read from the console and must be at least eight characters. These account tools are not a complete access-control model; do not rely on them for security isolation.
Services
fnusvc is a small local supervisor. It publishes a service snapshot through /fnusvc.status. Its registered health service may be started, stopped, or restarted through PSH. A service that exits more than three times in one supervisor lifetime is marked failed and is not restarted automatically. If fnusvc exits, PID 1 reboots.
Application binary interface (ABI)
OpenProninx uses a native x86-64 system-call ABI. User programs enter the kernel with int $0x30. Put the system-call number in RAX; pass up to six arguments in RDI, RSI, RDX, RCX, R8, and R9, in that order. The kernel returns the result in RAX. An unknown or unavailable system call returns -1.
The primary system-call range is numbered 0 through 24 and includes process control, file I/O, memory allocation, status, directory, terminal, and filesystem operations. The public userspace declarations are in user/user.h; the syscall numbers are in inc/syscall.h.
| Number | System call | Interface range |
|---|---|---|
| 0 | exit | Base ABI |
| 1 | read | Base ABI |
| 2 | write | Base ABI |
| 3 | open | Base ABI |
| 4 | close | Base ABI |
| 5 | fork | Base ABI |
| 6 | wait | Base ABI |
| 7 | kill | Base ABI |
| 8 | exec | Base ABI |
| 9 | sbrk | Base ABI |
| 10 | malloc | Base ABI |
| 11 | free | Base ABI |
| 12 | stat | Base ABI |
| 13 | pipe | Base ABI |
| 14 | info | Base ABI |
| 15 | reboot | Base ABI |
| 16 | procinfo | Base ABI |
| 17 | ioctl | Base ABI |
| 18 | getdents | Base ABI |
| 19 | link | Base ABI |
| 20 | mkdir | Base ABI |
| 21 | unlink | Base ABI |
| 22 | dup | Base ABI |
| 23 | mknod | Base ABI |
| 24 | chdir | Base ABI |
| 25 | getpid | Extended ABI (Non-ABI) |
| 26 | sleep | Extended ABI (Non-ABI) |
| 27 | waitpid | Extended ABI (Non-ABI) |
| 28 | ping | Extended ABI (Non-ABI) |
| 29 | udp_open | Extended ABI (Non-ABI) |
| 30 | udp_bind | Extended ABI (Non-ABI) |
| 31 | udp_sendto | Extended ABI (Non-ABI) |
| 32 | udp_recvfrom | Extended ABI (Non-ABI) |
| 33 | udp_close | Extended ABI (Non-ABI) |
| 34 | netinfo | Extended ABI (Non-ABI) |
| 35 | netconfig | Extended ABI (Non-ABI) |
| 36 | tcp_open | Extended ABI (Non-ABI) |
| 37 | tcp_bind | Extended ABI (Non-ABI) |
| 38 | tcp_listen | Extended ABI (Non-ABI) |
| 39 | tcp_accept | Extended ABI (Non-ABI) |
| 40 | tcp_connect | Extended ABI (Non-ABI) |
| 41 | tcp_send | Extended ABI (Non-ABI) |
| 42 | tcp_recv | Extended ABI (Non-ABI) |
| 43 | tcp_close | Extended ABI (Non-ABI) |
| 44 | dns_resolve | Extended ABI (Non-ABI) |
| 45 | getuid | Extended ABI (Non-ABI) |
| 46 | login | Extended ABI (Non-ABI) |
| 47 | doas_auth | Extended ABI (Non-ABI) |
| 48 | setuid | Extended ABI (Non-ABI) |
| 49 | useradd | Extended ABI (Non-ABI) |
| 50 | passwd | Extended ABI (Non-ABI) |
| 51 | users | Extended ABI (Non-ABI) |
| 52 | setforeground | Extended ABI (Non-ABI) |
ABI data types and structures
The public ABI header uses 64-bit pointer_t and uint64, 32-bit uint32, 8-bit uint8 and proc_state_t; pid_t is a signed 32-bit type. It publishes struct info for uptime, RAM, and process count, struct procinfo for process snapshots, struct user_info, network request/status structures, struct linux_dirent64 for directory enumeration, and struct termios for terminal control.
Process observation and waiting
procinfo(struct procinfo *records, int capacity) returns a bounded process snapshot for tools such as top. waitpid(pid, WNOHANG) supports a bounded non-blocking wait; use -1 as the PID to select any direct child. It returns 0 immediately when matching children are still running.
Build note: Build userspace against the OpenProninx public headers: inc/abi.h, inc/syscall.h, and user/user.h.
UFS2 data volume
When a valid prepared UFS2 FNU Data image is attached, its namespace appears at /data. The writer supports file and empty-directory creation, direct-block writes, hard links, removal, and one level of indirect UFS2 blocks. Symlinks, double/triple indirection, and crash-safe metadata updates are not available. There is no FNU mkfs.