NOOVEXOS 64 / TECHNICAL REFERENCE
Contents
- Part 1: Overview, source layout and build system
- Part 2: Boot chain, kernel entry and kernel signatures
- 2.1 The boot paths at a glance
- 2.2 Boot media: the hybrid image (
boot/mkhybrid.py) - 2.3 BIOS path: myboot (
boot/src) - 2.4
boot/myboot/(stand-alone variant) - 2.5 Legacy custom loaders in
arch/x86_64/boot/ - 2.6 UEFI path (
boot/uefi/uefiboot.c) - 2.7 The boot-info contract (fixed low memory)
- 2.8 Kernel entry:
arch/x86_64/boot/boot64.S - 2.9
kmain()step by step (core/init/main.c) - 2.10 Main loop and state machine
- 2.11 Boot menu, recovery, setup and splash
- 2.12 Kernel signatures and integrity
- 2.13 Size limits along the chain
- 2.14 Gotchas
- Part 3: Memory
- 3.1 Boot order
- 3.2 Physical memory map (firmware map)
- 3.3 Fixed physical regions
- 3.4 Boot page tables
- 3.5 Kernel heap (
mem/heap.c,mem/heap_api.c) - 3.6 DMA arena (
dma_alloc,dma_alloc_pages) - 3.7 Frame pool (
pframe_*) - 3.8 Virtual memory (
mem/pmm_vmm.c,core/proc/jobs.c) - 3.9 User address space
- 3.10
mmap,munmap,brk(sys/linux/linux.c) - 3.11 Page-fault path and OOM
- 3.12 File-system memory (
fs/vfs/ramfs.c) - 3.13 Summary of limits
- 3.14 Memory above 4 GiB
- 3.15 The 100 MiB kernel layout
- Part 4: CPU, interrupts, timers and multi-core
- 4.1
arch/x86_64/cpu/cpu.h, the CPU interface - 4.2
arch/x86_64/cpu/cpu_init.c - 4.3 GDT, selectors, TSS and IST stacks (
arch/x86_64/user/ring3.c) - 4.4 IDT gates and the vector map (
arch/x86_64/interrupts/interrupts.c) - 4.5 Interrupt frame and
isr_common - 4.6
isr_dispatchandisr_body - 4.7 PIC and PIT
- 4.8 High-resolution timers (
arch/x86_64/time/hrtimer.c) - 4.9 Per-CPU state (
arch/x86_64/cpu/percpu.c) - 4.10 The big kernel lock (
arch/x86_64/cpu/percpu.c) - 4.11 System calls:
int 0x80andsyscall - 4.12 Multi-core discovery (
arch/x86_64/smp/smp.c) - 4.13 AP trampoline (
arch/x86_64/boot/ap_trampoline.S) - 4.14 AP runtime (
arch/x86_64/smp/smp_sched.c) - 4.15 TLB coherence
- 4.16 The
smpshell commands (shell/commands.c)
- 4.1
- Part 5: Processes, scheduling, signals and the native system-call ABI
- 5.1 Per-CPU scheduling state
- 5.2 The process table:
struct jproc - 5.3 Process states
- 5.4 Life cycle: create, build, fork, exec, finish, wait
- 5.5 The setjmp/longjmp scheduling model
- 5.6 Blocking and restartable system calls
- 5.7 Signals
- 5.8 Job control and the terminal
- 5.9 File descriptors and pipes
- 5.10 The ELF loader (
core/proc/elf.c) - 5.11 Embedded programs:
JS_BINandjc_find_prog - 5.12 The native
int 0x80system-call ABI - 5.13 The legacy scheduler and demos (
core/proc/sched.c) - 5.14 init (PID 1) and
/etc/rc - 5.15 Threads and futexes
- 5.16 Interval timers and alarm
- Part 6: Linux compatibility, libc and porting applications
- 6.1 How a Linux system call reaches the kernel
- 6.2 File-related details
- 6.3 poll/select, time, memory, processes, signals
- 6.4 Complete Linux system-call table
- 6.5 The C libraries
- 6.6 How programs are embedded and found
- 6.7 The ported programs
- 6.7a Ports built from source: TCC, vim, less, curl, git, Dropbear (v10.07)
- 6.7b NetSurf (v10.07)
- 6.8 Test programs
- 6.9 Step-by-step porting guide
- 6.10 Dynamic linking
- 6.11 TLS for programs: BearSSL,
fetchand the root store - 6.12 FFmpeg and the
playcommand - 6.13 The media service (
/dev/media) - 6.14 The Video Player window (
apps/media/videoplayer.c) - 6.14a mlibc (
third_party/mlibc,/usr/mlibc) - 6.15 glibc programs
- 6.16 Debian packages: apt and dpkg
- 6.17 Python 3.13
- 6.18 The Python IDE package (
python3-ide) - 6.19 X11: the X.Org server (
startx,apps/x11/xdisplay.c) - 6.20 Tkinter, Tk and IDLE
- 6.21 X programs as normal desktop apps (v9.28)
- Part 7: File systems
- 7.1 The in-memory file table (
fs/vfs/ramfs.c) - 7.2 The directory tree (
fs/vfs/dirtree.c) - 7.3 Unix semantics (
fs/vfs/unixfs.c) - 7.4 The VFS layer (
fs/vfs/vfs.c) - 7.5 Locating the data area (
fs/nvx/nvxfs.c) - 7.6 The NVX4 on-disk format (
fs/nvx/nvx4.c) - 7.7 Old formats and conversion
- 7.8 NTFS and FAT root file systems (
fs/ntfs/ntfsk.c) - 7.9 FAT drivers
- 7.10 Packages (
fs/pkg/pkg.c)
- 7.1 The in-memory file table (
- Part 8: Storage drivers, PCI and the installer
- 8.1 PCI (
drivers/bus/pci.c) - 8.2 ATA PIO (
drivers/storage/ata.c) - 8.3 AHCI (
drivers/storage/gdisk.c) - 8.4 NVMe (
drivers/storage/nvme.c) - 8.5 Generic disk layer (
drivers/storage/nvme.c, after the NVMe driver) - 8.6 VirtIO-blk module (
drivers/virtio/virtio_blk.c) - 8.7 The installer (
core/init/installer.c) - 8.8 Disk Manager (
dm_*,core/init/installer.clines 1-104) - 8.9 USB mass storage (
drivers/usb/xhci.c) - 8.10 Shell commands (
shell/commands.c) - 8.11 Partition scanner (
fs/vfs/parts.c) - 8.12 Updates from inside NoovexOS (
core/update.c)
- 8.1 PCI (
- Part 9: Networking and Wi-Fi
- 9.1 Where the code lives
- 9.2 The driver module API (
kapi.h,drivers.h) - 9.3 NIC bring-up and probe order
- 9.4 Wired NIC drivers
- 9.5 The netdev indirection (Ethernet vs Wi-Fi)
- 9.6 TCP/IP stack (
net/stack/tcpip.c) - 9.7 Sockets (
net/stack/sockets.c) - 9.8 HTTP, entropy and HTTPS (
net/http/http.c) - 9.8a WebSockets (
apps/internet/websock.c, v10.11) - 9.9 TLS 1.3 client and crypto library
- 9.10 Wi-Fi: Realtek RTL8821CE
- 9.11 Network shell commands
- Part 10: Input, USB, ACPI, sound and graphics drivers
- 10.1 Where the drivers start and how they are polled
- 10.2 Shared input state and the key queue
- 10.3 PS/2 keyboard and mouse (
drivers/input/ps2/ps2.c,ps2_mouse.c) - 10.4 Elan PS/2 touchpad (
drivers/input/ps2/elan_ps2.c) - 10.5 I2C HID touchpads
- 10.6 xHCI USB (
drivers/usb/xhci.c) - 10.7 ACPI and power
- 10.8 RTC (
drivers/rtc/cmos.c) - 10.9 Sound (
core/sound.c,drivers/sound/*) - 10.10 Video
- 10.11 CPU information (
arch/x86_64/cpu/cpuinfo.c) - 10.11a CPU temperature and speed (
arch/x86_64/cpu/cputemp.c) - 10.11b AMD GPIO (
drivers/gpio/amd_gpio.c) - 10.12 Summary of bounded waits
- Part 11: Desktop, applications, shell and scripting
- 11.1 UI states and the main loop
- 11.2 Window manager (
graphics/ui/wm.c) - 11.3 Desktop shell and compositor (
graphics/ui/desktop.c) - 11.4 Input routing (
graphics/ui/input.c,process_input) - 11.5 Live terminal mode vs. desktop terminal
- 11.6 Setup (OOBE) and login (
core/init/setup.c) - 11.7 Applications (
apps/) - 11.8 The shell (
nsh) - 11.9 Scripting languages
- 11.10 Kernel modules:
usr/mod/hello_mod.cand the.MODformat - 11.11 Fonts and assets (
assets/) - 11.12 Escape sequences, termios and full-screen programs
- Task Manager and Settings (v9.73)
- 11.13 Classic look (v10.23)
- Part 12: Testing, quality gates, debugging and history
- 12.1 Overview of the test approach
- 12.2
tools/check.py, the automatic bug checker - 12.2a Typical workflows
- 12.3
tools/emulate.py, boot-path emulation - 12.4 Host harnesses in
tools/tests - 12.5 The serial debug log (
core/klog.c) - 12.6 Panic and the Red Screen of Death (
core/panic.c) - 12.7 Diagnostic shell commands
- 12.8 Running NoovexOS in a VM
- 12.9 Troubleshooting guide
- 12.10 Glossary of internal names
- 12.11 Version history
- 12.6 Crash reports, freeze reports and start-up notes (
core/crash.c) - 12.12 Testing updates in QEMU
- Part 13: The web engine, JavaScript and cookies
- 13.1 Build and link
- 13.2 The kernel interface (
nwe_api.h) - 13.3 Memory
- 13.4 HTML parsing and the DOM (
web/dom.c) - 13.5 CSS (
web/cssparse.c,web/cssstyle.c) - 13.6 Layout (
web/layout.c,web/layout2.c) - 13.7 Painting, fonts and images
- 13.8 JavaScript (
web/js.c,web/prelude.js) - 13.9 Networking and the HTTP client (
apps/internet/webglue.c) - 13.10 Cookies and web storage (
net/http/cookies.c) - 13.11 The Browser window (
apps/internet/browser.c) - 13.12 Memory layout change in v9.08
- 13.13 The
qjscommand - 13.14 Testing the engine
- 13.15 Known gaps
- 13.16 Extending the engine
- 13.17 Video and audio in the browser
- 13.18 Transforms, animations and transitions
- 13.19 Web fonts
- 13.20 Shadow DOM
- 13.21 Style system speed
- 13.22 Crash containment
- 13.23 YouTube player page
- 13.24 Limits raised for large web apps
- 13.25 Staying responsive while a page works
- 13.26 Layout on demand for scripts
- 13.27 Bugs found against a modern landing page
- 13.28 New tab page and probe fixes
- 13.29 Faster loading and form controls
- 13.30 Load time limits
- 13.31 Canvas 2D (v10.10)
- 13.32 Grid layout in Rust (v10.10)
- 13.33 WebSockets (v10.11)
- 13.34 Popups and postMessage for sign-in (v10.11)
- 13.35 Iframes (v10.12)
- 13.36 Reloads, tabs and the toolbar (v10.13)
- 13.37 Web Crypto and structuredClone (v10.14)
- 13.38 Framework compatibility, incremental restyle and stability (v10.15)
- 13.39 Code cache, HTTP cache, IndexedDB, Workers and keys (v10.15)
- 13.40 WebAssembly, Service Workers and the Cache API (v10.16)
- 13.41 Freeze and crash fixes, popover and dialog (v10.17)
- 13.42 Mouse, keyboard, clipboard and container queries (v10.18)
- 13.43 Hit testing, form control sizes, intrinsic keywords, middle click, text and file drag, key repeat (v10.19)
- 13.44 Connection reuse, parallel fetching, persistent caches, page timing and more interfaces (v10.20)
- 13.45 Faster AES-GCM, TCP window scaling, after-load timing (v10.21)
- 13.46 TLS 1.2, P-256 and HelloRetryRequest, faster DOM bindings, feature tests, wheel events (v10.22)
- 13.47 Request headers, animation events, frame load events (v10.23)
- 13.48 Name lookups, frames, streaming, faster built-ins (v10.25)
