Cut two 0.1.9 x86_64 images: montauk-0.1.9-x86_64.iso (29 MB) and
montauk-0.1.9-sdk-x86_64.iso (194 MB). Both include the NetSurf port and
exclude the WIP git port; only the SDK image carries 0:/sdk.
GNUmakefile: add RELEASE_WITHOUT_SDK=1 to the release target, mirroring
RELEASE_WITH_PORTS. Needed because devkit is .PHONY and repopulates
programs/bin/sdk on every build, so the SDK cannot be held out by hand.
sdk/tcc and sdk/lua stay (installed by their own targets), as does 0:/tmp,
which the libc uses for tmpnam() and not just compiler intermediates.
Also strip .release-tmp/boot/kernel. The ramdisk carries its own copy of
the kernel -- the image the Installer lays down on the target disk -- and
it is not named *.elf, so the existing find missed it. It was shipping
unstripped at 6.2 MB against 0.7 MB.
Licensing: NetSurf (GPLv2, MIT artwork), the ten NetSurf project libraries
(MIT), utf8proc (MIT) and zlib now ship in both images and had no
attribution anywhere. Add notices for each, and broaden the stb_image
section to cover stb_truetype, which the GUI apps have always linked. The
component lists in license.txt and license.html were stale to match;
license.txt is the source for 0:/os/licenses/LICENSE.txt, so it ships.
downloads.html: 0.1.9 card with separate download links for the plain and
SDK images; 0.1.8 moves to the archive.
Co-Authored-By: Claude Opus 5 <[email protected]>
ISOs are now archived on the download server (nginx) instead of git.
History was rewritten with git-filter-repo to remove all *.iso and
ramdisk.tar blobs, shrinking the repo from ~500MB to ~80MB.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Cut the 0.1.8 release (native GCC/binutils port forming the Montauk SDK,
revamped MTK-based Installer, anti-aliased MTK rounded-rect frames,
vblank-synced double-buffered Intel GPU page flips, max windows raised
to 32, and various bug fixes, including the halved ISO size from no
longer nesting ramdisk.tar). Archive the 0.1.8 ISO, publish it to the
website, refresh release notes and the downloads page, and open the
0.1.9 dev cycle (apiVersion 10, BuildNo reset).
Co-Authored-By: Claude Opus 4.8 <[email protected]>
The ramdisk build embedded a full second copy of ramdisk.tar at
boot/ramdisk.tar inside the ramdisk itself. Nothing consumes it (the
Installer copies the live 0:/ tree file-by-file and explicitly skips it),
so it was pure dead weight that doubled the image. Build the tar once.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Route draw_rounded_frame through a new fill_round_rect_aa that fills the
straight interior solid and 4x4-supersamples only the four corner arcs,
so button/text-field/panel/list-frame corners are smooth instead of
pixelated, at negligible cost.
Consolidate the checkbox's private AA fill/blend helpers onto the shared
aa_blend_px / fill_round_rect_aa primitives.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Rewrite the Installer app on the Montauk Toolkit (Canvas + gui/mtk
widgets, theme, hover states, scrollbar) replacing the hand-rolled px_*
renderer and bespoke TrueType usage.
Add a new "Software" step: an expandable checkbox tree for optional
components (Montauk SDK with gcc/g++, binutils, tcc, lua sub-items;
Games; Office; Internet apps; Printing; experimental httpd and SDR).
Unchecked components' paths are excluded from the install copy, with a
longest-path ownership rule so e.g. sdk/tcc installs even when the rest
of the SDK is deselected. The update flow refreshes only the components
the target already has.
Add tri-state checkbox and disclosure-arrow widgets to the MTK toolkit
(anti-aliased, supersampled).
Merge tcc and lua into 0:/sdk (0:/sdk/tcc, 0:/sdk/lua) and drop 0:/lib:
update tcc config.h, lua luaconf.h, both Makefiles, the devkit clean
scope, man pages and montaukos.org notices.
Make printing optional: init skips printd when 0:/os/printd.elf is
absent.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
stat() synthesized path-hash inodes for regular files but left
st_ino = 0 for directories. GCC's include-path setup deduplicates
directories by (st_dev, st_ino), so every directory on MontaukOS
compared equal and cc1plus silently dropped all C++ include dirs
except the first - <iostream> resolved but the target-specific
bits/c++config.h directory was gone. Directories now get the same
path-hash inodes as files. (Different spellings of one directory
hash differently; the harmless direction - a dir may be searched
twice, never dropped.)
Native GCC relinked against the fixed libc.
Co-Authored-By: Claude Fable 5 <[email protected]>
The GCC driver relocates its install prefix from argv[0]. crt1
hardcoded argv[0] as "prog", so make_relative_prefix cwd-joined it
and computed exec prefixes relative to the current directory
(0:/users/admin/../libexec/gcc/...), and because the computed
gcc_exec_prefix is non-NULL the standard /sdk prefixes were never
searched. cc1plus was unreachable from anywhere except (by accident
of the path arithmetic) 0:/sdk/bin. sdk-diag proved the kernel and
libc layers all worked; only the driver's self-relocation was lost.
New SYS_GETEXECPATH (151) returns the absolute path the process was
spawned from (Process::name); crt1 uses it for argv[0] with a "prog"
fallback. With a real argv[0], make_relative_prefix computes
0:/sdk/bin/../libexec/gcc/ from any cwd. Native GCC relinked against
the new crt1; sdk-diag ships in the SDK as a permanent probe; the
montauk.h TCC mirror gains the wrapper (checker enforced it).
Co-Authored-By: Claude Fable 5 <[email protected]>
ElfLoad read the entire binary into one kernel heap allocation before
copying segments out. The heap grows through ReallocConsecutive, so a
40 MB cc1plus required 10k physically contiguous pages - effectively
impossible after boot with a 368 MB ramdisk module resident, and the
failed spawn surfaced as posix_spawnp ENOENT in the gcc driver.
The loader now reads the ELF header and program header table (bounded
at 64 entries), then copies each PT_LOAD page and the PT_TLS template
directly from the VFS into freshly mapped process pages. Peak kernel
memory per load drops from fileSize to one page regardless of binary
size. Boot-smoke verified: all userspace loads through this path.
Co-Authored-By: Claude Fable 5 <[email protected]>