Skip to content

Artingl/Inari

Repository files navigation

Inari

A monolithic 32-bit x86 Operating System built from scratch.

Now in its third architectural iteration. The goal is to get to a sustainable working userspace, custom GUI, fully-featured network stack. Some of that work is being done currently.

Note

This kernel is not unix-based, not posix compliant. You might get a feeling of otherwise, but frame it rather as getting things from different concepts I enjoy. E.g. not supporting forking and rather implementing spawing.

Screenshots

Screenshot GUI

Building

To build the kernel simply run make build. This will generate file in build/kernel.elf, which can be booted with any multiboot compliant bootloader. The make build will also build the userspace programs.

To build rootfs you can use ./mkimg.sh, this will bundle all apps, kernel file and install grub.

Booting

You you can run the kernel via qemu-system-i386 -serial stdio -cdrom build/boot.iso if constructing rootfs with ./mkimg.sh.

You can also specify bootargs, which kernel will parse (e.g. by specifying in grub.cfg). Here are supported params:

  • earlycon: The earlycon device to print the early logs. Supported values: vga_text, pc8250.
  • root: The block dev to mount as root. Can be any block device in format %s%d, where %s is name and %d is index.
  • init: Path to the init script which will run as PID 1.

Example for bootargs: earlycon=vga_text root=mbr0 init=/programs/cmd.exe

Core Architecture & Features

Unlike many hobby OS projects, Inari focuses on a robust internal architecture and hardware isolation:

  • Memory Management: Custom PMM and VMM with direct page-table manipulation and userspace isolation.
  • Process Management: Ring 3 userspace processes and Ring 0 kernel threads, with a custom preemptive scheduler.
  • Inter-Process Communication (IPC): Fast message-passing mechanism between isolated processes (using direct page mapping for zero-copy data transfer).
  • Loadable Kernel Modules: Dynamic module loading.
  • Storage & File Systems: Virtual File System, devfs, MBR/GPT partition parsing, and FAT filesystem support.
  • Custom GUI & Compositor: A fully custom windowing system with a GUI compositor, rendering multiple overlapping windows and handling PS/2 mouse/keyboard inputs.
  • Network Stack: Custom implementation of Ethernet, IPv4, ARP, UDP, and ICMP, with routing tables and such. With clear separation from hardware drivers.
  • Userland: A custom libc implementation and a set of basic core utilities.

About

A monolithic 32-bit x86 Operating System built from scratch.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages