https://github.com/mrgian/felix
🐱 Experimental operating system written in Rust
https://github.com/mrgian/felix
bootloader kernel operating-system os rust
Last synced: 19 days ago
JSON representation
🐱 Experimental operating system written in Rust
- Host: GitHub
- URL: https://github.com/mrgian/felix
- Owner: mrgian
- License: mit
- Created: 2022-10-22T11:30:57.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-01-08T20:59:32.000Z (over 1 year ago)
- Last Synced: 2025-04-25T16:56:24.352Z (20 days ago)
- Topics: bootloader, kernel, operating-system, os, rust
- Language: Rust
- Homepage:
- Size: 845 KB
- Stars: 396
- Watchers: 7
- Forks: 13
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rust-list - Felix OS
- awesome-rust-list - Felix OS
README
Felix OS
x86 operating system## Description
Felix is an experimental operating system for the Intel IA-32 architecture (x86).
It's **written completely from scratch** in Rust and doesn't use any external dependencies.
This project is part of the work for my bachelor thesis in computer engineering. You can read it [here](https://github.com/mrgian/felix/blob/main/thesis.pdf).
## Pictures
Felix running in QEMU:

Felix running on real hardware:
## Features
### Bootloader
- boots (you don't say!)
- BIOS compatible (also works on UEFI with CSM enabled)
- Global Descriptor Table loading
- Unreal Mode switching (to use 32bit addresses in 16bit Real Mode)
- kernel copying from disk to protected memory
- 32bit Protected Mode switching
- kernel jumping### Kernel
- Interrupt Descriptor Table loading
- CPU exceptions handler
- Programmable Interrupt Controller driver
- keyboard driver
- ATA disk driver
- FAT16 filesystem file read
- timer interrupt driven CPU scheduler
- prints system call that writes to VGA text buffer
- task manager
- round robin CPU scheduler### Shell
Available commands:
- **help** shows available commands
- **ls** lists root directory entries
- **cat ** displays content of a file
- **test ** runs a dummy task
- **run ** loads file as task and adds it to the task list
- **ps** lists running tasks
- **rt ** removes specified task### libfelix (standard library)
- print! macro able to print formatted text to screen## Building
You can download a pre-built image or you can build it by yourself using Docker.
### Download pre-built image
[](https://github.com/mrgian/felix/actions)A build is made for every commit.
To download the latest build click on the badge above, then click on the most recent build and download the artifact.
### Build using Docker
First make sure you have Docker installed. Then:1. Clone the repo `git clone https://github.com/mrgian/felix`
2. Change dir to repo `cd felix`
3. Build the image `docker build -t felix-image .`
4. Run the container `docker run --name felix-container felix-image`
5. Copy build from container to host `docker cp felix-container:/root/felix/build .`### Build on MacOS/Linux
Make sure you have `rustup`,`mtools`,`dosfstools` and `fdisk` installed on your system, in any case makefile script
will try to install them for you.```zsh
git clone https://github.com/mrgian/felix
cd felix
make all
```## Running
The final disk image is `build/disk.img````zsh
make run
```Or you can run it on a real x86 computer by copying the disk image to a USB drive using this command: `sudo dd if=build/disk.img of=/dev/sdX status=progress` and then booting from USB.
## Progress
- *22/10/22* - Project start
- *27/01/23* - Bootloader can print to screen
- *31/01/23* - Bootloader can read data from disk to memory
- *01/02/23* - Bootloader can load kernel to memory
- *27/02/23* - Moved to Rust environment using inline assembly
- *01/03/23* - Rewritten kernel loading code in Rust
- *08/03/23* - Implemented println macro
- *20/03/23* - Switch to 32bit protected mode
- *29/03/23* - Basic CPU exception handler
- *30/03/23* - PIC driver
- *06/04/23* - keyboard driver
- *07/04/23* - start working on shell
- *08/04/23* - ATA disk driver
- *09/04/23* - FAT filesystem file read
- *26/04/23* - CPU scheduler
- *13/05/23* - prints system call
- *13/05/23* - println! macro in standard library
- *30/06/23* - multitasking finally working## Roadmap
The following features are planned to be added sooner or later:
- paging
- memory allocator
- VESA video driver
- networking
- SATA AHCI disk driver
- graphical user interface## Credits
This project is entirely developed by [**Gianmatteo Palmieri**](https://gian.im)
Logo design by [**Veronica Grana**](https://www.instagram.com/_.veronica_grana._)