{"id":13667926,"url":"https://github.com/mrgian/felix","last_synced_at":"2025-04-26T18:30:46.783Z","repository":{"id":124708562,"uuid":"555807696","full_name":"mrgian/felix","owner":"mrgian","description":"🐱 Experimental operating system written in Rust","archived":false,"fork":false,"pushed_at":"2024-01-08T20:59:32.000Z","size":865,"stargazers_count":396,"open_issues_count":0,"forks_count":13,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-25T16:56:24.352Z","etag":null,"topics":["bootloader","kernel","operating-system","os","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mrgian.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-10-22T11:30:57.000Z","updated_at":"2025-04-13T20:31:09.000Z","dependencies_parsed_at":"2023-11-13T22:24:55.815Z","dependency_job_id":"d15af9e0-4245-4a7d-a138-750bbc911e4b","html_url":"https://github.com/mrgian/felix","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrgian%2Ffelix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrgian%2Ffelix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrgian%2Ffelix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mrgian%2Ffelix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mrgian","download_url":"https://codeload.github.com/mrgian/felix/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251035148,"owners_count":21526309,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootloader","kernel","operating-system","os","rust"],"created_at":"2024-08-02T07:00:54.631Z","updated_at":"2025-04-26T18:30:43.075Z","avatar_url":"https://github.com/mrgian.png","language":"Rust","funding_links":[],"categories":["General Operating System","Rust"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"https://github.com/mrgian/felix/assets/10211171/5b3ee648-1886-4727-9d05-cedb53fc828e\" height=150\u003e\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eFelix OS\u003c/h1\u003e\n\u003ch3 align=\"center\"\u003e\nx86 operating system\n\u003c/h3\u003e\n\n## Description\n\nFelix is an experimental operating system for the Intel IA-32 architecture (x86).\n\nIt's **written completely from scratch** in Rust and doesn't use any external dependencies.\n\nThis 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).\n\n## Pictures\nFelix running in QEMU:\u003cbr\u003e\n\n![felix_qemu](https://github.com/mrgian/felix/assets/10211171/b371934e-0ac7-40e6-a965-e42bf9e24e86)\n\n![felix_qemu](https://github.com/mrgian/felix/assets/10211171/a01652f4-f199-4544-9f15-b2cd1962df1d)\n\nFelix running on real hardware:\u003cbr\u003e\n![felix_real](https://user-images.githubusercontent.com/10211171/230796141-b2c62d63-5c4e-4d8b-a9ee-3669bdee48b0.jpg)\n\n## Features\n\n### Bootloader\n- boots (you don't say!)\n- BIOS compatible (also works on UEFI with CSM enabled)\n- Global Descriptor Table loading\n- Unreal Mode switching (to use 32bit addresses in 16bit Real Mode)\n- kernel copying from disk to protected memory\n- 32bit Protected Mode switching\n- kernel jumping\n\n### Kernel\n- Interrupt Descriptor Table loading\n- CPU exceptions handler\n- Programmable Interrupt Controller driver\n- keyboard driver\n- ATA disk driver\n- FAT16 filesystem file read\n- timer interrupt driven CPU scheduler\n- prints system call that writes to VGA text buffer \n- task manager\n- round robin CPU scheduler\n\n### Shell\nAvailable commands:\n- **help** shows available commands\n- **ls** lists root directory entries\n- **cat \u003cfilename\u003e** displays content of a file\n- **test \u003ca,b,c\u003e** runs a dummy task\n- **run \u003cfile\u003e** loads file as task and adds it to the task list\n- **ps** lists running tasks\n- **rt \u003cid\u003e** removes specified task\n\n### libfelix (standard library)\n- print! macro able to print formatted text to screen\n\n## Building\n\nYou can download a pre-built image or you can build it by yourself using Docker.\n\n### Download pre-built image\n[![build](https://github.com/mrgian/felix/actions/workflows/docker.yml/badge.svg)](https://github.com/mrgian/felix/actions)\n\nA build is made for every commit.\n\nTo download the latest build click on the badge above, then click on the most recent build and download the artifact.\n\n### Build using Docker\nFirst make sure you have Docker installed. Then:\n\n1. Clone the repo `git clone https://github.com/mrgian/felix`\n2. Change dir to repo `cd felix`\n3. Build the image `docker build -t felix-image .`\n4. Run the container `docker run --name felix-container felix-image`\n5. Copy build from container to host `docker cp felix-container:/root/felix/build .`\n\n### Build on MacOS/Linux\nMake sure you have `rustup`,`mtools`,`dosfstools` and `fdisk` installed on your system, in any case makefile script\nwill try to install them for you.\n\n```zsh\ngit clone https://github.com/mrgian/felix\ncd felix\nmake all\n```\n\n## Running\nThe final disk image is `build/disk.img`\n\n```zsh\nmake run\n```\n\nOr 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.\n\n## Progress\n- *22/10/22* - Project start\n- *27/01/23* - Bootloader can print to screen\n- *31/01/23* - Bootloader can read data from disk to memory\n- *01/02/23* - Bootloader can load kernel to memory\n- *27/02/23* - Moved to Rust environment using inline assembly\n- *01/03/23* - Rewritten kernel loading code in Rust\n- *08/03/23* - Implemented println macro\n- *20/03/23* - Switch to 32bit protected mode\n- *29/03/23* - Basic CPU exception handler\n- *30/03/23* - PIC driver\n- *06/04/23* - keyboard driver\n- *07/04/23* - start working on shell\n- *08/04/23* - ATA disk driver\n- *09/04/23* - FAT filesystem file read\n- *26/04/23* - CPU scheduler\n- *13/05/23* - prints system call\n- *13/05/23* - println! macro in standard library\n- *30/06/23* - multitasking finally working\n\n## Roadmap\nThe following features are planned to be added sooner or later:\n - paging\n - memory allocator\n - VESA video driver\n - networking\n - SATA AHCI disk driver\n - graphical user interface\n\n## Credits\nThis project is entirely developed by [**Gianmatteo Palmieri**](https://gian.im)\u003cbr\u003e\nLogo design by [**Veronica Grana**](https://www.instagram.com/_.veronica_grana._)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrgian%2Ffelix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmrgian%2Ffelix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmrgian%2Ffelix/lists"}