3.9 KiB
CappuccinOS
CappuccinOS is a small x86-64 operating system written from scratch in rust. This README will guide you through the process of building and running CappuccinOS.
Features
- Serial output
- Hardware interrupts
- Heap allocation
- Externalized kernel modules
- Initramfs
- Squashfs driver
- Programmatic reads
- Decompression
- Squashfs driver
- Initramfs
- PS/2 Keyboard support
- ANSI color codes in console
- SMP
- Use APIC instead of PIC
- Pre-emptive multitasking
- Scheduling
- File system
- FAT file system (read-only rn)
- Ext2 file system
- Block Device support
- IDE device support
- SATA device support
- MMC/Nand device support
- M.2 NVME device support
- Basic shell
- Basic I/O
- Executing Programs from disk
- Basic I/O
- Lua interpreter
- Memory management
- Network support
- GUI
- Device drivers
- Native intel graphics
- User authentication
- Power management
- Paging
- RTC Clock
Setup
Before building CappuccinOS, make sure you have the following installed on your machine:
- rust
- python
- sgdisk
- mtools
- squashfs-tools
- qemu (optional)
Clone the repo:
git clone https://github.com/juls0730/CappuccinOS.git
cd CappuccinOS
Install rust, if you haven't already:
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain none
Install the dependencies:
Arch
sudo pacman -S gptfdisk mtools squashfs-tools python
# Optionally
sudo pacman -S qemu-system-x86
Ubuntu
Python should be installed by default, and if it's not, make an issue or a PR and I'll fix itsudo apt install gdisk mtools squashfs-tools
# Optionally
sudo apt install qemu
Usage
Run CappuccinOS with QEMU:
make run
If you would like to just build CappuccinOS but not run it:
make build
If you would like to target another architecture other than x86_64, set the ARCH variable to the a supported architecture. CappuccinOS is also built in release mode by default, if you would like to build CappuccinOS in debug mode, set the MODE variable to debug.
Run on a bare metal machine by flashing to a USB stick or hard drive:
sudo dd if=bin/CappuccinOS.iso of=/dev/sdX bs=1M && sync
Be careful not to overwrite your hard drive when using dd!
Supported Architectures
- x86_64
aarch64not in scope might not buildRISC-V64not in scope might not build
Credits an attributions
Inspiration was mainly from JDH's Tetris OS, mixed with a growing interest in low level in general and an interest in learning rust (yeah, I started this project with not that much rust experience, maybe a CLI app or two, and trust me it shows).
Some Resources I used over the creation of CappuccinOS:
- OSDev wiki
- Wikipedia on various random things
- Squashfs Binary Format
- GRUB Mainly for Squashfs things, even though I later learned it does things incorrectly
And mostly for examples of how people did stuff I used these (projects made by people who might actually have a clue what they're doing):
License
CappuccinOS is license under the MIT License. Feel free to modify and distribute in accordance with the license.