Compare commits

..
7 Commits
Author SHA1 Message Date
daniel 0b31daeeef docs - simplify changelog 2026-10-14 07:56:37 +02:00
daniel 400772a84d news - make 0.2.0 release first item 2026-10-14 07:52:20 +02:00
daniel f0cba5f57e news - add 0.2.0 release 2026-10-14 07:51:19 +02:00
daniel 0b0689a74e release - 0.2.0 2026-10-14 07:47:58 +02:00
daniel a463834e0a docs - refresh man pages 2026-10-14 07:31:20 +02:00
daniel 7eda8b1a8d docs - rename to status codes; complete page 2026-10-01 08:38:10 +02:00
daniel 62626d8acd docs - add history page; add return codes manual page 2026-09-30 08:51:40 +02:00
38 changed files with 2077 additions and 526 deletions

No files matched your search

+1
View File
@@ -54,6 +54,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
+1
View File
@@ -117,6 +117,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
+121
View File
@@ -0,0 +1,121 @@
<!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 status codes">
<title>Status codes - MontaukOS</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.75em; }
h2 { margin: 1.25em 0 0.5em; }
.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; }
table {
border-collapse: collapse;
width: 100%;
margin: 0.5em 0;
}
th, td {
border: 1px solid #999;
padding: 0.35em 0.5em;
text-align: left;
vertical-align: top;
}
th { background: #f0f0f0; }
th:first-child, td:first-child {
width: 8em;
white-space: nowrap;
}
.center { text-align: center; }
@media (max-width: 700px) {
body { flex-direction: column; gap: 1em; padding: 1em 0.75em; }
.sidebar { width: auto; }
.sidebar ul { display: flex; flex-wrap: wrap; gap: 0 1em; }
.sidebar hr { width: 100%; }
}
</style>
</head>
<body>
<div class="sidebar">
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
</ul>
<hr>
<ul>
<li><a href="index.html">Application Programming Manual</a></li>
<li><a href="status-codes.html" class="current">Status codes</a></li>
</ul>
</div>
<div class="main">
<div class="center">
<h1>Status codes</h1>
</div>
<hr>
<p>The following table is a reference to the numerical status codes returned by the MontaukOS system and applications.</p>
<table>
<colgroup>
<col style="width: 8em">
<col>
</colgroup>
<thead>
<tr><th>Code</th><th>Text</th><th>Explanation</th></tr>
</thead>
<tbody>
<tr><td>0</td><td>Success</td><td></td></tr>
<tr><td>(-)1</td><td>Generic failure</td><td></td></tr>
<tr><td>(-)2</td><td>Permission denied</td><td></td></tr>
<tr><td>(-)3</td><td>Capability denied</td><td></td></tr>
<tr><td>(-)4</td><td>System integrity error</td><td>The path is protected by the system and can't be modified.</td></tr>
<tr><td>(-)5</td><td>Bad pointer</td><td></td></tr>
<tr><td>(-)6</td><td>Invalid argument</td><td></td></tr>
<tr><td>(-)7</td><td>Unsupported operation</td><td></td></tr>
<tr><td>(-)8</td><td>No device</td><td></td></tr>
<tr><td>(-)9</td><td>I/O failure</td><td></td></tr>
<tr><td>(-)10</td><td>Bad invocation</td><td></td></tr>
<tr><td>(-)11</td><td>No such path</td><td></td></tr>
<tr><td>(-)12</td><td>Busy</td><td></td></tr>
<tr><td>(-)13</td><td>Buffer too small</td><td>The buffer supplied by the caller is too small.</td></tr>
<tr><td>(-)14</td><td>Out of memory</td><td></td></tr>
</tbody>
</table>
<hr>
<div class="center">
<a href="../index.html">Back to Documentation Index</a>
</div>
</div>
</body>
</html>
+4
View File
@@ -98,6 +98,7 @@
<ul>
<li><a href="../index.html">Home</a></li>
<li><a href="../downloads.html">Downloads</a></li>
<li><a href="../history.html">History</a></li>
<li><a href="index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -131,6 +132,9 @@
<li>
<a href="apm/dialogs.html">Dialogs library</a>
</li>
<li>
<a href="apm/status-codes.html">Status codes</a>
</li>
</ul>
<hr>
+8 -2
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,9 +111,11 @@
<pre><code><strong>NAME</strong>
dhcp - obtain network configuration via DHCP
<strong>SYNOPSIS</strong>
dhcp
<strong>DESCRIPTION</strong>
The DHCP client automatically obtains an IP address, subnet mask,
default gateway, and other network parameters from a DHCP server
@@ -125,6 +128,7 @@
The client is run automatically by the init system at boot, but
may also be invoked manually from the shell.
<strong>PROTOCOL</strong>
The client performs the standard four-message DHCP exchange:
@@ -139,11 +143,13 @@
Each step has a 10-second timeout. If no response is received
the client exits with an error and restores the previous config.
<strong>OUTPUT</strong>
On success the client prints the assigned configuration:
IP Address, Subnet Mask, Gateway, DNS Server, Lease Time
<strong>OPTIONS</strong>
The DHCP client requests the following options from the server:
@@ -152,9 +158,9 @@
6 DNS Server
51 Lease Time
<strong>SEE ALSO</strong>
ifconfig(1), shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
ifconfig(1), <a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+11 -2
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,9 +111,11 @@
<pre><code><strong>NAME</strong>
edit - text editor for MontaukOS
<strong>SYNOPSIS</strong>
edit [filename]
<strong>DESCRIPTION</strong>
edit is an interactive text editor. When invoked with a filename,
it opens the file for editing. If the file does not exist, a new
@@ -121,8 +124,10 @@
When invoked without arguments, edit opens an empty buffer. You
will be prompted for a filename when saving.
<strong>KEYBOARD SHORTCUTS</strong>
<strong>Navigation</strong>
Arrow Keys Move cursor up/down/left/right
Home Move to start of line
@@ -130,18 +135,21 @@
Page Up Scroll up one page
Page Down Scroll down one page
<strong>Editing</strong>
Backspace Delete character before cursor
Delete Delete character at cursor
Enter Insert new line
Tab Insert 4 spaces
<strong>Commands</strong>
Ctrl+S Save file
Ctrl+Q Quit (warns if unsaved changes)
Ctrl+F Search for text
Ctrl+G Find next occurrence
<strong>DISPLAY</strong>
The top line shows the filename, a modified indicator [+],
and the current cursor position (Ln, Col).
@@ -151,13 +159,14 @@
Line numbers are displayed in a gutter on the left side.
Lines past the end of the file are marked with ~.
<strong>EXAMPLES</strong>
edit intro.1 Edit a file
edit Open a new empty buffer
<strong>SEE ALSO</strong>
cat(1), shell(1)</code></pre>
<strong>SEE ALSO</strong>
cat(1), <a href="shell.html">shell(1)</a></code></pre>
<hr>
<div class="center">
+10 -3
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,10 +111,12 @@
<pre><code><strong>NAME</strong>
fetch - HTTP/HTTPS client for MontaukOS
<strong>SYNOPSIS</strong>
fetch [-v] &lt;url&gt;
fetch [-v] &lt;host&gt; &lt;port&gt; [path]
<strong>DESCRIPTION</strong>
fetch performs an HTTP/1.0 GET request and prints the response
body to the terminal. Supports both plain HTTP and HTTPS (TLS 1.2)
@@ -130,12 +133,14 @@
If no path is given, "/" is used.
<strong>OPTIONS</strong>
<strong>-v</strong>
<strong>-v</strong>
Verbose mode. Print connection info, trust anchor count, TLS
handshake progress, and the HTTP status/size header before
the body.
<strong>EXAMPLES</strong>
fetch https://icanhazip.com
Print your public IP address over HTTPS.
@@ -155,6 +160,7 @@
fetch 10.0.68.1 80 /
Fetch from a local server by IP (legacy syntax).
<strong>TLS SUPPORT</strong>
HTTPS connections use BearSSL for TLS 1.2. Server certificates
are validated against the system CA bundle at
@@ -163,12 +169,13 @@
Entropy for the TLS handshake is provided by RDTSC-seeded
random data via the SYS_GETRANDOM syscall.
<strong>KEYBOARD</strong>
Ctrl+Q Abort the request
<strong>SEE ALSO</strong>
ping(1), nslookup(1), tcpconnect(1), shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="ping.html">ping(1)</a>, <a href="nslookup.html">nslookup(1)</a>, tcpconnect(1), <a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+25 -14
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,26 +111,30 @@
<pre><code><strong>NAME</strong>
open, read, getsize, close, readdir - file I/O system calls
<strong>SYNOPSIS</strong>
<strong> int montauk::open(const char* path);</strong>
<strong> int montauk::read(int handle, uint8_t* buf, uint64_t offset, uint64_t size);</strong>
<strong> uint64_t montauk::getsize(int handle);</strong>
<strong> void montauk::close(int handle);</strong>
<strong> int montauk::readdir(const char* path, const char** names, int max);</strong>
<strong>int montauk::open(const char* path);</strong>
<strong>int montauk::read(int handle, uint8_t* buf, uint64_t offset, uint64_t size);</strong>
<strong>uint64_t montauk::getsize(int handle);</strong>
<strong>void montauk::close(int handle);</strong>
<strong>int montauk::readdir(const char* path, const char** names, int max);</strong>
<strong>DESCRIPTION</strong>
MontaukOS provides a Virtual File System (VFS) with read/write
support. Drive 0 is the boot ramdisk; additional drives may be
mounted from GPT partitions backed by FAT32 or ext2 (see
syscalls(2), STORAGE section). Files are accessed via paths in
<a href="syscalls.html">syscalls(2)</a>, STORAGE section). Files are accessed via paths in
the format "&lt;drive&gt;:/&lt;path&gt;".
<strong>open</strong>
Opens a file and returns a non-negative handle on success, or a
negative value on error (file not found, no free handles).
int h = montauk::open("0:/os/hello.elf");
<strong>read</strong>
Reads up to 'size' bytes starting at 'offset' into 'buf'.
Returns the number of bytes actually read, or negative on error.
@@ -139,16 +144,19 @@
uint8_t buf[512];
int n = montauk::read(h, buf, 0, 512);
<strong>getsize</strong>
Returns the total size in bytes of the file.
uint64_t sz = montauk::getsize(h);
<strong>close</strong>
Closes the file handle and frees kernel resources.
montauk::close(h);
<strong>readdir</strong>
Lists entries in a directory. Up to 'max' entry names (VFS cap
256, driver-backed listings such as 0:/os/ cap 128) are written
@@ -164,6 +172,7 @@
call, use montauk::readdir_at(path, names, max, startIndex) and
advance startIndex by the returned count until it returns 0.
<strong>READING PATTERN</strong>
The standard pattern for reading a file:
@@ -182,12 +191,13 @@
}
montauk::close(h);
<strong>WRITING, DELETING, RENAMING</strong>
<strong> int montauk::fcreate(const char* path);</strong>
<strong> int montauk::fwrite(int handle, const uint8_t* buf, uint64_t offset, uint64_t size);</strong>
<strong> int montauk::fdelete(const char* path);</strong>
<strong> int montauk::fmkdir(const char* path);</strong>
<strong> int montauk::frename(const char* oldPath, const char* newPath);</strong>
<strong>int montauk::fcreate(const char* path);</strong>
<strong>int montauk::fwrite(int handle, const uint8_t* buf, uint64_t offset, uint64_t size);</strong>
<strong>int montauk::fdelete(const char* path);</strong>
<strong>int montauk::fmkdir(const char* path);</strong>
<strong>int montauk::frename(const char* oldPath, const char* newPath);</strong>
fcreate creates a new file and returns a handle. fwrite writes
bytes at the given offset. fdelete removes a file, fmkdir
@@ -200,15 +210,16 @@
montauk::fs_mount), changes are written through to storage; use
montauk::fs_sync() to flush caches before power-off.
<strong>NOTES</strong>
Drive 0 is loaded at boot from a USTAR tar archive into RAM.
Other drives are mounted on demand from GPT partitions on
SATA/NVMe/USB block devices; see syscalls(2), STORAGE and
SATA/NVMe/USB block devices; see <a href="syscalls.html">syscalls(2)</a>, STORAGE and
DEVICES sections.
<strong>SEE ALSO</strong>
syscalls(2), spawn(2), malloc(3)</code></pre>
<strong>SEE ALSO</strong>
<a href="syscalls.html">syscalls(2)</a>, <a href="spawn.html">spawn(2)</a>, <a href="malloc.html">malloc(3)</a></code></pre>
<hr>
<div class="center">
+7 -2
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,11 +111,13 @@
<pre><code><strong>NAME</strong>
fontscale - get or set terminal font scale
<strong>SYNOPSIS</strong>
fontscale
fontscale &lt;n&gt;
fontscale &lt;x&gt; &lt;y&gt;
<strong>DESCRIPTION</strong>
Controls the terminal font scale factor. The Flanterm terminal
emulator renders text at a configurable scale multiplier.
@@ -134,6 +137,7 @@
Valid scale values are 1 through 8. After rescaling, the screen
is cleared.
<strong>OUTPUT</strong>
fontscale
Scale: 1x1 (160 cols x 50 rows)
@@ -141,15 +145,16 @@
fontscale 2
Scale set to 2x2 (80 cols x 25 rows)
<strong>EXAMPLES</strong>
fontscale Show current scale and dimensions
fontscale 2 Double the font size
fontscale 3 2 3x horizontal, 2x vertical
fontscale 1 Reset to default size
<strong>SEE ALSO</strong>
shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+15 -6
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,14 +111,17 @@
<pre><code><strong>NAME</strong>
fb_info, fb_map - direct framebuffer access
<strong>SYNOPSIS</strong>
<strong> void montauk::fb_info(montauk::abi::FbInfo* info);</strong>
<strong> void* montauk::fb_map();</strong>
<strong>void montauk::fb_info(montauk::abi::FbInfo* info);</strong>
<strong>void* montauk::fb_map();</strong>
<strong>DESCRIPTION</strong>
These syscalls allow userspace programs to access the linear
framebuffer directly for graphical output.
<strong>fb_info</strong>
Fills in an FbInfo structure with the framebuffer geometry:
@@ -128,15 +132,18 @@
The pitch is the number of bytes per scanline (may be larger
than width * 4 due to alignment). bpp is always 32.
<strong>fb_map</strong>
Maps the physical framebuffer into the process address space at
a fixed virtual address (0x50000000) and returns that address.
Maps the physical framebuffer into a dedicated region of the process
address space and returns its address. Programs must use the returned
pointer rather than assuming a particular virtual address.
uint32_t* pixels = (uint32_t*)montauk::fb_map();
Each pixel is a 32-bit value in 0xAARRGGBB format (blue in the
low byte). Writing to this memory directly updates the screen.
<strong>PIXEL FORMAT</strong>
Bits 31-24: Alpha (unused, typically 0xFF)
Bits 23-16: Red
@@ -145,6 +152,7 @@
Example: red = 0x00FF0000, green = 0x0000FF00, blue = 0x000000FF
<strong>EXAMPLE</strong>
Fill the screen with blue:
@@ -159,6 +167,7 @@
}
}
<strong>NOTES</strong>
After mapping, the cursor overlay is not composited. Programs
that use the framebuffer take full control of screen output.
@@ -166,9 +175,9 @@
Only one mapping per process is supported. Calling fb_map()
multiple times returns the same address.
<strong>SEE ALSO</strong>
syscalls(2), malloc(3)</code></pre>
<strong>SEE ALSO</strong>
<a href="syscalls.html">syscalls(2)</a>, <a href="malloc.html">malloc(3)</a></code></pre>
<hr>
<div class="center">
+65 -44
View File
@@ -102,6 +102,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -127,56 +128,51 @@ Manual pages for MontaukOS, viewable in-system with the <a href="man.html">man(1
<ul class="doc-list">
<li>
<a href="intro.html">intro(1)</a>
<p>introduction to MontaukOS userspace</p>
</li>
<li>
<a href="shell.html">shell(1)</a>
<p>MontaukOS interactive command shell</p>
</li>
<li>
<a href="init.html">init(1)</a>
<p>MontaukOS init system</p>
</li>
<li>
<a href="dhcp.html">dhcp(1)</a>
<p>obtain network configuration via DHCP</p>
</li>
<li>
<a href="fetch.html">fetch(1)</a>
<p>HTTP/HTTPS client for MontaukOS</p>
</li>
<li>
<a href="ping.html">ping(1)</a>
<p>send ICMP echo requests</p>
</li>
<li>
<a href="nslookup.html">nslookup(1)</a>
<p>DNS hostname lookup</p>
</li>
<li>
<a href="fontscale.html">fontscale(1)</a>
<p>get or set terminal font scale</p>
</li>
<li>
<a href="edit.html">edit(1)</a>
<p>text editor for MontaukOS</p>
</li>
<li>
<a href="fetch.html">fetch(1)</a>
<p>HTTP/HTTPS client for MontaukOS</p>
</li>
<li>
<a href="fontscale.html">fontscale(1)</a>
<p>get or set terminal font scale</p>
</li>
<li>
<a href="init.html">init(1)</a>
<p>MontaukOS init system</p>
</li>
<li>
<a href="intro.html">intro(1)</a>
<p>introduction to MontaukOS userspace</p>
</li>
<li>
<a href="man.html">man(1)</a>
<p>display manual pages</p>
</li>
<li>
<a href="nslookup.html">nslookup(1)</a>
<p>DNS hostname lookup</p>
</li>
<li>
<a href="ping.html">ping(1)</a>
<p>send ICMP echo requests</p>
</li>
<li>
<a href="printctl.html">printctl(1)</a>
<p>configure printers and submit print jobs</p>
@@ -187,6 +183,26 @@ Manual pages for MontaukOS, viewable in-system with the <a href="man.html">man(1
<p>MontaukOS userspace print spooler daemon</p>
</li>
<li>
<a href="shell.html">shell(1)</a>
<p>MontaukOS interactive command shell</p>
</li>
<li>
<a href="sshd.html">sshd(1)</a>
<p>MontaukOS SSH-2 server</p>
</li>
<li>
<a href="vol.html">vol(1)</a>
<p>list mounted volumes</p>
</li>
<li>
<a href="wifi.html">wifi(1)</a>
<p>scan for wireless networks and inspect the Wi-Fi adapter</p>
</li>
<li>
<a href="wiki.html">wiki(1)</a>
<p>Wikipedia article viewer for MontaukOS</p>
@@ -199,8 +215,13 @@ Manual pages for MontaukOS, viewable in-system with the <a href="man.html">man(1
<ul class="doc-list">
<li>
<a href="syscalls.html">syscalls(2)</a>
<p>overview of MontaukOS system calls</p>
<a href="file.html">file(2)</a>
<p>file I/O system calls</p>
</li>
<li>
<a href="framebuffer.html">framebuffer(2)</a>
<p>direct framebuffer access</p>
</li>
<li>
@@ -209,13 +230,8 @@ Manual pages for MontaukOS, viewable in-system with the <a href="man.html">man(1
</li>
<li>
<a href="file.html">file(2)</a>
<p>file I/O system calls</p>
</li>
<li>
<a href="framebuffer.html">framebuffer(2)</a>
<p>direct framebuffer access</p>
<a href="syscalls.html">syscalls(2)</a>
<p>overview of MontaukOS system calls</p>
</li>
</ul>
@@ -229,6 +245,11 @@ Manual pages for MontaukOS, viewable in-system with the <a href="man.html">man(1
<p>userspace heap allocation</p>
</li>
<li>
<a href="rtlsdr.html">rtlsdr(3)</a>
<p>userspace RTL2832U and R820T2 radio driver</p>
</li>
</ul>
<h2>File Formats / Reference (Section 5)</h2>
+27 -12
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,30 +111,44 @@
<pre><code><strong>NAME</strong>
init - MontaukOS init system
<strong>SYNOPSIS</strong>
Spawned automatically by the kernel as PID 0.
<strong>DESCRIPTION</strong>
init is the first userspace process started by the MontaukOS
kernel. It chains system services in sequence, then launches
the interactive shell.
kernel. It discovers system services from 0:/config/init.toml
and starts them in the order their tables appear in that file.
Each service is spawned as a child process. init waits for it
to exit before starting the next one. If a service fails to
spawn, init logs an error and continues to the next stage.
Each enabled service is spawned as a child process. Services may
run in the background or block startup until they exit. Disabled
services are logged and skipped.
Log output is timestamped and color-coded:
HH:MM:SS INFO init Starting dhcp
HH:MM:SS OK init dhcp finished (pid 1)
<strong>BOOT SEQUENCE</strong>
The following services are started in order:
1. 0:/os/dhcp.elf Obtain network configuration via DHCP
2. 0:/os/shell.elf Launch the interactive shell
<strong>CONFIGURATION</strong>
Each service is declared as a named TOML table:
[services.dhcp]
path = "0:/os/dhcp.elf"
enabled = true
wait = false
path is required. name controls the name shown in the boot log and
defaults to the table name. enabled and wait both default to true.
optional skips a service whose executable is not installed.
fallback names another configured service to start if spawning the
service fails. A service with fallback_only = true is available as
a fallback but is not started during the normal pass.
After all foreground services exit, init enters an idle loop.
After the shell exits, init enters an idle loop.
<strong>LOG LEVELS</strong>
init uses four log levels, each with a distinct color:
@@ -143,9 +158,9 @@
WARN Yellow Non-fatal warning
FAIL Red Service failed to start
<strong>SEE ALSO</strong>
dhcp(1), shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="dhcp.html">dhcp(1)</a>, <a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+48 -55
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,31 +111,22 @@
<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
MontaukOS is a 64-bit operating system written in C++20,
currently at version 0.2.0 (API version 11). 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)).
mechanism (roughly 190 syscall numbers, 0-189 - see <a href="syscalls.html">syscalls(2)</a>).
Programs are built with the x86_64-montauk cross toolchain and
linked at virtual address 0x400000. MontaukOS has its own C
library along with the Montauk API (montauk:: wrappers).
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 &lt;montauk/syscall.h&gt;
for the full typed syscall API. GUI apps additionally use
win_create()/win_poll()/win_present() from montauk/Window.hpp
(see framebuffer(2)).
programs/src/ with a main.cpp file.
Build with:
@@ -143,64 +135,65 @@
System/CLI binaries appear in programs/bin/os/; GUI app bundles
(ELF + manifest.toml + icon) appear under programs/bin/apps/&lt;name&gt;/.
<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
(&lt;app&gt;.elf + manifest.toml + icon)
0:/os/ System/CLI binaries, os data
0:/apps/ App bundles
0:/config/ System-wide config TOMLs
0:/users/&lt;name&gt;/ Per-user home directories (created at
login), with Music/, Videos/, Pictures/,
config/ subdirectories
0:/users/&lt;name&gt;/ User home directories
0:/state/ Mutable system runtime state
0:/tmp/ Scratch space
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:/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. 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
The interactive shell can be used to interact with
MontaukOS. Commands are resolved against the current directory
first, then 0:/os/. Type 'help' at the shell prompt for a list
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
<a href="intro.html">intro(1)</a> This page
<a href="shell.html">shell(1)</a> Shell commands reference
<a href="init.html">init(1)</a> Init system
<a href="dhcp.html">dhcp(1)</a> DHCP client
<a href="fetch.html">fetch(1)</a> HTTP client
<a href="ping.html">ping(1)</a> ICMP ping
<a href="nslookup.html">nslookup(1)</a> DNS lookup
<a href="wifi.html">wifi(1)</a> Wi-Fi configuration
<a href="sshd.html">sshd(1)</a> SSH daemon
<a href="fontscale.html">fontscale(1)</a> Terminal font scaling
<a href="edit.html">edit(1)</a> Text editor
<a href="man.html">man(1)</a> The man command itself
<a href="printctl.html">printctl(1)</a> Printer control
<a href="printd.html">printd(1)</a> Print spooler daemon
<a href="wiki.html">wiki(1)</a> Wikipedia article viewer
<a href="legal.html">legal(7)</a> Copyright and legal information
<a href="tls-errors.html">tls-errors(5)</a> TLS/BearSSL error reference
<a href="syscalls.html">syscalls(2)</a> Overview of all syscalls
<a href="spawn.html">spawn(2)</a> Process spawning
<a href="file.html">file(2)</a> File I/O syscalls
<a href="framebuffer.html">framebuffer(2)</a> Framebuffer access
<a href="malloc.html">malloc(3)</a> Memory allocation
<a href="rtlsdr.html">rtlsdr(3)</a> RTL-SDR software radio API
<strong>SEE ALSO</strong>
shell(1), syscalls(2), malloc(3)</code></pre>
<a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a>, <a href="malloc.html">malloc(3)</a></code></pre>
<hr>
<div class="center">
+3 -1
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,6 +111,7 @@
<pre><code><strong>NAME</strong>
MontaukOS legal/copyright information
<strong>DESCRIPTION</strong>
Copyright (c) 2025-2026 Daniel Hammer, et al.
(includes contributors to other projects, i.e. The Limine Bootloader. Please refer to any other project's own license.)
@@ -139,6 +141,7 @@
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
<strong>THIRD-PARTY COMPONENTS</strong>
MontaukOS is distributed together with third-party components that remain
under their own licenses, including:
@@ -165,7 +168,6 @@
Unsplash License
Full license texts and notices are on this system in 0:/os/licenses/.</code></pre>
<hr>
<div class="center">
+34 -24
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,60 +111,69 @@
<pre><code><strong>NAME</strong>
malloc, mfree, realloc - userspace heap allocation
<strong>SYNOPSIS</strong>
<strong> void* montauk::malloc(uint64_t size);</strong>
<strong> void montauk::mfree(void* ptr);</strong>
<strong> void* montauk::realloc(void* ptr, uint64_t size);</strong>
<strong>void* montauk::malloc(uint64_t size);</strong>
<strong>void montauk::mfree(void* ptr);</strong>
<strong>void* montauk::realloc(void* ptr, uint64_t size);</strong>
<strong>DESCRIPTION</strong>
The userspace heap provides dynamic memory allocation on top of
the kernel's page-mapping syscall (SYS_ALLOC). Include the
header &lt;montauk/heap.h&gt; to use these functions.
anonymous virtual memory. The Montauk C++ API and libc's
malloc/free API use the same process-wide allocator.
<strong>malloc</strong>
Allocates 'size' bytes from the free list. Returns a 16-byte
aligned pointer, or nullptr on failure. When the free list is
empty, it requests more pages from the kernel via SYS_ALLOC
(minimum 16 KiB growth, initial seed of 64 KiB).
empty, it reserves more pages from the kernel. Physical pages
are committed as they are first touched.
char* buf = (char*)montauk::malloc(1024);
<strong>mfree</strong>
Returns the block to the userspace free list. No syscall is
made -- the memory stays mapped and is immediately reusable.
Returns the block to the userspace allocator. Arena blocks are
immediately reusable; large direct mappings are returned to the
kernel, including their virtual address range.
Passing nullptr is a safe no-op.
montauk::mfree(buf);
<strong>realloc</strong>
Resizes the allocation to 'size' bytes. Allocates a new block,
copies the smaller of old/new sizes, and frees the old block.
Resizes the allocation to 'size' bytes. A block with sufficient
capacity is retained; otherwise a new block is allocated, the
smaller of old/new requested sizes is copied, and the old block
is freed. Integer overflow fails without changing the old block.
If ptr is nullptr, behaves like malloc.
buf = (char*)montauk::realloc(buf, 2048);
<strong>IMPLEMENTATION</strong>
The allocator uses a linked free-list with first-fit search.
Blocks larger than needed are split. The allocation header is
16 bytes (magic + size). All allocations are 16-byte aligned.
The heap grows by requesting pages from the kernel via
SYS_ALLOC. These pages are never returned to the kernel (since
SYS_FREE is currently a no-op), but mfree makes them available
for future malloc calls within the process.
<strong>IMPLEMENTATION</strong>
The allocator uses segregated size-class bins and a coalescing
address-ordered overflow list. Headers retain both requested size
and actual block extent. A process-wide lock serializes C and C++
allocation calls. All returned pointers are 16-byte aligned.
Allocations of 256 KiB or more use direct page mappings so they
can be released promptly. Smaller allocations use growing arenas.
<strong>LOW-LEVEL PAGE API</strong>
For large allocations or when direct page control is needed:
void* montauk::alloc(uint64_t size); // SYS_ALLOC
void montauk::free(void* ptr); // SYS_FREE (no-op)
void montauk::free(void* ptr); // SYS_FREE
alloc() reserves zero-filled, read/write, non-executable pages.
Size is rounded up to 4 KiB. Freed ranges are reusable.
alloc() maps zeroed pages starting at 0x40000000 and growing
upward. Size is rounded up to 4 KiB page boundaries.
<strong>SEE ALSO</strong>
syscalls(2), file(2)</code></pre>
<a href="syscalls.html">syscalls(2)</a>, <a href="file.html">file(2)</a></code></pre>
<hr>
<div class="center">
+12 -5
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,9 +111,11 @@
<pre><code><strong>NAME</strong>
man - display manual pages
<strong>SYNOPSIS</strong>
<strong> man topic</strong>
<strong> man section topic</strong>
<strong>man topic</strong>
<strong>man section topic</strong>
<strong>DESCRIPTION</strong>
The man command displays manual pages from the ramdisk in a
@@ -123,9 +126,10 @@
in order. If a section number is given, only that section is
checked.
<strong>KEY BINDINGS</strong>
<strong>Navigation</strong>
<strong>Navigation</strong>
j, Down Arrow Scroll down one line
k, Up Arrow Scroll up one line
Space, Page Down Scroll down one page
@@ -134,12 +138,14 @@
G, End Go to bottom
q Quit
<strong>SECTIONS</strong>
1 User commands and programs
2 System calls (kernel interface)
3 Library functions (userspace libraries)
7 Miscellaneous (legal, conventions)
<strong>FILES</strong>
Man pages are stored on the ramdisk at:
@@ -147,15 +153,16 @@
For example, man intro reads 0:/man/intro.1
<strong>EXAMPLES</strong>
man intro View the introduction
man 2 syscalls View syscall overview (section 2)
man malloc View malloc documentation
man legal View copyright information
<strong>SEE ALSO</strong>
intro(1), shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="intro.html">intro(1)</a>, <a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+8 -2
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,9 +111,11 @@
<pre><code><strong>NAME</strong>
nslookup - DNS hostname lookup
<strong>SYNOPSIS</strong>
nslookup &lt;hostname&gt;
<strong>DESCRIPTION</strong>
Resolves a hostname to an IPv4 address using the configured
DNS server and prints the result.
@@ -121,6 +124,7 @@
configured DNS server and waits up to 5 seconds for a reply.
Results are cached in an 8-entry kernel cache with TTL support.
<strong>OUTPUT</strong>
Server: 10.0.68.1
Name: example.com
@@ -131,18 +135,20 @@
Could not resolve: badhost.invalid
<strong>DNS CONFIGURATION</strong>
The DNS server address is obtained automatically via DHCP.
It can also be viewed and set with ifconfig. The default
is 10.0.68.1 (QEMU user-mode networking).
<strong>EXAMPLES</strong>
nslookup google.com
nslookup icanhazip.com
<strong>SEE ALSO</strong>
ping(1), fetch(1), dhcp(1), ifconfig(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="ping.html">ping(1)</a>, <a href="fetch.html">fetch(1)</a>, <a href="dhcp.html">dhcp(1)</a>, ifconfig(1), <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+7 -2
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,9 +111,11 @@
<pre><code><strong>NAME</strong>
ping - send ICMP echo requests
<strong>SYNOPSIS</strong>
ping &lt;host&gt;
<strong>DESCRIPTION</strong>
Sends 4 ICMP echo requests to the specified host and prints
the round-trip time for each reply.
@@ -123,6 +126,7 @@
Each request has a 3-second timeout. Requests are sent at
1-second intervals.
<strong>OUTPUT</strong>
PING example.com (93.184.216.34)
Reply from 93.184.216.34: time=12ms
@@ -134,6 +138,7 @@
Request timed out
<strong>EXAMPLES</strong>
ping 10.0.68.1
Ping the gateway by IP address.
@@ -141,9 +146,9 @@
ping google.com
Ping by hostname (requires DNS).
<strong>SEE ALSO</strong>
nslookup(1), ifconfig(1), shell(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="nslookup.html">nslookup(1)</a>, ifconfig(1), <a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+22 -19
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -109,36 +110,38 @@
<pre><code><strong>NAME</strong>
printctl - configure printers and submit print jobs
<strong>SYNOPSIS</strong>
<strong>printctl</strong>
<em>command</em>
[<em>options</em>]
<strong>printctl</strong>
<em>command</em>
<em>[ options ]</em>
<strong>DESCRIPTION</strong>
<strong>printctl</strong>
<strong>printctl</strong>
manages the MontaukOS userspace print spooler and submits print jobs to IPP printers.
<strong>COMMANDS</strong>
<strong>set-printer <em>URI</em></strong>
Store the default printer URI.
<strong>set-printer URI</strong>
Store the default printer URI.
<strong>show-printer</strong>
Print the configured default printer URI.
<strong>show-printer</strong>
Print the configured default printer URI.
<strong>print <em>FILE</em> [--printer <em>URI</em>] [--name <em>JOB</em>] [--wait]</strong>
Queue a file for printing.
<strong>print FILE [--printer URI] [--name JOB] [--wait]</strong>
Queue a file for printing.
<strong>test-page [--printer <em>URI</em>] [--wait] [--no-wait]</strong>
Generate and queue a simple test page.
<strong>test-page [--printer URI] [--wait] [--no-wait]</strong>
Generate and queue a simple test page.
<strong>status [--verbose]</strong>
Show daemon state and queued, active, completed, and failed jobs.
<strong>status [--verbose]</strong>
Show daemon state and queued, active, completed, and failed jobs.
<strong>inspect <em>JOB-ID</em></strong>
Show full metadata and debug details for a queued, active, completed, or failed job.
<strong>probe [<em>URI</em>]</strong>
Probe the configured printer, print host and resolution details, and show IPP capability diagnostics.</code></pre>
<strong>inspect JOB-ID</strong>
Show full metadata and debug details for a queued, active, completed, or failed job.
<strong>probe [URI]</strong>
Probe the configured printer, print host and resolution details, and show IPP capability diagnostics.</code></pre>
<hr>
<div class="center">
+6 -4
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -109,16 +110,17 @@
<pre><code><strong>NAME</strong>
printd - MontaukOS userspace print spooler daemon
<strong>SYNOPSIS</strong>
<strong>printd</strong>
<strong>printd</strong>
<strong>DESCRIPTION</strong>
<strong>printd</strong>
<strong>printd</strong>
monitors the print spool directories, claims queued jobs, and delivers them to IPP printers.
It is normally launched automatically by
<strong>init</strong>(1)
<strong>init (1)</strong>
and does not require direct user interaction.</code></pre>
<hr>
<div class="center">
+166
View File
@@ -0,0 +1,166 @@
<!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: rtlsdr(3) - userspace RTL2832U and R820T2 radio driver">
<title>rtlsdr(3) - 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;
}
@media (max-width: 700px) {
body {
flex-direction: column;
gap: 1em;
padding: 1em 0.75em;
}
.sidebar {
width: auto;
}
.sidebar ul {
display: flex;
flex-wrap: wrap;
gap: 0 1em;
}
.sidebar hr {
width: 100%;
}
}
</style>
</head>
<body>
<div class="sidebar">
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</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>rtlsdr(3)</h1>
</div>
<hr>
<pre><code><strong>NAME</strong>
rtlsdr.lib - userspace RTL2832U and R820T2 radio driver
<strong>SYNOPSIS</strong>
#include &lt;rtlsdr/rtlsdr.h&gt;
<strong>DESCRIPTION</strong>
The library at
<strong>0:/os/rtlsdr.lib</strong>
drives supported Realtek RTL2832U USB receivers from userspace through the
generic process-owned USB API. Supported USB product IDs are 0bda:2832 and
0bda:2838. Samples are returned as interleaved unsigned 8-bit I/Q pairs.
Applications load the library with libloader, resolve the
<strong>rtlsdr_*</strong>
symbols declared in the header, enumerate devices, open one, configure it,
start bulk reception, read samples, stop, and close it. Claims are exclusive
and are released by the kernel if the process exits or the device disconnects.
<strong>API</strong>
<strong>rtlsdr_count</strong>
and
<strong>rtlsdr_get_device_info</strong>
enumerate compatible unbound USB interfaces.
<strong>rtlsdr_open</strong>
claims an interface and returns an opaque device pointer.
<strong>rtlsdr_set_center_freq,</strong>
<strong>rtlsdr_set_sample_rate,</strong>
<strong>rtlsdr_set_tuner_gain_mode,</strong>
<strong>rtlsdr_set_tuner_gain,</strong>
<strong>rtlsdr_set_freq_correction,</strong>
<strong>rtlsdr_set_agc_mode,</strong>
and
<strong>rtlsdr_set_direct_sampling</strong>
configure the receiver.
<strong>rtlsdr_start,</strong>
<strong>rtlsdr_read,</strong>
and
<strong>rtlsdr_stop</strong>
control non-blocking reception.
<strong>NOTES</strong>
Syscall numbers 140 through 148 are reserved former SDR slots and are not an
API. Device-specific control and tuner programming live entirely in this
library.</code></pre>
<hr>
<div class="center">
<a href="../index.html">Back to Documentation Index</a>
</div>
</div>
</body>
</html>
+48 -12
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,6 +111,7 @@
<pre><code><strong>NAME</strong>
shell - MontaukOS interactive command shell
<strong>DESCRIPTION</strong>
The MontaukOS shell is a command interpreter launched by init
after system services have started. It provides command
@@ -120,6 +122,7 @@
a command is not a builtin, the shell searches for a matching
ELF binary and executes it as a child process.
<strong>COMMAND RESOLUTION</strong>
When a non-builtin command is entered, the shell searches for
a matching binary in the following order:
@@ -143,16 +146,20 @@
Arguments after the command name are passed to the spawned
process.
<strong>BUILTINS</strong>
<strong>help</strong>
Display a categorized list of available commands.
<strong>ls [dir]</strong>
List files in the current directory, or in the specified
directory. Directory entries are shown with a trailing slash.
Examples: ls, ls man, ls os
<strong>cd [dir]</strong>
Change the working directory. With no argument, returns to the
logged-in user's home directory (0:/users/&lt;user&gt;); with /,
@@ -160,33 +167,42 @@
The shell prompt reflects the current directory.
Examples: cd os, cd .., cd
<strong>pwd</strong>
Print the current working directory as an absolute path
(e.g. "0:/os").
<strong>echo [-n] ...</strong>
Print the arguments. -n suppresses the trailing newline.
<strong>set [VAR=value]</strong>
With no argument, list all shell variables (built-in and
user-defined). With VAR=value, set a variable. With a bare
name, print that variable's value.
<strong>unset VAR</strong>
Remove a user-defined shell variable.
<strong>true / false</strong>
Return exit status 0 / 1 without doing anything. Useful with
&amp;&amp; and ||.
<strong>N:</strong>
A bare "&lt;number&gt;:" (e.g. "1:") switches the current drive to
drive N and resets the working directory to that drive's root.
<strong>exit</strong>
Terminate the shell process (with the last command's exit code).
<strong>SYNTAX</strong>
<strong>Variables</strong>
NAME=value Set a shell variable (no leading $)
$VAR or ${VAR} Expand a variable's value
@@ -195,11 +211,13 @@
home directory, current directory)
\$ Escape a literal '$'
<strong>Tilde expansion</strong>
A leading ~ expands to the session home directory
(0:/users/&lt;user&gt;) when followed by end-of-string, '/', or a
space.
<strong>Command chaining</strong>
cmd1 ; cmd2 Run cmd2 unconditionally after cmd1
cmd1 &amp;&amp; cmd2 Run cmd2 only if cmd1 succeeded (exit 0)
@@ -208,25 +226,29 @@
Single and double quotes protect ;, &amp;&amp;, and || from being
treated as separators.
<strong>Comments</strong>
A '#' outside of quotes starts a comment; the rest of the line
is ignored.
<strong>EXTERNAL COMMANDS</strong>
All external commands live in 0:/os/ (see COMMAND RESOLUTION).
Where a dedicated man page exists it is noted below; run
'man &lt;command&gt;' for details.
<strong>File commands</strong>
cat &lt;file&gt; Display file contents
edit [file] Text editor -- see edit(1)
edit [file] Text editor -- see <a href="edit.html">edit(1)</a>
copy &lt;src&gt; &lt;dst&gt; Copy a file
move &lt;src&gt; &lt;dst&gt; Move/rename a file
rm &lt;file&gt; Remove a file
touch &lt;file&gt; Create an empty file
<strong>System commands</strong>
man &lt;topic&gt; View manual pages -- see man(1)
man &lt;topic&gt; View manual pages -- see <a href="man.html">man(1)</a>
whoami Print the current username
info / mtkfetch Show system information
date Show current date and time
@@ -234,30 +256,39 @@
proclist List running processes
power CPU power/thermal status (power [watch [secs]])
clear Clear the screen and framebuffer
fontscale [n] Get or set terminal font scale -- see fontscale(1)
fontscale [n] Get or set terminal font scale -- see <a href="fontscale.html">fontscale(1)</a>
lua Lua interpreter
tcc TinyCC (in-system C compiler)
reset Reboot the system
shutdown Shut down the system
reset / reboot Request a supervised system reboot
shutdown / poweroff Request a supervised system shutdown
suspend Enter ACPI sleep
Interactive shutdown and reboot are shell builtins: they post a
capability-checked request and exit the console, allowing login.elf to
flush filesystems and perform the final power operation. They do not grant
CAP_POWER_CONTROL to the shell.
<strong>Network commands</strong>
ping &lt;host&gt; Send ICMP echo requests -- see ping(1)
nslookup &lt;host&gt; DNS lookup -- see nslookup(1)
ping &lt;host&gt; Send ICMP echo requests -- see <a href="ping.html">ping(1)</a>
nslookup &lt;host&gt; DNS lookup -- see <a href="nslookup.html">nslookup(1)</a>
ifconfig Show/set network configuration
tcpconnect &lt;host&gt; &lt;port&gt; Interactive TCP client
irc IRC client
dhcp DHCP client -- see dhcp(1)
fetch &lt;url&gt; HTTP/HTTPS client (TLS 1.2) -- see fetch(1)
wiki &lt;title&gt; Wikipedia article viewer -- see wiki(1)
dhcp DHCP client -- see <a href="dhcp.html">dhcp(1)</a>
fetch &lt;url&gt; HTTP/HTTPS client (TLS 1.2) -- see <a href="fetch.html">fetch(1)</a>
wiki &lt;title&gt; Wikipedia article viewer -- see <a href="wiki.html">wiki(1)</a>
httpd HTTP server
Network commands accept both IP addresses and hostnames.
Hostnames are resolved via the configured DNS server.
<strong>Bluetooth</strong>
btlist List connected Bluetooth devices
btbonds List bonded (paired) Bluetooth devices
<strong>Software-defined radio</strong>
sdr [freqMHz [rateHz]] Receive and report basic signal
statistics from an attached RTL-SDR dongle
@@ -269,22 +300,26 @@
disks, devexplorer, procmgr, powermgr, printers, timezone,
weather, wikipedia. There is no 0:/games/ directory.
<strong>TAB COMPLETION</strong>
Pressing Tab completes the word under the cursor against, in
order: executable names in 0:/os/, shell builtins, and file/
directory entries in the current directory. A single match is
completed inline; multiple matches are listed below the prompt.
<strong>INPUT</strong>
The shell uses non-blocking keyboard input via SYS_GETKEY (with
SYS_INPUT_WAIT to sleep between events) to support arrow key
detection. Lines are limited to 255 characters.
<strong>Editing</strong>
Backspace Delete character before cursor
Tab Tab-complete the current word
Enter Execute the command line
<strong>History</strong>
The shell stores the last 32 unique commands. Duplicate
consecutive entries are suppressed.
@@ -292,6 +327,7 @@
Up Arrow Recall previous command
Down Arrow Recall next command (or clear line)
<strong>PROMPT</strong>
The prompt displays the current drive and working directory:
@@ -299,9 +335,9 @@
0:/os&gt; _ (in os/ directory)
1:/&gt; _ (at root of drive 1)
<strong>SEE ALSO</strong>
man(1), intro(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="man.html">man(1)</a>, <a href="intro.html">intro(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+17 -5
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,13 +111,16 @@
<pre><code><strong>NAME</strong>
spawn, waitpid - create and wait for processes
<strong>SYNOPSIS</strong>
<strong> int montauk::spawn(const char* path, const char* args = nullptr);</strong>
<strong> void montauk::waitpid(int pid);</strong>
<strong> int montauk::getargs(char* buf, uint64_t maxLen);</strong>
<strong>int montauk::spawn(const char* path, const char* args = nullptr);</strong>
<strong>void montauk::waitpid(int pid);</strong>
<strong>int montauk::getargs(char* buf, uint64_t maxLen);</strong>
<strong>DESCRIPTION</strong>
<strong>spawn</strong>
Loads the ELF64 binary at the given VFS path and creates a new
process. The path must include the drive prefix, for example:
@@ -135,6 +139,7 @@
Failure occurs when there are no free process slots (max 256),
the file cannot be found, or the ELF is invalid.
<strong>waitpid</strong>
Blocks the calling process until the process with the given PID
has exited. Internally, this yields the CPU in a loop:
@@ -145,6 +150,7 @@
it spawns a child and waits for it to complete before showing
the next prompt.
<strong>EXAMPLES</strong>
Spawn a program and wait for it:
@@ -156,6 +162,7 @@
montauk::print("child exited\n");
}
<strong>getargs</strong>
Copies the argument string into buf (up to maxLen bytes, always
null-terminated). Returns the number of characters copied, or
@@ -167,15 +174,20 @@
The argument string is set by the parent when calling spawn().
If no arguments were provided, the buffer will be empty.
A spawned child inherits a snapshot of its parent's environment. Libc
exposes it through getenv(), setenv(), and environ. posix_spawn() can
instead provide an explicit envp for the child.
<strong>NOTES</strong>
The _start() entry point receives no argc/argv. Use getargs()
to retrieve the argument string passed by the parent process.
Process exit codes are not yet collected by waitpid.
<strong>SEE ALSO</strong>
syscalls(2), file(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="syscalls.html">syscalls(2)</a>, <a href="file.html">file(2)</a></code></pre>
<hr>
<div class="center">
+191
View File
@@ -0,0 +1,191 @@
<!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: sshd(1) - MontaukOS SSH-2 server">
<title>sshd(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;
}
@media (max-width: 700px) {
body {
flex-direction: column;
gap: 1em;
padding: 1em 0.75em;
}
.sidebar {
width: auto;
}
.sidebar ul {
display: flex;
flex-wrap: wrap;
gap: 0 1em;
}
.sidebar hr {
width: 100%;
}
}
</style>
</head>
<body>
<div class="sidebar">
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</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>sshd(1)</h1>
</div>
<hr>
<pre><code><strong>NAME</strong>
sshd - MontaukOS SSH-2 server
<strong>SYNOPSIS</strong>
<strong>sshd</strong>
<strong>DESCRIPTION</strong>
<strong>sshd</strong>
accepts SSH-2 connections and gives each authenticated user a MontaukOS shell.
It is normally launched automatically by
<strong>init (1)</strong>
and does not require direct user interaction. Remote access is disabled by
default; enable it from Settings &gt; SSH Server, which sets
<em>services.ssh.enabled</em>
in
<em>0:/config/init.toml .</em>
The change takes effect on the next boot.
<strong>AUTHENTICATION</strong>
Passwords are the only supported method, checked against the MontaukOS account
database. A user must additionally be listed in the
<em>[allow]</em>
table of
<em>0:/config/ssh.toml</em>
before a login is accepted; users absent from that table are refused. The
Settings applet maintains this table.
Failed passwords are delayed, and a connection is dropped after eight attempts.
<strong>CONFIGURATION</strong>
<em>0:/config/ssh.toml</em>
Listening port
<em>( server.port ,</em>
default 22) and the per-user
<em>[allow]</em>
table.
<em>0:/config/ssh_hostkey.toml</em>
The RSA host key, generated on first start. Note that the filesystem has no
permission model, so this file is readable by any local process; keeping it
separate from
<em>ssh.toml</em>
limits exposure but is not access control.
<strong>DIAGNOSTICS</strong>
Messages go to the boot console only. They do not appear in
<strong>klog (1):</strong>
<strong>SYS_PRINT</strong>
writes the kernel terminal rather than the kernel log ring, and is discarded
entirely once the desktop suppresses console output. There is currently nowhere
to read them from on a running desktop.
<strong>PROTOCOL</strong>
Key exchange is diffie-hellman-group14-sha256 with an rsa-sha2-256 host key;
the transport uses aes128-ctr with hmac-sha2-256. Client-initiated rekeying is
supported. Only one session channel per connection is served, and connections
are handled one at a time.
<strong>LIMITATIONS</strong>
Public key authentication, port forwarding, X11 forwarding, SFTP and SCP are not
implemented.
<em>exec</em>
requests run the command by feeding it to an interactive shell, so the shell
prompt and the echoed command line appear in the output. Scripts that parse
remote command output should account for this.
<strong>SEE ALSO</strong>
<strong>shell (1),</strong>
<strong>init (1)</strong></code></pre>
<hr>
<div class="center">
<a href="../index.html">Back to Documentation Index</a>
</div>
</div>
</body>
</html>
+539 -244
View File
File diff suppressed because it is too large. Load diff
+67 -62
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,209 +111,213 @@
<pre><code><strong>NAME</strong>
tls-errors - BearSSL TLS and X.509 error codes
<strong>DESCRIPTION</strong>
MontaukOS uses BearSSL for TLS 1.2 connections. When a TLS
operation fails, an integer error code is reported. This page
lists all possible error codes.
<strong>SSL/TLS ENGINE ERRORS</strong>
<strong>0 BR_ERR_OK</strong>
<strong>0 BR_ERR_OK</strong>
No error.
<strong>1 BR_ERR_BAD_PARAM</strong>
<strong>1 BR_ERR_BAD_PARAM</strong>
Caller-provided parameter is incorrect.
<strong>2 BR_ERR_BAD_STATE</strong>
<strong>2 BR_ERR_BAD_STATE</strong>
Operation cannot be applied in the current engine state.
<strong>3 BR_ERR_UNSUPPORTED_VERSION</strong>
<strong>3 BR_ERR_UNSUPPORTED_VERSION</strong>
Incoming protocol or record version is unsupported.
<strong>4 BR_ERR_BAD_VERSION</strong>
<strong>4 BR_ERR_BAD_VERSION</strong>
Incoming record version does not match the expected version.
<strong>5 BR_ERR_BAD_LENGTH</strong>
<strong>5 BR_ERR_BAD_LENGTH</strong>
Incoming record length is invalid.
<strong>6 BR_ERR_TOO_LARGE</strong>
<strong>6 BR_ERR_TOO_LARGE</strong>
Incoming record is too large, or buffer is too small for the
handshake message to send.
<strong>7 BR_ERR_BAD_MAC</strong>
<strong>7 BR_ERR_BAD_MAC</strong>
Decryption found invalid padding, or the record MAC is
not correct.
<strong>8 BR_ERR_NO_RANDOM</strong>
<strong>8 BR_ERR_NO_RANDOM</strong>
No initial entropy was provided and none could be obtained
from the OS.
<strong>9 BR_ERR_UNKNOWN_TYPE</strong>
<strong>9 BR_ERR_UNKNOWN_TYPE</strong>
Incoming record type is unknown.
<strong>10 BR_ERR_UNEXPECTED</strong>
<strong>10 BR_ERR_UNEXPECTED</strong>
Incoming record or message has wrong type for the current
engine state.
<strong>12 BR_ERR_BAD_CCS</strong>
<strong>12 BR_ERR_BAD_CCS</strong>
ChangeCipherSpec message from the peer has invalid contents.
<strong>13 BR_ERR_BAD_ALERT</strong>
<strong>13 BR_ERR_BAD_ALERT</strong>
Alert message from the peer has invalid contents (odd length).
<strong>14 BR_ERR_BAD_HANDSHAKE</strong>
<strong>14 BR_ERR_BAD_HANDSHAKE</strong>
Incoming handshake message decoding failed.
<strong>15 BR_ERR_OVERSIZED_ID</strong>
<strong>15 BR_ERR_OVERSIZED_ID</strong>
ServerHello contains a session ID larger than 32 bytes.
<strong>16 BR_ERR_BAD_CIPHER_SUITE</strong>
<strong>16 BR_ERR_BAD_CIPHER_SUITE</strong>
Server wants to use a cipher suite that we did not advertise,
or we tried to advertise a cipher suite that we do not support.
<strong>17 BR_ERR_BAD_COMPRESSION</strong>
<strong>17 BR_ERR_BAD_COMPRESSION</strong>
Server wants to use a compression method that we did not
advertise.
<strong>18 BR_ERR_BAD_FRAGLEN</strong>
<strong>18 BR_ERR_BAD_FRAGLEN</strong>
Server's max fragment length does not match client's.
<strong>19 BR_ERR_BAD_SECRENEG</strong>
<strong>19 BR_ERR_BAD_SECRENEG</strong>
Secure renegotiation failed.
<strong>20 BR_ERR_EXTRA_EXTENSION</strong>
<strong>20 BR_ERR_EXTRA_EXTENSION</strong>
Server sent an extension type that we did not announce, or
used the same extension type more than once in ServerHello.
<strong>21 BR_ERR_BAD_SNI</strong>
<strong>21 BR_ERR_BAD_SNI</strong>
Invalid Server Name Indication contents (when used by the
server, this extension shall be empty).
<strong>22 BR_ERR_BAD_HELLO_DONE</strong>
<strong>22 BR_ERR_BAD_HELLO_DONE</strong>
Invalid ServerHelloDone from the server (length is not 0).
<strong>23 BR_ERR_LIMIT_EXCEEDED</strong>
<strong>23 BR_ERR_LIMIT_EXCEEDED</strong>
Internal limit exceeded (e.g. server's public key is too
large).
<strong>24 BR_ERR_BAD_FINISHED</strong>
<strong>24 BR_ERR_BAD_FINISHED</strong>
Finished message from peer does not match the expected value.
<strong>25 BR_ERR_RESUME_MISMATCH</strong>
<strong>25 BR_ERR_RESUME_MISMATCH</strong>
Session resumption attempted with a different version or
cipher suite.
<strong>26 BR_ERR_INVALID_ALGORITHM</strong>
<strong>26 BR_ERR_INVALID_ALGORITHM</strong>
Unsupported or invalid algorithm (ECDHE curve, signature
algorithm, hash function).
<strong>27 BR_ERR_BAD_SIGNATURE</strong>
<strong>27 BR_ERR_BAD_SIGNATURE</strong>
Invalid signature on ServerKeyExchange or CertificateVerify.
<strong>28 BR_ERR_WRONG_KEY_USAGE</strong>
<strong>28 BR_ERR_WRONG_KEY_USAGE</strong>
Peer's public key does not have the proper type or is not
allowed for the requested operation.
<strong>29 BR_ERR_NO_CLIENT_AUTH</strong>
<strong>29 BR_ERR_NO_CLIENT_AUTH</strong>
Client did not send a certificate upon request, or the client
certificate could not be validated.
<strong>31 BR_ERR_IO</strong>
<strong>31 BR_ERR_IO</strong>
I/O error or premature close on the underlying transport.
<strong>X.509 CERTIFICATE ERRORS</strong>
<strong>32 BR_ERR_X509_OK</strong>
<strong>32 BR_ERR_X509_OK</strong>
X.509 validation was successful (not an error).
<strong>33 BR_ERR_X509_INVALID_VALUE</strong>
<strong>33 BR_ERR_X509_INVALID_VALUE</strong>
Invalid value in an ASN.1 structure.
<strong>34 BR_ERR_X509_TRUNCATED</strong>
<strong>34 BR_ERR_X509_TRUNCATED</strong>
Truncated certificate.
<strong>35 BR_ERR_X509_EMPTY_CHAIN</strong>
<strong>35 BR_ERR_X509_EMPTY_CHAIN</strong>
Empty certificate chain (no certificate at all).
<strong>36 BR_ERR_X509_INNER_TRUNC</strong>
<strong>36 BR_ERR_X509_INNER_TRUNC</strong>
Inner element extends beyond outer element size.
<strong>37 BR_ERR_X509_BAD_TAG_CLASS</strong>
<strong>37 BR_ERR_X509_BAD_TAG_CLASS</strong>
Unsupported tag class (application or private).
<strong>38 BR_ERR_X509_BAD_TAG_VALUE</strong>
<strong>38 BR_ERR_X509_BAD_TAG_VALUE</strong>
Unsupported tag value.
<strong>39 BR_ERR_X509_INDEFINITE_LENGTH</strong>
<strong>39 BR_ERR_X509_INDEFINITE_LENGTH</strong>
Indefinite length encoding found.
<strong>40 BR_ERR_X509_EXTRA_ELEMENT</strong>
<strong>40 BR_ERR_X509_EXTRA_ELEMENT</strong>
Extraneous element in certificate.
<strong>41 BR_ERR_X509_UNEXPECTED</strong>
<strong>41 BR_ERR_X509_UNEXPECTED</strong>
Unexpected element in certificate.
<strong>42 BR_ERR_X509_NOT_CONSTRUCTED</strong>
<strong>42 BR_ERR_X509_NOT_CONSTRUCTED</strong>
Expected constructed element, but found primitive.
<strong>43 BR_ERR_X509_NOT_PRIMITIVE</strong>
<strong>43 BR_ERR_X509_NOT_PRIMITIVE</strong>
Expected primitive element, but found constructed.
<strong>44 BR_ERR_X509_PARTIAL_BYTE</strong>
<strong>44 BR_ERR_X509_PARTIAL_BYTE</strong>
BIT STRING length is not a multiple of 8.
<strong>45 BR_ERR_X509_BAD_BOOLEAN</strong>
<strong>45 BR_ERR_X509_BAD_BOOLEAN</strong>
BOOLEAN value has invalid length.
<strong>46 BR_ERR_X509_OVERFLOW</strong>
<strong>46 BR_ERR_X509_OVERFLOW</strong>
Value is off-limits (overflow).
<strong>47 BR_ERR_X509_BAD_DN</strong>
<strong>47 BR_ERR_X509_BAD_DN</strong>
Invalid distinguished name.
<strong>48 BR_ERR_X509_BAD_TIME</strong>
<strong>48 BR_ERR_X509_BAD_TIME</strong>
Invalid date/time representation in certificate.
<strong>49 BR_ERR_X509_UNSUPPORTED</strong>
<strong>49 BR_ERR_X509_UNSUPPORTED</strong>
Certificate contains unsupported features that cannot be
ignored.
<strong>50 BR_ERR_X509_LIMIT_EXCEEDED</strong>
<strong>50 BR_ERR_X509_LIMIT_EXCEEDED</strong>
Key or signature size exceeds internal limits.
<strong>51 BR_ERR_X509_WRONG_KEY_TYPE</strong>
<strong>51 BR_ERR_X509_WRONG_KEY_TYPE</strong>
Key type does not match that which was expected.
<strong>52 BR_ERR_X509_BAD_SIGNATURE</strong>
<strong>52 BR_ERR_X509_BAD_SIGNATURE</strong>
Signature is invalid.
<strong>53 BR_ERR_X509_TIME_UNKNOWN</strong>
<strong>53 BR_ERR_X509_TIME_UNKNOWN</strong>
Validation time is unknown (no time was set).
<strong>54 BR_ERR_X509_EXPIRED</strong>
<strong>54 BR_ERR_X509_EXPIRED</strong>
Certificate is expired or not yet valid.
<strong>55 BR_ERR_X509_DN_MISMATCH</strong>
<strong>55 BR_ERR_X509_DN_MISMATCH</strong>
Issuer/subject DN mismatch in the chain.
<strong>56 BR_ERR_X509_BAD_SERVER_NAME</strong>
<strong>56 BR_ERR_X509_BAD_SERVER_NAME</strong>
Expected server name was not found in the chain.
<strong>57 BR_ERR_X509_CRITICAL_EXTENSION</strong>
<strong>57 BR_ERR_X509_CRITICAL_EXTENSION</strong>
Unknown critical extension in certificate.
<strong>58 BR_ERR_X509_NOT_CA</strong>
<strong>58 BR_ERR_X509_NOT_CA</strong>
Not a CA, or path length constraint violation.
<strong>59 BR_ERR_X509_FORBIDDEN_KEY_USAGE</strong>
<strong>59 BR_ERR_X509_FORBIDDEN_KEY_USAGE</strong>
Key Usage extension prohibits the intended usage.
<strong>60 BR_ERR_X509_WEAK_PUBLIC_KEY</strong>
<strong>60 BR_ERR_X509_WEAK_PUBLIC_KEY</strong>
Public key found in certificate is too small.
<strong>62 BR_ERR_X509_NOT_TRUSTED</strong>
<strong>62 BR_ERR_X509_NOT_TRUSTED</strong>
Chain could not be linked to a trust anchor.
<strong>FATAL ALERTS</strong>
When a fatal alert is received from the peer, the error code
is 256 + the TLS alert value. When a fatal alert is sent to
@@ -341,9 +346,9 @@
For example, error 296 means a handshake_failure alert was
received (256 + 40 = 296).
<strong>SEE ALSO</strong>
fetch(1), syscalls(2)</code></pre>
<strong>SEE ALSO</strong>
<a href="fetch.html">fetch(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
+157
View File
@@ -0,0 +1,157 @@
<!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: vol(1) - list mounted volumes">
<title>vol(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;
}
@media (max-width: 700px) {
body {
flex-direction: column;
gap: 1em;
padding: 1em 0.75em;
}
.sidebar {
width: auto;
}
.sidebar ul {
display: flex;
flex-wrap: wrap;
gap: 0 1em;
}
.sidebar hr {
width: 100%;
}
}
</style>
</head>
<body>
<div class="sidebar">
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</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>vol(1)</h1>
</div>
<hr>
<pre><code><strong>NAME</strong>
vol - list mounted volumes
<strong>SYNOPSIS</strong>
vol
<strong>DESCRIPTION</strong>
Prints information about volumes present on the system.
Drive numbers (column "Vol") represent volumes rather than physical disk devices.
The boot ramdisk, if present, reports "-" for its size, disk, and partition.
<strong>OUTPUT</strong>
Vol Type Label Size Disk Part Partition
0:/ ramdisk MontaukOS - - - -
1:/ ext2 Montauk 118.4 GiB 0 0 Montauk
2:/ FAT32 EFI 512.0 MiB 0 1 EFI System
Disks:
0 NVMe Samsung SSD 990 PRO 1TB
<strong>COLUMNS</strong>
Vol Drive number, as written in paths ("1:/file.txt").
Type Filesystem type (ext2, FAT32, ramdisk).
Label Filesystem volume label, or "-" if unset.
Size Partition size, binary prefixes.
Disk Block device index (see disk legend below the table).
Part Partition index on that disk.
Partition GPT partition name, or "-" if unset.
<strong>SEE ALSO</strong>
disks(1), <a href="shell.html">shell(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
<a href="../index.html">Back to Documentation Index</a>
</div>
</div>
</body>
</html>
+230
View File
@@ -0,0 +1,230 @@
<!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: wifi(1) - scan for wireless networks and inspect the Wi-Fi adapter">
<title>wifi(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;
}
@media (max-width: 700px) {
body {
flex-direction: column;
gap: 1em;
padding: 1em 0.75em;
}
.sidebar {
width: auto;
}
.sidebar ul {
display: flex;
flex-wrap: wrap;
gap: 0 1em;
}
.sidebar hr {
width: 100%;
}
}
</style>
</head>
<body>
<div class="sidebar">
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</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>wifi(1)</h1>
</div>
<hr>
<pre><code><strong>NAME</strong>
wifi - scan for wireless networks and inspect the Wi-Fi adapter
<strong>SYNOPSIS</strong>
wifi [scan [seconds]]
wifi info
wifi debug
wifi connect &lt;ssid&gt; [passphrase]
wifi status
wifi disconnect
wifi saved
wifi forget &lt;ssid&gt;
<strong>DESCRIPTION</strong>
Drives the Intel Wi-Fi adapter. With no arguments, runs a five
second scan and lists the networks found, strongest signal first.
The driver supports Intel AX210-family devices whose RF type is
GF (marketed as AX211), which is what the bundled firmware image
covers. Other Intel wireless parts are left unclaimed.
<strong>COMMANDS</strong>
scan [seconds]
Sweep every regulatory-permitted channel and report the
networks seen. The duration is clamped to 1-20 seconds and
defaults to 5.
info
Adapter status: MAC address, firmware version, supported
bands, usable channel count and whether a scan is running.
debug
Everything info prints, plus RX/error counters, a scan with
per-BSS detail (BSSID, channel, RSSI, security) and band and
security tallies. Use this when a scan finds nothing.
connect &lt;ssid&gt; [passphrase]
Joins a network from the last scan: open, or WPA2/WPA3-PSK
with CCMP or GCMP. Blocks until the link is up or the attempt
fails, and says which it was. A passphrase given here is
remembered in 0:/config/wifi.toml; given only an SSID, the
remembered one is used. Run <a href="dhcp.html">dhcp(1)</a> afterwards for an address.
status
The network currently joined, with signal and cipher.
disconnect
Leaves the network and tears the firmware contexts down.
saved
Lists the networks in 0:/config/wifi.toml and whether the
desktop rejoins them by itself at startup.
forget &lt;ssid&gt;
Removes a network from 0:/config/wifi.toml.
<strong>OUTPUT</strong>
SSID SIGNAL RSSI CH BAND SECURITY
-------------------------------------------------------------------
homenet [####] -42 6 2.4GHz WPA2
homenet-5g [###.] -61 44 5GHz WPA3
guest [##..] -74 11 2.4GHz open
<strong>FIRMWARE</strong>
The adapter needs firmware from the ramdisk:
0:/os/firmware/intel/iwlwifi-so-a0-gf-a0-&lt;api&gt;.ucode
0:/os/firmware/intel/iwlwifi-so-a0-gf-a0.pnvm
Loading happens shortly after boot, off the boot-critical path,
so "wifi info" may briefly report "detected (firmware not loaded
yet)". The PNVM file carries regulatory data; without it the
firmware falls back to conservative built-in limits.
<strong>SAVED NETWORKS</strong>
0:/config/wifi.toml holds the networks the system may rejoin
without being asked, as [network.&lt;n&gt;] tables of ssid and psk, and
a wifi.autoconnect flag. The desktop writes it when "Remember this
network" is ticked, and reads it after the automatic scan it runs
at startup. Passphrases are stored as typed; anyone who can read
0:/config can read them.
<strong>GRAPHICAL USE</strong>
The desktop panel carries a Wi-Fi icon whenever a supported
adapter is present, separate from the Ethernet one. Its menu lists
the networks in range, asks for a passphrase when one is needed,
and shows the address once the link is up. The Network app has the
same list under its Wi-Fi tab, along with Forget.
<strong>DIAGNOSTICS</strong>
no supported Wi-Fi adapter found
No matching device, or its RF type is not GF.
radio disabled (RF-kill)
The hardware kill switch is off. No scanning is possible.
error
Firmware load or configuration failed; klog(1) has the
detail under the WiFi and WiFi-FW tags.
<strong>SEE ALSO</strong>
ifconfig(1), klog(1), <a href="dhcp.html">dhcp(1)</a>, <a href="syscalls.html">syscalls(2)</a></code></pre>
<hr>
<div class="center">
<a href="../index.html">Back to Documentation Index</a>
</div>
</div>
</body>
</html>
+14 -4
View File
@@ -90,6 +90,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -110,11 +111,13 @@
<pre><code><strong>NAME</strong>
wiki - Wikipedia article viewer for MontaukOS
<strong>SYNOPSIS</strong>
wiki &lt;title&gt;
wiki -f &lt;title&gt;
wiki -s &lt;query&gt;
<strong>DESCRIPTION</strong>
wiki fetches and displays Wikipedia articles in the terminal.
It connects to en.wikipedia.org over HTTPS (TLS 1.2) and
@@ -125,16 +128,18 @@
color-coded headings and word-wrapped text. Multi-word titles
are accepted as separate arguments and joined automatically.
<strong>OPTIONS</strong>
<strong>-f</strong>
<strong>-f</strong>
Full article mode. Display the complete article text instead
of just the summary. Section headings are color-coded.
<strong>-s</strong>
<strong>-s</strong>
Search mode. Search Wikipedia for articles matching the
query and display a numbered list of up to 10 results.
Press a number key to view that article's summary.
<strong>EXAMPLES</strong>
wiki Linux
Show a summary of the Linux article.
@@ -145,13 +150,16 @@
wiki -s operating system
Search for articles related to "operating system".
<strong>TLS SUPPORT</strong>
Connections use BearSSL for TLS 1.2. Server certificates
are validated against the system CA bundle at
0:/os/certs/ca-certificates.crt.
<strong>KEYBOARD</strong>
<strong>Article pager</strong>
j / Down Scroll down one line
k / Up Scroll up one line
@@ -161,16 +169,18 @@
G / End Jump to bottom
q Quit pager
<strong>Search results</strong>
1-9, 0 View article (0 = result 10)
q Quit search
<strong>General</strong>
Ctrl+Q Abort during network request
<strong>SEE ALSO</strong>
fetch(1), ping(1), nslookup(1), shell(1)</code></pre>
<strong>SEE ALSO</strong>
<a href="fetch.html">fetch(1)</a>, <a href="ping.html">ping(1)</a>, <a href="nslookup.html">nslookup(1)</a>, <a href="shell.html">shell(1)</a></code></pre>
<hr>
<div class="center">
+1
View File
@@ -98,6 +98,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
+1
View File
@@ -98,6 +98,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
+1
View File
@@ -98,6 +98,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
@@ -98,6 +98,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
+1
View File
@@ -98,6 +98,7 @@
<ul>
<li><a href="../../index.html">Home</a></li>
<li><a href="../../downloads.html">Downloads</a></li>
<li><a href="../../history.html">History</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
+94 -2
View File
@@ -113,12 +113,14 @@
<li><a href="index.html">Home</a></li>
<li><a href="downloads.html" class="current">Downloads</a></li>
<li><a href="docs/index.html">Documentation</a></li>
<li><a href="history.html">History</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
</ul>
<hr>
<ul>
<li><a href="#latest">Latest Release</a></li>
<li><a href="#v020">v0.2.0</a></li>
<li><a href="#v019">v0.1.9</a></li>
<li><a href="#v018">v0.1.8</a></li>
<li><a href="#v017">v0.1.7</a></li>
@@ -140,13 +142,104 @@
<hr>
<h2 id="latest">Latest Release</h2>
<div class="box release-card" id="v020">
<h3>MontaukOS 0.2.0</h3>
<p class="release-meta">October 14, 2026</p>
<p>It is recommended that users run MontaukOS in a virtual machine rather than on real hardware.</p>
<h4>Links</h4>
<ul>
<li><a href="downloads/montauk-0.2.0-x86_64.iso">Download ISO</a> (30 MB) - recommended</li>
<li><a href="downloads/montauk-0.2.0-sdk-x86_64.iso">Download ISO with Montauk SDK</a> (196 MB) - includes gcc/g++/binutils toolchain</li>
<li><a href="license.html">License</a></li>
<li><a href="docs/tutorials/index.html">Tutorials</a></li>
<li><a href="docs/man/index.html">Manual pages</a></li>
</ul>
<blockquote>
For questions or comments, please mail to [email protected].
</blockquote>
<h4>New</h4>
<ul>
<li>Capability (application permissions) model added</li>
<li>Consent prompts for missing app permissions</li>
<li>New Capabilities app for reviewing and managing app permissions</li>
<li>Unified system status codes; the shell and Files now print a readable message on failure</li>
<li>Text is now UTF-8 throughout, with Unicode key events and dead keys</li>
<li>Keyboard layout support, with English, Norwegian, Czech, Swedish, and Danish layouts</li>
<li>NumLock support</li>
<li>Battery percentage reporting via ACPI, with a battery indicator in the desktop panel</li>
<li>Display brightness control, including on hybrid graphics laptops, with a slider in the desktop panel</li>
<li>Discrete GPUs are powered down automatically on hybrid graphics laptops</li>
<li>ext2 block cache with readahead, speeding up disk-heavy work such as on-OS compilation</li>
<li>Userspace system logging: <code>klog</code> is now <code>syslog</code>, logs identify the user and program, and system services log through <code>montauk::service_log</code></li>
<li>The system log is written to disk (<code>0:/state/logs</code>) during shutdown</li>
<li>Desktop sessions now own the processes started in them, and those processes are ended on logout</li>
<li>Rust userspace support (<code>no_std</code>)</li>
<li>Futex syscalls (<code>SYS_FUTEX_WAIT</code>/<code>SYS_FUTEX_WAKE</code>) as groundwork for Rust std and pthreads</li>
<li>Process termination codes; <code>abort()</code> now ends the whole process from any thread</li>
<li><code>isatty()</code> now reports whether a terminal is actually attached</li>
<li>Settings panel and a Pure Black theme in Terminal (the default for Console sessions)</li>
<li>Syntax highlighting for C++, HTML, CSS, and JavaScript in <code>edit</code> and Text Editor</li>
<li>Expanded SVG renderer</li>
<li>New <code>vol</code> command for listing mounted volumes</li>
<li>Revamped desktop application categories</li>
<li>Fonts, icons, and manual pages moved to <code>0:/os</code>; persistent state now lives in <code>0:/state</code></li>
<li>RTL-SDR driver moved from the kernel to userspace</li>
</ul>
<h4>Fixed</h4>
<ul>
<li>Opening a directory as a file is now rejected on ext2 and FAT32, fixing on-OS gcc on installed systems</li>
<li>Fixed several syscall result and status code comparisons</li>
<li>Fixed a TLS layout bug for binaries whose TLS segment has an alignment below 16</li>
<li>A fault in one thread now ends the whole process instead of leaving its sibling threads running</li>
<li>Fixed an ACPI hardware ID endianness bug</li>
<li>Fixed a race in Wi-Fi event processing and other Wi-Fi bugs</li>
<li>DHCP no longer runs when no network device has an active link</li>
<li>Reduced idle CPU wakeups and deferred-work polling</li>
<li>Redirected consoles are now inherited by processes spawned with capabilities</li>
<li>Fixed numpad navigation</li>
<li>Fixed a timezone formatting bug</li>
<li>Fixed the login wallpaper startup delay</li>
<li>Fixed text overlap in file dialogs</li>
<li>Persisted kernel logs are no longer double-spaced</li>
<li>Files lists now scroll with the arrow keys, and volume labels are consistent</li>
<li><code>mbrtowc</code> added to libc</li>
</ul>
<h4>Known issues</h4>
<ul>
<li>Intel GPU may struggle to wake up from S3 sleep, causing a black screen requiring a reset. S3 sleep is highly experimental and users are discouraged from relying on it.</li>
<li>Due to licensing restrictions, the proprietary DOOM WAD cannot be shipped; the DOOM engine warns at launch when no compatible WAD file is present, and game content is unavailable until the user supplies one.</li>
</ul>
<h4>Included in ISO</h4>
<p>Two x86_64 images are published for this release. <code>montauk-0.2.0-sdk-x86_64.iso</code> additionally carries the Montauk SDK (gcc, binutils, etc.)</p>
<ul>
<li>MontaukOS SMP kernel</li>
<li>Userspace bootstrap (<code>0:/os/init.elf</code>) and other essential system utilities</li>
<li>MontaukOS desktop environment and graphical apps</li>
<li>NetSurf web browser (<code>0:/apps/netsurf</code>)</li>
<li>Manual pages (<code>0:/os/man</code>), readable via <code>man</code> command</li>
<li>Service and system configuration (<code>0:/config</code>: init.toml, capabilities.toml, ssh.toml, ntp.toml)</li>
<li>System CA certificates (<code>0:/os/certs/ca-certificates.crt</code>)</li>
<li>Intel Bluetooth controller and Wi-Fi (iwlwifi) firmware (<code>0:/os/firmware/intel</code>)</li>
<li>Third-party license texts and notices (<code>0:/os/licenses</code>)</li>
<li>Tiny C Compiler (<code>tcc</code>) with MontaukOS headers and libraries (<code>0:/sdk/tcc</code>)</li>
<li>Lua 5.4 interpreter (<code>lua</code>) with headers and static library (<code>0:/sdk/lua</code>)</li>
<li>Montauk SDK - native GCC/G++ and binutils (<code>0:/sdk</code>) - SDK image only</li>
<li>Flat Remix icon pack</li>
<li>JetBrains Mono, Noto Serif, Roboto, and C059 Roman (open Century Schoolbook) TrueType fonts</li>
<li>DOOM engine with SDL_mixer audio support (game data not included)</li>
<li>Experimental HTTP server (<code>httpd</code>) and default page (<code>0:/www/index.html</code>)</li>
<li>Default wallpaper - blossoms by Nikhil Kumar, Unsplash (<code>0:/os/wallpapers</code>)</li>
</ul>
</div>
<h2>Release Archive</h2>
<div class="box release-card" id="v019">
<h3>MontaukOS 0.1.9</h3>
<p class="release-meta">August 13, 2026</p>
<p>It is recommended that users run MontaukOS in a virtual machine rather than on real hardware.</p>
<h4>Links</h4>
<ul>
<li><a href="downloads/montauk-0.1.9-x86_64.iso">Download ISO</a> (29 MB) - recommended</li>
<li><a href="downloads/montauk-0.1.9-x86_64.iso">Download ISO</a> (29 MB)</li>
<li><a href="downloads/montauk-0.1.9-sdk-x86_64.iso">Download ISO with Montauk SDK</a> (194 MB) - includes gcc/g++/binutils toolchain</li>
<li><a href="license.html">License</a></li>
<li><a href="docs/tutorials/index.html">Tutorials</a></li>
@@ -222,7 +315,6 @@
</ul>
</div>
<h2>Release Archive</h2>
<div class="box release-card" id="v018">
<h3>MontaukOS 0.1.8</h3>
<p class="release-meta">July 18, 2026</p>
+108
View File
@@ -0,0 +1,108 @@
<!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="The history of MontaukOS">
<title>History - MontaukOS</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; }
.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; }
@media (max-width: 700px) {
body { flex-direction: column; gap: 1em; padding: 1em 0.75em; }
.sidebar { width: auto; }
.sidebar ul { display: flex; flex-wrap: wrap; gap: 0 1em; }
.sidebar hr { width: 100%; }
}
</style>
</head>
<body>
<div class="sidebar">
<ul>
<li><a href="index.html">Home</a></li>
<li><a href="downloads.html">Downloads</a></li>
<li><a href="docs/index.html">Documentation</a></li>
<li><a href="history.html" class="current">History</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
</ul>
</div>
<div class="main">
<h1>History</h1>
<p>
History of the MontaukOS project (major milestones).</a>
</p>
<hr>
<h2>Before MontaukOS</h2>
<p>MontaukOS came after a series of abadoned kernel and operating system projects that had been in development since 2022.</p>
<p>These projects were abandoned due to decay, code quality, and architectural incoherence.</p>
<hr>
<h2>Late 2024 - early 2025</h2>
<p>
<h3>December 2024/January 2025</h3>
<p>Early development of the MontaukOS codebase was started, deriving from the <a href="https://github.com/Limine-Bootloader/limine-cxx-template">Limine C++ template</a>, a template for creating a freestanding binary that can be loaded by the <a href="https://en.wikipedia.org/wiki/Limine_(bootloader)">Limine bootloader</a> using its protocol.</p>
<h3>February 2025</h3>
<p>Basic kernel features were implemented, including <a href="https://git.montaukos.org/daniel/MontaukOS/src/commit/6f1c6f131680ccaa7c0bf3ec8f6a0aab77d3d2fd/kernel/src/Memory/PageAllocator.cpp">an allocator for page frames</a> and <a href="https://git.montaukos.org/daniel/MontaukOS/src/commit/6f1c6f131680ccaa7c0bf3ec8f6a0aab77d3d2fd/kernel/src/Hal/GDT.cpp">an implementation of the Global Descriptor Table for x86_64 processors</a>. The first commit to the <a href="https://git.montaukos.org/daniel/MontaukOS/src/commit/6f1c6f131680ccaa7c0bf3ec8f6a0aab77d3d2fd">repo</a> was made on February 27, 2025 at 7:48 p.m.</p>
<p>MontaukOS was published under the name 'OS220'.</p>
<h3>March 2025</h3>
<p>The <a href="https://git.montaukos.org/daniel/MontaukOS/src/commit/17d0bbf1bb9dcee03c1238c58a7fd6cec90a777e/kernel/src/Memory/MemoryAllocator.cpp">first version</a> of the kernel heap allocator was written and committed.</p>
<h3>April 2025</h3>
<p><a href="https://git.montaukos.org/daniel/MontaukOS/src/commit/2515149f28f004878e85e7e24ad1322fcfb81f12/kernel/src/Memory/Paging.cpp">Support for virtual memory paging on x86_64 processors</a> was implemented.</p>
<h3>May 2025</h3>
<p>Rudimentary support for parsing <a href="https://en.wikipedia.org/wiki/ACPI">ACPI</a> tables was implemented.</p>
<h3>August 2025</h3>
<p>The first <a href="https://git.montaukos.org/daniel/MontaukOS/commit/18ab6286828165cfdae1d04f2c38e2cff1e99b19">commit</a> assisted by large language model (LLM) technology was made. An LLM implemented TUI box-drawing for the kernel-mode panic screen.</p>
<h3>February 2026</h3>
<p>OS220 was renamed to ZenithOS.</p>
<p>Support for the Local and IO APICs, and support for PS/2 keyboard and mouse devices, was added.</p>
<p>Initial support for PCI-e devices was added.</p>
<p>The MontaukOS shell (shell.elf) was added.</p>
<p>The DOOM video game, via the <a href="https://github.com/ozkl/doomgeneric">doomgeneric</a> project, was ported.</p>
<p>Support for Intel I217/I218/I219 network devices was added, along with support for TCP/IP and user-mode networking.</p>
<p>An initial version of the MontaukOS Desktop (desktop.elf) was <a href="https://git.montaukos.org/daniel/MontaukOS/commit/987a85da27c3f40b28513f74029303fd08c19459">implemented</a>.</p>
<p>Initial versions of various user-mode desktop apps were added.</p>
<p>ZenithOS was renamed to MontaukOS.</p>
<h3>March 2026</h3>
<p>The Word Processor and PDF Viewer apps were added.</p>
<p>Support for the GUID Partition Table and the FAT32 file system were added.</p>
<p>The Installer app was added, allowing users to deploy MontaukOS permanently.</p>
<p>Support for NVMe storage devices was added.</p>
<p>Support for Intel HDA audio devices was added, along with a userspace Music app.</p>
<p>Support for symmetric multiprocessing (SMP) on x86_64 platforms was <a href="https://git.montaukos.org/daniel/MontaukOS/commit/41ad1f640412b7a675d60488009cab709d4089dd">implemented</a>.</p>
<p>Screenshot app added.</p>
<h3>April 2026</h3>
<p>Support for IPP printer devices and document printing was added.</p>
<p>MontaukOS GUI elements were standardized into the MTK toolkit.</p>
<h3>May 2026</h3>
<p>Support for USB mass storage devices implemented.</p>
<h3>June 2026</h3>
<p>Support for A2DP Bluetooth audio devices added.</p>
<hr>
<p><a href="downloads.html">Browse downloads and release notes</a></p>
</div>
</body>
</html>
+5
View File
@@ -166,6 +166,7 @@
<li><a href="index.html" class="current">Home</a></li>
<li><a href="downloads.html">Downloads</a></li>
<li><a href="docs/index.html">Documentation</a></li>
<li><a href="history.html">History</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
</ul>
@@ -194,6 +195,10 @@ targeting both emulators and real hardware.
<hr>
<h2 id="news">News</h2>
<article class="news-entry">
<h3><a href="downloads.html">MontaukOS 0.2.0 released</a></h3>
<p><time datetime="2026-10-14">October 14, 2026</time></p>
</article>
<article class="news-entry">
<h3><a href="https://danhammer.net/2026/08/22/a-new-system-logging-architecture-for-montaukos/">A new system logging architecture for MontaukOS</a></h3>
<p><time datetime="2026-08-22">August 22, 2026</time> &ndash; <a href="https://danhammer.net/">Daniel Hammer&rsquo;s personal blog</a></p>
<p>
+1
View File
@@ -79,6 +79,7 @@
<li><a href="index.html">Home</a></li>
<li><a href="downloads.html">Downloads</a></li>
<li><a href="docs/index.html">Documentation</a></li>
<li><a href="history.html">History</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS/issues">Issue tracker</a></li>
<li><a href="https://git.montaukos.org/daniel/MontaukOS">Git</a></li>
</ul>