# 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:/lib/         Lua and TinyCC toolchain payloads
            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. 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)

Back to Documentation Index