Skip to content

sasdallas/reduceOS

Repository files navigation

reduceOS

A memory-focused, lightweight operating system written in C and Assembly.

What is reduceOS?

reduceOS is a project with the goal of creating a fully functional OS (including usermode components) with as little requirements as possible.

Currently, the project is moving away from kernel mode stages and towards usermode.

Features

  • Advanced driver system with a well-documented kernel API
  • Strong support for x86_64 mode
  • USB support for UHCI/EHCI controllers
  • AHCI/IDE support
  • Networking stack with E1000 network card driver
  • Priority-based round-robin scheduler with a well-tested API
  • Custom C library with support for many functions
  • Full ACPI support with the ACPICA library

Project structure

  • base: Contains the base filesystem. Files in base/initrd go in the initial ramdisk and files in base/sysroot go in sysroot.
  • buildscripts: Contains buildscripts for the build system
  • conf: Contains misc. configuration files, such as architecture files, GRUB configs, extra boot files, etc.
  • drivers: Drivers for Hexahedron, copied based on their configuration.
  • external: Contains external projects, such as ACPICA. See External Components.
  • hexahedron: The main kernel project
  • libpolyhedron: The libc/libk for the project.
  • libkstructures: Contains misc. kernel structures, like lists/hashmaps/parsers/whatever

Building

To build reduceOS, you will need a cross compiler for your target architecture.
Other packages required: grub-common, xorriso, qemu-system

Edit buildscripts/build-arch.sh to change the target build architecture.
Running make all will build an ISO in build-output/reduceOS.iso

External components

Certain external components are available in external. Here is a list of them and their versions:

Licensing

Hexahedron, libpolyhedron, and all other components of reduceOS fall under the terms of the BSD 3-clause license (available in LICENSE).
All files, unless specified, fall under this license.

If at any point a licensing change should occur, any files created after the commit changing the license will fall under the new license.
Note, however, that any files created before the commit must remain under the terms of the previous license.