Repository navigation
Releases
FruityOS 0.8.1
Removing extra crap from build
FruityOS 0.07
FruityOS 0.05
FruityOS 0.04
FruityOS 0.03
FruityOS 0.03 completes the transition to the Jabara toolchain, adds native UEFI support, and makes the system substantially more self-hosting.
FruityOS can now extract its packaged source tree, rebuild its userland, compile Pulp one source file at a time, assemble the kernel with Orgasm, and compress the result with Juicer—all from inside FruityOS.
Highlights
- Ported Pulp and Peel to Jabara.
- Added the self-hosted Jabara compiler and C bootstrap compiler.
- Added Orgasm, a Jabara-written x86-64 assembler.
- Added legacy BIOS, standalone PE32+, and FAT16 UEFI images.
- Added source packaging and native rebuilding during startup.
- Added a complete native Pulp build using separately compiled Jabara parts.
- Added user mode, application paging, and cooperative multitasking foundations.
- Added comprehensive toolchain, kernel, build-system, and development documentation.
Native Pulp Build
The native build compiles every Pulp implementation file independently using the new jc part format. Compiler-private labels are namespaced so the generated assembly can be safely concatenated.
The build combines:
- Handwritten entry and IDT assembly
- Independently compiled Pulp parts
- One shared platform and global module
Orgasm produces pulp.bin, and Juicer compresses it to pulp.sys. These rebuilt artifacts remain in RAMFS and do not replace the currently running kernel.
Orgasm and Juicer use stack-based Jabara environments to prevent heap exhaustion during large assembly and compression workloads. Intermediate files are removed as soon as they are no longer needed, returning their RAMFS blocks to the kernel.
Native Userland Rebuild
Every boot image contains a packaged snapshot of the current source tree. During startup, FruityOS extracts the checkout and rebuilds sixteen applications:
concatcopydeldirechofillfredinodejarjuicermkdirmovepishrmdirtypewrite
The newly built applications are installed into /bin. Only the ten programs required to bootstrap this process are host-built into the initial RAM filesystem.
Jabara Toolchain
- Added the Jabara bootstrap and self-hosted compilers.
- Added ELF, FAP, module, and separately linkable
partoutput formats. - Added records, closures, external declarations, and platform runtimes.
- Added Orgasm with support for the x86-64 instructions and directives required by FruityOS.
- Retained Yuzu, YC, BYC, and Zest for compatibility.
- Added compiler, assembler, closure, record, error, and module-part tests.
Kernel and Execution Changes
- Implemented user mode.
- Added application paging and process page switching.
- Added basic cooperative multitasking infrastructure.
- Moved task state into application-space task blocks.
- Corrected kernel and user page permissions.
- Reorganized application mappings and expanded available heap space.
- Moved page-table and IDT initialization earlier in startup.
- Increased the default QEMU memory allocation to 512 MiB.
Boot and Firmware
- Added a legacy BIOS hard-drive image.
- Added a standalone PE32+ EFI application.
- Added a FAT16 UEFI disk image.
- Hardened PE sections, relocation metadata, memory-map handling, and firmware handoff.
- Fixed BIOS initrd corruption by delaying interrupts until the initrd is relocated.
- Updated QEMU launchers to use temporary image copies, preventing stale locks and accidental artifact modification.
Userland
- Added the
fillutility. - Restored scripting in Pish.
- Pish now executes the startup script before entering interactive mode.
- Pish is rebuilt and installed as a normal userland application.
- Increased RAMFS filename capacity to support generated build filenames.
Documentation
This release adds comprehensive documentation covering:
- Installation and first boot
- Host and native build systems
- Jabara language and toolchain
- Kernel architecture and memory layout
- System calls
- Userland programs
- BIOS, PE32+, and UEFI boot paths
- Initrd packaging and native rebuilding
- Development and debugging workflows
Known Limitations
- Secure Boot is not supported. Disable it or locally sign
fruityos.efi. - VGA-compatible text output and PS/2 keyboard input are required after firmware handoff.
- The rebuilt native kernel is not hot-swapped; it remains as an artifact in RAMFS.
- Networking, USB, SMP, ACPI discovery, audio, and a graphics-mode API are not implemented.
Full Changelog: 0.02...0.03
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