commit 5f96c7fdd821513223ef9f1e06df36fb07d3e03d Author: Daniel Hammer Date: Sat Aug 22 07:44:34 2026 +0200 add website diff --git a/THIRD-PARTY-NOTICES.txt b/THIRD-PARTY-NOTICES.txt new file mode 100644 index 0000000..85354b2 --- /dev/null +++ b/THIRD-PARTY-NOTICES.txt @@ -0,0 +1,660 @@ +MontaukOS - Third-Party Notices +=============================== + +The MontaukOS system is source-available software governed by the MontaukOS Software +License (see license.txt). It incorporates or is distributed together with the +third-party components listed below, each of which remains the property of its +respective owner and is provided under its own license. The notices and license +texts in this file apply only to the corresponding third-party component and not +to MontaukOS as a whole. + +This file is provided to satisfy the attribution and redistribution conditions of +those licenses. Where a component permits a choice of license, MontaukOS relies on +the option reproduced here. + + +================================================================================ +1. Limine (bootloader) +================================================================================ +Shipped as binary firmware payloads in the bootable image (e.g. BOOTX64.EFI, +BOOTAA64.EFI, BOOTIA32.EFI, BOOTRISCV64.EFI, BOOTLOONGARCH64.EFI, +limine-bios-cd.bin, limine-bios.sys, limine-uefi-cd.bin, and related files). + +License: BSD 2-Clause "Simplified" License + + Copyright (C) 2019-2025 Mintsuki and contributors. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Note: The build system also derives in part from the Limine C++ template, which +is released by Mintsuki and contributors under the Zero-Clause BSD (0BSD) license. +0BSD imposes no attribution or redistribution conditions; this acknowledgement is +provided as a courtesy only. + + +================================================================================ +2. BearSSL (TLS / cryptography) +================================================================================ +Linked into MontaukOS userspace networking components. + +License: MIT License + + Copyright (c) 2016 Thomas Pornin + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + +================================================================================ +3. stb_image and stb_truetype (image decoding and font rasterisation) +================================================================================ +Used as the single-header image decoder behind MontaukOS image/JPEG support +(programs/include/gui/stb_image.h). This is the "libjpeg" component referenced in +the build; it is in fact stb_image by Sean Barrett. + +stb_truetype, by the same author, is the TrueType rasteriser linked into the +graphical applications and into the NetSurf browser port, where it renders the +system fonts. + +Both are dual-licensed (MIT OR public domain). MontaukOS relies on the MIT +option, reproduced here: + +License: MIT License + + Copyright (c) 2017 Sean Barrett + + Permission is hereby granted, free of charge, to any person obtaining a copy of + this software and associated documentation files (the "Software"), to deal in + the Software without restriction, including without limitation the rights to + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is furnished to do + so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +================================================================================ +4. DOOM engine (via doomgeneric) +================================================================================ +Shipped as the bundled "doom" application (doom.elf), built from the doomgeneric +port of id Software's DOOM source release. + +License: GNU General Public License, version 2 (GPLv2) + + DOOM source code is Copyright (C) 1993-1996 id Software, Inc., is Copyright (C) + 2005-2014 Simon Howard (Chocolate Doom lineage), and is licensed under the GNU + General Public License version 2. doomgeneric is Copyright (C) its respective + authors and contributors, likewise under GPLv2. + + This program is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free Software + Foundation; either version 2 of the License, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + PARTICULAR PURPOSE. See the GNU General Public License for more details. + + IMPORTANT: The DOOM application (doom.elf) is licensed under GPLv2, separately + from MontaukOS itself. The MontaukOS Software License does NOT apply + to doom.elf or to the doomgeneric/DOOM source. The full GPLv2 license text is + included on the MontaukOS ISO at 0:/os/licenses/GPL-2.0.txt. + + WRITTEN OFFER FOR SOURCE: The complete corresponding source code for the DOOM + application, under the terms of GPLv2, is available on request and is provided + alongside MontaukOS distributions. Contact: licensing@montaukos.org. + + DOOM GAME DATA: This notice and the GPLv2 license cover only the DOOM engine + code, NOT any DOOM game data. MontaukOS does NOT distribute any DOOM WAD files; + they are proprietary content of id Software, Inc. To play, users must supply + their own legally obtained WAD, or a freely licensed alternative such as the + Freedoom project's freedoom1.wad / freedoom2.wad (BSD-style license). + + +================================================================================ +5. Flat Remix (icon theme) +================================================================================ +The MontaukOS desktop and applications use icons from the Flat Remix icon theme +by Daniel Ruiz de Alegria. MontaukOS ships a curated subset of the theme +(renamed and reorganized for MontaukOS) in SVG form on the ISO (0:/icons/ and +per-application icon files). + + Copyright (C) Daniel Ruiz de Alegria + Upstream: https://github.com/daniruiz/flat-remix + +License: GNU General Public License, version 3 (GPLv3) + + Flat Remix is free software: you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free Software + Foundation, either version 3 of the License, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + IMPORTANT: The Flat Remix icons are licensed under GPLv3, separately from + MontaukOS itself. The MontaukOS Software License does NOT apply to + the icon files, which remain under GPLv3. The full GPLv3 license text is + included on the MontaukOS ISO at 0:/os/licenses/GPL-3.0.txt. + + MODIFICATIONS: The icons shipped with MontaukOS are a modified subset of Flat + Remix (files selected, renamed, and reorganized for MontaukOS; first modified + 2025). These modified versions are likewise available under GPLv3. + + CORRESPONDING SOURCE: The icons are distributed in SVG form, which is their + source (preferred form for modification); the files on the ISO are the + corresponding source. The complete unmodified theme is available from the + upstream repository above, and the MontaukOS-modified set is available on + request: licensing@montaukos.org. + + +================================================================================ +6. JetBrains Mono (font) +================================================================================ +Shipped as TrueType font files on the ISO (0:/fonts/JetBrainsMono-*.ttf). + + Copyright 2020 The JetBrains Mono Project Authors + (https://github.com/JetBrains/JetBrainsMono) + +License: SIL Open Font License, Version 1.1 (OFL-1.1), with Reserved Font Name +"JetBrains Mono". The full license text is included on the MontaukOS ISO at +0:/os/licenses/OFL-JetBrainsMono.txt. + + +================================================================================ +7. Noto Serif (font) +================================================================================ +Shipped as TrueType font files on the ISO (0:/fonts/NotoSerif-*.ttf). + + Copyright 2022 The Noto Project Authors + (https://github.com/notofonts/latin-greek-cyrillic) + +License: SIL Open Font License, Version 1.1 (OFL-1.1), with Reserved Font Name +"Noto". The full license text is included on the MontaukOS ISO at +0:/os/licenses/OFL-NotoSerif.txt. + + +================================================================================ +8. Roboto (font) +================================================================================ +Shipped as TrueType font files on the ISO (0:/fonts/Roboto-*.ttf). + + Copyright 2011 The Roboto Project Authors + (https://github.com/googlefonts/roboto-classic) + +License: SIL Open Font License, Version 1.1 (OFL-1.1), with Reserved Font Name +"Roboto". The full license text is included on the MontaukOS ISO at +0:/os/licenses/OFL-Roboto.txt. + + +================================================================================ +9. C059 (font, URW Base 35 collection) +================================================================================ +Shipped as TrueType font files on the ISO (0:/fonts/C059-*.ttf). C059 is a +Century Schoolbook derivative from the URW Base 35 font collection by (URW)++ +Design and Development GmbH, distributed by Artifex Software. + + Copyright (C) (URW)++ Design and Development GmbH + Upstream: https://github.com/ArtifexSoftware/urw-base35-fonts + +License: GNU Affero General Public License, version 3 (AGPLv3), with a special +exception permitting embedding the fonts in PostScript or PDF documents +regardless of the document's own license. The full license text, including the +exception, is included on the MontaukOS ISO at 0:/os/licenses/AGPL-3.0-C059.txt. + + The C059 fonts are licensed under AGPLv3, separately from MontaukOS itself. + The corresponding source for the fonts as shipped is the font files + themselves, available unmodified from the upstream repository above. + + +================================================================================ +10. Tiny C Compiler (TCC) +================================================================================ +Shipped as the bundled C compiler (tcc.elf) with its runtime libraries and +headers on the ISO (0:/sdk/tcc/). MontaukOS ships a modified version of TCC +0.9.28rc, ported to target MontaukOS (added platform startup/compatibility +code and a MontaukOS sysroot). + + Copyright (c) 2001-2004 Fabrice Bellard, and TCC contributors + Upstream: https://repo.or.cz/tinycc.git + +License: GNU Lesser General Public License, version 2.1 (LGPL-2.1) + + TCC is free software; you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation; either version 2.1 of the License, or (at your option) + any later version. + + IMPORTANT: TCC is licensed under LGPL-2.1, separately from MontaukOS itself. + The MontaukOS Software License does NOT apply to TCC. The full LGPL-2.1 + license text is included on the MontaukOS ISO at + 0:/os/licenses/LGPL-2.1.txt. + + MODIFICATIONS AND SOURCE: The complete source code of the modified TCC as + shipped, marked as modified, is published in the MontaukOS source tree + (programs/src/tcc/) and is also available on request: + licensing@montaukos.org. + + +================================================================================ +11. Lua +================================================================================ +Shipped as the bundled Lua interpreter (lua.elf), Lua 5.4.8, with its static +library and headers on the ISO (0:/sdk/lua/). + +License: MIT License + + Copyright (C) 1994-2025 Lua.org, PUC-Rio. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +================================================================================ +12. Mozilla CA certificate bundle +================================================================================ +Shipped as the system trust store on the ISO +(0:/os/certs/ca-certificates.crt), used by the MontaukOS TLS stack to verify +server certificates. + +The bundle contains the root CA certificates of the Mozilla CA Certificate +Program (Mozilla's root store, maintained as certdata.txt in Mozilla NSS), in +the concatenated PEM form produced by the Debian/Ubuntu ca-certificates +package. The certificates themselves are public key material published by +their respective certification authorities for exactly this purpose; the +Mozilla root store from which the bundle derives is distributed under the +Mozilla Public License, version 2.0 (MPL-2.0). + + Upstream: https://wiki.mozilla.org/CA (Mozilla CA Certificate Program) + Packaging: the Debian/Ubuntu "ca-certificates" package + +License: Mozilla Public License, version 2.0 (MPL-2.0) + + The full MPL-2.0 license text is included on the MontaukOS ISO at + 0:/os/licenses/MPL-2.0.txt. The source form of the root store + (certdata.txt) is available from Mozilla NSS: + https://hg-edge.mozilla.org/projects/nss/file/tip/lib/ckfw/builtins/certdata.txt + + +================================================================================ +13. Intel Bluetooth firmware +================================================================================ +Shipped as binary firmware blobs on the ISO (0:/os/firmware/intel/, +ibt-1040-0041.sfi and ibt-1040-0041.ddc), loaded at runtime into Intel +Bluetooth controllers by the MontaukOS Bluetooth driver. The files are taken +unmodified from the linux-firmware project. + + Copyright (c) 2014, Intel Corporation. All rights reserved. + Upstream: https://gitlab.com/kernel-firmware/linux-firmware + (intel/ibt-*, LICENSES/LICENCE.ibt_firmware) + +License: Intel redistributable firmware license + + Redistribution in binary form, without modification, is permitted subject + to the conditions of Intel's license, including reproduction of Intel's + copyright notice and disclaimer and a prohibition on reverse engineering, + decompilation, or disassembly. The full license text, including Intel's + copyright notice, disclaimer, and limited patent license, is included on + the MontaukOS ISO at 0:/os/licenses/Intel-ibt-firmware.txt. + + +================================================================================ +14. Intel iwlwifi register definitions +================================================================================ +The register offsets, firmware command identifiers, and wire-format structures +in kernel/src/Drivers/Net/Wifi/IwxReg.hpp are an adapted subset of the Intel +iwlwifi API definitions as consolidated in OpenBSD's if_iwxreg.h. MontaukOS +relies on the BSD license option of the upstream dual BSD/GPLv2 license. + + Copyright (c) 2017 Intel Deutschland GmbH + Copyright (c) 2018-2019 Intel Corporation + Copyright (c) 2026 Daniel Hammer + + This file is provided under a dual BSD/GPLv2 license. When using or + redistributing the upstream material, you may do so under either license. + MontaukOS relies on the BSD license option for the adapted material. + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name Intel Corporation nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + + +================================================================================ +15. Intel iwlwifi firmware +================================================================================ +Shipped as binary firmware payloads in the bootable image: + + programs/data/firmware/intel/iwlwifi-so-a0-gf-a0-89.ucode + programs/data/firmware/intel/iwlwifi-so-a0-gf-a0.pnvm + +These files are redistributable Intel iwlwifi firmware obtained from the +linux-firmware project. The files remain Intel property and are not licensed +under the MontaukOS Software License. The full license text is included on +the MontaukOS ISO at 0:/os/licenses/Intel-iwlwifi-firmware.txt. + + +================================================================================ +16. Default wallpaper photograph +================================================================================ +Shipped as the default login-screen wallpaper on the ISO +(0:/os/wallpapers/default.jpg): a photograph of blossoms against misty hills. + + Photo by Nikhil Kumar on Unsplash + Source: https://unsplash.com/photos/JdPHvI7VF0o + +License: Unsplash License (https://unsplash.com/license) + + Unsplash grants you an irrevocable, nonexclusive, worldwide copyright + license to download, copy, modify, distribute, perform, and use images + from Unsplash for free, including for commercial purposes, without + permission from or attributing the photographer or Unsplash. This license + does not include the right to compile images from Unsplash to replicate a + similar or competing service. + +================================================================================ +17. Flanterm (text renderer for kernel debug log) +================================================================================ +Compiled into the MontaukOS kernel (see kernel/src/Libraries/flanterm). +The files are taken unmodified from the flanterm project. + + Copyright (C) 2022-2026 Mintsuki and contributors. + Upstream: https://github.com/Mintsuki/Flanterm + (formerly https://codeberg.org/Mintsuki/Flanterm) + +License: BSD-2-Clause license (https://raw.githubusercontent.com/Mintsuki/Flanterm/refs/heads/trunk/LICENSE) + + Copyright (C) 2022-2026 Mintsuki and contributors. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +================================================================================ +18. GNU Compiler Collection (GCC) and GNU Binutils (Montauk SDK) +================================================================================ +The MontaukOS SDK includes native ports of GCC 14.2.0 and GNU Binutils 2.43.1 +at 0:/sdk/. The GCC tools include gcc, g++, cpp, cc1, and cc1plus. The Binutils +tools include as, ld, ar, nm, objcopy, objdump, readelf, ranlib, strip, size, +strings, addr2line, c++filt, and elfedit. These are modified builds targeting +MontaukOS; the corresponding patches and build scripts are in the toolchain/ +directory of the MontaukOS source tree. + + Copyright (C) 1987-2024 Free Software Foundation, Inc. + Copyright (C) the respective GCC, GNU Binutils, and other contributors. + Upstream: https://gcc.gnu.org/ + https://sourceware.org/binutils/ + +License: GNU General Public License, version 3 (GPLv3), for the compiler and +binutils programs and libraries, with the GCC Runtime Library Exception 3.1 +where it applies. Individual source files may carry additional copyright +notices and license terms; those notices remain applicable. + + GCC and GNU Binutils are free software: they may be redistributed and/or + modified under the terms of the GNU GPL as published by the Free Software + Foundation, either version 3 of the License, or (at your option) any later + version. The full GPLv3 text is included on the MontaukOS ISO at + 0:/os/licenses/GPL-3.0.txt. The GCC Runtime Library Exception is included + in the GCC source as COPYING.RUNTIME. + + These GNU components are licensed separately from MontaukOS itself. The + MontaukOS Software License does NOT apply to them. Corresponding source, + including MontaukOS's GCC and Binutils port patches, is available in the + MontaukOS source tree. + + +================================================================================ +19. NetSurf (web browser) +================================================================================ +Shipped as the bundled "netsurf" application (0:/apps/netsurf/netsurf.elf), built +from NetSurf 3.11 (git 39da3c3a4). The MontaukOS build reuses NetSurf's monkey +frontend glue with a native MontaukOS window frontend, replaces the libcurl and +OpenSSL fetchers with a BearSSL-backed one, and builds without JavaScript. The +port's patches, compatibility shims, and frontend sources are in the mtkports +tree under www-client/netsurf/. + +The resource tree installed at 0:/apps/netsurf/res/ (Messages, default.css, +quirks.css, and the bundled artwork) is part of NetSurf and is covered by this +notice. + + Copyright (C) the NetSurf Browser Project and its respective contributors. + Upstream: https://www.netsurf-browser.org/ + https://github.com/netsurf-browser/netsurf + +License: GNU General Public License, version 2 (GPLv2), for the source code, +documentation, translatable message files, and UI definitions; MIT License for +the visual artwork. + + NetSurf is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; version 2 of the License. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A + PARTICULAR PURPOSE. See the GNU General Public License for more details. + + Upstream NetSurf grants a special exception permitting the code to be linked + against the OpenSSL project's "OpenSSL" library. The MontaukOS port does not + link OpenSSL -- HTTPS is provided by BearSSL (section 2) -- so that exception + is not relied upon here. + + IMPORTANT: The NetSurf application (netsurf.elf) is licensed under GPLv2, + separately from MontaukOS itself. The MontaukOS Software License does NOT apply + to netsurf.elf or to the NetSurf source. The full GPLv2 license text is + included on the MontaukOS ISO at 0:/os/licenses/GPL-2.0.txt. + + WRITTEN OFFER FOR SOURCE: The complete corresponding source code for the + NetSurf application, including the MontaukOS port's patches and frontend + sources, under the terms of GPLv2, is available on request and is provided + alongside MontaukOS distributions. Contact: licensing@montaukos.org. + + +================================================================================ +20. NetSurf project libraries +================================================================================ +Linked into the NetSurf application: libcss (CSS parsing and selection), libdom +(DOM), libhubbub (HTML5 parsing), libparserutils (parser building blocks), +libwapcaplet (interned strings), libnsutils (time and base64 helpers), libnslog +(filtered logging), libnspsl (public suffix list), libnsgif (GIF decoding), and +libnsbmp (BMP/ICO decoding). + + Copyright (C) 2007-2008 J-M Bell (libparserutils, libhubbub, libcss, libdom) + Copyright (C) 2009 The NetSurf Browser Project (libwapcaplet) + Copyright (C) 2014, 2016 Vincent Sanders (libnsutils, libnslog, libnspsl) + Copyright (C) 2004, 2006 Richard Wilson (libnsgif, libnsbmp) + Copyright (C) 2008 Sean Fox (libnsgif, libnsbmp) + Copyright (C) 2013-2021 Michael Drake (libnsgif) + Copyright (C) the respective NetSurf Browser Project contributors. + Upstream: https://www.netsurf-browser.org/projects/ + +License: MIT License + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + +================================================================================ +21. utf8proc +================================================================================ +Linked into the NetSurf application for Unicode normalisation and case folding, +via the NetSurf project's libutf8proc fork. + + Copyright (C) 2014-2019 Steven G. Johnson, Jiahao Chen, Tony Kelman, Jonas + Fonseca, and other contributors listed in the git history. + Copyright (C) 2006-2013 Jan Behrens and the Public Software Group e. V., + Berlin, Germany (original utf8proc). + Upstream: https://juliastrings.github.io/utf8proc/ + +License: MIT License + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + This library also incorporates Unicode Character Database data, which is + distributed under the Unicode, Inc. license agreement for data files and + software; that notice is reproduced in the upstream LICENSE.md. + + +================================================================================ +22. zlib (compression) +================================================================================ +Linked into the NetSurf application for HTTP content decoding and PNG/gzip +stream decompression. + + Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + Upstream: https://zlib.net/ + +License: zlib License + + This software is provided 'as-is', without any express or implied warranty. + In no event will the authors be held liable for any damages arising from the + use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +================================================================================ +For licensing inquiries regarding MontaukOS itself, contact: licensing@montaukos.org +================================================================================ diff --git a/docs/apm/assets/discard_dialog.png b/docs/apm/assets/discard_dialog.png new file mode 100644 index 0000000..6fea8f6 Binary files /dev/null and b/docs/apm/assets/discard_dialog.png differ diff --git a/docs/apm/assets/save_dialog.png b/docs/apm/assets/save_dialog.png new file mode 100644 index 0000000..3392125 Binary files /dev/null and b/docs/apm/assets/save_dialog.png differ diff --git a/docs/apm/config.html b/docs/apm/config.html new file mode 100644 index 0000000..0d17fd0 --- /dev/null +++ b/docs/apm/config.html @@ -0,0 +1,236 @@ + + + + + + + Configuration and TOML - MontaukOS + + + + + + + + + +
+
+

Configuration and TOML

+
+ +
+ +

MontaukOS provides a small header-only C++ API for reading and writing +TOML configuration files from userspace. Include +<montauk/config.h> for file-backed configuration and +<montauk/toml.h> for the in-memory TOML document model.

+ +

Configuration locations

+ +

System configuration is stored in 0:/config. The API accepts a +name without the .toml extension:

+ +
0:/config/desktop.toml
+0:/config/network.toml
+ +

Per-user configuration is stored below the user directory:

+ +
0:/users/<username>/config/<name>.toml
+ +

Loading and saving

+ +
#include <montauk/config.h>
+
+auto doc = montauk::config::load("desktop");
+const char* theme = doc.get_string("appearance.theme", "light");
+
+montauk::config::set_string(&doc, "appearance.theme", "dark");
+int result = montauk::config::save("desktop", &doc);
+
+doc.destroy();
+ +

load() returns an initialized empty document if the file does +not exist. save() creates the configuration directory and returns +0 on success or a negative value on error. Saving rewrites the +whole file.

+ +

System configuration API

+ +
toml::Doc config::load(const char* name);
+int       config::save(const char* name, toml::Doc* doc);
+int       config::remove(const char* name);
+ +

Per-user configuration API

+ +
toml::Doc config::load_user(const char* username, const char* name);
+int       config::save_user(const char* username,
+                            const char* name,
+                            toml::Doc* doc);
+ +

For example:

+ +
auto doc = montauk::config::load_user("alice", "desktop");
+bool clock24 = doc.get_bool("display.clock_24h", false);
+
+montauk::config::set_bool(&doc, "display.clock_24h", true);
+montauk::config::save_user("alice", "desktop", &doc);
+doc.destroy();
+ +

Reading values

+ +

Keys may use dotted paths corresponding to TOML tables:

+ +
[server]
+host = "pool.ntp.org"
+port = 123
+enabled = true
+ +
const char* host = doc.get_string("server.host", "localhost");
+int64_t port = doc.get_int("server.port", 80);
+bool enabled = doc.get_bool("server.enabled", false);
+ +

