192 lines
6.3 KiB
HTML
192 lines
6.3 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="description" content="MontaukOS manual page: intro(1) - introduction to MontaukOS userspace">
|
|
<title>intro(1) - MontaukOS Manual</title>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
|
<style>
|
|
body {
|
|
font-family: 'Open Sans', Arial, sans-serif;
|
|
max-width: 960px;
|
|
margin: 0 auto;
|
|
padding: 1em;
|
|
line-height: 1.5;
|
|
display: flex;
|
|
gap: 2em;
|
|
}
|
|
p { margin: 0 0 0.5em; }
|
|
h2 { margin: 0.5em 0; }
|
|
.sidebar {
|
|
width: 160px;
|
|
flex-shrink: 0;
|
|
}
|
|
.sidebar ul {
|
|
list-style: none;
|
|
padding: 0;
|
|
}
|
|
.sidebar li {
|
|
margin: 0.5em 0;
|
|
}
|
|
.sidebar a {
|
|
color: #0066CC;
|
|
text-decoration: none;
|
|
font-weight: 600;
|
|
}
|
|
.sidebar a:hover {
|
|
color: #004499;
|
|
text-decoration: underline;
|
|
}
|
|
.sidebar .current {
|
|
color: #004499;
|
|
}
|
|
.sidebar hr {
|
|
border: none;
|
|
border-top: 1px solid #999;
|
|
margin: 0.75em 0;
|
|
}
|
|
.main {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
a { color: #0000EE; }
|
|
a:visited { color: #0066CC; }
|
|
hr { border-style: solid; border-width: 1px 0 0 0; border-color: #999; }
|
|
pre { background: #f0f0f0; padding: 0.5em; overflow-x: auto; }
|
|
code { background: #f0f0f0; padding: 0 0.15em; }
|
|
pre code { padding: 0; }
|
|
.center { text-align: center; }
|
|
.box {
|
|
border: 1px solid #999;
|
|
padding: 0.5em;
|
|
margin: 0.5em 0;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<div class="sidebar">
|
|
<ul>
|
|
<li><a href="../../index.html">Home</a></li>
|
|
<li><a href="../index.html">Documentation</a></li>
|
|
</ul>
|
|
<hr>
|
|
<ul>
|
|
<li><a href="index.html" class="current">Man Pages</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="main">
|
|
<div class="center">
|
|
<h1>intro(1)</h1>
|
|
</div>
|
|
|
|
<hr>
|
|
|
|
<pre><code><strong>NAME</strong>
|
|
intro - introduction to MontaukOS userspace
|
|
|
|
<strong>DESCRIPTION</strong>
|
|
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.
|
|
|
|
<strong>GETTING STARTED</strong>
|
|
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>/.
|
|
|
|
<strong>RAMDISK LAYOUT</strong>
|
|
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/.
|
|
|
|
<strong>SHELL</strong>
|
|
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.
|
|
|
|
<strong>MAN PAGES</strong>
|
|
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
|
|
|
|
<strong>SEE ALSO</strong>
|
|
shell(1), syscalls(2), malloc(3)</code></pre>
|
|
|
|
<hr>
|
|
|
|
<div class="center">
|
|
<a href="../index.html">Back to Documentation Index</a>
|
|
</div>
|
|
|
|
</div>
|
|
</body>
|
|
</html>
|