Skip to content

FruityOS 0.02

Choose a tag to compare

@rechenplan rechenplan released this 14 Jul 02:59
· 64 commits to main since this release

FruityOS 0.02 is a major toolchain and architecture release. The operating system has moved from Yuzu to the new self-hosted Jabara language, gained protected ring-3 applications, and received substantial boot, paging, hardware-compatibility, shell, and build-system improvements.

Highlights

Jabara language and compiler

  • Added Jabara, a compact 64-bit systems language.
  • Added an ANSI C bootstrap compiler and a compiler written in Jabara.
  • Added records with compile-time type tags and lexical closures.
  • Added ELF, FruityOS FAP, and headerless module output.
  • Added separate Linux and FruityOS assembly runtimes.
  • Added a comprehensive language manual and regression suite.
  • The self-hosted compiler can compile itself and every Peel userland program.

FruityOS ported to Jabara

  • Ported the Pulp kernel and Peel userland from Yuzu to Jabara.
  • Source files outside the retained Yuzu compatibility tree now use the .jabara extension.
  • Reworked the build around Jabara and NASM.
  • Added jc, yc, and zest to the initial RAM filesystem.
  • Added the Jabara ELF and FAP runtimes under /lib.
  • Retained the Yuzu toolchain for compatibility.

Ring-3 applications and memory protection

  • Applications now execute in ring 3.
  • Added permanent x86-64 paging structures and per-application mappings.
  • Added an 8 MiB virtual application window with isolated task state, heap, and stack regions.
  • Added parent/child application paging and state restoration for exec and exit.
  • Corrected page permissions so userspace cannot access kernel memory.
  • Moved process break management into per-task state.

Boot and hardware support

  • Added a hard-disk boot sector with an MBR partition entry.
  • Hard-disk images can also be used through BIOS-emulated USB storage.
  • The hard-disk image is now the default boot image.
  • Moved permanent IDT initialization into the kernel.
  • Added exception handlers, including a double-fault handler.
  • Fixed IDT behavior on physical hardware.
  • Improved keyboard handling when interrupts are disabled.
  • Fixed bootloader and page-allocation memory corruption bugs.

Kernel and system-call ABI

  • Added the ring-3 int 0x84 system-call interface.
  • Added or updated file, directory, process, console, and memory calls.
  • creat now replaces an existing file.
  • getch is non-blocking and returns -1 when no completed input line is available.
  • Added program loading through compressed FAP images.
  • Improved paging, task switching, RAMFS, and inode handling.
  • Fixed multiple inode unlink and filesystem corruption bugs.

Shell and userland

  • Pish is now a ring-3 user application rather than part of the kernel.
  • Pish runs /init.psh before entering interactive mode.
  • Added .psh script execution and .fap program lookup in the current directory and /bin.
  • Added the inode and fill utilities.
  • Continued to provide file management, editing, archive, and compression tools through Peel.

Build and development workflow

  • Replaced the old default floppy-image workflow with a fixed 256 KiB hard-disk image.
  • Simplified and unified Linux and FruityOS userland builds.
  • Added native build scripts and self-hosting checks.
  • Added automated Jabara tests covering records, closures, diagnostics, ELF/FAP generation, Juicer round trips, and Peel compilation.
  • Expanded the main README with boot flow, architecture, system-call ABI, and memory-map documentation.

Compatibility notes

  • FruityOS applications now load at 0x801000.
  • User programs invoke kernel services through interrupt 0x84.
  • Jabara-generated ELF and FAP assembly must be combined with the corresponding external runtime before assembly.
  • Source files outside yuzu/ now use .jabara.
  • The former fapld component has been removed.
  • The default generated image is fruityos_hdd.img.

Current limitations

FruityOS remains an experimental, intentionally small operating system:

  • Legacy BIOS and x86-64 only; no UEFI support.
  • One active user application at a time and no preemptive scheduler.
  • Volatile RAM filesystem with no persistent disk driver.
  • No networking, USB stack, SMP, ACPI, audio, or graphics mode.
  • fork, waitpid, dup2, and mmap remain compatibility stubs.
  • Hardware support assumes VGA text output and a PS/2 keyboard.

Getting started

./init.sh
./build.sh
./run.sh

Full Changelog: 0.01...0.02