Typed getters return their default when the key is absent or has another +type. The available value types are:

+ +
toml::Type::String
+toml::Type::Int
+toml::Type::Bool
+toml::Type::Array
+toml::Type::Table
+ +

Arrays and tables are returned as toml::Value*. Their children +are available through value->array.items and +value->array.count:

+ +
auto* names = doc.get_array("server.names");
+if (names) {
+    for (int i = 0; i < names->array.count; ++i) {
+        auto* item = names->array.items[i];
+        if (item->type == montauk::toml::Type::String)
+            montauk::print(item->str);
+    }
+}
+ +

Modifying documents

+ +
void config::set_string(toml::Doc* doc,
+                        const char* key, const char* value);
+void config::set_int(toml::Doc* doc,
+                     const char* key, int64_t value);
+void config::set_bool(toml::Doc* doc,
+                      const char* key, bool value);
+bool config::unset(toml::Doc* doc, const char* key);
+ +

The setters overwrite an existing value or append a new one. The +unset() return value is true when a matching key was +removed.

+ +

Parsing and serialization

+ +

Use toml::parse() when TOML is already available in memory:

+ +
const char* text =
+    "[server]\n"
+    "port = 8080\n"
+    "enabled = true\n";
+
+auto doc = montauk::toml::parse(text);
+int64_t port = doc.get_int("server.port");
+doc.destroy();
+ +

A document can be serialized to newly allocated TOML text:

+ +
char* text = montauk::config::serialize(&doc);
+// Use text...
+montauk::mfree(text);
+ +

Serialization produces normalized TOML and does not preserve comments or +the original formatting.

+ +

Memory ownership

+ +

toml::Doc owns its parsed values and strings. Every document +returned by load(), load_user(), or +toml::parse() must eventually be released with +doc.destroy().

+ +

When constructing a document manually, initialize it before using the +mutation helpers:

+ +
montauk::toml::Doc doc;
+doc.init();
+montauk::config::set_bool(&doc, "enabled", true);
+montauk::config::save("example", &doc);
+doc.destroy();
+ +

Supported TOML features

+ +

The userspace parser supports strings, literal and multiline strings, +integers (including hexadecimal, octal, and binary forms), booleans, arrays, +tables, inline tables, dotted keys, and comments.

+ +

There are no typed float or datetime accessors. Callers should also treat +configuration names and usernames as safe path components, since they are +used to construct filesystem paths.

+ +
+ + + +
+ + diff --git a/docs/apm/dialogs.html b/docs/apm/dialogs.html new file mode 100644 index 0000000..981fc5f --- /dev/null +++ b/docs/apm/dialogs.html @@ -0,0 +1,291 @@ + + + + + + + Dialogs Library - MontaukOS + + + + + + + + + +
+
+

Dialogs

+
+ +
+ +

Overview

+

+The dialogs library (at 0:/os/dialogs.lib) provides the following system dialogs across apps: +

+ +
    +
  • File selection (Open)
  • +
  • File save location selection (Save)
  • +
  • Print setup/submission
  • +
  • Message Box popups
  • +
+ +

Message Box

+

+message_box displays a popup window with text and buttons. +

+ +
gui::dialogs::MessageBoxResult message_box(
+    const char* title,
+    const char* message,
+    gui::dialogs::MessageBoxButtons buttons = gui::dialogs::MESSAGE_BOX_OK,
+    char* out_message = nullptr,
+    int out_message_len = 0);
+ +

Button Sets

+ + + + + + +
ValueButtons
MESSAGE_BOX_OKOK
MESSAGE_BOX_OK_CANCELOK, Cancel
MESSAGE_BOX_YES_NOYes, No
MESSAGE_BOX_YES_NO_CANCELYes, No, Cancel
+ +

Results

+ + + + + + + +
ValueMeaning
MESSAGE_BOX_RESULT_OKThe user selected OK.
MESSAGE_BOX_RESULT_CANCELThe user selected Cancel or closed a cancelable dialog.
MESSAGE_BOX_RESULT_YESThe user selected Yes.
MESSAGE_BOX_RESULT_NOThe user selected No, or closed a Yes/No dialog.
MESSAGE_BOX_RESULT_NONEThe dialog could not be loaded or invoked.
+ +

Example

+
#include <gui/dialogs.hpp>
+
+void show_confirm() {
+    auto result = gui::dialogs::message_box(
+        "Close Document",
+        "Discard unsaved changes?",
+        gui::dialogs::MESSAGE_BOX_YES_NO_CANCEL);
+
+    if (result == gui::dialogs::MESSAGE_BOX_RESULT_YES) {
+        /* discard and close */
+    }
+}
+ +
+Message box asking whether to discard unsaved changes +

Example MESSAGE_BOX_YES_NO_CANCEL dialog.

+
+ +

File Dialogs

+

+File dialog helpers allow applications to use graphical file selection views (similar to the Files app) to select paths for Open/Save operations. +

+ +
bool open_file(
+    const char* title,
+    const char* initial_path,
+    char* out_path,
+    int out_path_len,
+    char* out_message = nullptr,
+    int out_message_len = 0);
+
+bool save_file(
+    const char* title,
+    const char* initial_path,
+    const char* suggested_name,
+    char* out_path,
+    int out_path_len,
+    char* out_message = nullptr,
+    int out_message_len = 0);
+ +

+Use initial_path to select the starting directory or current file +context. save_file also accepts a suggested_name for +the filename field. +

+ +

Open Example

+
char path[256];
+char message[160];
+
+if (gui::dialogs::open_file("Open File", "", path, sizeof(path),
+                            message, sizeof(message))) {
+    /* open path */
+}
+ +

Save Example

+
char path[256];
+
+if (gui::dialogs::save_file("Save File", "", "untitled.txt",
+                            path, sizeof(path))) {
+    /* write path */
+}
+ +
+Save file dialog showing folders and a filename field +

Save-file dialog as used by the MontaukOS Word Processor app.

+
+ +

Print Dialogs

+

+Print dialog helpers allow applications to expose printer configuration to the user, and submit a file for printing. +

+ +
bool configure_print(
+    const char* title,
+    const char* initial_printer_uri,
+    const char* job_name,
+    char* out_printer_uri,
+    int out_printer_uri_len,
+    char* out_printer_name,
+    int out_printer_name_len,
+    uint32_t* out_copies = nullptr,
+    char* out_message = nullptr,
+    int out_message_len = 0);
+
+bool print_file(
+    const char* title,
+    const char* source_path,
+    const char* job_name,
+    char* out_job_id,
+    int out_job_id_len,
+    char* out_message = nullptr,
+    int out_message_len = 0);
+ + +

Include

+
#include <gui/dialogs.hpp>

+ +
+

Copyright © 2026 Montauk Operating System Project. All rights reserved.

Page last revised 26 May 2026.

+ +
+ + + +
+ + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..39335ca --- /dev/null +++ b/docs/index.html @@ -0,0 +1,144 @@ + + + + + + + Documentation - MontaukOS + + + + + + + + + +
+
+

Documentation

+
+ +
+ +

User Documentation

+ + +
+ +

Developer Documentation

+ + +
+ + + +
+ + diff --git a/docs/man/dhcp.html b/docs/man/dhcp.html new file mode 100644 index 0000000..33da5a2 --- /dev/null +++ b/docs/man/dhcp.html @@ -0,0 +1,166 @@ + + + + + + + dhcp(1) - MontaukOS Manual + + + + + + + + + +
+
+

dhcp(1)

+
+ +
+ +
NAME
+    dhcp - obtain network configuration via DHCP
+
+SYNOPSIS
+    dhcp
+
+DESCRIPTION
+    The DHCP client automatically obtains an IP address, subnet mask,
+    default gateway, and other network parameters from a DHCP server
+    on the local network using the Dynamic Host Configuration Protocol
+    (RFC 2131).
+
+    On success the network configuration is applied immediately via
+    set_netcfg(). On failure the original configuration is restored.
+
+    The client is run automatically by the init system at boot, but
+    may also be invoked manually from the shell.
+
+PROTOCOL
+    The client performs the standard four-message DHCP exchange:
+
+        1. DHCPDISCOVER  Broadcast to 255.255.255.255:67
+        2. DHCPOFFER     Server offers an IP address
+        3. DHCPREQUEST   Client accepts the offered address
+        4. DHCPACK       Server confirms the lease
+
+    The BROADCAST flag (0x8000) is set so that server replies are
+    sent to the broadcast address, since the client has no IP yet.
+
+    Each step has a 10-second timeout. If no response is received
+    the client exits with an error and restores the previous config.
+
+OUTPUT
+    On success the client prints the assigned configuration:
+
+        IP Address, Subnet Mask, Gateway, DNS Server, Lease Time
+
+OPTIONS
+    The DHCP client requests the following options from the server:
+
+        1   Subnet Mask
+        3   Router (default gateway)
+        6   DNS Server
+        51  Lease Time
+
+SEE ALSO
+    ifconfig(1), shell(1), syscalls(2)
+ +
+ + + +
+ + diff --git a/docs/man/edit.html b/docs/man/edit.html new file mode 100644 index 0000000..f11aa51 --- /dev/null +++ b/docs/man/edit.html @@ -0,0 +1,169 @@ + + + + + + + edit(1) - MontaukOS Manual + + + + + + + + + +
+
+

edit(1)

+
+ +
+ +
NAME
+    edit - text editor for MontaukOS
+
+SYNOPSIS
+    edit [filename]
+
+DESCRIPTION
+    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
+    empty buffer is created and will be saved to that path on write.
+
+    When invoked without arguments, edit opens an empty buffer. You
+    will be prompted for a filename when saving.
+
+KEYBOARD SHORTCUTS
+
+   Navigation
+    Arrow Keys      Move cursor up/down/left/right
+    Home            Move to start of line
+    End             Move to end of line
+    Page Up         Scroll up one page
+    Page Down       Scroll down one page
+
+   Editing
+    Backspace       Delete character before cursor
+    Delete          Delete character at cursor
+    Enter           Insert new line
+    Tab             Insert 4 spaces
+
+   Commands
+    Ctrl+S          Save file
+    Ctrl+Q          Quit (warns if unsaved changes)
+    Ctrl+F          Search for text
+    Ctrl+G          Find next occurrence
+
+DISPLAY
+    The top line shows the filename, a modified indicator [+],
+    and the current cursor position (Ln, Col).
+
+    The bottom line shows keyboard shortcuts or status messages.
+
+    Line numbers are displayed in a gutter on the left side.
+    Lines past the end of the file are marked with ~.
+
+EXAMPLES
+    edit intro.1            Edit a file
+    edit                    Open a new empty buffer
+
+SEE ALSO
+    cat(1), shell(1)
+ +
+ + + +
+ + diff --git a/docs/man/fetch.html b/docs/man/fetch.html new file mode 100644 index 0000000..fc60de0 --- /dev/null +++ b/docs/man/fetch.html @@ -0,0 +1,180 @@ + + + + + + + fetch(1) - MontaukOS Manual + + + + + + + + + +
+
+

fetch(1)

+
+ +
+ +
NAME
+    fetch - HTTP/HTTPS client for MontaukOS
+
+SYNOPSIS
+    fetch [-v] <url>
+    fetch [-v] <host> <port> [path]
+
+DESCRIPTION
+    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)
+    connections. By default only the body is printed.
+
+    In URL mode, the scheme (http:// or https://) determines whether
+    TLS is used. The port defaults to 80 for HTTP and 443 for HTTPS.
+
+    In legacy mode, the host and port are specified as separate
+    arguments and the connection is always plain HTTP.
+
+    The host may be an IP address or a hostname. Hostnames are
+    resolved via the configured DNS server.
+
+    If no path is given, "/" is used.
+
+OPTIONS
+-v
+    Verbose mode. Print connection info, trust anchor count, TLS
+    handshake progress, and the HTTP status/size header before
+    the body.
+
+EXAMPLES
+    fetch https://icanhazip.com
+        Print your public IP address over HTTPS.
+
+    fetch http://icanhazip.com
+        Same, but over plain HTTP.
+
+    fetch -v https://example.com
+        Fetch a page with verbose output showing:
+            Connecting to example.com:443 (HTTPS)...
+            Loaded 128 trust anchors
+            TLS handshake...
+            TLS connection established
+            GET /
+            HTTP 200 OK (1256 bytes)
+
+    fetch 10.0.68.1 80 /
+        Fetch from a local server by IP (legacy syntax).
+
+TLS SUPPORT
+    HTTPS connections use BearSSL for TLS 1.2. Server certificates
+    are validated against the system CA bundle at
+    0:/os/certs/ca-certificates.crt.
+
+    Entropy for the TLS handshake is provided by RDTSC-seeded
+    random data via the SYS_GETRANDOM syscall.
+
+KEYBOARD
+    Ctrl+Q      Abort the request
+
+SEE ALSO
+    ping(1), nslookup(1), tcpconnect(1), shell(1), syscalls(2)
+ +
+ + + +
+ + diff --git a/docs/man/file.html b/docs/man/file.html new file mode 100644 index 0000000..e6571f3 --- /dev/null +++ b/docs/man/file.html @@ -0,0 +1,220 @@ + + + + + + + file(2) - MontaukOS Manual + + + + + + + + + +
+
+

file(2)

+
+ +
+ +
NAME
+    open, read, getsize, close, readdir - file I/O system calls
+
+SYNOPSIS
+    int montauk::open(const char* path);
+    int montauk::read(int handle, uint8_t* buf, uint64_t offset, uint64_t size);
+    uint64_t montauk::getsize(int handle);
+    void montauk::close(int handle);
+    int montauk::readdir(const char* path, const char** names, int max);
+
+DESCRIPTION
+    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
+    the format "<drive>:/<path>".
+
+   open
+    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");
+
+   read
+    Reads up to 'size' bytes starting at 'offset' into 'buf'.
+    Returns the number of bytes actually read, or negative on error.
+    There is no implicit file position -- the offset is explicit on
+    every call.
+
+        uint8_t buf[512];
+        int n = montauk::read(h, buf, 0, 512);
+
+   getsize
+    Returns the total size in bytes of the file.
+
+        uint64_t sz = montauk::getsize(h);
+
+   close
+    Closes the file handle and frees kernel resources.
+
+        montauk::close(h);
+
+   readdir
+    Lists entries in a directory. Up to 'max' entry names (VFS cap
+    256, driver-backed listings such as 0:/os/ cap 128) are written
+    to the 'names' array. The kernel allocates a user-accessible
+    page for the string data automatically. Directory entries are
+    returned with a trailing slash.
+
+        const char* entries[64];
+        int count = montauk::readdir("0:/", entries, 64);
+        // entries: "os/", "apps/", "man/", "www/", "users/", ...
+
+    For directories that may contain more entries than fit in one
+    call, use montauk::readdir_at(path, names, max, startIndex) and
+    advance startIndex by the returned count until it returns 0.
+
+READING PATTERN
+    The standard pattern for reading a file:
+
+        int h = montauk::open("0:/man/intro.1");
+        uint64_t size = montauk::getsize(h);
+        uint8_t buf[512];
+        uint64_t off = 0;
+        while (off < size) {
+            uint64_t chunk = size - off;
+            if (chunk > 511) chunk = 511;
+            int n = montauk::read(h, buf, off, chunk);
+            if (n <= 0) break;
+            buf[n] = '\0';
+            montauk::print((const char*)buf);
+            off += n;
+        }
+        montauk::close(h);
+
+WRITING, DELETING, RENAMING
+    int montauk::fcreate(const char* path);
+    int montauk::fwrite(int handle, const uint8_t* buf, uint64_t offset, uint64_t size);
+    int montauk::fdelete(const char* path);
+    int montauk::fmkdir(const char* path);
+    int montauk::frename(const char* oldPath, const char* newPath);
+
+    fcreate creates a new file and returns a handle. fwrite writes
+    bytes at the given offset. fdelete removes a file, fmkdir
+    creates a directory, and frename renames or moves a file or
+    directory (the basis for file manager move operations).
+
+    On drive 0 (the ramdisk), changes persist only until reboot --
+    the ramdisk is reloaded from the USTAR archive on each boot. On
+    disk-backed drives (FAT32/ext2 partitions mounted with
+    montauk::fs_mount), changes are written through to storage; use
+    montauk::fs_sync() to flush caches before power-off.
+
+NOTES
+    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
+    DEVICES sections.
+
+SEE ALSO
+    syscalls(2), spawn(2), malloc(3)
+ +
+ + + +
+ + diff --git a/docs/man/fontscale.html b/docs/man/fontscale.html new file mode 100644 index 0000000..eacddd7 --- /dev/null +++ b/docs/man/fontscale.html @@ -0,0 +1,161 @@ + + + + + + + fontscale(1) - MontaukOS Manual + + + + + + + + + +
+
+

fontscale(1)

+
+ +
+ +
NAME
+    fontscale - get or set terminal font scale
+
+SYNOPSIS
+    fontscale
+    fontscale <n>
+    fontscale <x> <y>
+
+DESCRIPTION
+    Controls the terminal font scale factor. The Flanterm terminal
+    emulator renders text at a configurable scale multiplier.
+    Increasing the scale makes text larger, which is useful on
+    high-resolution displays or real hardware where text may be
+    too small to read comfortably.
+
+    With no arguments, prints the current scale factor and terminal
+    dimensions.
+
+    With one argument, sets both the horizontal and vertical scale
+    to the same value.
+
+    With two arguments, sets asymmetric horizontal and vertical
+    scale factors independently.
+
+    Valid scale values are 1 through 8. After rescaling, the screen
+    is cleared.
+
+OUTPUT
+    fontscale
+        Scale: 1x1 (160 cols x 50 rows)
+
+    fontscale 2
+        Scale set to 2x2 (80 cols x 25 rows)
+
+EXAMPLES
+    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
+
+SEE ALSO
+    shell(1), syscalls(2)
+ +
+ + + +
+ + diff --git a/docs/man/framebuffer.html b/docs/man/framebuffer.html new file mode 100644 index 0000000..45446bd --- /dev/null +++ b/docs/man/framebuffer.html @@ -0,0 +1,180 @@ + + + + + + + framebuffer(2) - MontaukOS Manual + + + + + + + + + +
+
+

framebuffer(2)

+
+ +
+ +
NAME
+    fb_info, fb_map - direct framebuffer access
+
+SYNOPSIS
+    void montauk::fb_info(montauk::abi::FbInfo* info);
+    void* montauk::fb_map();
+
+DESCRIPTION
+    These syscalls allow userspace programs to access the linear
+    framebuffer directly for graphical output.
+
+   fb_info
+    Fills in an FbInfo structure with the framebuffer geometry:
+
+        montauk::abi::FbInfo fb;
+        montauk::fb_info(&fb);
+        // fb.width, fb.height, fb.pitch, fb.bpp
+
+    The pitch is the number of bytes per scanline (may be larger
+    than width * 4 due to alignment). bpp is always 32.
+
+   fb_map
+    Maps the physical framebuffer into the process address space at
+    a fixed virtual address (0x50000000) and returns that 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.
+
+PIXEL FORMAT
+        Bits 31-24:  Alpha (unused, typically 0xFF)
+        Bits 23-16:  Red
+        Bits 15-8:   Green
+        Bits 7-0:    Blue
+
+    Example: red = 0x00FF0000, green = 0x0000FF00, blue = 0x000000FF
+
+EXAMPLE
+    Fill the screen with blue:
+
+        montauk::abi::FbInfo fb;
+        montauk::fb_info(&fb);
+        uint32_t* pixels = (uint32_t*)montauk::fb_map();
+
+        for (uint64_t y = 0; y < fb.height; y++) {
+            uint32_t* row = (uint32_t*)((uint8_t*)pixels + y * fb.pitch);
+            for (uint64_t x = 0; x < fb.width; x++) {
+                row[x] = 0x000000FF;
+            }
+        }
+
+NOTES
+    After mapping, the cursor overlay is not composited. Programs
+    that use the framebuffer take full control of screen output.
+
+    Only one mapping per process is supported. Calling fb_map()
+    multiple times returns the same address.
+
+SEE ALSO
+    syscalls(2), malloc(3)
+ +
+ + + +
+ + diff --git a/docs/man/index.html b/docs/man/index.html new file mode 100644 index 0000000..8006596 --- /dev/null +++ b/docs/man/index.html @@ -0,0 +1,264 @@ + + + + + + + Man Pages - MontaukOS + + + + + + + + + +
+
+

Man Pages

+
+ +
+ +

+Manual pages for MontaukOS, viewable in-system with the man(1) command. +

+ +

User Commands (Section 1)

+ +
    + +
  • + intro(1) +

    introduction to MontaukOS userspace

    +
  • + +
  • + shell(1) +

    MontaukOS interactive command shell

    +
  • + +
  • + init(1) +

    MontaukOS init system

    +
  • + +
  • + dhcp(1) +

    obtain network configuration via DHCP

    +
  • + +
  • + fetch(1) +

    HTTP/HTTPS client for MontaukOS

    +
  • + +
  • + ping(1) +

    send ICMP echo requests

    +
  • + +
  • + nslookup(1) +

    DNS hostname lookup

    +
  • + +
  • + fontscale(1) +

    get or set terminal font scale

    +
  • + +
  • + edit(1) +

    text editor for MontaukOS

    +
  • + +
  • + man(1) +

    display manual pages

    +
  • + +
  • + printctl(1) +

    configure printers and submit print jobs

    +
  • + +
  • + printd(1) +

    MontaukOS userspace print spooler daemon

    +
  • + +
  • + wiki(1) +

    Wikipedia article viewer for MontaukOS

    +
  • + +
+ +

System Calls (Section 2)

+ +
    + +
  • + syscalls(2) +

    overview of MontaukOS system calls

    +
  • + +
  • + spawn(2) +

    create and wait for processes

    +
  • + +
  • + file(2) +

    file I/O system calls

    +
  • + +
  • + framebuffer(2) +

    direct framebuffer access

    +
  • + +
+ +

Library Functions (Section 3)

+ +
    + +
  • + malloc(3) +

    userspace heap allocation

    +
  • + +
+ +

File Formats / Reference (Section 5)

+ + + +

Miscellaneous (Section 7)

+ +
    + +
  • + legal(7) +

    MontaukOS legal/copyright information

    +
  • + +
+ +
+ + + +
+ + diff --git a/docs/man/init.html b/docs/man/init.html new file mode 100644 index 0000000..3b0ff20 --- /dev/null +++ b/docs/man/init.html @@ -0,0 +1,157 @@ + + + + + + + init(1) - MontaukOS Manual + + + + + + + + + +
+
+

init(1)

+
+ +
+ +
NAME
+    init - MontaukOS init system
+
+SYNOPSIS
+    Spawned automatically by the kernel as PID 0.
+
+DESCRIPTION
+    init is the first userspace process started by the MontaukOS
+    kernel. It chains system services in sequence, then launches
+    the interactive shell.
+
+    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.
+
+    Log output is timestamped and color-coded:
+
+        HH:MM:SS   INFO   init  Starting dhcp
+        HH:MM:SS     OK   init  dhcp finished (pid 1)
+
+BOOT SEQUENCE
+    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
+
+    After the shell exits, init enters an idle loop.
+
+LOG LEVELS
+    init uses four log levels, each with a distinct color:
+
+        OK      Green    Service completed successfully
+        INFO    Cyan     Informational (service starting, etc.)
+        WARN    Yellow   Non-fatal warning
+        FAIL    Red      Service failed to start
+
+SEE ALSO
+    dhcp(1), shell(1), syscalls(2)
+ +
+ + + +
+ + diff --git a/docs/man/intro.html b/docs/man/intro.html new file mode 100644 index 0000000..8c0b637 --- /dev/null +++ b/docs/man/intro.html @@ -0,0 +1,212 @@ + + + + + + + intro(1) - MontaukOS Manual + + + + + + + + + +
+
+

intro(1)

+
+ +
+ +
NAME
+    intro - introduction to MontaukOS userspace
+
+DESCRIPTION
+    MontaukOS is a hobbyist 64-bit operating system written in C++20,
+    currently at version 0.1.7 (API version 8). Userspace programs
+    run in Ring 3, are loaded as static ELF64 binaries, and
+    communicate with the kernel through the x86-64 SYSCALL/SYSRET
+    mechanism (150 syscalls -- see syscalls(2)).
+
+    Programs are compiled with a freestanding cross-compiler and
+    linked at virtual address 0x400000. There is no standard C
+    library for C++ programs -- all system interaction goes through
+    the montauk:: syscall wrappers. A desktop environment with a
+    window server, GUI apps, and Bluetooth/audio/networking stacks
+    runs on top of the same syscall API.
+
+GETTING STARTED
+    To write a new system/CLI program, create a directory under
+    programs/src/ with a main.cpp file. The entry point is:
+
+        extern "C" void _start() { ... }
+
+    There is no argc/argv. Use montauk::getargs() to retrieve any
+    arguments passed by the parent process. Include <montauk/syscall.h>
+    for the full typed syscall API. GUI apps additionally use
+    win_create()/win_poll()/win_present() from montauk/Window.hpp
+    (see framebuffer(2)).
+
+    Build with:
+
+        cd programs && make
+
+    System/CLI binaries appear in programs/bin/os/; GUI app bundles
+    (ELF + manifest.toml + icon) appear under programs/bin/apps/<name>/.
+
+RAMDISK LAYOUT
+    The boot ramdisk is mounted as drive 0 with the following
+    directory structure:
+
+        0:/os/          System/CLI binaries (shell, init, man, etc.),
+                        plus os-owned data: certs/, firmware/,
+                        licenses/, wallpapers/
+        0:/apps/        GUI app bundles, one directory per app
+                        (<app>.elf + manifest.toml + icon)
+        0:/config/      System-wide config TOMLs
+        0:/users/<name>/  Per-user home directories (created at
+                        login), with Music/, Videos/, Pictures/,
+                        config/ subdirectories
+        0:/fonts/       Shared fonts
+        0:/icons/       Shared icons
+        0:/man/         Manual pages
+        0:/www/         Web server content
+        0:/lib/         Lua and TinyCC toolchain payloads
+        0:/boot/        Kernel, bootloader, ramdisk image
+
+    There is no 0:/games/, 0:/common/, 0:/home/, or 0:/etc/ --
+    these were used by earlier single-user releases and no longer
+    exist. Games and other GUI programs (including doom) ship as
+    bundles under 0:/apps/.
+
+SHELL
+    The interactive shell is the primary way to interact with
+    MontaukOS. Commands are resolved against the current directory
+    first, then 0:/os/. Type 'help' at the shell prompt for a list
+    of commands. Use 'man shell' for detailed shell documentation.
+
+MAN PAGES
+    The following man pages are available:
+
+        intro(1)        This page
+        shell(1)        Shell commands reference
+        init(1)         Init system
+        dhcp(1)         DHCP client
+        fetch(1)        HTTP client
+        ping(1)         ICMP ping
+        nslookup(1)     DNS lookup
+        fontscale(1)    Terminal font scaling
+        edit(1)         Text editor
+        man(1)          The man command itself
+        printctl(1)     Printer control
+        printd(1)       Print spooler daemon
+        wiki(1)         Wikipedia article viewer
+        legal(7)        Copyright and legal information
+        tls-errors(5)   TLS/BearSSL error reference
+        syscalls(2)     Overview of all syscalls
+        spawn(2)        Process spawning
+        file(2)         File I/O syscalls
+        framebuffer(2)  Framebuffer access
+        malloc(3)       Memory allocation
+
+SEE ALSO
+    shell(1), syscalls(2), malloc(3)
+ +
+ + + +
+ + diff --git a/docs/man/legal.html b/docs/man/legal.html new file mode 100644 index 0000000..a14810d --- /dev/null +++ b/docs/man/legal.html @@ -0,0 +1,177 @@ + + + + + + + legal(7) - MontaukOS Manual + + + + + + + + + +
+
+

legal(7)

+
+ +
+ +
NAME
+    MontaukOS legal/copyright information
+
+DESCRIPTION
+    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.)
+
+    MontaukOS is source-available software, provided under the terms of the
+    MontaukOS Software License. The full license text is on this system at
+    0:/os/licenses/LICENSE.txt.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+    FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+    COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+    IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+    == License for the Limine C++ template (certain portions derive therefrom) ==
+    Copyright (C) 2023-2026 Mintsuki and contributors.
+
+    Permission to use, copy, modify, and/or distribute this software for any
+    purpose with or without fee is hereby granted.
+
+    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+    FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+    PERFORMANCE OF THIS SOFTWARE.
+
+THIRD-PARTY COMPONENTS
+    MontaukOS is distributed together with third-party components that remain
+    under their own licenses, including:
+
+    * Flat Remix icon theme, Copyright (C) Daniel Ruiz de Alegria - GPLv3
+    * DOOM engine (doom.elf, via doomgeneric), Copyright (C) id Software, Inc.
+      and contributors - GPLv2
+    * Limine bootloader, Copyright (C) Mintsuki and contributors - BSD 2-Clause
+    * BearSSL, Copyright (c) Thomas Pornin - MIT
+    * stb_image, Copyright (c) Sean Barrett - MIT
+    * JetBrains Mono font, Copyright The JetBrains Mono Project Authors - OFL-1.1
+    * Noto Serif font, Copyright The Noto Project Authors - OFL-1.1
+    * Roboto font, Copyright The Roboto Project Authors - OFL-1.1
+    * C059 font (URW Base 35), Copyright (C) (URW)++ Design and Development
+      GmbH - AGPLv3 with font-embedding exception
+    * Tiny C Compiler (tcc.elf, 0:/sdk/tcc), Copyright (c) Fabrice Bellard and
+      contributors - LGPL-2.1
+    * Lua (lua.elf, 0:/sdk/lua), Copyright (C) Lua.org, PUC-Rio - MIT
+    * Mozilla CA certificate bundle (0:/os/certs), Mozilla CA Certificate
+      Program - MPL-2.0
+    * Intel Bluetooth firmware (0:/os/firmware/intel), Copyright (c) Intel
+      Corporation - Intel redistributable firmware license
+    * Default wallpaper photo (0:/os/wallpapers), by Nikhil Kumar -
+      Unsplash License
+
+    Full license texts and notices are on this system in 0:/os/licenses/.
+ +
+ + + +
+ + diff --git a/docs/man/malloc.html b/docs/man/malloc.html new file mode 100644 index 0000000..c7b80c8 --- /dev/null +++ b/docs/man/malloc.html @@ -0,0 +1,175 @@ + + + + + + + malloc(3) - MontaukOS Manual + + + + + + + + + +
+
+

