{"id":21049712,"url":"https://github.com/namberino/sora","last_synced_at":"2026-02-25T11:36:18.599Z","repository":{"id":237944888,"uuid":"795545801","full_name":"namberino/sora","owner":"namberino","description":"A mini hobby operating system","archived":false,"fork":false,"pushed_at":"2024-09-20T02:03:05.000Z","size":2384,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-29T10:38:22.543Z","etag":null,"topics":["assembly-x86","c","operating-system","os"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/namberino.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,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-05-03T14:09:35.000Z","updated_at":"2024-09-20T02:03:09.000Z","dependencies_parsed_at":"2024-05-09T07:45:42.944Z","dependency_job_id":"fb06cb09-4e61-4083-b813-5a642f9fd28e","html_url":"https://github.com/namberino/sora","commit_stats":null,"previous_names":["namberino/os-dev","namberino/sora-os","namberino/sora"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/namberino/sora","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/namberino%2Fsora","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/namberino%2Fsora/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/namberino%2Fsora/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/namberino%2Fsora/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/namberino","download_url":"https://codeload.github.com/namberino/sora/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/namberino%2Fsora/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29819405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T05:36:42.804Z","status":"ssl_error","status_checked_at":"2026-02-25T05:36:31.934Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["assembly-x86","c","operating-system","os"],"created_at":"2024-11-19T15:14:15.816Z","updated_at":"2026-02-25T11:36:18.546Z","avatar_url":"https://github.com/namberino.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sora: A mini hobby operating system\n\nSora is a small operating system with a small bootloader and a small kernel. Currently, Sora has a simple shell with 4 different commands, drivers for keyboard, display, and speaker, interrupts, and simple memory management. \n\nThis project was started in January 2024. At the time, I had finished an operating system class a few semesters ago but it was a lot of theory. After that class, I didn't feel like I truely understand operating system and how they work. So I decided to try to make my own operating system to get more practical experience and a deeper understanding of OS development. That's why I started this project.\n\nThis is a big learning project for me so the code is somewhat messy. I've documented everything quite throughly so if you want to, you can go through the code and learn more about operating system development.\n\n![qemu emulation](img/sora-qemu.png)\n\n# Requirements\n\nBefore you can compile this, you need to install some tools and libraries first:\n\n- [NASM](https://www.nasm.us/)\n- [QEMU](https://www.qemu.org/)\n- [i386-elf-toolchain](https://github.com/nativeos/i386-elf-toolchain/releases)\n- [binutils](https://www.gnu.org/software/binutils/)\n- [gmp](https://gmplib.org/)\n- [mpfr](https://www.mpfr.org/)\n\nYou need to change the i386 compiler and i386 debugger paths in [Makefile](Makefile) to the path of your i386 compiler and debugger on your system:\n```\nCC = PATH_TO_i386_COMPILER # change this to path to your i386 compiler\nGDB = PATH_TO_i386_DEBUGGER # change this to path to your i386 gdb\n```\n\n# Project structure\n\n```\nsora\n├─ boot\n│  ├─ bootsector.asm\n│  ├─ disk.asm\n│  ├─ enter32.asm\n│  ├─ gdt.asm\n│  ├─ kernel-entry.asm\n│  ├─ print-hex.asm\n│  ├─ print.asm\n│  └─ print32.asm\n├─ cpu\n│  ├─ hlt.c\n│  ├─ hlt.h\n│  ├─ idt.c\n│  ├─ idt.h\n│  ├─ int.asm\n│  ├─ isr.c\n│  ├─ isr.h\n│  ├─ paging.c\n│  ├─ paging.h\n│  ├─ ports.c\n│  ├─ ports.h\n│  ├─ registers.h\n│  ├─ timer.c\n│  ├─ timer.h\n│  └─ type.h\n├─ drivers\n│  ├─ keyboard.c\n│  ├─ keyboard.h\n│  ├─ screen.c\n│  ├─ screen.h\n│  ├─ speaker.c\n│  └─ speaker.h\n├─ kernel\n│  ├─ kernel.c\n│  └─ kernel.h\n├─ libc\n│  ├─ boolean.h\n│  ├─ function.h\n│  ├─ mem.c\n│  ├─ mem.h\n│  ├─ string.c\n│  └─ string.h\n```\n\n| Directory | Description |\n| --- | --- |\n| [boot](boot) | Bootsector code |\n| [cpu](cpu) | CPU dependent code like IDT, ISR, etc |\n| [drivers](drivers) | Hardware drivers |\n| [kernel](kernel) | Main kernel code |\n| [libc](libc) | Custom standard library |\n\n# Useful commands\n\n| Commands | Description |\n| --- | --- |\n| `make` | Compile |\n| `make run` | Compile and run|\n| `make debug` | Run and debug in GDB |\n| `make clean` | Remove object and binary files |\n\n# Milestones\n\n- [x] Simple bootloader in 16-bit real mode\n- [x] Accessing the disk\n- [x] Program the GDT\n- [x] Switch to 32-bit protected mode\n- [x] Simple kernel\n- [x] Video driver\n- [x] Interrupt Descriptor Table\n- [x] Parse user input\n- [x] Memory allocator\n\n# Documentation\n\nYou can find all the documentations in this [directory](docs). I've also added detailed explanation comments for most of the code so you can understand the code by reading it.\n\n# References\n\n- [Bootsector mini projects](https://github.com/namberino/bootsector-projects)\n- [OSDev Wiki](https://wiki.osdev.org/Main_Page) (Main resource)\n- [University of Birmingham's os-dev.pdf](https://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf)\n- [The little book about OS development](https://littleosbook.github.io/)\n- [Intel 64 and IA-32 Architectures Software Developer’s Manual](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnamberino%2Fsora","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnamberino%2Fsora","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnamberino%2Fsora/lists"}