INTRO(1)

NAME
    intro - introduction to MontaukOS userspace

DESCRIPTION
    MontaukOS is a hobbyist 64-bit operating system written in C++20,
    currently at version 0.1.7 (API version 8). Userspace programs
    run in Ring 3, are loaded as static ELF64 binaries, and
    communicate with the kernel through the x86-64 SYSCALL/SYSRET
    mechanism (150 syscalls -- see syscalls(2)).
    Programs are compiled with a freestanding cross-compiler and
    linked at virtual address 0x400000. There is no standard C
    library for C++ programs -- all system interaction goes through
    the montauk:: syscall wrappers. A desktop environment with a
    window server, GUI apps, and Bluetooth/audio/networking stacks
    runs on top of the same syscall API.

GETTING STARTED
    To write a new system/CLI program, create a directory under
    programs/src/ with a main.cpp file. The entry point is:
        extern "C" void _start() { ... }
    There is no argc/argv. Use montauk::getargs() to retrieve any
    arguments passed by the parent process. Include <montauk/syscall.h>
    for the full typed syscall API. GUI apps additionally use
    win_create()/win_poll()/win_present() from montauk/Window.hpp
    (see framebuffer(2)).
    Build with:
        cd programs && make
    System/CLI binaries appear in programs/bin/os/; GUI app bundles
    (ELF + manifest.toml + icon) appear under programs/bin/apps/<name>/.

RAMDISK LAYOUT
    The boot ramdisk is mounted as drive 0 with the following
    directory structure:
        0:/os/ System/CLI binaries (shell, init, man, etc.),
                        plus os-owned data: certs/, firmware/,
                        licenses/, wallpapers/
        0:/apps/ GUI app bundles, one directory per app
                        (<app>.elf + manifest.toml + icon)
        0:/config/ System-wide config TOMLs
        0:/users/<name>/ Per-user home directories (created at
                        login), with Music/, Videos/, Pictures/,
                        config/ subdirectories
        0:/fonts/ Shared fonts
        0:/icons/ Shared icons
        0:/man/ Manual pages
        0:/www/ Web server content
        0:/sdk/ Montauk SDK (native gcc/binutils, TinyCC,
                        Lua, headers and libraries), when installed
        0:/boot/ Kernel, bootloader, ramdisk image
    There is no 0:/games/, 0:/common/, 0:/home/, or 0:/etc/ --
    these were used by earlier single-user releases and no longer
    exist. 0:/lib/ was merged into 0:/sdk/. Games and other GUI
    programs (including doom) ship as bundles under 0:/apps/.

SHELL
    The interactive shell is the primary way to interact with
    MontaukOS. Commands are resolved against the current directory
    first, then 0:/os/. Type 'help' at the shell prompt for a list
    of commands. Use 'man shell' for detailed shell documentation.

MAN PAGES
    The following man pages are available:
        intro(1) This page
        shell(1) Shell commands reference
        init(1) Init system
        dhcp(1) DHCP client
        fetch(1) HTTP client
        ping(1) ICMP ping
        nslookup(1) DNS lookup
        fontscale(1) Terminal font scaling
        edit(1) Text editor
        man(1) The man command itself
        printctl(1) Printer control
        printd(1) Print spooler daemon
        wiki(1) Wikipedia article viewer
        legal(7) Copyright and legal information
        tls-errors(5) TLS/BearSSL error reference
        syscalls(2) Overview of all syscalls
        spawn(2) Process spawning
        file(2) File I/O syscalls
        framebuffer(2) Framebuffer access
        malloc(3) Memory allocation

SEE ALSO
    shell(1), syscalls(2), malloc(3)