malloc(3)

+
+ +
+ +
NAME
+    malloc, mfree, realloc - userspace heap allocation
+
+SYNOPSIS
+    void* montauk::malloc(uint64_t size);
+    void montauk::mfree(void* ptr);
+    void* montauk::realloc(void* ptr, uint64_t size);
+
+DESCRIPTION
+    The userspace heap provides dynamic memory allocation on top of
+    the kernel's page-mapping syscall (SYS_ALLOC). Include the
+    header <montauk/heap.h> to use these functions.
+
+   malloc
+    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).
+
+        char* buf = (char*)montauk::malloc(1024);
+
+   mfree
+    Returns the block to the userspace free list. No syscall is
+    made -- the memory stays mapped and is immediately reusable.
+    Passing nullptr is a safe no-op.
+
+        montauk::mfree(buf);
+
+   realloc
+    Resizes the allocation to 'size' bytes. Allocates a new block,
+    copies the smaller of old/new sizes, and frees the old block.
+    If ptr is nullptr, behaves like malloc.
+
+        buf = (char*)montauk::realloc(buf, 2048);
+
+IMPLEMENTATION
+    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.
+
+LOW-LEVEL PAGE API
+    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)
+
+    alloc() maps zeroed pages starting at 0x40000000 and growing
+    upward. Size is rounded up to 4 KiB page boundaries.
+
+SEE ALSO
+    syscalls(2), file(2)
+ +
+ + + +
+ + diff --git a/docs/man/man.html b/docs/man/man.html new file mode 100644 index 0000000..16b72af --- /dev/null +++ b/docs/man/man.html @@ -0,0 +1,167 @@ + + + + + + + man(1) - MontaukOS Manual + + + + + + + + + +
+
+

man(1)

+
+ +
+ +
NAME
+    man - display manual pages
+
+SYNOPSIS
+    man topic
+    man section topic
+
+DESCRIPTION
+    The man command displays manual pages from the ramdisk in a
+    fullscreen pager. Pages are stored as plain text files with
+    simple formatting directives.
+
+    If no section is specified, sections 1 through 7 are searched
+    in order. If a section number is given, only that section is
+    checked.
+
+KEY BINDINGS
+
+Navigation
+    j, Down Arrow     Scroll down one line
+    k, Up Arrow       Scroll up one line
+    Space, Page Down  Scroll down one page
+    b, Page Up        Scroll up one page
+    g, Home           Go to top
+    G, End            Go to bottom
+    q                 Quit
+
+SECTIONS
+    1   User commands and programs
+    2   System calls (kernel interface)
+    3   Library functions (userspace libraries)
+    7   Miscellaneous (legal, conventions)
+
+FILES
+    Man pages are stored on the ramdisk at:
+
+        0:/man/<topic>.<section>
+
+    For example, man intro reads 0:/man/intro.1
+
+EXAMPLES
+    man intro          View the introduction
+    man 2 syscalls     View syscall overview (section 2)
+    man malloc         View malloc documentation
+    man legal          View copyright information
+
+SEE ALSO
+    intro(1), shell(1), syscalls(2)
+ +
+ + + +
+ + diff --git a/docs/man/nslookup.html b/docs/man/nslookup.html new file mode 100644 index 0000000..bd56b01 --- /dev/null +++ b/docs/man/nslookup.html @@ -0,0 +1,154 @@ + + + + + + + nslookup(1) - MontaukOS Manual + + + + + + + + + +
+
+

nslookup(1)

+
+ +
+ +
NAME
+    nslookup - DNS hostname lookup
+
+SYNOPSIS
+    nslookup <hostname>
+
+DESCRIPTION
+    Resolves a hostname to an IPv4 address using the configured
+    DNS server and prints the result.
+
+    The kernel DNS resolver sends a UDP query to port 53 of the
+    configured DNS server and waits up to 5 seconds for a reply.
+    Results are cached in an 8-entry kernel cache with TTL support.
+
+OUTPUT
+    Server:   10.0.68.1
+    Name:     example.com
+    Address:  93.184.216.34
+    Time:     3ms
+
+    If the lookup fails:
+
+    Could not resolve: badhost.invalid
+
+DNS CONFIGURATION
+    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).
+
+EXAMPLES
+    nslookup google.com
+    nslookup icanhazip.com
+
+SEE ALSO
+    ping(1), fetch(1), dhcp(1), ifconfig(1), syscalls(2)
+ +
+ + + +
+ + diff --git a/docs/man/ping.html b/docs/man/ping.html new file mode 100644 index 0000000..a8d1e1c --- /dev/null +++ b/docs/man/ping.html @@ -0,0 +1,155 @@ + + + + + + + ping(1) - MontaukOS Manual + + + + + + + + + +
+
+

ping(1)

+
+ +
+ +
NAME
+    ping - send ICMP echo requests
+
+SYNOPSIS
+    ping <host>
+
+DESCRIPTION
+    Sends 4 ICMP echo requests to the specified host and prints
+    the round-trip time for each reply.
+
+    The host may be an IP address or a hostname. Hostnames are
+    resolved via the configured DNS server.
+
+    Each request has a 3-second timeout. Requests are sent at
+    1-second intervals.
+
+OUTPUT
+    PING example.com (93.184.216.34)
+      Reply from 93.184.216.34: time=12ms
+      Reply from 93.184.216.34: time=11ms
+      Reply from 93.184.216.34: time=13ms
+      Reply from 93.184.216.34: time=11ms
+
+    If a reply is not received within the timeout:
+
+      Request timed out
+
+EXAMPLES
+    ping 10.0.68.1
+        Ping the gateway by IP address.
+
+    ping google.com
+        Ping by hostname (requires DNS).
+
+SEE ALSO
+    nslookup(1), ifconfig(1), shell(1), syscalls(2)
+ +
+ + + +
+ + diff --git a/docs/man/printctl.html b/docs/man/printctl.html new file mode 100644 index 0000000..25b4854 --- /dev/null +++ b/docs/man/printctl.html @@ -0,0 +1,150 @@ + + + + + + + printctl(1) - MontaukOS Manual + + + + + + + + + +
+
+

printctl(1)

+
+ +
+ +
NAME
+printctl - configure printers and submit print jobs
+SYNOPSIS
+printctl
+command
+[options]
+DESCRIPTION
+printctl
+manages the MontaukOS userspace print spooler and submits print jobs to IPP printers.
+COMMANDS
+
+set-printer URI
+    Store the default printer URI.
+
+show-printer
+    Print the configured default printer URI.
+
+print FILE [--printer URI] [--name JOB] [--wait]
+    Queue a file for printing.
+
+test-page [--printer URI] [--wait] [--no-wait]
+    Generate and queue a simple test page.
+
+status [--verbose]
+    Show daemon state and queued, active, completed, and failed jobs.
+
+inspect JOB-ID
+    Show full metadata and debug details for a queued, active, completed, or failed job.
+
+probe [URI]
+    Probe the configured printer, print host and resolution details, and show IPP capability diagnostics.
+ +
+ + + +
+ + diff --git a/docs/man/printd.html b/docs/man/printd.html new file mode 100644 index 0000000..c9f3239 --- /dev/null +++ b/docs/man/printd.html @@ -0,0 +1,130 @@ + + + + + + + printd(1) - MontaukOS Manual + + + + + + + + + +
+
+

printd(1)

+
+ +
+ +
NAME
+printd - MontaukOS userspace print spooler daemon
+SYNOPSIS
+printd
+DESCRIPTION
+printd
+monitors the print spool directories, claims queued jobs, and delivers them to IPP printers.
+
+It is normally launched automatically by
+init(1)
+and does not require direct user interaction.
+ +
+ + + +
+ + diff --git a/docs/man/shell.html b/docs/man/shell.html new file mode 100644 index 0000000..5f0ff41 --- /dev/null +++ b/docs/man/shell.html @@ -0,0 +1,313 @@ + + + + + + + shell(1) - MontaukOS Manual + + + + + + + + + +
+
+

shell(1)

+
+ +
+ +
NAME
+    shell - MontaukOS interactive command shell
+
+DESCRIPTION
+    The MontaukOS shell is a command interpreter launched by init
+    after system services have started. It provides command
+    execution, file navigation, shell variables, command chaining,
+    tab completion, and command history.
+
+    Commands are either shell builtins or external programs. When
+    a command is not a builtin, the shell searches for a matching
+    ELF binary and executes it as a child process.
+
+COMMAND RESOLUTION
+    When a non-builtin command is entered, the shell searches for
+    a matching binary in the following order:
+
+        1. <cwd>/<command>         (exact name, e.g. "hello.elf")
+        2. <cwd>/<command>.elf
+        3. 0:/os/<command>.elf
+        4. 0:/os/<command>          (no extension)
+        5. If on a non-zero drive, the drive root: <drive>:/<command>[.elf]
+
+    A command containing a "/" (or an explicit drive prefix, or a
+    leading "." or "/") is instead treated as a direct path and
+    resolved by the kernel against the process CWD, trying the
+    path as-is and then with ".elf" appended.
+
+    The first match is spawned and the shell waits for it to exit.
+    If no match is found, the shell prints:
+
+        <command>: command not found
+
+    Arguments after the command name are passed to the spawned
+    process.
+
+BUILTINS
+
+   help
+    Display a categorized list of available commands.
+
+   ls [dir]
+    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
+
+   cd [dir]
+    Change the working directory. With no argument, returns to the
+    logged-in user's home directory (0:/users/<user>); with /,
+    returns to the drive root. Use cd .. to go up one level.
+    The shell prompt reflects the current directory.
+    Examples: cd os, cd .., cd
+
+   pwd
+    Print the current working directory as an absolute path
+    (e.g. "0:/os").
+
+   echo [-n] ...
+    Print the arguments. -n suppresses the trailing newline.
+
+   set [VAR=value]
+    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.
+
+   unset VAR
+    Remove a user-defined shell variable.
+
+   true / false
+    Return exit status 0 / 1 without doing anything. Useful with
+    && and ||.
+
+   N:
+    A bare "<number>:" (e.g. "1:") switches the current drive to
+    drive N and resets the working directory to that drive's root.
+
+   exit
+    Terminate the shell process (with the last command's exit code).
+
+SYNTAX
+   Variables
+    NAME=value          Set a shell variable (no leading $)
+    $VAR or ${VAR}       Expand a variable's value
+    $?                   Exit status of the last command
+    $USER, $HOME, $PWD   Built-in dynamic variables (session user,
+                        home directory, current directory)
+    \$                   Escape a literal '$'
+
+   Tilde expansion
+    A leading ~ expands to the session home directory
+    (0:/users/<user>) when followed by end-of-string, '/', or a
+    space.
+
+   Command chaining
+    cmd1 ; cmd2          Run cmd2 unconditionally after cmd1
+    cmd1 && cmd2         Run cmd2 only if cmd1 succeeded (exit 0)
+    cmd1 || cmd2         Run cmd2 only if cmd1 failed (nonzero exit)
+
+    Single and double quotes protect ;, &&, and || from being
+    treated as separators.
+
+   Comments
+    A '#' outside of quotes starts a comment; the rest of the line
+    is ignored.
+
+EXTERNAL COMMANDS
+    All external commands live in 0:/os/ (see COMMAND RESOLUTION).
+    Where a dedicated man page exists it is noted below; run
+    'man <command>' for details.
+
+   File commands
+    cat <file>          Display file contents
+    edit [file]         Text editor -- see edit(1)
+    copy <src> <dst>    Copy a file
+    move <src> <dst>    Move/rename a file
+    rm <file>           Remove a file
+    touch <file>        Create an empty file
+
+   System commands
+    man <topic>         View manual pages -- see man(1)
+    whoami              Print the current username
+    info / mtkfetch     Show system information
+    date                Show current date and time
+    uptime              Show system uptime
+    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)
+    lua                 Lua interpreter
+    tcc                 TinyCC (in-system C compiler)
+    reset               Reboot the system
+    shutdown            Shut down the system
+
+   Network commands
+    ping <host>         Send ICMP echo requests -- see ping(1)
+    nslookup <host>     DNS lookup -- see nslookup(1)
+    ifconfig            Show/set network configuration
+    tcpconnect <host> <port>  Interactive TCP client
+    irc                 IRC client
+    dhcp                DHCP client -- see dhcp(1)
+    fetch <url>         HTTP/HTTPS client (TLS 1.2) -- see fetch(1)
+    wiki <title>        Wikipedia article viewer -- see wiki(1)
+    httpd               HTTP server
+
+    Network commands accept both IP addresses and hostnames.
+    Hostnames are resolved via the configured DNS server.
+
+   Bluetooth
+    btlist              List connected Bluetooth devices
+    btbonds              List bonded (paired) Bluetooth devices
+
+   Software-defined radio
+    sdr [freqMHz [rateHz]]  Receive and report basic signal
+                        statistics from an attached RTL-SDR dongle
+
+    GUI applications (window server programs, not run from the
+    shell prompt as text commands) live under 0:/apps/, one bundle
+    per app -- e.g. doom, terminal, texteditor, spreadsheet,
+    wordprocessor, paint, calculator, network, bluetooth, audio,
+    disks, devexplorer, procmgr, powermgr, printers, timezone,
+    weather, wikipedia. There is no 0:/games/ directory.
+
+TAB COMPLETION
+    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.
+
+INPUT
+    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.
+
+   Editing
+    Backspace       Delete character before cursor
+    Tab             Tab-complete the current word
+    Enter           Execute the command line
+
+   History
+    The shell stores the last 32 unique commands. Duplicate
+    consecutive entries are suppressed.
+
+    Up Arrow        Recall previous command
+    Down Arrow      Recall next command (or clear line)
+
+PROMPT
+    The prompt displays the current drive and working directory:
+
+        0:/> _              (at root of drive 0)
+        0:/os> _            (in os/ directory)
+        1:/> _              (at root of drive 1)
+
+SEE ALSO
+    man(1), intro(1), syscalls(2)
+ +
+ + + +
+ + diff --git a/docs/man/spawn.html b/docs/man/spawn.html new file mode 100644 index 0000000..1ab9179 --- /dev/null +++ b/docs/man/spawn.html @@ -0,0 +1,187 @@ + + + + + + + spawn(2) - MontaukOS Manual + + + + + + + + + +
+
+

spawn(2)

