Repository navigation
FruityOS 0.02
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
.jabaraextension. - Reworked the build around Jabara and NASM.
- Added
jc,yc, andzestto 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
execandexit. - 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 0x84system-call interface. - Added or updated file, directory, process, console, and memory calls.
creatnow replaces an existing file.getchis non-blocking and returns-1when 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.pshbefore entering interactive mode. - Added
.pshscript execution and.fapprogram lookup in the current directory and/bin. - Added the
inodeandfillutilities. - 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
fapldcomponent 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, andmmapremain compatibility stubs.- Hardware support assumes VGA text output and a PS/2 keyboard.
Getting started
./init.sh
./build.sh
./run.shFull Changelog: 0.01...0.02