Skip to content

FruityOS 0.03

Choose a tag to compare

@rechenplan rechenplan released this 14 Jul 18:36
· 60 commits to main since this release

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