+
+ +
+ +
NAME
+    spawn, waitpid - create and wait for processes
+
+SYNOPSIS
+    int montauk::spawn(const char* path, const char* args = nullptr);
+    void montauk::waitpid(int pid);
+    int montauk::getargs(char* buf, uint64_t maxLen);
+
+DESCRIPTION
+
+   spawn
+    Loads the ELF64 binary at the given VFS path and creates a new
+    process. The path must include the drive prefix, for example:
+
+        int pid = montauk::spawn("0:/os/hello.elf");
+
+    An optional second argument passes a string to the child:
+
+        int pid = montauk::spawn("0:/os/man.elf", "intro");
+
+    The new process gets its own PML4 page table, a 32 KiB stack
+    (at 0x7FFFFF7000-0x7FFFFFF000), and begins executing at the
+    ELF entry point (_start).
+
+    Returns the new process's PID on success, or -1 on failure.
+    Failure occurs when there are no free process slots (max 256),
+    the file cannot be found, or the ELF is invalid.
+
+   waitpid
+    Blocks the calling process until the process with the given PID
+    has exited. Internally, this yields the CPU in a loop:
+
+        montauk::waitpid(pid);
+
+    This is how the shell implements foreground process execution --
+    it spawns a child and waits for it to complete before showing
+    the next prompt.
+
+EXAMPLES
+    Spawn a program and wait for it:
+
+        int pid = montauk::spawn("0:/os/hello.elf");
+        if (pid < 0) {
+            montauk::print("spawn failed\n");
+        } else {
+            montauk::waitpid(pid);
+            montauk::print("child exited\n");
+        }
+
+   getargs
+    Copies the argument string into buf (up to maxLen bytes, always
+    null-terminated). Returns the number of characters copied, or
+    -1 on error.
+
+        char args[256];
+        montauk::getargs(args, sizeof(args));
+
+    The argument string is set by the parent when calling spawn().
+    If no arguments were provided, the buffer will be empty.
+
+NOTES
+    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.
+
+SEE ALSO
+    syscalls(2), file(2)
+ +
+ + + +
+ + diff --git a/docs/man/syscalls.html b/docs/man/syscalls.html new file mode 100644 index 0000000..2957a64 --- /dev/null +++ b/docs/man/syscalls.html @@ -0,0 +1,906 @@ + + + + + + + syscalls(2) - MontaukOS Manual + + + + + + + + + +
+
+

syscalls(2)

+
+ +
+ +
NAME
+    syscalls - overview of MontaukOS system calls
+
+DESCRIPTION
+    MontaukOS provides 150 system calls (numbers 0-149, sparsely
+    assigned -- not every number in the range is in use) for
+    userspace programs. Syscalls use the x86-64 SYSCALL instruction
+    with the following register convention:
+
+        RAX   Syscall number (in) / return value (out)
+        RDI   Argument 1
+        RSI   Argument 2
+        RDX   Argument 3
+        R10   Argument 4
+        R8    Argument 5
+        R9    Argument 6
+
+    Include <Api/Syscall.hpp> for the numeric SYS_* constants and
+    ABI structs, and <montauk/syscall.h> for typed wrappers in the
+    montauk:: namespace. This page groups syscalls the same way the
+    kernel source does (one subsystem header per group).
+
+PROCESS MANAGEMENT
+SYS_EXIT (0)
+    Terminate the calling process.
+        [[noreturn]] void montauk::exit(int code = 0);
+
+SYS_YIELD (1)
+    Yield the remainder of the time slice.
+        void montauk::yield();
+
+SYS_SLEEP_MS (2)
+    Sleep for at least the given number of milliseconds.
+        void montauk::sleep_ms(uint64_t ms);
+
+SYS_GETPID (3)
+    Return the PID of the calling process.
+        int montauk::getpid();
+
+SYS_SPAWN (20)
+    Spawn a new process from an ELF binary on the VFS.
+        int montauk::spawn(const char* path, const char* args = nullptr);
+
+SYS_WAITPID (23)
+    Block until the given process has exited.
+        void montauk::waitpid(int pid);
+
+SYS_GETARGS (25)
+    Get the argument string passed to this process at spawn time.
+        int montauk::getargs(char* buf, uint64_t maxLen);
+
+SYS_PROCLIST (61)
+    List running processes (pid, parent, state, name, heap usage,
+    accumulated CPU time).
+        int montauk::proclist(montauk::abi::ProcInfo* buf, int max);
+
+SYS_KILL (62)
+    Terminate another process by PID.
+        int montauk::kill(int pid);
+
+SYS_CHDIR (96)
+    Change the calling process's current working directory.
+        int montauk::chdir(const char* path);
+
+SYS_GETCWD (95)
+    Get the calling process's current working directory.
+        int montauk::getcwd(char* buf, uint64_t maxLen);
+
+SYS_SETUSER (92)
+    Associate a process with a logged-in user name (used by login/session
+    management).
+        int montauk::setuser(int pid, const char* name);
+
+SYS_GETUSER (93)
+    Get the user name associated with the calling process.
+        int montauk::getuser(char* buf, uint64_t maxLen);
+
+THREADING
+    Threads share the spawning process's address space and heap
+    (see montauk/heap.h for the heap lock). Declared in
+    montauk/thread.h.
+
+SYS_THREAD_SPAWN (130)
+    Spawn a new thread in the calling process. Returns a positive
+    TID on success, -1 on failure.
+        int montauk::thread_spawn(ThreadEntry entry, void* arg,
+                                  uint64_t stack_bytes = 0);
+
+SYS_THREAD_EXIT (131)
+    Terminate only the calling thread. If it is the main thread,
+    the whole process exits.
+        [[noreturn]] void montauk::thread_exit(int code = 0);
+
+SYS_THREAD_JOIN (132)
+    Block until the given TID exits, then reclaim its kernel state.
+        int montauk::thread_join(int tid, int* out_code = nullptr);
+
+SYS_THREAD_SELF (133)
+    Return the calling thread's TID (equals getpid() for the main
+    thread).
+        int montauk::thread_self();
+
+CONSOLE I/O
+SYS_PRINT (4)
+    Write a null-terminated string to the terminal.
+        void montauk::print(const char* text);
+
+SYS_PUTCHAR (5)
+    Write a single character to the terminal.
+        void montauk::putchar(char c);
+
+FILE I/O
+SYS_OPEN (6)
+    Open a file. Returns a handle or negative on error.
+        int montauk::open(const char* path);
+
+SYS_READ (7)
+    Read bytes from a file at a given offset.
+        int montauk::read(int h, uint8_t* buf, uint64_t off, uint64_t sz);
+
+SYS_GETSIZE (8)
+    Get the size of an open file in bytes.
+        uint64_t montauk::getsize(int handle);
+
+SYS_CLOSE (9)
+    Close a file handle.
+        void montauk::close(int handle);
+
+SYS_READDIR (10)
+    List directory entries (max 256 per call for VFS directories,
+    128 for driver-backed listings such as 0:/os/). For larger
+    directories use SYS_READDIR_AT.
+        int montauk::readdir(const char* path, const char** names, int max);
+
+SYS_READDIR_AT (136)
+    Paginated directory read. Returns entries starting at
+    startIndex; call repeatedly with startIndex advanced by the
+    returned count until it returns 0 to enumerate directories of
+    any size.
+        int montauk::readdir_at(const char* path, const char** names,
+                               int max, int startIndex);
+
+SYS_FWRITE (41)
+    Write bytes to a file at a given offset.
+        int montauk::fwrite(int handle, const uint8_t* buf,
+                           uint64_t offset, uint64_t size);
+
+SYS_FCREATE (42)
+    Create a new file on the target volume. Returns a handle or
+    negative on error.
+        int montauk::fcreate(const char* path);
+
+SYS_FDELETE (77)
+    Delete a file.
+        int montauk::fdelete(const char* path);
+
+SYS_FMKDIR (78)
+    Create a directory.
+        int montauk::fmkdir(const char* path);
+
+SYS_FRENAME (94)
+    Rename or move a file/directory (used as the basis for file
+    manager move operations).
+        int montauk::frename(const char* oldPath, const char* newPath);
+
+SYS_DRIVELIST (79)
+    List mounted drive numbers.
+        int montauk::drivelist(int* outDrives, int max);
+
+SYS_DRIVELABEL (124)
+    Get the volume label of a drive.
+        int montauk::drivelabel(int drive, char* outLabel, int maxLen);
+
+SYS_DRIVEKIND (127)
+    Get the block device kind backing a drive: 0=unknown/ramdisk,
+    1=SATA, 2=SATAPI, 3=NVMe, 4=USB mass storage.
+        int montauk::drivekind(int drive);
+
+MEMORY
+SYS_ALLOC (11)
+    Map zeroed pages into the process address space.
+        void* montauk::alloc(uint64_t size);
+
+SYS_FREE (12)
+    Reserved (currently a no-op).
+        void montauk::free(void* ptr);
+
+SYS_MEMSTATS (67)
+    Get kernel-wide physical memory usage (total/free/used bytes,
+    page size).
+        void montauk::memstats(montauk::abi::MemStats* out);
+
+TIMEKEEPING
+SYS_GETTICKS (13)
+    Get APIC timer ticks since boot.
+        uint64_t montauk::get_ticks();
+
+SYS_GETMILLISECONDS (14)
+    Get milliseconds elapsed since boot.
+        uint64_t montauk::get_milliseconds();
+
+SYS_GETTIME (28)
+    Get the current wall-clock date and time (UTC).
+    Fills a montauk::abi::DateTime struct with Year, Month, Day,
+    Hour, Minute, and Second fields.
+        void montauk::gettime(montauk::abi::DateTime* out);
+
+SYS_SETTZ (90)
+    Set the process/system timezone offset, in minutes from UTC.
+        void montauk::settz(int offset_minutes);
+
+SYS_GETTZ (91)
+    Get the current timezone offset, in minutes from UTC.
+        int montauk::gettz();
+
+SYSTEM
+SYS_GETINFO (15)
+    Get OS name, version string, API version, max process count,
+    and the monotonic kernel build number.
+        void montauk::get_info(montauk::abi::SysInfo* info);
+
+KEYBOARD
+SYS_ISKEYAVAILABLE (16)
+    Check if a key event is pending (non-blocking).
+        bool montauk::is_key_available();
+
+SYS_GETKEY (17)
+    Get the next key event (press or release).
+        void montauk::getkey(montauk::abi::KeyEvent* out);
+
+SYS_GETCHAR (18)
+    Block until a printable character is typed.
+        char montauk::getchar();
+
+SYS_INPUT_WAIT (123)
+    Block until the input serial number differs from
+    observedSerial or the timeout elapses; used to sleep
+    efficiently between input-driven redraws.
+        uint64_t montauk::input_wait(uint64_t observedSerial, uint64_t timeoutMs);
+
+MOUSE
+SYS_MOUSESTATE (47)
+    Get the current mouse position, scroll delta, and button mask.
+        void montauk::mouse_state(montauk::abi::MouseState* out);
+
+SYS_SETMOUSEBOUNDS (48)
+    Set the maximum X/Y the mouse cursor may reach (e.g. framebuffer
+    dimensions).
+        void montauk::set_mouse_bounds(int32_t maxX, int32_t maxY);
+
+NETWORKING
+SYS_PING (19)
+    Send an ICMP echo request and wait for reply.
+        int32_t montauk::ping(uint32_t ip, uint32_t timeoutMs = 3000);
+
+SYS_RESOLVE (44)
+    Resolve a hostname to an IPv4 address via DNS. Sends a UDP
+    query to the configured DNS server and waits up to 5 seconds
+    for a reply. Returns the IP in network byte order, or 0 on
+    failure. IP address strings (e.g. "10.0.0.1") are detected
+    and returned directly without a DNS query.
+        uint32_t montauk::resolve(const char* hostname);
+
+SYS_GETNETCFG (37)
+    Get the current network configuration (IP, mask, gateway, MAC,
+    DNS server).
+        void montauk::get_netcfg(montauk::abi::NetCfg* out);
+
+SYS_SETNETCFG (38)
+    Set the network configuration (IP, mask, gateway, DNS server).
+        int montauk::set_netcfg(const montauk::abi::NetCfg* cfg);
+
+SYS_NETSTATUS (125)
+    Get adapter status including driver name, link state, polling mode,
+    and RX/TX packet counters.
+        int montauk::net_status(montauk::abi::NetStatus* out);
+
+SOCKETS
+SYS_SOCKET (29)
+    Create a socket. type=SOCK_TCP (1) or SOCK_UDP (2).
+    Returns fd or -1.
+        int montauk::socket(int type);
+
+SYS_CONNECT (30)
+    Connect a TCP socket to a remote host.
+        int montauk::connect(int fd, uint32_t ip, uint16_t port);
+
+SYS_BIND (31)
+    Bind a socket to a local port for listening.
+        int montauk::bind(int fd, uint16_t port);
+
+SYS_LISTEN (32)
+    Start listening for incoming TCP connections.
+        int montauk::listen(int fd);
+
+SYS_ACCEPT (33)
+    Accept an incoming connection on a listening socket.
+    Returns a new socket fd for the client connection.
+        int montauk::accept(int fd);
+
+SYS_SEND (34)
+    Send data on a connected socket. Returns bytes sent.
+        int montauk::send(int fd, const void* data, uint32_t len);
+
+SYS_RECV (35)
+    Receive data from a connected socket. Returns bytes
+    received, 0 if no data available, or -1 on close/error.
+        int montauk::recv(int fd, void* buf, uint32_t maxLen);
+
+SYS_CLOSESOCK (36)
+    Close a socket and release its resources.
+        int montauk::closesocket(int fd);
+
+SYS_SENDTO (39)
+    Send a UDP datagram to a specific destination.
+        int montauk::sendto(int fd, const void* data, uint32_t len,
+                           uint32_t destIp, uint16_t destPort);
+
+SYS_RECVFROM (40)
+    Receive a UDP datagram. Returns the source address.
+        int montauk::recvfrom(int fd, void* buf, uint32_t maxLen,
+                             uint32_t* srcIp, uint16_t* srcPort);
+
+FRAMEBUFFER
+SYS_FBINFO (21)
+    Get framebuffer dimensions and format.
+        void montauk::fb_info(montauk::abi::FbInfo* info);
+
+SYS_FBMAP (22)
+    Map the framebuffer into process memory.
+        void* montauk::fb_map();
+
+TERMINAL
+SYS_TERMSIZE (24)
+    Get terminal dimensions (columns and rows).
+        void montauk::termsize(int* cols, int* rows);
+
+SYS_TERMSCALE (43)
+    Get or set the terminal font scale factor. When scale_x is 0,
+    returns the current scale as (scale_y << 32 | scale_x). When
+    scale_x is non-zero, sets the font scale and returns the new
+    terminal dimensions as (rows << 32 | cols).
+        void montauk::termscale(int scale_x, int scale_y);
+        void montauk::get_termscale(int* scale_x, int* scale_y);
+
+RANDOM
+SYS_GETRANDOM (45)
+    Fill a buffer with random bytes using RDTSC-seeded entropy.
+    Returns the number of bytes written.
+        int64_t montauk::getrandom(void* buf, uint32_t len);
+
+POWER MANAGEMENT
+SYS_RESET (26)
+    Reboot the system.
+        [[noreturn]] void montauk::reset();
+
+SYS_SHUTDOWN (27)
+    Shut down the system.
+        [[noreturn]] void montauk::shutdown();
+
+SYS_SUSPEND (89)
+    Enter ACPI S3 sleep. Returns after wake, 0 on success.
+        int montauk::suspend();
+
+SYS_POWER_REQUEST (135)
+    Cross-process graceful power-off request channel. The desktop
+    posts a pending action (POWER_REQ_SHUTDOWN / POWER_REQ_REBOOT)
+    then exits; login.elf reads it with POWER_REQ_QUERY
+    (read-and-clear), runs the shutdown stages, and finally calls
+    shutdown()/reset(). See montauk::abi::PowerRequestAction.
+        int montauk::power_request(int action);
+
+SYS_POWERINFO (149)
+    Get the CPU power/thermal snapshot (HWP state, throttling,
+    package temperature, base/max/effective frequency). Returns 0
+    on success, -1 if unsupported by the running hardware.
+        int montauk::syscall1(SYS_POWERINFO, (uint64_t)&out);
+        // out: montauk::abi::PowerInfo*
+
+KERNEL LOG
+SYS_LOG (46)
+    Read from the kernel ring log buffer.
+        int64_t montauk::read_log(char* buf, uint64_t size);
+
+I/O REDIRECTION
+    Used by the terminal app and similar programs to run a child
+    process with its console I/O captured instead of going directly
+    to the framebuffer console.
+
+SYS_SPAWN_REDIR (49)
+    Spawn a process with its console I/O redirected to the caller.
+        int montauk::spawn_redir(const char* path, const char* args = nullptr);
+
+SYS_CHILDIO_READ (50)
+    Read buffered output produced by a redirected child.
+        int montauk::childio_read(int childPid, char* buf, int maxLen);
+
+SYS_CHILDIO_WRITE (51)
+    Write text input to a redirected child's stdin.
+        int montauk::childio_write(int childPid, const char* data, int len);
+
+SYS_CHILDIO_WRITEKEY (52)
+    Forward a raw key event to a redirected child.
+        int montauk::childio_writekey(int childPid, const montauk::abi::KeyEvent* key);
+
+SYS_CHILDIO_SETTERMSZ (53)
+    Tell a redirected child its terminal dimensions changed.
+        int montauk::childio_settermsz(int childPid, int cols, int rows);
+
+WINDOW SERVER
+    Window server syscalls are used by GUI programs to create and
+    drive an on-screen window (see montauk/Window.hpp for the
+    higher-level win_create/win_poll/win_present wrappers built on
+    top of these).
+
+SYS_WINCREATE (54)
+    Create a window and get its pixel buffer.
+        int montauk::win_create(const char* title, int w, int h,
+                               montauk::abi::WinCreateResult* result);
+
+SYS_WINDESTROY (55)
+    Destroy a window.
+        int montauk::win_destroy(int id);
+
+SYS_WINPRESENT (56)
+    Flush the pixel buffer to the screen.
+        uint64_t montauk::win_present(int id);
+
+SYS_WINPOLL (57)
+    Poll the next event (key, mouse, resize, close, scale) for a
+    window.
+        int montauk::win_poll(int id, montauk::abi::WinEvent* event);
+
+SYS_WINENUM (58)
+    Enumerate all windows currently managed by the window server.
+        int montauk::win_enumerate(montauk::abi::WinInfo* info, int max);
+
+SYS_WINMAP (59)
+    Map (or re-map) a window's pixel buffer into the caller's
+    address space.
+        uint64_t montauk::win_map(int id);
+
+SYS_WINUNMAP (97)
+    Unmap a window's pixel buffer from the caller's address space.
+        int montauk::win_unmap(int id);
+
+SYS_WINSENDEVENT (60)
+    Inject an event into a window's event queue.
+        int montauk::win_sendevent(int id, const montauk::abi::WinEvent* event);
+
+SYS_WINRESIZE (64)
+    Resize a window and its pixel buffer.
+        uint64_t montauk::win_resize(int id, int w, int h);
+
+SYS_WINSETSCALE (65)
+    Set the desktop-wide UI scale factor.
+        int montauk::win_setscale(int scale);
+
+SYS_WINGETSCALE (66)
+    Get the desktop-wide UI scale factor.
+        int montauk::win_getscale();
+
+SYS_WINSETCURSOR (68)
+    Set the mouse cursor shown while over a window (0=arrow,
+    1=resize_h, 2=resize_v).
+        int montauk::win_setcursor(int id, int cursor);
+
+SYS_WINSETFLAGS (126)
+    Set window flags (e.g. WIN_FLAG_FULLSCREEN).
+        int montauk::win_setflags(int id, uint32_t flags);
+
+DEVICES
+SYS_DEVLIST (63)
+    Enumerate detected devices (CPU, interrupts, timers, input,
+    USB, network, display, storage, PCI, audio, ACPI) for the
+    device explorer app.
+        int montauk::devlist(montauk::abi::DevInfo* buf, int max);
+
+SYS_DISKINFO (69)
+    Get detailed info for one block device (model, serial, sector
+    size, NCQ/TRIM/SMART support, etc.).
+        int montauk::diskinfo(montauk::abi::DiskInfo* buf, int port);
+
+STORAGE
+SYS_PARTLIST (70)
+    Enumerate GPT partitions across all block devices.
+        int montauk::partlist(montauk::abi::PartInfo* buf, int max);
+
+SYS_DISKREAD (71)
+    Raw, driver-agnostic sector read from a block device.
+        int64_t montauk::disk_read(int blockDev, uint64_t lba,
+                                  uint32_t sectorCount, void* buf);
+
+SYS_DISKWRITE (72)
+    Raw, driver-agnostic sector write to a block device.
+        int64_t montauk::disk_write(int blockDev, uint64_t lba,
+                                   uint32_t sectorCount, const void* buf);
+
+SYS_GPTINIT (73)
+    Initialize a fresh GPT partition table on a block device.
+        int montauk::gpt_init(int blockDev);
+
+SYS_GPTADD (74)
+    Add a partition to an existing GPT table.
+        int montauk::gpt_add(const montauk::abi::GptAddParams* params);
+
+SYS_FSMOUNT (75)
+    Mount a partition's filesystem onto a drive number.
+        int montauk::fs_mount(int partIndex, int driveNum);
+
+SYS_FSFORMAT (76)
+    Format a partition with a filesystem (FS_TYPE_FAT32 or
+    FS_TYPE_EXT2).
+        int montauk::fs_format(const montauk::abi::FsFormatParams* params);
+
+SYS_FS_SYNC (134)
+    Flush all block-device write caches and cleanly unmount
+    disk-backed volumes ahead of power-off. Returns the number of
+    volumes unmounted. Part of the graceful shutdown sequence
+    (see SYS_POWER_REQUEST).
+        int montauk::fs_sync();
+
+AUDIO
+SYS_AUDIOOPEN (80)
+    Open a mixer output stream at the given sample rate, channel
+    count, and bit depth. Returns a stream handle.
+        int montauk::audio_open(uint32_t sampleRate, uint8_t channels,
+                               uint8_t bitsPerSample);
+
+SYS_AUDIOCLOSE (81)
+    Close an audio stream.
+        void montauk::audio_close(int handle);
+
+SYS_AUDIOWRITE (82)
+    Write PCM samples to an audio stream.
+        int montauk::audio_write(int handle, const void* data, uint32_t size);
+
+SYS_AUDIOCTL (83)
+    Control an audio stream or the global mixer. Commands 0-3 act
+    on the stream named by the handle argument; commands 4-12 act
+    on that stream's routing/mute state or the global master and
+    ignore or reuse the handle as documented below.
+        int montauk::audio_ctl(int handle, int cmd, int value);
+
+    Convenience wrappers (all thin calls onto audio_ctl):
+        audio_set_volume, audio_get_volume     AUDIO_CTL_{SET,GET}_VOLUME (0/1)
+        audio_get_pos                          AUDIO_CTL_GET_POS (2)
+        audio_pause, audio_resume              AUDIO_CTL_PAUSE (3)
+        audio_get_output                       AUDIO_CTL_GET_OUTPUT (4): 0=HDA, 1=Bluetooth
+        audio_set_output                       AUDIO_CTL_SET_OUTPUT (5): switch all streams
+        (SET_OUTPUT, 5)                        switch a stream's output route
+        audio_bt_status                        AUDIO_CTL_BT_STATUS (6)
+        audio_set_master_volume, _get_          AUDIO_CTL_{SET,GET}_MASTER_VOLUME (7/8), 0-100
+        audio_set_mute, audio_get_mute         AUDIO_CTL_{SET,GET}_MUTE (9/10), per-stream
+        audio_set_master_mute, _get_           AUDIO_CTL_{SET,GET}_MASTER_MUTE (11/12)
+
+SYS_AUDIOLIST (128)
+    Enumerate active mixer streams (owner PID, name, format,
+    volume, mute/pause state).
+        int montauk::audio_list(montauk::abi::AudioStreamInfo* buf, int maxCount);
+
+SYS_AUDIOWAIT (129)
+    Return the current mixer state serial. With timeoutMs > 0,
+    blocks until the serial differs from prevSerial or the timeout
+    elapses; with timeoutMs == 0 it returns immediately.
+        uint64_t montauk::audio_wait(uint64_t prevSerial, uint64_t timeoutMs);
+
+BLUETOOTH
+SYS_BTSCAN (84)
+    Scan for discoverable Bluetooth devices for up to timeoutMs.
+        int montauk::bt_scan(montauk::abi::BtScanResult* buf, int maxCount,
+                            uint32_t timeoutMs);
+
+SYS_BTCONNECT (85)
+    Connect (and pair/bond if needed) to a device by BD_ADDR.
+        int montauk::bt_connect(const uint8_t* bdAddr);
+
+SYS_BTDISCONNECT (86)
+    Disconnect from a device by BD_ADDR.
+        int montauk::bt_disconnect(const uint8_t* bdAddr);
+
+SYS_BTLIST (87)
+    List currently connected devices.
+        int montauk::bt_list(montauk::abi::BtDevInfo* buf, int maxCount);
+
+SYS_BTINFO (88)
+    Get local adapter info (BD_ADDR, name, init/scanning state).
+        int montauk::bt_info(montauk::abi::BtAdapterInfo* buf);
+
+SYS_BTSETADDR (137)
+    Change the adapter's BD_ADDR (6-byte buffer, byte 0 is the
+    least-significant octet). Volatile -- apply after the last
+    controller reset and persist separately to bluetooth.toml.
+        int montauk::bt_set_addr(const uint8_t* bdAddr);
+
+SYS_BTBONDS (138)
+    List bonded (paired) devices.
+        int montauk::bt_bonds(montauk::abi::BtBondInfo* buf, int maxCount);
+
+SYS_BTFORGET (139)
+    Forget a paired device; it must re-pair next time.
+        int montauk::bt_forget(const uint8_t* bdAddr);
+
+SOFTWARE-DEFINED RADIO
+    Receive-only SDR API. Receivers are enumerated by index in
+    [0, SYS_SDR_COUNT); SYS_SDR_OPEN returns a handle used by the
+    rest of the calls. Samples are delivered as interleaved 8-bit
+    unsigned I/Q (CU8, SDR_FORMAT_CU8) from the device's ring
+    buffer. Backed by an RTL-SDR (RTL2832U + R820T2) driver.
+
+SYS_SDR_COUNT (140)
+    Number of available SDR receivers.
+        int montauk::sdr_count();
+
+SYS_SDR_INFO (141)
+    Get static/dynamic info for one receiver by index (name, tuner,
+    frequency/sample-rate ranges, gain steps, present/streaming
+    flags).
+        int montauk::sdr_info(int index, montauk::abi::SdrDeviceInfo* out);
+
+SYS_SDR_OPEN (142)
+    Open a receiver by index. Returns a handle.
+        int montauk::sdr_open(int index);
+
+SYS_SDR_CLOSE (143)
+    Close a receiver handle.
+        int montauk::sdr_close(int handle);
+
+SYS_SDR_START (144)
+    Begin streaming samples.
+        int montauk::sdr_start(int handle);
+
+SYS_SDR_STOP (145)
+    Stop streaming samples.
+        int montauk::sdr_stop(int handle);
+
+SYS_SDR_READ (146)
+    Non-blocking read of queued I/Q samples. Returns bytes copied.
+        int montauk::sdr_read(int handle, void* buf, uint32_t len);
+
+SYS_SDR_SETPARAM (147)
+    Set a tunable parameter (see SDR_PARAM_* below).
+        int montauk::sdr_set_param(int handle, int param, uint64_t value);
+
+SYS_SDR_GETPARAM (148)
+    Get a tunable parameter's current value.
+        int64_t montauk::sdr_get_param(int handle, int param);
+
+    Parameters (montauk::abi::SDR_PARAM_*): FREQ (center frequency,
+    Hz), SAMPLE_RATE (Hz), GAIN_MODE (0=auto/AGC, 1=manual), GAIN
+    (tenths of dB), FREQ_CORR (ppm), AGC (demod digital AGC, 0/1),
+    DIRECT_SAMP (0=off, 1=I, 2=Q). Convenience wrappers exist for
+    each: sdr_set_freq/sdr_get_freq, sdr_set_sample_rate/
+    sdr_get_sample_rate, sdr_set_gain_mode, sdr_set_gain,
+    sdr_set_freq_correction, sdr_set_agc.
+
+CLIPBOARD
+SYS_CLIPBOARD_SET_TEXT (119)
+    Set the system clipboard's text contents (max
+    CLIPBOARD_MAX_TEXT_BYTES, 256 KiB).
+        int montauk::clipboard_set_text(const char* data, uint32_t len);
+
+SYS_CLIPBOARD_GET_INFO (120)
+    Get the clipboard's current size and serial number (for
+    change detection).
+        int montauk::clipboard_get_info(montauk::abi::ClipboardInfo* out);
+
+SYS_CLIPBOARD_GET_TEXT (121)
+    Read the clipboard's text contents.
+        int montauk::clipboard_get_text(char* buf, uint32_t bufLen,
+                                       uint32_t* outLen, uint64_t* outSerial = nullptr);
+
+SYS_CLIPBOARD_CLEAR (122)
+    Clear the clipboard.
+        int montauk::clipboard_clear();
+
+GENERIC IPC
+    Handle-based IPC primitives underlying streams, mailboxes,
+    waitsets, and shared-memory surfaces (see kernel/src/Ipc/Ipc.hpp).
+    All are accessed via numeric handles with rights-based security
+    and can be waited on with SYS_WAIT_HANDLE or a waitset.
+
+SYS_DUPHANDLE (98)
+    Duplicate a handle (e.g. to hand a copy to a child process).
+        int montauk::dup_handle(int handle);
+
+SYS_WAIT_HANDLE (99)
+    Block until a handle's signals intersect wantedSignals, or
+    timeoutMs elapses. See IPC_SIGNAL_* (READABLE, WRITABLE,
+    PEER_CLOSED, EXITED, READY).
+        uint32_t montauk::wait_handle(int handle, uint32_t wantedSignals,
+                                     uint64_t timeoutMs = ~0ULL);
+
+SYS_STREAM_CREATE (100)
+    Create a byte-pipe stream, returning a read handle and a write
+    handle.
+        int montauk::stream_create(int* outReadHandle, int* outWriteHandle,
+                                  uint32_t capacity = 0);
+
+SYS_STREAM_READ (101)
+    Read bytes from a stream handle.
+        int montauk::stream_read(int handle, void* buf, int maxLen);
+
+SYS_STREAM_WRITE (102)
+    Write bytes to a stream handle.
+        int montauk::stream_write(int handle, const void* data, int len);
+
+SYS_MAILBOX_CREATE (103)
+    Create a message-queue mailbox, returning a send handle and a
+    receive handle.
+        int montauk::mailbox_create(int* outSendHandle, int* outRecvHandle);
+
+SYS_MAILBOX_SEND (104)
+    Send a typed message, optionally attaching a handle to
+    transfer to the receiver.
+        int montauk::mailbox_send(int handle, uint32_t msgType, const void* data,
+                                 uint16_t len, int attachHandle = -1);
+
+SYS_MAILBOX_RECV (105)
+    Receive a message.
+        int montauk::mailbox_recv(int handle, uint32_t* outMsgType, void* data,
+                                 uint16_t* inOutLen, int* outAttachHandle = nullptr);
+
+SYS_WAITSET_CREATE (106)
+    Create a waitset for multiplexing waits across many handles.
+        int montauk::waitset_create();
+
+SYS_WAITSET_ADD (107)
+    Add a handle and its signal mask to a waitset.
+        int montauk::waitset_add(int waitsetHandle, int targetHandle,
+                                uint32_t signals);
+
+SYS_WAITSET_REMOVE (108)
+    Remove an entry from a waitset by index.
+        int montauk::waitset_remove(int waitsetHandle, int index);
+
+SYS_WAITSET_WAIT (109)
+    Block until any member handle's watched signals fire, or
+    timeoutMs elapses.
+        int montauk::waitset_wait(int waitsetHandle, montauk::abi::IpcWaitResult* outReady,
+                                 uint64_t timeoutMs = ~0ULL);
+
+SYS_PROC_OPEN (110)
+    Open a handle to another process by PID (for waiting on its
+    exit via IPC_SIGNAL_EXITED, etc.).
+        int montauk::proc_open(int pid);
+
+SYS_SURFACE_CREATE (111)
+    Create a shared pixel-buffer surface of byteSize bytes.
+        int montauk::surface_create(uint64_t byteSize);
+
+SYS_SURFACE_MAP (112)
+    Map a surface into the caller's address space.
+        void* montauk::surface_map(int handle);
+
+SYS_SURFACE_RESIZE (113)
+    Resize a surface.
+        int montauk::surface_resize(int handle, uint64_t newSize);
+
+SHARED LIBRARIES
+SYS_LOAD_LIB (114)
+    Load a shared library ELF (.lib) into the caller's address
+    space.
+        int montauk::load_lib(const char* path);
+
+SYS_UNLOAD_LIB (115)
+    Unload a previously loaded library.
+        int montauk::unload_lib(int handle);
+
+SYS_DLSYM (116)
+    Resolve a symbol offset within a loaded library to a callable
+    address.
+        void* montauk::dlsym(int handle, uint64_t symbolOffset);
+
+SYS_GETLIBBASE (117)
+    Get the base virtual address a loaded library was mapped at.
+        uint64_t montauk::get_libbase(int handle);
+
+CRASH REPORTING
+SYS_CRASH_REPORT (118)
+    Retrieve the kernel-filled crash report for the last faulting
+    process (exception vector/name, faulting address, register
+    state, page-fault error bits). Used by the crashpad app.
+        int montauk::crash_report(montauk::abi::CrashReportInfo* out);
+
+SEE ALSO
+    spawn(2), file(2), framebuffer(2), malloc(3), intro(1)
+ +
+ + + +
+ + diff --git a/docs/man/tls-errors.html b/docs/man/tls-errors.html new file mode 100644 index 0000000..1e78c1b --- /dev/null +++ b/docs/man/tls-errors.html @@ -0,0 +1,355 @@ + + + + + + + tls-errors(5) - MontaukOS Manual + + + + + + + + + +
+
+

