OpenProninx Handbook

This handbook documents the Core 0.1.6-dev system, its commands, and its public userspace interface.

Starting a session

Boot the QEMU image with bmake qemu (BIOS) or ./run-uefi.sh (UEFI). The system launches PSH across 4 Virtual Terminals (switch between them using CTRL + ALT + F1..F4).

ls
pwd
cat /fnusvc.status
top
fnufetch
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 & Init

OpenProninx features a SysVinit-style init (PID 1) and fnusvc supervisor. fnusvc spawns a login session on each active virtual terminal (/dev/tty1..4) and manages system services such as fnu-health. On shutdown, init performs clean process teardown (via SIGTERM/SIGKILL death ladders) and executes poweroff or reboot through halt(2).

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 Stable Core ABI covers 60 system calls with frozen numbers and signatures (syscalls 0–45, 48, 52–64). Syscalls 46–47 and 49–51 (in-kernel auth) are Experimental. The total syscall count is 65 (PRONINX_SYSCALL_COUNT). The public userspace declarations are in user/user.h; the full reference is in doc/ABI.md.

NumberSystem callInterface range
0exitStable Core ABI
1readStable Core ABI
2writeStable Core ABI
3openStable Core ABI
4closeStable Core ABI
5forkStable Core ABI
6waitStable Core ABI
7killStable Core ABI
8execStable Core ABI
9sbrkStable Core ABI
10mallocStable Core ABI
11freeStable Core ABI
12statStable Core ABI
13pipeStable Core ABI
14infoStable Core ABI
15rebootStable Core ABI
16procinfoStable Core ABI
17ioctlStable Core ABI
18getdentsStable Core ABI
19linkStable Core ABI
20mkdirStable Core ABI
21unlinkStable Core ABI
22dupStable Core ABI
23mknodStable Core ABI
24chdirStable Core ABI
25getpidStable Core ABI
26sleepStable Core ABI
27waitpidStable Core ABI
28pingStable Core ABI
29udp_openStable Core ABI
30udp_bindStable Core ABI
31udp_sendtoStable Core ABI
32udp_recvfromStable Core ABI
33udp_closeStable Core ABI
34netinfoStable Core ABI
35netconfigStable Core ABI
36tcp_openStable Core ABI
37tcp_bindStable Core ABI
38tcp_listenStable Core ABI
39tcp_acceptStable Core ABI
40tcp_connectStable Core ABI
41tcp_sendStable Core ABI
42tcp_recvStable Core ABI
43tcp_closeStable Core ABI
44dns_resolveStable Core ABI
45getuidStable Core ABI
46loginExperimental
47doas_authExperimental
48setuidStable Core ABI
49useraddExperimental
50passwdExperimental
51usersExperimental
52setforegroundStable Core ABI
53chmodStable Core ABI
54chownStable Core ABI
55poweroffStable Core ABI
56rtctimeStable Core ABI
57dfStable Core ABI
58signalStable Core ABI
59sigcatchStable Core ABI
60sigwaitStable Core ABI
61haltStable Core ABI
62hwinfoStable Core ABI
63diskinfoStable Core ABI
64getcwdStable Core 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 hwinfo for CPU/VRAM/PCI hardware inventory; struct diskinfo for attached block storage info (AHCI SATA / NVMe / RAMDisk); struct fb_modelist for display modes; network structures (struct network_status, struct network_ipv4_config, struct network_ping_request, struct network_endpoint, struct network_dns_request); struct rtctime for RTC wall-clock time; struct df_stat for storage usage; struct linux_dirent64 for directory enumeration; and struct termios / struct fb_var_screeninfo for terminal and display control.

Process observation, signals, 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. signal(2), sigcatch(2), and sigwait(2) implement signal handling and asynchronous event interception. kill(2) enforces permission isolation (only root/wheel may signal foreign processes).

Build note: Build userspace against the OpenProninx public headers: inc/abi.h, inc/syscall.h, inc/signal.h, and user/user.h.

UFS2 data volume & GPT Storage

The boot image PRONINX.img is a self-contained hybrid GPT disk containing an ESP partition (with kernel, ramdisk, and UEFI loader), an fnu-boot BIOS stage2 partition, and an fnu-root partition. When a prepared UFS2 FNU Data image is additionally attached, its namespace appears at /data.