Skip to content

Releases

FruityOS 0.8.1

Choose a tag to compare

@rechenplan rechenplan released this 16 Jul 23:37
Removing extra crap from build

FruityOS 0.07

Choose a tag to compare

@rechenplan rechenplan released this 16 Jul 20:54

Full Changelog: 0.06...0.07

FruityOS 0.05

Choose a tag to compare

@rechenplan rechenplan released this 15 Jul 05:42

Full Changelog: 0.04...0.05

FruityOS 0.04

Choose a tag to compare

@rechenplan rechenplan released this 15 Jul 01:02

Full Changelog: 0.03...0.04

FruityOS 0.03

Choose a tag to compare

@rechenplan rechenplan released this 14 Jul 18:36

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:

  • concat
  • copy
  • del
  • dir
  • echo
  • fill
  • fred
  • inode
  • jar
  • juicer
  • mkdir
  • move
  • pish
  • rmdir
  • type
  • write

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 part output 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 fill utility.
  • 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

Choose a tag to compare

@rechenplan rechenplan released this 14 Jul 02:59

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

FruityOS 0.01

Choose a tag to compare

@rechenplan rechenplan released this 10 Mar 17:32

This is the initial release.