tls-errors(5)

+
+ +
+ +
NAME
+    tls-errors - BearSSL TLS and X.509 error codes
+
+DESCRIPTION
+    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.
+
+SSL/TLS ENGINE ERRORS
+
+0  BR_ERR_OK
+    No error.
+
+1  BR_ERR_BAD_PARAM
+    Caller-provided parameter is incorrect.
+
+2  BR_ERR_BAD_STATE
+    Operation cannot be applied in the current engine state.
+
+3  BR_ERR_UNSUPPORTED_VERSION
+    Incoming protocol or record version is unsupported.
+
+4  BR_ERR_BAD_VERSION
+    Incoming record version does not match the expected version.
+
+5  BR_ERR_BAD_LENGTH
+    Incoming record length is invalid.
+
+6  BR_ERR_TOO_LARGE
+    Incoming record is too large, or buffer is too small for the
+    handshake message to send.
+
+7  BR_ERR_BAD_MAC
+    Decryption found invalid padding, or the record MAC is
+    not correct.
+
+8  BR_ERR_NO_RANDOM
+    No initial entropy was provided and none could be obtained
+    from the OS.
+
+9  BR_ERR_UNKNOWN_TYPE
+    Incoming record type is unknown.
+
+10 BR_ERR_UNEXPECTED
+    Incoming record or message has wrong type for the current
+    engine state.
+
+12 BR_ERR_BAD_CCS
+    ChangeCipherSpec message from the peer has invalid contents.
+
+13 BR_ERR_BAD_ALERT
+    Alert message from the peer has invalid contents (odd length).
+
+14 BR_ERR_BAD_HANDSHAKE
+    Incoming handshake message decoding failed.
+
+15 BR_ERR_OVERSIZED_ID
+    ServerHello contains a session ID larger than 32 bytes.
+
+16 BR_ERR_BAD_CIPHER_SUITE
+    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.
+
+17 BR_ERR_BAD_COMPRESSION
+    Server wants to use a compression method that we did not
+    advertise.
+
+18 BR_ERR_BAD_FRAGLEN
+    Server's max fragment length does not match client's.
+
+19 BR_ERR_BAD_SECRENEG
+    Secure renegotiation failed.
+
+20 BR_ERR_EXTRA_EXTENSION
+    Server sent an extension type that we did not announce, or
+    used the same extension type more than once in ServerHello.
+
+21 BR_ERR_BAD_SNI
+    Invalid Server Name Indication contents (when used by the
+    server, this extension shall be empty).
+
+22 BR_ERR_BAD_HELLO_DONE
+    Invalid ServerHelloDone from the server (length is not 0).
+
+23 BR_ERR_LIMIT_EXCEEDED
+    Internal limit exceeded (e.g. server's public key is too
+    large).
+
+24 BR_ERR_BAD_FINISHED
+    Finished message from peer does not match the expected value.
+
+25 BR_ERR_RESUME_MISMATCH
+    Session resumption attempted with a different version or
+    cipher suite.
+
+26 BR_ERR_INVALID_ALGORITHM
+    Unsupported or invalid algorithm (ECDHE curve, signature
+    algorithm, hash function).
+
+27 BR_ERR_BAD_SIGNATURE
+    Invalid signature on ServerKeyExchange or CertificateVerify.
+
+28 BR_ERR_WRONG_KEY_USAGE
+    Peer's public key does not have the proper type or is not
+    allowed for the requested operation.
+
+29 BR_ERR_NO_CLIENT_AUTH
+    Client did not send a certificate upon request, or the client
+    certificate could not be validated.
+
+31 BR_ERR_IO
+    I/O error or premature close on the underlying transport.
+
+X.509 CERTIFICATE ERRORS
+
+32 BR_ERR_X509_OK
+    X.509 validation was successful (not an error).
+
+33 BR_ERR_X509_INVALID_VALUE
+    Invalid value in an ASN.1 structure.
+
+34 BR_ERR_X509_TRUNCATED
+    Truncated certificate.
+
+35 BR_ERR_X509_EMPTY_CHAIN
+    Empty certificate chain (no certificate at all).
+
+36 BR_ERR_X509_INNER_TRUNC
+    Inner element extends beyond outer element size.
+
+37 BR_ERR_X509_BAD_TAG_CLASS
+    Unsupported tag class (application or private).
+
+38 BR_ERR_X509_BAD_TAG_VALUE
+    Unsupported tag value.
+
+39 BR_ERR_X509_INDEFINITE_LENGTH
+    Indefinite length encoding found.
+
+40 BR_ERR_X509_EXTRA_ELEMENT
+    Extraneous element in certificate.
+
+41 BR_ERR_X509_UNEXPECTED
+    Unexpected element in certificate.
+
+42 BR_ERR_X509_NOT_CONSTRUCTED
+    Expected constructed element, but found primitive.
+
+43 BR_ERR_X509_NOT_PRIMITIVE
+    Expected primitive element, but found constructed.
+
+44 BR_ERR_X509_PARTIAL_BYTE
+    BIT STRING length is not a multiple of 8.
+
+45 BR_ERR_X509_BAD_BOOLEAN
+    BOOLEAN value has invalid length.
+
+46 BR_ERR_X509_OVERFLOW
+    Value is off-limits (overflow).
+
+47 BR_ERR_X509_BAD_DN
+    Invalid distinguished name.
+
+48 BR_ERR_X509_BAD_TIME
+    Invalid date/time representation in certificate.
+
+49 BR_ERR_X509_UNSUPPORTED
+    Certificate contains unsupported features that cannot be
+    ignored.
+
+50 BR_ERR_X509_LIMIT_EXCEEDED
+    Key or signature size exceeds internal limits.
+
+51 BR_ERR_X509_WRONG_KEY_TYPE
+    Key type does not match that which was expected.
+
+52 BR_ERR_X509_BAD_SIGNATURE
+    Signature is invalid.
+
+53 BR_ERR_X509_TIME_UNKNOWN
+    Validation time is unknown (no time was set).
+
+54 BR_ERR_X509_EXPIRED
+    Certificate is expired or not yet valid.
+
+55 BR_ERR_X509_DN_MISMATCH
+    Issuer/subject DN mismatch in the chain.
+
+56 BR_ERR_X509_BAD_SERVER_NAME
+    Expected server name was not found in the chain.
+
+57 BR_ERR_X509_CRITICAL_EXTENSION
+    Unknown critical extension in certificate.
+
+58 BR_ERR_X509_NOT_CA
+    Not a CA, or path length constraint violation.
+
+59 BR_ERR_X509_FORBIDDEN_KEY_USAGE
+    Key Usage extension prohibits the intended usage.
+
+60 BR_ERR_X509_WEAK_PUBLIC_KEY
+    Public key found in certificate is too small.
+
+62 BR_ERR_X509_NOT_TRUSTED
+    Chain could not be linked to a trust anchor.
+
+FATAL ALERTS
+    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
+    the peer, the error code is 512 + the TLS alert value.
+
+    Common alert values:
+        0   close_notify
+       10   unexpected_message
+       20   bad_record_mac
+       40   handshake_failure
+       42   bad_certificate
+       43   unsupported_certificate
+       44   certificate_revoked
+       45   certificate_expired
+       46   certificate_unknown
+       47   illegal_parameter
+       48   unknown_ca
+       50   decode_error
+       51   decrypt_error
+       70   protocol_version
+       71   insufficient_security
+       80   internal_error
+       86   unrecognized_name
+      112   no_application_protocol
+
+    For example, error 296 means a handshake_failure alert was
+    received (256 + 40 = 296).
+
+SEE ALSO
+    fetch(1), syscalls(2)
+ +
+ + + +
+ + diff --git a/docs/man/wiki.html b/docs/man/wiki.html new file mode 100644 index 0000000..b169a6a --- /dev/null +++ b/docs/man/wiki.html @@ -0,0 +1,182 @@ + + + + + + + wiki(1) - MontaukOS Manual + + + + + + + + + +
+
+

wiki(1)

+
+ +
+ +
NAME
+    wiki - Wikipedia article viewer for MontaukOS
+
+SYNOPSIS
+    wiki <title>
+    wiki -f <title>
+    wiki -s <query>
+
+DESCRIPTION
+    wiki fetches and displays Wikipedia articles in the terminal.
+    It connects to en.wikipedia.org over HTTPS (TLS 1.2) and
+    uses the Wikipedia REST and Action APIs to retrieve article
+    content as plain text.
+
+    Articles are displayed in a fullscreen interactive pager with
+    color-coded headings and word-wrapped text. Multi-word titles
+    are accepted as separate arguments and joined automatically.
+
+OPTIONS
+-f
+    Full article mode. Display the complete article text instead
+    of just the summary. Section headings are color-coded.
+
+-s
+    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.
+
+EXAMPLES
+    wiki Linux
+        Show a summary of the Linux article.
+
+    wiki -f C programming language
+        Show the full text of the C programming language article.
+
+    wiki -s operating system
+        Search for articles related to "operating system".
+
+TLS SUPPORT
+    Connections use BearSSL for TLS 1.2. Server certificates
+    are validated against the system CA bundle at
+    0:/os/certs/ca-certificates.crt.
+
+KEYBOARD
+
+   Article pager
+    j / Down        Scroll down one line
+    k / Up          Scroll up one line
+    Space / PgDn    Scroll down one page
+    b / PgUp        Scroll up one page
+    g / Home        Jump to top
+    G / End         Jump to bottom
+    q               Quit pager
+
+   Search results
+    1-9, 0          View article (0 = result 10)
+    q               Quit search
+
+   General
+    Ctrl+Q          Abort during network request
+
+SEE ALSO
+    fetch(1), ping(1), nslookup(1), shell(1)
+ +
+ + + +
+ + diff --git a/docs/tutorials/connectivity.html b/docs/tutorials/connectivity.html new file mode 100644 index 0000000..f547a2c --- /dev/null +++ b/docs/tutorials/connectivity.html @@ -0,0 +1,152 @@ + + + + + + + Connectivity - MontaukOS Tutorials + + + + + + + + + +
+
+

Connecting to a network (and to the Internet) on MontaukOS

+
+ +
+

This tutorial explains how to connect to your local network on MontaukOS.

+

+

+ MontaukOS includes drivers for Intel Ethernet adapters, including virtualized adapters found on QEMU and VirtualBox, and adapters used on a wide variety of desktops and laptops. Wireless networking via Wi-Fi is currently not supported.

+ For most Ethernet configurations, MontaukOS should automatically connect to your local network and obtain an IP address via the DHCP protocol. You can review your network connection using the Network configuration applet: +

    +
  1. Open the applications menu and click on the 'Settings' entry.
  2. +
  3. Double-click the 'Network' applet from within the Settings virtual folder.
  4. +
+
+ +

The Network applet displayed on a QEMU/KVM virtual machine (MontaukOS 0.1.5)

+
+ If you need to manually configure your connection - such as by setting up a static IP - you can use the "Configure" tab. + Configuration options include the IP address, subnet mask, gateway IP, and DNS server. +
+

+
+ + The 'DHCP' button on the toolbar invokes the DHCP client manually, in the background. MontaukOS otherwise runs the DHCP client automatically once every system startup.

+ + If the Network applet reports that there is no network adapter present, it is very likely that MontaukOS does not have network drivers for your device. For further troubleshooting, you can use the Devices (devexplorer) app to review + devices detected by the system, or use the Kernel Log tool to inspect relevant kernel log lines. +

+
    + +

+
+ + + +
+ + diff --git a/docs/tutorials/images/initialsetup.png b/docs/tutorials/images/initialsetup.png new file mode 100644 index 0000000..484b3a5 Binary files /dev/null and b/docs/tutorials/images/initialsetup.png differ diff --git a/docs/tutorials/images/networkapplet-configure.png b/docs/tutorials/images/networkapplet-configure.png new file mode 100644 index 0000000..a5c33e2 Binary files /dev/null and b/docs/tutorials/images/networkapplet-configure.png differ diff --git a/docs/tutorials/images/networkapplet-overview.png b/docs/tutorials/images/networkapplet-overview.png new file mode 100644 index 0000000..90d1091 Binary files /dev/null and b/docs/tutorials/images/networkapplet-overview.png differ diff --git a/docs/tutorials/images/terminal-c.png b/docs/tutorials/images/terminal-c.png new file mode 100644 index 0000000..40b0ab3 Binary files /dev/null and b/docs/tutorials/images/terminal-c.png differ diff --git a/docs/tutorials/images/terminal-lua.png b/docs/tutorials/images/terminal-lua.png new file mode 100644 index 0000000..79e9387 Binary files /dev/null and b/docs/tutorials/images/terminal-lua.png differ diff --git a/docs/tutorials/images/texteditor-c.png b/docs/tutorials/images/texteditor-c.png new file mode 100644 index 0000000..de007fa Binary files /dev/null and b/docs/tutorials/images/texteditor-c.png differ diff --git a/docs/tutorials/images/texteditor-lua.png b/docs/tutorials/images/texteditor-lua.png new file mode 100644 index 0000000..e48cfce Binary files /dev/null and b/docs/tutorials/images/texteditor-lua.png differ diff --git a/docs/tutorials/images/timezone.png b/docs/tutorials/images/timezone.png new file mode 100644 index 0000000..a082d8e Binary files /dev/null and b/docs/tutorials/images/timezone.png differ diff --git a/docs/tutorials/index.html b/docs/tutorials/index.html new file mode 100644 index 0000000..2d23f3b --- /dev/null +++ b/docs/tutorials/index.html @@ -0,0 +1,142 @@ + + + + + + + Tutorials - MontaukOS + + + + + + + + + +
+
+

User's Tutorials

+
+ +
+ +

+This volume contains tutorials for users covering everyday use of the MontaukOS system. +

+ +

Getting started

+ + +

Programming

+ + +
+ + + +
+ + diff --git a/docs/tutorials/initialsetup.html b/docs/tutorials/initialsetup.html new file mode 100644 index 0000000..2e7f78d --- /dev/null +++ b/docs/tutorials/initialsetup.html @@ -0,0 +1,155 @@ + + + + + + + Initial Setup - MontaukOS Tutorials + + + + + + + + + +
+
+

Initial Setup on MontaukOS

+
+ +
+

This tutorial explains how to create your first account and set your time zone on MontaukOS.

+
+

+

Account creation and login

+ When you successfully boot MontaukOS for the first time, you should see the 'MontaukOS Setup' window, as depicted below. + +


+ +
    +
  1. It is recommended to select a new username for your account rather than keeping the default username 'admin'.
  2. +
  3. Select a display name for your account.
  4. +
  5. Choose a password for your account, and enter it in both the 'Password' and 'Confirm Password' fields.
  6. +
  7. Click 'Create Account'.
  8. +
  9. First-time setup is complete. Keep the 'Desktop' session selected and use the credentials you just created to log in to the system.
  10. +
+ +

Time zone selection

+
    +
  1. Click on the application menu icon located at the top-left corner of the desktop, and click the 'Settings' entry.
  2. +
  3. Double-click the 'Time' icon within the virtual 'Settings' folder, then open the Time Zones tab.
  4. +
  5. The default time zone is Oslo, Norway. To adjust your time zone, scroll along the left pane (countries) and select your country or region. Then, select the city closest to your location on the right pane.
  6. +
  7. Click 'Apply'.
  8. +
+
+ +
+

+
    + +

+
+ + + +
+ + diff --git a/docs/tutorials/tutorial-programming-c.html b/docs/tutorials/tutorial-programming-c.html new file mode 100644 index 0000000..36ce2eb --- /dev/null +++ b/docs/tutorials/tutorial-programming-c.html @@ -0,0 +1,164 @@ + + + + + + + C Hello World - MontaukOS Tutorials + + + + + + + + + +
+
+

Writing and running a "Hello, World" program in C

+
+ +
+

This tutorial explains how to create and run a simple program in the C programming language (using the tcc C compiler) on MontaukOS.

+
    +
  1. Open the Text Editor by navigating to the 'Applications' section in the app menu.
  2. +
    Did you know? The MontaukOS Text Editor provides syntax highlighting for C and Lua files.
    +
  3. Type: +
    +#include <stdio.h>
    +
    +int main(void) {
    +    printf("Hello, World!\n");
    +    return 0;
    +}
    +    
    + into the Text Editor window. This code outputs the string "Hello, World!" along with a line break to the Terminal.

  4. +
    + + +
    +
  5. Click the Save (floppy disk) button on the top panel. Choose a directory to save your code in - for example, your Home folder - give the source file a name ending in .c, and click 'Save'.
  6. +
  7. Open the Terminal app by navigating to the 'Applications' section in the app menu. You should see something like this appear on your screen: +
    +    MontaukOS
    +    Copyright (c) 2025-2026 Montauk Operating System Project
    +
    +    Logged in as admin
    +
    +    Type 'help' for available commands.
    +
    +0:/users/admin>
    +        
    +
    +
  8. +
  9. If you saved your program's source file somewhere other than your Home directory, switch to the directory in which you saved your program using the cd command. For example, cd Documents.
  10. +
  11. Type 'tcc ' followed by your program's name, and then press enter. For example, 'tcc hello.c'.
  12. +
  13. Run your program by typing its name without the '.c' extension, before pressing enter - for example, "hello".
  14. +
  15. You should see "Hello, World!" displayed in the Terminal window. Congratulations!
  16. +
    + +

+
+ + + +
+ + diff --git a/docs/tutorials/tutorial-programming.html b/docs/tutorials/tutorial-programming.html new file mode 100644 index 0000000..26deda0 --- /dev/null +++ b/docs/tutorials/tutorial-programming.html @@ -0,0 +1,160 @@ + + + + + + + Lua Hello World - MontaukOS Tutorials + + + + + + + + + +
+
+

Writing and running a "Hello, World" program in Lua

+
+ +
+

This tutorial explains how to create and run a simple program in the Lua programming language on MontaukOS.

+
    +
  1. Open the Text Editor by navigating to the 'Applications' section in the app menu.
  2. +
    Did you know? The MontaukOS Text Editor provides syntax highlighting for C and Lua files.
    +
  3. Type: +
    print("Hello, World!")
    + into the Text Editor window. This code outputs the string "Hello, World!" to the Terminal.

  4. +
    + + +
    +
  5. Click the Save (floppy disk) button on the top panel. Choose a directory to save your code in - for example, your Home folder - give the program a name ending in .lua, and click 'Save'.
  6. +
  7. Open the Terminal app by navigating to the 'Applications' section in the app menu. You should see something like this appear on your screen: +
    +    MontaukOS
    +    Copyright (c) 2025-2026 Montauk Operating System Project
    +
    +    Logged in as admin
    +
    +    Type 'help' for available commands.
    +
    +0:/users/admin>
    +        
    +
    +
  8. +
  9. If you saved your program somewhere other than your Home directory, switch to the directory in which you saved your program using the cd command. For example, cd Documents.
  10. +
  11. Type 'lua ' followed by your program's name, and then press enter. For example, 'lua hello.lua'.
  12. +
  13. You should see "Hello, World!" displayed in the Terminal window. Congratulations!
  14. +
    + +
+
+

Beware!

+

The Lua implementation on MontaukOS currently has known issues. For example, floating point calculations do not work.

+ +
+ + + +
+ + diff --git a/downloads.html b/downloads.html new file mode 100644 index 0000000..608b7bf --- /dev/null +++ b/downloads.html @@ -0,0 +1,625 @@ + + + + + + + Downloads - MontaukOS + + + + + + + + + +
+
+

Downloads

+
+ +
+ +

Latest Release

+
+

MontaukOS 0.1.9

+

August 13, 2026

+

It is recommended that users run MontaukOS in a virtual machine rather than on real hardware.

+

Links

+ +
+ For questions or comments, please mail to daniel@montaukos.org. +
+

New

+
    +
  • Intel Wi-Fi (AX210/AX211) support
  • +
  • Wi-Fi support in the desktop panel and the Network settings app
  • +
  • wifi command-line tool
  • +
  • NetSurf web browser ported as a native MontaukOS app
  • +
  • SSH server (sshd) with an SSH Server app for managing it
  • +
  • NTP client (configured via 0:/config/ntp.toml and Time applet)
  • +
  • init now discovers services from 0:/config/init.toml rather than a hardcoded sequence
  • +
  • New Display app for managing monitors, modes, and layout
  • +
  • Expanded Intel GPU display management in the kernel
  • +
  • Audio stack now mixes concurrent streams and switches output devices live
  • +
  • New audio device switching UI in Audio app and the desktop panel
  • +
  • Filesystems can be mounted and unmounted at runtime
  • +
  • File metadata across all filesystems, exposed through a new stat syscall
  • +
  • ext2 now saves timestamps and supports utime
  • +
  • New mkdir, rmdir, and memtest commands
  • +
  • Expanded support in the PDF Viewer app
  • +
  • Files shows modified dates in the Properties dialog
  • +
  • Desktop UI consistency improvements
  • +
  • Crash reports now capture a stack snapshot
  • +
  • Userspace heap and virtual memory overhauled
  • +
  • pread, pwrite, strndup, scandir, alphasort, usleep, ftruncate, M_PI, and a non-blocking stdin readiness probe added to libc
  • +
  • DOOM moved out of the OS tree into the mtkports project
  • +
+

Fixed

+
    +
  • Numerous kernel concurrency, interrupt-context, and user virtual-address fixes
  • +
  • Hardened the TCP/IP stack and unified the HTTP clients; fixed several networking bugs and regressions
  • +
  • Improved Bluetooth reliability
  • +
  • Corrected Intel GGTT setup and DP AUX EDID reads
  • +
  • IPC handle slots are no longer reused while an object is still being torn down
  • +
  • The ramdisk no longer packs symlinks as zero-byte files
  • +
  • Fixed a ramdisk readdir inconsistency
  • +
  • Processes now inherit their parent's environment
  • +
  • getcwd reports a truncated buffer as ERANGE instead of silently truncating
  • +
  • Improved stdio and argument handling
  • +
  • Clarified Intel iwlwifi firmware licensing
  • +
+

Known issues

+
    +
  • 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.
  • +
  • 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.
  • +
+

Included in ISO

+

Two x86_64 images are published for this release. montauk-0.1.9-sdk-x86_64.iso additionally carries the Montauk SDK (gcc, binutils, etc.)

+
    +
  • MontaukOS SMP kernel
  • +
  • Userspace bootstrap (0:/os/init.elf) and other essential system utilities
  • +
  • MontaukOS desktop environment and graphical apps
  • +
  • NetSurf web browser (0:/apps/netsurf)
  • +
  • Manual pages (0:/man), readable via man command
  • +
  • Service and system configuration (0:/config: init.toml, ssh.toml, ntp.toml, timezonedata.toml)
  • +
  • System CA certificates (0:/os/certs/ca-certificates.crt)
  • +
  • Intel Bluetooth controller and Wi-Fi (iwlwifi) firmware (0:/os/firmware/intel)
  • +
  • Third-party license texts and notices (0:/os/licenses)
  • +
  • Tiny C Compiler (tcc) with MontaukOS headers and libraries (0:/sdk/tcc)
  • +
  • Lua 5.4 interpreter (lua) with headers and static library (0:/sdk/lua)
  • +
  • Montauk SDK - native GCC/G++ and binutils (0:/sdk) - SDK image only
  • +
  • Flat Remix icon pack
  • +
  • JetBrains Mono, Noto Serif, Roboto, and C059 Roman (open Century Schoolbook) TrueType fonts
  • +
  • DOOM engine with SDL_mixer audio support (game data not included)
  • +
  • Experimental HTTP server (httpd) and default page (0:/www/index.html)
  • +
  • Default wallpaper - blossoms by Nikhil Kumar, Unsplash (0:/os/wallpapers)
  • +
+
+ +

Release Archive

+
+

MontaukOS 0.1.8

+

July 18, 2026

+

It is recommended that users run MontaukOS in a virtual machine rather than on real hardware.

+

Links

+ +
+ For questions or comments, please mail to daniel@montaukos.org. +
+

New

+
    +
  • Ported GCC/G++ compilers and binutils (as, ld, ar) to MontaukOS, with a hosted libstdc++, forming the new Montauk SDK
  • +
  • Installer redesigned on the MTK toolkit, with new software component selection
  • +
  • MTK toolkit now anti-aliases rounded-rect frames (buttons, fields, panels)
  • +
  • Intel GPU page flipping is now vblank-synced and double-buffered
  • +
  • Max open desktop windows raised from 16 to 32
  • +
+

Fixed

+
    +
  • The Files pathbar now qualifies paths
  • +
  • Fixed Font Preview crash when opened manually
  • +
  • Fixed inconsistent border radiuses on MTK UI elements
  • +
  • Fixed Intel HDA audio controllers not being recognized
  • +
  • Bluetooth A2DP audio output is now exclusive to one process, preventing playback conflicts
  • +
  • Fixed a desktop/Files app freeze when deleting large files
  • +
  • Roughly halved the ISO size by no longer embedding a redundant copy of the ramdisk
  • +
+

Known issues

+
    +
  • The ISO is unusually large in size (190 MB) due to the inclusion of GNU compilers and binutils. In a future version, developer tools will be available to install via Internet package management and will not be included with the ISO.
  • +
  • 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.
  • +
  • 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.
  • +
+

Included in ISO

+
    +
  • MontaukOS SMP kernel
  • +
  • Userspace bootstrap (0:/os/init.elf) and other essential system utilities
  • +
  • MontaukOS desktop environment and graphical apps
  • +
  • Manual pages (0:/man), readable via man command
  • +
  • System CA certificates (0:/os/certs/ca-certificates.crt)
  • +
  • Intel Bluetooth controller firmware (0:/os/firmware/intel)
  • +
  • Third-party license texts and notices (0:/os/licenses)
  • +
  • Tiny C Compiler (tcc) with MontaukOS headers and libraries (0:/lib/tcc)
  • +
  • Lua 5.4 interpreter (lua) with headers and static library (0:/lib/lua)
  • +
  • Montauk SDK - native GCC/G++ and binutils (0:/sdk), built via make sdk
  • +
  • Flat Remix icon pack
  • +
  • JetBrains Mono, Noto Serif, Roboto, and C059 Roman (open Century Schoolbook) TrueType fonts
  • +
  • DOOM engine with SDL_mixer audio support (game data not included)
  • +
  • Experimental HTTP server (httpd) and default page (0:/www/index.html)
  • +
  • Default wallpaper - blossoms by Nikhil Kumar, Unsplash (0:/os/wallpapers)
  • +
+
+ +
+

MontaukOS 0.1.7

+

July 9, 2026

+

New

+
    +
  • The libc printf-family functions now support floating-point (decimal) formatting, so Lua and other programs print decimal numbers correctly
  • +
  • DOOM now shows a warning when no WAD game-data file is present rather than crashing
  • +
  • Manual pages updated to document current MontaukOS
  • +
+

Fixed

+
    +
  • Fixed ramdisk file copies being incorrectly created as directories rather than files
  • +
+

Included in ISO

+
    +
  • MontaukOS SMP kernel
  • +
  • Userspace bootstrap (0:/os/init.elf) and other essential system utilities
  • +
  • MontaukOS desktop environment and graphical apps
  • +
  • Manual pages (0:/man), readable via man command
  • +
  • System CA certificates (0:/os/certs/ca-certificates.crt)
  • +
  • Intel Bluetooth controller firmware (0:/os/firmware/intel)
  • +
  • Third-party license texts and notices (0:/os/licenses)
  • +
  • Tiny C Compiler (tcc) with MontaukOS headers and libraries (0:/lib/tcc)
  • +
  • Lua 5.4 interpreter (lua) with headers and static library (0:/lib/lua)
  • +
  • Flat Remix icon pack
  • +
  • JetBrains Mono, Noto Serif, Roboto, and C059 Roman (open Century Schoolbook) TrueType fonts
  • +
  • DOOM engine with SDL_mixer audio support (game data not included)
  • +
  • Experimental HTTP server (httpd) and default page (0:/www/index.html)
  • +
  • Default wallpaper - blossoms by Nikhil Kumar, Unsplash (0:/os/wallpapers)
  • +
+
+ +
+

MontaukOS 0.1.6

+

July 8, 2026 - hotfix

+

Fixed

+
    +
  • Fixed a boot failure on VirtualBox VMs configured with legacy BIOS
  • +
  • PCI: I/O-space BARs are no longer treated as MMIO addresses
  • +
+

Included in ISO

+
    +
  • MontaukOS SMP kernel
  • +
  • Userspace bootstrap (0:/os/init.elf) and other essential system utilities
  • +
  • MontaukOS desktop environment and graphical apps
  • +
  • Manual pages (0:/man), readable via man command
  • +
  • System CA certificates (0:/os/certs/ca-certificates.crt)
  • +
  • Intel Bluetooth controller firmware (0:/os/firmware/intel)
  • +
  • Third-party license texts and notices (0:/os/licenses)
  • +
  • Tiny C Compiler (tcc) with MontaukOS headers and libraries (0:/lib/tcc)
  • +
  • Lua 5.4 interpreter (lua) with headers and static library (0:/lib/lua)
  • +
  • Flat Remix icon pack
  • +
  • JetBrains Mono, Noto Serif, Roboto, and C059 Roman (open Century Schoolbook) TrueType fonts
  • +
  • DOOM engine with SDL_mixer audio support (game data not included)
  • +
  • Experimental HTTP server (httpd) and default page (0:/www/index.html)
  • +
  • Default wallpaper - blossoms by Nikhil Kumar, Unsplash (0:/os/wallpapers)
  • +
+
+ +
+

MontaukOS 0.1.5

+

July 8, 2026

+

It is recommended that users run MontaukOS in a virtual machine rather than on real hardware.

+

New

+
    +
  • New Character Map app (charmap)
  • +
  • New Power app (powermgr) for CPU power and thermal monitoring
  • +
  • CPU power and thermal management for Intel CPUs
  • +
  • Software-defined radio support: RTL-SDR (RTL2832U + R820T2) USB driver, kernel radio APIs, and an sdr demo tool
  • +
  • Intel Bluetooth firmware loading performance improvements
  • +
  • New default login-screen wallpaper (0:/os/wallpapers/default.jpg), used when no wallpaper is configured
  • +
+

Fixed

+
    +
  • Fix partially broken Bluetooth pairing and reconnection
  • +
  • Bluetooth audio (A2DP) setup and reconnection reliability
  • +
  • HCI events spanning multiple USB packets are now reassembled correctly, fixing Intel Bluetooth controller bring-up hangs
  • +
  • Bluetooth MAC addresses are now displayed in conventional MSB-first byte order in the userspace Bluetooth app
  • +
  • Fixed the desktop app loading cap
  • +
  • Cleanup: shared libraries renamed to drop the lib prefix, leftover test programs removed
  • +
+

Licensing

+
    +
  • MontaukOS 0.1.5 is source-available: the MontaukOS Software License permits use, study, modification, and free redistribution with attribution (commercial distribution still requires permission)
  • +
  • Third-party license texts and notices now ship on the ISO (0:/os/licenses/), covering the Flat Remix icon theme (GPLv3), the DOOM engine (GPLv2), the Tiny C Compiler (LGPL-2.1), Lua (MIT), the bundled fonts (OFL-1.1 for JetBrains Mono, Noto Serif, and Roboto; AGPLv3 with font-embedding exception for C059), the Mozilla CA certificate bundle (MPL-2.0), Intel Bluetooth firmware (Intel redistributable license), and other components
  • +
  • The proprietary DOOM shareware WAD (doom1.wad) is not distributed; the DOOM engine still ships, but users must supply their own game data
  • +
+

Included in ISO

+
    +
  • MontaukOS SMP kernel
  • +
  • Userspace bootstrap (0:/os/init.elf) and other essential system utilities
  • +
  • MontaukOS desktop environment and graphical apps
  • +
  • Manual pages (0:/man), readable via man command
  • +
  • System CA certificates (0:/os/certs/ca-certificates.crt)
  • +
  • Intel Bluetooth controller firmware (0:/os/firmware/intel)
  • +
  • Third-party license texts and notices (0:/os/licenses)
  • +
  • Tiny C Compiler (tcc) with MontaukOS headers and libraries (0:/lib/tcc)
  • +
  • Lua 5.4 interpreter (lua) with headers and static library (0:/lib/lua)
  • +
  • Flat Remix icon pack
  • +
  • JetBrains Mono, Noto Serif, Roboto, and C059 Roman (open Century Schoolbook) TrueType fonts
  • +
  • DOOM engine with SDL_mixer audio support (game data not included)
  • +
  • Experimental HTTP server (httpd) and default page (0:/www/index.html)
  • +
  • Default wallpaper - blossoms by Nikhil Kumar, Unsplash (0:/os/wallpapers)
  • +
+
+ +
+

MontaukOS 0.1.4

+

June 21, 2026

+

New

+
    +
  • Shell tab completion for executables, built-in commands, and files in the working directory
  • +
  • New console session mode for text-mode operation
  • +
  • New shell commands: +
      +
    • proclist - list running processes
    • +
    • btlist - list connected Bluetooth devices
    • +
    • btbonds - list bonded (paired) Bluetooth devices
    • +
    +
  • +
  • Bluetooth app now shows paired devices, and the Bluetooth stack supports MAC address spoofing
  • +
  • Bluetooth audio (A2DP) playback reliability improvements
  • +
  • Crash reporting now works from console sessions as well as the desktop
  • +
  • New bootloader-agnostic Boot Contract, decoupling the kernel from the bootloader
  • +
  • C API syscall numbers for the bundled TCC compiler are now auto-generated and verified at build time
  • +
+

Fixed

+
    +
  • Fixed an NVMe completion-queue desync that could break all disk reads
  • +
  • Fixed TCP/IP stack bugs
  • +
  • Fixed an SMP race in the kernel crash-report ring buffer, and guarded against crash-handler crash loops
  • +
  • Fixed Terminal scrolling and zoom inconsistencies
  • +
  • Fixed scrolling cutoff for the last entry in Device Explorer
  • +
  • Fixed UI issues in Files app dialogs
  • +
  • Fixed a TLS (secure networking) bug affecting system programs
  • +
  • Performance improvement in the kernel string-stream helper
  • +
  • Numerous additional kernel, shell, and desktop bug fixes
  • +
+

Included in ISO

+
    +
  • MontaukOS SMP kernel
  • +
  • Userspace bootstrap (0:/os/init.elf) and other essential system utilities
  • +
  • MontaukOS desktop environment and graphical apps
  • +
  • Manual pages (0:/man), readable via man command
  • +
  • System CA certificates (0:/os/certs/ca-certificates.crt)
  • +
  • Flat Remix icon pack
  • +
  • JetBrains Mono, Noto Serif, Roboto, and C059 Roman (open Century Schoolbook) TrueType fonts
  • +
  • DOOM Shareware game with SDL_mixer audio support
  • +
  • Experimental HTTP server (httpd) and default page (0:/www/index.html)
  • +
+
+ +
+

MontaukOS 0.1.3

+

June 7, 2026

+

New

+
    +
  • New 2048 game
  • +
  • New Audio app with a system audio mixer for per-application volume control
  • +
  • Bluetooth audio (A2DP) support, including Intel Bluetooth controller firmware loading
  • +
  • USB mass storage device support, with hotplugging and removable medium detection in Files
  • +
  • SVG image support in Image Viewer, including vector zoom
  • +
  • New Network Configuration applet, backed by kernel network statistics reporting
  • +
  • Process Manager gains a Performance tab with CPU usage graphing (kernel now exposes CPU time)
  • +
  • Scheduler now supports threading
  • +
  • xHCI BIOS-to-OS handoff
  • +
  • Login screen rebuilt on the MTK toolkit, with faster drawing and a shutdown progress display
  • +
  • Graceful shutdown and reboot: Bluetooth devices are disconnected and disks are flushed
  • +
  • Files app improvements: +
      +
    • Selection marquee, now also in list view
    • +
    • Properties dialog for single and multiple files
    • +
    • Delete confirmation for directories
    • +
    • Refresh button and USB medium detection
    • +
    • Support for folders with more than 64 entries
    • +
    • 64-bit file sizes
    • +
    • Asynchronous copy, move, and delete with a progress dialog
    • +
    +
  • +
  • MTK GUI toolkit improvements: +
      +
    • New graphing widget
    • +
    • New scrollbar widget, with scrollbars standardized across apps
    • +
    • Improved input boxes
    • +
    • Right-click context menus
    • +
    +
  • +
  • Accent colors respected in more desktop components, including print dialogs
  • +
  • Word Processor now discovers installed fonts automatically (from 0:/fonts)
  • +
  • Icons added to the PDF Viewer toolbar
  • +
  • Terminal emulator performance improvements
  • +
  • Wikipedia app improvements and a simplified starting page
  • +
  • Music app defaults to the user's Music folder
  • +
  • Paint app UI improvements
  • +
  • System Configuration renamed to Settings
  • +
  • Kernel build numbering
  • +
  • Licensing files added and copyright notices updated
  • +
+

Fixed

+
    +
  • Login screen no longer hangs when no USB input device is connected
  • +
  • Various shell and Terminal reliability fixes, including output redirection and a white flash on launch
  • +
  • Fixed audio mixer and Music app freezes, and a freeze when closing the Music app
  • +
  • Reliability improvements in the Window Server and IPC subsystems
  • +
  • Fixed a periodic freeze in the print stack
  • +
  • Fixed desktop background selection freeze
  • +
  • Process-wide spinlock added to the userspace heap for thread safety
  • +
  • Fixed the VFS delete operation for the ramdisk driver
  • +
  • Fixed list alignment with indent options in the Word Processor
  • +
  • Fixed Screenshot full-screen flickering
  • +
  • Standardized and fixed scrollbars in the Text Editor and other apps
  • +
  • Corrected process and PID reporting
  • +
  • Numerous additional kernel and desktop bug fixes
  • +
+

Included in ISO

+
    +
  • MontaukOS SMP kernel
  • +
  • Userspace bootstrap (0:/os/init.elf) and other essential system utilities
  • +
  • MontaukOS desktop environment and graphical apps
  • +
  • Manual pages (0:/man), readable via man command
  • +
  • System CA certificates (0:/os/certs/ca-certificates.crt)
  • +
  • Flat Remix icon pack
  • +
  • JetBrains Mono, Noto Serif, Roboto, and C059 Roman (open Century Schoolbook) TrueType fonts
  • +
  • DOOM Shareware game with SDL_mixer audio support
  • +
  • Experimental HTTP server (httpd) and default page (0:/www/index.html)
  • +
+
+ +
+

MontaukOS 0.1.2

+

May 2, 2026

+

New

+
    +
  • Symmetric Multiprocessing (SMP) support
  • +
  • New Time Zone Configuration applet in System Configuration with full time zone database
  • +
  • Message box dialogs (OK, Yes/No, OK/Cancel) as a shared library (see Docs > Desktop Internals > Dialogs)
  • +
  • Open/Save file dialogs as a shared library (see Docs > Desktop Internals > Dialogs)
  • +
  • Copy and Move file operations in Files app
  • +
  • Standard MTK GUI toolkit; the following apps were ported: +
      +
    • Calculator
    • +
    • Weather
    • +
    • Wikipedia
    • +
    • Bluetooth
    • +
    • Disks
    • +
    • Printers
    • +
    • Process Manager
    • +
    +
  • +
  • New formatting options added to Wikipedia
  • +
  • New Screenshot app for capturing desktop images
  • +
  • New Paint app
  • +
  • New Video Player app with AVI format support
  • +
  • Ported Lua scripting language interpreter
  • +
  • Terminal app ported to Window Server from being desktop built-in app
  • +
  • Terminal app now supports zoom shortcuts
  • +
  • Process Manager (procmgr) ported to Window Server, UI revamped, Windows tab added
  • +
  • New Word Processor app; PDF export included
  • +
  • New Spreadsheet app
  • +
  • Text Editor app ported to Window Server from being desktop built-in app
  • +
  • Text Editor now supports C and Lua syntax highlighting
  • +
  • Audio visualizer added to Music app
  • +
  • New Window Server helpers for standalone GUI apps (win_create, win_poll, win_present, etc.)
  • +
  • Files app now has virtual folders to expose system components (System Configuration, Apps folders)
  • +
  • Drive labels displayed in Files app
  • +
  • Process crash popups (CrashReport)
  • +
  • Expanded ACPI support
  • +
  • Primitive S3 sleep/wake support
  • +
  • Support for Internet Printing Protocol (IPP) printing
  • +
  • Print dialog and test page printing
  • +
  • Primitive clipboard support
  • +
  • ELF shared library support with PIC code model
  • +
  • Login screen improvements
  • +
  • PDF viewer rendering improvements
  • +
  • Super + Space keyboard shortcut for desktop search panel
  • +
+

Included in ISO

+
    +
  • MontaukOS SMP kernel
  • +
  • Userspace bootstrap (0:/os/init.elf) and other essential system utilities
  • +
  • MontaukOS desktop environment and graphical apps
  • +
  • Manual pages (0:/man), readable via man command
  • +
  • System CA certificates (0:/etc/ca-certificates.crt)
  • +
  • Flat Remix icon pack
  • +
  • JetBrains Mono, Noto Serif, Roboto, and C059 Roman (open Century Schoolbook) TrueType fonts
  • +
  • DOOM Shareware game with SDL_mixer audio support
  • +
  • Experimental HTTP server (httpd) and default page (0:/www/index.html)
  • +
  • Desktop wallpaper - Lake and mountains by Stephen Walker, Unsplash
  • +
+
+ +
+

MontaukOS 0.1.1

+

New

+
    +
  • Quality of life improvements in Wikipedia Client and Image Viewer apps
  • +
  • Fixed memory leaks
  • +
  • Fixed ghost shell.elf process bug in terminal emulator
  • +
  • Fixed File Manager rendering bug
  • +
+

Included in ISO

+
    +
  • MontaukOS kernel
  • +
  • Userspace bootstrap (0:/os/init.elf) and other essential system utilities
  • +
  • MontaukOS desktop environment and graphical apps
  • +
  • Manual pages (0:/man), readable via man command
  • +
  • System CA certificates (0:/etc/ca-certificates.crt)
  • +
  • Flat Remix icon pack
  • +
  • JetBrains Mono, Noto Serif, Roboto, and C059 Roman (open Century Schoolbook) TrueType fonts
  • +
  • DOOM Shareware game and Montauk DOOM runtime (0:/games/doom.elf)
  • +
  • Experimental HTTP server (httpd) and default page (0:/www/index.html)
  • +
  • Desktop wallpaper - Lake and mountains by Stephen Walker, Unsplash
  • +
+
+ +
+

MontaukOS 0.1.0

+

(first release)

+

Included in ISO

+
    +
  • MontaukOS kernel
  • +
  • Userspace bootstrap (0:/os/init.elf) and other essential system utilities
  • +
  • MontaukOS desktop environment and graphical apps
  • +
  • Manual pages (0:/man), readable via man command
  • +
  • System CA certificates (0:/etc/ca-certificates.crt)
  • +
  • Flat Remix icon pack
  • +
  • JetBrains Mono, Noto Serif, Roboto, and C059 Roman (open Century Schoolbook) TrueType fonts
  • +
  • DOOM Shareware game and Montauk DOOM runtime (0:/games/doom.elf)
  • +
  • Experimental HTTP server (httpd) and default page (0:/www/index.html)
  • +
  • Desktop wallpaper - pine forest by Gustav Gullstrand, Unsplash
  • +
+
+ +
+ + + +
+ + diff --git a/fr_icons/accessories-calculator-symbolic.svg b/fr_icons/accessories-calculator-symbolic.svg new file mode 100644 index 0000000..063765e --- /dev/null +++ b/fr_icons/accessories-calculator-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/accessories-calculator.svg b/fr_icons/accessories-calculator.svg new file mode 100644 index 0000000..80a0ff6 --- /dev/null +++ b/fr_icons/accessories-calculator.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/accessories-text-editor-symbolic.svg b/fr_icons/accessories-text-editor-symbolic.svg new file mode 100644 index 0000000..d63556e --- /dev/null +++ b/fr_icons/accessories-text-editor-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/accessories-text-editor.svg b/fr_icons/accessories-text-editor.svg new file mode 100644 index 0000000..95697eb --- /dev/null +++ b/fr_icons/accessories-text-editor.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/application-pdf.svg b/fr_icons/application-pdf.svg new file mode 100644 index 0000000..d8b8af8 --- /dev/null +++ b/fr_icons/application-pdf.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/application-x-executable-symbolic.svg b/fr_icons/application-x-executable-symbolic.svg new file mode 100644 index 0000000..40d3ef0 --- /dev/null +++ b/fr_icons/application-x-executable-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/application-x-executable.svg b/fr_icons/application-x-executable.svg new file mode 100644 index 0000000..ed117ed --- /dev/null +++ b/fr_icons/application-x-executable.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/applications-science.svg b/fr_icons/applications-science.svg new file mode 100644 index 0000000..4cbeac8 --- /dev/null +++ b/fr_icons/applications-science.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/audio-player.svg b/fr_icons/audio-player.svg new file mode 100644 index 0000000..bbf1275 --- /dev/null +++ b/fr_icons/audio-player.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/audio-volume-high-symbolic.svg b/fr_icons/audio-volume-high-symbolic.svg new file mode 100644 index 0000000..d115c2f --- /dev/null +++ b/fr_icons/audio-volume-high-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/bluetooth.svg b/fr_icons/bluetooth.svg new file mode 100644 index 0000000..4b4c938 --- /dev/null +++ b/fr_icons/bluetooth.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/code.svg b/fr_icons/code.svg new file mode 100644 index 0000000..3ae13c7 --- /dev/null +++ b/fr_icons/code.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/com.visualstudio.code.oss.svg b/fr_icons/com.visualstudio.code.oss.svg new file mode 100644 index 0000000..3ae13c7 --- /dev/null +++ b/fr_icons/com.visualstudio.code.oss.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/computer-symbolic.svg b/fr_icons/computer-symbolic.svg new file mode 100644 index 0000000..4d8fcb9 --- /dev/null +++ b/fr_icons/computer-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/computer.svg b/fr_icons/computer.svg new file mode 100644 index 0000000..97ce100 --- /dev/null +++ b/fr_icons/computer.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/dialog-information-symbolic.svg b/fr_icons/dialog-information-symbolic.svg new file mode 100644 index 0000000..80872b4 --- /dev/null +++ b/fr_icons/dialog-information-symbolic.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/fr_icons/document-export-symbolic.svg b/fr_icons/document-export-symbolic.svg new file mode 100644 index 0000000..0ab4ddf --- /dev/null +++ b/fr_icons/document-export-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/document-save-symbolic.svg b/fr_icons/document-save-symbolic.svg new file mode 100644 index 0000000..c71e843 --- /dev/null +++ b/fr_icons/document-save-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/document-viewer.svg b/fr_icons/document-viewer.svg new file mode 100644 index 0000000..afe466c --- /dev/null +++ b/fr_icons/document-viewer.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/doom.svg b/fr_icons/doom.svg new file mode 100644 index 0000000..5975a8c --- /dev/null +++ b/fr_icons/doom.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/drive-harddisk.svg b/fr_icons/drive-harddisk.svg new file mode 100644 index 0000000..01e2b87 --- /dev/null +++ b/fr_icons/drive-harddisk.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/edit-copy.svg b/fr_icons/edit-copy.svg new file mode 100644 index 0000000..43e5873 --- /dev/null +++ b/fr_icons/edit-copy.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/edit-cut.svg b/fr_icons/edit-cut.svg new file mode 100644 index 0000000..077e642 --- /dev/null +++ b/fr_icons/edit-cut.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/fr_icons/edit-paste.svg b/fr_icons/edit-paste.svg new file mode 100644 index 0000000..f992fcc --- /dev/null +++ b/fr_icons/edit-paste.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/edit-redo-symbolic.svg b/fr_icons/edit-redo-symbolic.svg new file mode 100644 index 0000000..2309291 --- /dev/null +++ b/fr_icons/edit-redo-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/edit-rename.svg b/fr_icons/edit-rename.svg new file mode 100644 index 0000000..303cf28 --- /dev/null +++ b/fr_icons/edit-rename.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/edit-undo-symbolic.svg b/fr_icons/edit-undo-symbolic.svg new file mode 100644 index 0000000..39731c4 --- /dev/null +++ b/fr_icons/edit-undo-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/folder-blue-desktop.svg b/fr_icons/folder-blue-desktop.svg new file mode 100644 index 0000000..6affc2f --- /dev/null +++ b/fr_icons/folder-blue-desktop.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/folder-blue-development.svg b/fr_icons/folder-blue-development.svg new file mode 100644 index 0000000..74e2973 --- /dev/null +++ b/fr_icons/folder-blue-development.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/folder-blue-documents.svg b/fr_icons/folder-blue-documents.svg new file mode 100644 index 0000000..c7a49b2 --- /dev/null +++ b/fr_icons/folder-blue-documents.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/folder-blue-downloads.svg b/fr_icons/folder-blue-downloads.svg new file mode 100644 index 0000000..67908fd --- /dev/null +++ b/fr_icons/folder-blue-downloads.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/folder-blue-home.svg b/fr_icons/folder-blue-home.svg new file mode 100644 index 0000000..9c0414d --- /dev/null +++ b/fr_icons/folder-blue-home.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/folder-blue-music.svg b/fr_icons/folder-blue-music.svg new file mode 100644 index 0000000..2c6d482 --- /dev/null +++ b/fr_icons/folder-blue-music.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/folder-blue-pictures.svg b/fr_icons/folder-blue-pictures.svg new file mode 100644 index 0000000..5f0ca26 --- /dev/null +++ b/fr_icons/folder-blue-pictures.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/folder-blue-videos.svg b/fr_icons/folder-blue-videos.svg new file mode 100644 index 0000000..d9a04f6 --- /dev/null +++ b/fr_icons/folder-blue-videos.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/folder-documents-symbolic.svg b/fr_icons/folder-documents-symbolic.svg new file mode 100644 index 0000000..f04740f --- /dev/null +++ b/fr_icons/folder-documents-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/folder-new.svg b/fr_icons/folder-new.svg new file mode 100644 index 0000000..0ecc9d2 --- /dev/null +++ b/fr_icons/folder-new.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/folder-symbolic.svg b/fr_icons/folder-symbolic.svg new file mode 100644 index 0000000..148ccd6 --- /dev/null +++ b/fr_icons/folder-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/folder.svg b/fr_icons/folder.svg new file mode 100644 index 0000000..2c20935 --- /dev/null +++ b/fr_icons/folder.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/format-indent-less-symbolic.svg b/fr_icons/format-indent-less-symbolic.svg new file mode 100644 index 0000000..cb7b081 --- /dev/null +++ b/fr_icons/format-indent-less-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/format-indent-more-symbolic.svg b/fr_icons/format-indent-more-symbolic.svg new file mode 100644 index 0000000..068b83b --- /dev/null +++ b/fr_icons/format-indent-more-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/format-justify-center-symbolic.svg b/fr_icons/format-justify-center-symbolic.svg new file mode 100644 index 0000000..48e49c0 --- /dev/null +++ b/fr_icons/format-justify-center-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/format-justify-left-symbolic.svg b/fr_icons/format-justify-left-symbolic.svg new file mode 100644 index 0000000..5b50767 --- /dev/null +++ b/fr_icons/format-justify-left-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/format-justify-right-symbolic.svg b/fr_icons/format-justify-right-symbolic.svg new file mode 100644 index 0000000..c851529 --- /dev/null +++ b/fr_icons/format-justify-right-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/gnome-logout.svg b/fr_icons/gnome-logout.svg new file mode 100644 index 0000000..8d1c476 --- /dev/null +++ b/fr_icons/gnome-logout.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/go-home-symbolic.svg b/fr_icons/go-home-symbolic.svg new file mode 100644 index 0000000..440d9cb --- /dev/null +++ b/fr_icons/go-home-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/go-next-symbolic.svg b/fr_icons/go-next-symbolic.svg new file mode 100644 index 0000000..f72ea3b --- /dev/null +++ b/fr_icons/go-next-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/go-previous-symbolic.svg b/fr_icons/go-previous-symbolic.svg new file mode 100644 index 0000000..aab0ef6 --- /dev/null +++ b/fr_icons/go-previous-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/go-up-symbolic.svg b/fr_icons/go-up-symbolic.svg new file mode 100644 index 0000000..2c14a3e --- /dev/null +++ b/fr_icons/go-up-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/help-about.svg b/fr_icons/help-about.svg new file mode 100644 index 0000000..2300b65 --- /dev/null +++ b/fr_icons/help-about.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/kolourpaint.svg b/fr_icons/kolourpaint.svg new file mode 100644 index 0000000..8e98309 --- /dev/null +++ b/fr_icons/kolourpaint.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/lock.svg b/fr_icons/lock.svg new file mode 100644 index 0000000..06e1ccf --- /dev/null +++ b/fr_icons/lock.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/media-forward.svg b/fr_icons/media-forward.svg new file mode 100644 index 0000000..515e86e --- /dev/null +++ b/fr_icons/media-forward.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/media-pause.svg b/fr_icons/media-pause.svg new file mode 100644 index 0000000..f2f6b6e --- /dev/null +++ b/fr_icons/media-pause.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/media-play.svg b/fr_icons/media-play.svg new file mode 100644 index 0000000..449de22 --- /dev/null +++ b/fr_icons/media-play.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/media-playlist-repeat-one-symbolic.svg b/fr_icons/media-playlist-repeat-one-symbolic.svg new file mode 100644 index 0000000..c61ee42 --- /dev/null +++ b/fr_icons/media-playlist-repeat-one-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/fr_icons/media-playlist-repeat-song.svg b/fr_icons/media-playlist-repeat-song.svg new file mode 100644 index 0000000..17f171c --- /dev/null +++ b/fr_icons/media-playlist-repeat-song.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/media-playlist-repeat-symbolic.svg b/fr_icons/media-playlist-repeat-symbolic.svg new file mode 100644 index 0000000..1edb2cb --- /dev/null +++ b/fr_icons/media-playlist-repeat-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/media-playlist-repeat.svg b/fr_icons/media-playlist-repeat.svg new file mode 100644 index 0000000..c8c3818 --- /dev/null +++ b/fr_icons/media-playlist-repeat.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/media-playlist-shuffle-symbolic.svg b/fr_icons/media-playlist-shuffle-symbolic.svg new file mode 100644 index 0000000..e863ddf --- /dev/null +++ b/fr_icons/media-playlist-shuffle-symbolic.svg @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/fr_icons/media-playlist-shuffle.svg b/fr_icons/media-playlist-shuffle.svg new file mode 100644 index 0000000..6b7ca35 --- /dev/null +++ b/fr_icons/media-playlist-shuffle.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/media-repeat-all.svg b/fr_icons/media-repeat-all.svg new file mode 100644 index 0000000..f2fc097 --- /dev/null +++ b/fr_icons/media-repeat-all.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/fr_icons/media-repeat-single.svg b/fr_icons/media-repeat-single.svg new file mode 100644 index 0000000..9a2d3a0 --- /dev/null +++ b/fr_icons/media-repeat-single.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/fr_icons/media-rewind.svg b/fr_icons/media-rewind.svg new file mode 100644 index 0000000..22cfdad --- /dev/null +++ b/fr_icons/media-rewind.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/media-stop.svg b/fr_icons/media-stop.svg new file mode 100644 index 0000000..4bd183a --- /dev/null +++ b/fr_icons/media-stop.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/multimedia-video-player.svg b/fr_icons/multimedia-video-player.svg new file mode 100644 index 0000000..3e4ab3e --- /dev/null +++ b/fr_icons/multimedia-video-player.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/network-wired-symbolic.svg b/fr_icons/network-wired-symbolic.svg new file mode 100644 index 0000000..1351c08 --- /dev/null +++ b/fr_icons/network-wired-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/network-wired.svg b/fr_icons/network-wired.svg new file mode 100644 index 0000000..5539736 --- /dev/null +++ b/fr_icons/network-wired.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/pavucontrol.svg b/fr_icons/pavucontrol.svg new file mode 100644 index 0000000..43ecceb --- /dev/null +++ b/fr_icons/pavucontrol.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/pdf-viewer.svg b/fr_icons/pdf-viewer.svg new file mode 100644 index 0000000..132cb3a --- /dev/null +++ b/fr_icons/pdf-viewer.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/fr_icons/preferences-desktop-apps-symbolic.svg b/fr_icons/preferences-desktop-apps-symbolic.svg new file mode 100644 index 0000000..fa11309 --- /dev/null +++ b/fr_icons/preferences-desktop-apps-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/preferences-desktop-apps.svg b/fr_icons/preferences-desktop-apps.svg new file mode 100644 index 0000000..9592dae --- /dev/null +++ b/fr_icons/preferences-desktop-apps.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/printer-symbolic.svg b/fr_icons/printer-symbolic.svg new file mode 100644 index 0000000..e5469e8 --- /dev/null +++ b/fr_icons/printer-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/printer.svg b/fr_icons/printer.svg new file mode 100644 index 0000000..ad4ed99 --- /dev/null +++ b/fr_icons/printer.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/sensors-temperature-symbolic.svg b/fr_icons/sensors-temperature-symbolic.svg new file mode 100644 index 0000000..863cfb0 --- /dev/null +++ b/fr_icons/sensors-temperature-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/fr_icons/sleep.svg b/fr_icons/sleep.svg new file mode 100644 index 0000000..75c3fa4 --- /dev/null +++ b/fr_icons/sleep.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/system-file-manager-symbolic.svg b/fr_icons/system-file-manager-symbolic.svg new file mode 100644 index 0000000..7a67e44 --- /dev/null +++ b/fr_icons/system-file-manager-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/system-file-manager.svg b/fr_icons/system-file-manager.svg new file mode 100644 index 0000000..3f5103e --- /dev/null +++ b/fr_icons/system-file-manager.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/system-monitor.svg b/fr_icons/system-monitor.svg new file mode 100644 index 0000000..30f2649 --- /dev/null +++ b/fr_icons/system-monitor.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/system-reboot.svg b/fr_icons/system-reboot.svg new file mode 100644 index 0000000..1495fb4 --- /dev/null +++ b/fr_icons/system-reboot.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/system-shutdown.svg b/fr_icons/system-shutdown.svg new file mode 100644 index 0000000..ed0d1a3 --- /dev/null +++ b/fr_icons/system-shutdown.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/text-x-generic-symbolic.svg b/fr_icons/text-x-generic-symbolic.svg new file mode 100644 index 0000000..6e8b7f8 --- /dev/null +++ b/fr_icons/text-x-generic-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/text-x-generic.svg b/fr_icons/text-x-generic.svg new file mode 100644 index 0000000..35542de --- /dev/null +++ b/fr_icons/text-x-generic.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/text_line_spacing.svg b/fr_icons/text_line_spacing.svg new file mode 100644 index 0000000..2edeee8 --- /dev/null +++ b/fr_icons/text_line_spacing.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/trash-empty.svg b/fr_icons/trash-empty.svg new file mode 100644 index 0000000..d37bd5a --- /dev/null +++ b/fr_icons/trash-empty.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/unsettings.svg b/fr_icons/unsettings.svg new file mode 100644 index 0000000..2c2c936 --- /dev/null +++ b/fr_icons/unsettings.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/user-home-symbolic.svg b/fr_icons/user-home-symbolic.svg new file mode 100644 index 0000000..5af7efb --- /dev/null +++ b/fr_icons/user-home-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/user-home.svg b/fr_icons/user-home.svg new file mode 100644 index 0000000..9c0414d --- /dev/null +++ b/fr_icons/user-home.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/utilities-system-monitor-symbolic.svg b/fr_icons/utilities-system-monitor-symbolic.svg new file mode 100644 index 0000000..fd41e5c --- /dev/null +++ b/fr_icons/utilities-system-monitor-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/utilities-system-monitor.svg b/fr_icons/utilities-system-monitor.svg new file mode 100644 index 0000000..30f2649 --- /dev/null +++ b/fr_icons/utilities-system-monitor.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/utilities-terminal-symbolic.svg b/fr_icons/utilities-terminal-symbolic.svg new file mode 100644 index 0000000..d4c0bea --- /dev/null +++ b/fr_icons/utilities-terminal-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/utilities-terminal.svg b/fr_icons/utilities-terminal.svg new file mode 100644 index 0000000..5b91996 --- /dev/null +++ b/fr_icons/utilities-terminal.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/view-app-grid-symbolic.svg b/fr_icons/view-app-grid-symbolic.svg new file mode 100644 index 0000000..19bd935 --- /dev/null +++ b/fr_icons/view-app-grid-symbolic.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + diff --git a/fr_icons/view-list-bullet-symbolic.svg b/fr_icons/view-list-bullet-symbolic.svg new file mode 100644 index 0000000..c53f29a --- /dev/null +++ b/fr_icons/view-list-bullet-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/view-list-ordered-symbolic.svg b/fr_icons/view-list-ordered-symbolic.svg new file mode 100644 index 0000000..1378004 --- /dev/null +++ b/fr_icons/view-list-ordered-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/view-media-equalizer.svg b/fr_icons/view-media-equalizer.svg new file mode 100644 index 0000000..5ccbcef --- /dev/null +++ b/fr_icons/view-media-equalizer.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/view-media-visualization.svg b/fr_icons/view-media-visualization.svg new file mode 100644 index 0000000..48f07a2 --- /dev/null +++ b/fr_icons/view-media-visualization.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/volume-level-high.svg b/fr_icons/volume-level-high.svg new file mode 100644 index 0000000..8274a48 --- /dev/null +++ b/fr_icons/volume-level-high.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/weather-clear-night.svg b/fr_icons/weather-clear-night.svg new file mode 100644 index 0000000..e0cffc8 --- /dev/null +++ b/fr_icons/weather-clear-night.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/fr_icons/weather-clear.svg b/fr_icons/weather-clear.svg new file mode 100644 index 0000000..8a35b33 --- /dev/null +++ b/fr_icons/weather-clear.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/weather-clouds-night.svg b/fr_icons/weather-clouds-night.svg new file mode 100644 index 0000000..0db6194 --- /dev/null +++ b/fr_icons/weather-clouds-night.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/fr_icons/weather-clouds.svg b/fr_icons/weather-clouds.svg new file mode 100644 index 0000000..c79e94d --- /dev/null +++ b/fr_icons/weather-clouds.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/weather-few-clouds-night.svg b/fr_icons/weather-few-clouds-night.svg new file mode 100644 index 0000000..e3c4f87 --- /dev/null +++ b/fr_icons/weather-few-clouds-night.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/fr_icons/weather-few-clouds.svg b/fr_icons/weather-few-clouds.svg new file mode 100644 index 0000000..c55594a --- /dev/null +++ b/fr_icons/weather-few-clouds.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/weather-fog.svg b/fr_icons/weather-fog.svg new file mode 100644 index 0000000..1ce1a84 --- /dev/null +++ b/fr_icons/weather-fog.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/fr_icons/weather-freezing-rain.svg b/fr_icons/weather-freezing-rain.svg new file mode 100644 index 0000000..eb98f17 --- /dev/null +++ b/fr_icons/weather-freezing-rain.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/fr_icons/weather-hail.svg b/fr_icons/weather-hail.svg new file mode 100644 index 0000000..eb98f17 --- /dev/null +++ b/fr_icons/weather-hail.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/fr_icons/weather-many-clouds.svg b/fr_icons/weather-many-clouds.svg new file mode 100644 index 0000000..a88947f --- /dev/null +++ b/fr_icons/weather-many-clouds.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/fr_icons/weather-mist.svg b/fr_icons/weather-mist.svg new file mode 100644 index 0000000..1ce1a84 --- /dev/null +++ b/fr_icons/weather-mist.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/fr_icons/weather-none-available.svg b/fr_icons/weather-none-available.svg new file mode 100644 index 0000000..63cd5b7 --- /dev/null +++ b/fr_icons/weather-none-available.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/fr_icons/weather-overcast.svg b/fr_icons/weather-overcast.svg new file mode 100644 index 0000000..a88947f --- /dev/null +++ b/fr_icons/weather-overcast.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/fr_icons/weather-severe-alert.svg b/fr_icons/weather-severe-alert.svg new file mode 100644 index 0000000..5eaf23b --- /dev/null +++ b/fr_icons/weather-severe-alert.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/fr_icons/weather-showers-scattered.svg b/fr_icons/weather-showers-scattered.svg new file mode 100644 index 0000000..507b1dd --- /dev/null +++ b/fr_icons/weather-showers-scattered.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/weather-showers.svg b/fr_icons/weather-showers.svg new file mode 100644 index 0000000..6e808b6 --- /dev/null +++ b/fr_icons/weather-showers.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/fr_icons/weather-snow-rain.svg b/fr_icons/weather-snow-rain.svg new file mode 100644 index 0000000..62627fb --- /dev/null +++ b/fr_icons/weather-snow-rain.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/weather-snow-scattered.svg b/fr_icons/weather-snow-scattered.svg new file mode 100644 index 0000000..7a674aa --- /dev/null +++ b/fr_icons/weather-snow-scattered.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/weather-snow.svg b/fr_icons/weather-snow.svg new file mode 100644 index 0000000..6dc59e7 --- /dev/null +++ b/fr_icons/weather-snow.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/weather-storm.svg b/fr_icons/weather-storm.svg new file mode 100644 index 0000000..2fb8f6b --- /dev/null +++ b/fr_icons/weather-storm.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/fr_icons/weather-widget.svg b/fr_icons/weather-widget.svg new file mode 100644 index 0000000..3713c6f --- /dev/null +++ b/fr_icons/weather-widget.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/weather-windy.svg b/fr_icons/weather-windy.svg new file mode 100644 index 0000000..d52ec2a --- /dev/null +++ b/fr_icons/weather-windy.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/fr_icons/web-browser-symbolic.svg b/fr_icons/web-browser-symbolic.svg new file mode 100644 index 0000000..5a4a340 --- /dev/null +++ b/fr_icons/web-browser-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/fr_icons/web-browser.svg b/fr_icons/web-browser.svg new file mode 100644 index 0000000..4dae422 --- /dev/null +++ b/fr_icons/web-browser.svg @@ -0,0 +1 @@ + diff --git a/fr_icons/window-close-symbolic.svg b/fr_icons/window-close-symbolic.svg new file mode 100644 index 0000000..5c020b3 --- /dev/null +++ b/fr_icons/window-close-symbolic.svg @@ -0,0 +1,9 @@ + + + + + + + diff --git a/fr_icons/window-maximize-symbolic.svg b/fr_icons/window-maximize-symbolic.svg new file mode 100644 index 0000000..6c0db07 --- /dev/null +++ b/fr_icons/window-maximize-symbolic.svg @@ -0,0 +1,3 @@ + + + diff --git a/fr_icons/window-minimize-symbolic.svg b/fr_icons/window-minimize-symbolic.svg new file mode 100644 index 0000000..3333f50 --- /dev/null +++ b/fr_icons/window-minimize-symbolic.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/images/montaukos-demo.jpg b/images/montaukos-demo.jpg new file mode 100644 index 0000000..d65211a Binary files /dev/null and b/images/montaukos-demo.jpg differ diff --git a/images/mtk_doomgame.png b/images/mtk_doomgame.png new file mode 100644 index 0000000..2123c0d Binary files /dev/null and b/images/mtk_doomgame.png differ diff --git a/images/mtk_procmgr_devexplorer.png b/images/mtk_procmgr_devexplorer.png new file mode 100644 index 0000000..2f1bd42 Binary files /dev/null and b/images/mtk_procmgr_devexplorer.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..9cc358d --- /dev/null +++ b/index.html @@ -0,0 +1,267 @@ + + + + + + + MontaukOS + + + + + + + + + +
+
+

MontaukOS

+
+ +
+

About

+

+MontaukOS is a multi-user, multitasking operating system that runs on bare metal. +It features its own kernel and modern userspace with its own desktop environment, +targeting both emulators and real hardware. +

+

Downloads & release notes | Setup tutorial

+

+

+
+
+ +

Screenshot of MontaukOS 0.1.8

+ +
+
+

Copyright © 2025-2026 Montauk Operating System Project

+ +
+ + + diff --git a/license.html b/license.html new file mode 100644 index 0000000..ebddd42 --- /dev/null +++ b/license.html @@ -0,0 +1,217 @@ + + + + + + + License - MontaukOS + + + + + + + + + +
+
+

MontaukOS Software License

+
+ +
+ +

Copyright (c) 2025-2026 Montauk Operating System Project (the "MontaukOS Project").

+ +

This document governs the use of MontaukOS, including its kernel, userspace +programs, libraries, bootable images, documentation, artwork, and all +accompanying materials (collectively, the "Software"), except for the +third-party components described in Section 5. MontaukOS is open-source +software: its source code is published for anyone to read, build, and modify, +subject to the terms below.

+ +

A plain-text version of this license is available at +license.txt.

+ +

1. Grant of Rights

+ +

Subject to the conditions in Section 2, the MontaukOS Project grants you a +worldwide, royalty-free, non-exclusive license to:

+ +
    +
  • (a) use and run the Software on any device, for any purpose;
  • +
  • (b) view, study, and build the Software from source;
  • +
  • (c) copy and redistribute the Software, in source or binary form;
  • +
  • (d) modify the Software and create derivative works of it; and
  • +
  • (e) copy and redistribute your modified versions, in source or binary form.
  • +
+ +

2. Conditions

+ +

The rights in Section 1 are conditioned on the following:

+ +
    +
  • (a) Attribution. Redistributions, modified or not, must retain the above +copyright notice, this license text, and the THIRD-PARTY-NOTICES file. You may +not remove or obscure copyright or license notices in the Software.
  • +
  • (b) No misrepresentation. You must not misrepresent the origin of the +Software. Modified versions must be clearly marked as modified and must not be +presented as official MontaukOS releases.
  • +
  • (c) Noncommercial distribution. You may not sell the Software or modified +versions of it, charge a fee for access to them, or distribute them as part of +a commercial product or paid service, without prior written permission from +the MontaukOS Project. Using the Software internally (including in a +commercial setting) and distributing it free of charge are permitted.
  • +
  • (d) Names and marks. This license does not grant rights to use the +"MontaukOS" name or logos, except as needed for the factual attribution +required above.
  • +
+ +

3. Contributions and Feedback

+ +

If you submit code, suggestions, or other feedback to the MontaukOS Project, +you grant the MontaukOS Project a perpetual, irrevocable, worldwide, +royalty-free license to use, modify, and incorporate it for any purpose.

+ +

4. Termination

+ +

This license terminates automatically if you materially breach its terms and +fail to cure the breach within 30 days of becoming aware of it. Upon +termination you must stop distributing the Software; copies already lawfully +obtained by others are unaffected. Sections 3, 5, 6, and 7 survive +termination.

+ +

5. Third-Party Components

+ +

The Software incorporates or is distributed alongside third-party components +that remain the property of their respective owners and are licensed under +their own terms, including the Limine bootloader, Flanterm, BearSSL, stb_image +and stb_truetype, the DOOM engine (via doomgeneric), the NetSurf web browser and +the NetSurf project libraries (libcss, libdom, libhubbub, libparserutils, +libwapcaplet, libnsutils, libnslog, libnspsl, libnsgif, libnsbmp), utf8proc, +zlib, the Tiny C Compiler, Lua, the GNU Compiler Collection (GCC), GNU Binutils, +the Flat Remix icon theme, the bundled fonts, the Mozilla CA certificate bundle, +Intel Bluetooth and Wi-Fi (iwlwifi) firmware, and the default wallpaper +photograph. GCC and GNU Binutils are +included as the native MontaukOS SDK toolchain (GCC 14.2.0 and Binutils 2.43.1) +under the GNU GPLv3, with the GCC Runtime Library Exception where applicable. +Copyright (C) 1987-2024 Free Software Foundation, Inc.; additional copyrights +belong to the respective GCC, GNU Binutils, and other contributors. The NetSurf +application is included under the GNU GPLv2; its visual artwork is under the MIT +License. Copyright (C) the NetSurf Browser Project and its respective +contributors. +Nothing in this license modifies, supersedes, or limits the license terms +applicable to those components; to the extent of any conflict, the third-party +license controls for that component. The applicable copyright notices and +license texts are set out in the +THIRD-PARTY-NOTICES file that accompanies +the Software (also on the MontaukOS ISO at 0:/os/licenses/).

+ +

6. No Warranty

+ +

THE SOFTWARE IS PROVIDED "AS IS" AND "AS AVAILABLE," WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT. +MONTAUKOS IS EXPERIMENTAL, HOBBYIST SYSTEM SOFTWARE THAT OPERATES AT A LOW +LEVEL AND MAY CAUSE LOSS OF DATA OR DAMAGE TO HARDWARE; YOU USE IT ENTIRELY AT +YOUR OWN RISK.

+ +

7. Limitation of Liability

+ +

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL THE +MONTAUKOS PROJECT OR ITS AUTHOR BE LIABLE FOR ANY INDIRECT, INCIDENTAL, +SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, OR FOR ANY LOSS OF PROFITS, DATA, +USE, OR GOODWILL, ARISING OUT OF OR RELATED TO YOUR USE OF OR INABILITY TO USE +THE SOFTWARE, WHETHER BASED IN CONTRACT, TORT, OR ANY OTHER LEGAL THEORY, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE TOTAL AGGREGATE LIABILITY OF +THE MONTAUKOS PROJECT SHALL NOT EXCEED THE AMOUNT YOU PAID, IF ANY, FOR THE +SOFTWARE.

+ +

8. General

+ +

If any provision of this license is held unenforceable, the remaining +provisions remain in full force and effect. The failure to enforce any +provision is not a waiver of the right to do so later.

+ +

For licensing inquiries (including commercial distribution), contact: +licensing@montaukos.org

+ +
+ + + +
+ + diff --git a/license.txt b/license.txt new file mode 100644 index 0000000..0ffcbbc --- /dev/null +++ b/license.txt @@ -0,0 +1,125 @@ +MontaukOS Software License +========================== + +Copyright (c) 2025-2026 Montauk Operating System Project (the "MontaukOS Project"). + +This document governs the use of MontaukOS, including its kernel, userspace +programs, libraries, bootable images, documentation, artwork, and all +accompanying materials (collectively, the "Software"), except for the +third-party components described in Section 5. MontaukOS is open-source +software: its source code is published for anyone to read, build, and modify, +subject to the terms below. + + +1. Grant of Rights +------------------ +Subject to the conditions in Section 2, the MontaukOS Project grants you a +worldwide, royalty-free, non-exclusive license to: + + (a) use and run the Software on any device, for any purpose; + + (b) view, study, and build the Software from source; + + (c) copy and redistribute the Software, in source or binary form; + + (d) modify the Software and create derivative works of it; and + + (e) copy and redistribute your modified versions, in source or binary form. + + +2. Conditions +------------- +The rights in Section 1 are conditioned on the following: + + (a) Attribution. Redistributions, modified or not, must retain the above + copyright notice, this license text, and the THIRD-PARTY-NOTICES file. + You may not remove or obscure copyright or license notices in the + Software. + + (b) No misrepresentation. You must not misrepresent the origin of the + Software. Modified versions must be clearly marked as modified and must + not be presented as official MontaukOS releases. + + (c) Noncommercial distribution. You may not sell the Software or modified + versions of it, charge a fee for access to them, or distribute them as + part of a commercial product or paid service, without prior written + permission from the MontaukOS Project. Using the Software internally + (including in a commercial setting) and distributing it free of charge + are permitted. + + (d) Names and marks. This license does not grant rights to use the + "MontaukOS" name or logos, except as needed for the factual attribution + required above. + + +3. Contributions and Feedback +----------------------------- +If you submit code, suggestions, or other feedback to the MontaukOS Project, +you grant the MontaukOS Project a perpetual, irrevocable, worldwide, +royalty-free license to use, modify, and incorporate it for any purpose. + + +4. Termination +-------------- +This license terminates automatically if you materially breach its terms and +fail to cure the breach within 30 days of becoming aware of it. Upon +termination you must stop distributing the Software; copies already lawfully +obtained by others are unaffected. Sections 3, 5, 6, and 7 survive termination. + + +5. Third-Party Components +------------------------- +The Software incorporates or is distributed alongside third-party components +that remain the property of their respective owners and are licensed under +their own terms, including the Limine bootloader, Flanterm, BearSSL, stb_image +and stb_truetype, the DOOM engine (via doomgeneric), the NetSurf web browser and +the NetSurf project libraries (libcss, libdom, libhubbub, libparserutils, +libwapcaplet, libnsutils, libnslog, libnspsl, libnsgif, libnsbmp), utf8proc, +zlib, the Tiny C Compiler, Lua, the GNU Compiler Collection (GCC), GNU Binutils, +the Flat Remix icon theme, the bundled fonts, the Mozilla CA certificate bundle, +Intel Bluetooth and Wi-Fi (iwlwifi) firmware, and the default wallpaper +photograph. GCC and GNU Binutils are +included as the native MontaukOS SDK toolchain (GCC 14.2.0 and Binutils 2.43.1) +under the GNU GPLv3, with the GCC Runtime Library Exception where applicable. +Copyright (C) 1987-2024 Free Software Foundation, Inc.; additional copyrights +belong to the respective GCC, GNU Binutils, and other contributors. The NetSurf +application is included under the GNU GPLv2; its visual artwork is under the MIT +License. Copyright (C) the NetSurf Browser Project and its respective +contributors. +Nothing in this license modifies, supersedes, or limits the license terms +applicable to those components; to the extent of any conflict, the third-party +license controls for that component. The applicable copyright notices and +license texts are set out in the THIRD-PARTY-NOTICES file that accompanies the +Software (also on the MontaukOS ISO at 0:/os/licenses/). + + +6. No Warranty +-------------- +THE SOFTWARE IS PROVIDED "AS IS" AND "AS AVAILABLE," WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND NON-INFRINGEMENT. +MONTAUKOS IS EXPERIMENTAL, HOBBYIST SYSTEM SOFTWARE THAT OPERATES AT A LOW +LEVEL AND MAY CAUSE LOSS OF DATA OR DAMAGE TO HARDWARE; YOU USE IT ENTIRELY AT +YOUR OWN RISK. + + +7. Limitation of Liability +-------------------------- +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL THE +MONTAUKOS PROJECT OR ITS AUTHOR BE LIABLE FOR ANY INDIRECT, INCIDENTAL, +SPECIAL, CONSEQUENTIAL, OR PUNITIVE DAMAGES, OR FOR ANY LOSS OF PROFITS, DATA, +USE, OR GOODWILL, ARISING OUT OF OR RELATED TO YOUR USE OF OR INABILITY TO USE +THE SOFTWARE, WHETHER BASED IN CONTRACT, TORT, OR ANY OTHER LEGAL THEORY, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE TOTAL AGGREGATE LIABILITY OF +THE MONTAUKOS PROJECT SHALL NOT EXCEED THE AMOUNT YOU PAID, IF ANY, FOR THE +SOFTWARE. + + +8. General +---------- +If any provision of this license is held unenforceable, the remaining +provisions remain in full force and effect. The failure to enforce any +provision is not a waiver of the right to do so later. + +For licensing inquiries (including commercial distribution), contact: +licensing@montaukos.org