{"id":22624666,"url":"https://github.com/barrettotte/enki-os","last_synced_at":"2025-04-11T03:07:04.283Z","repository":{"id":114090364,"uuid":"405753651","full_name":"barrettotte/enki-os","owner":"barrettotte","description":"A basic x86 kernel to learn how operating systems get from BIOS to userland","archived":false,"fork":false,"pushed_at":"2022-05-01T16:11:44.000Z","size":230,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-25T00:51:12.511Z","etag":null,"topics":["hobby-kernel","operating-system","os-kernel","x86-kernel"],"latest_commit_sha":null,"homepage":"","language":"C","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/barrettotte.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}},"created_at":"2021-09-12T21:07:16.000Z","updated_at":"2025-01-08T18:09:50.000Z","dependencies_parsed_at":"2023-06-12T13:45:28.874Z","dependency_job_id":null,"html_url":"https://github.com/barrettotte/enki-os","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrettotte%2Fenki-os","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrettotte%2Fenki-os/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrettotte%2Fenki-os/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barrettotte%2Fenki-os/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/barrettotte","download_url":"https://codeload.github.com/barrettotte/enki-os/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248333603,"owners_count":21086200,"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":["hobby-kernel","operating-system","os-kernel","x86-kernel"],"created_at":"2024-12-09T00:17:18.793Z","updated_at":"2025-04-11T03:07:04.268Z","avatar_url":"https://github.com/barrettotte.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# enki-os\n\nA basic x86 kernel to learn how operating systems get from BIOS to userland.\n\nThis is my first dive into the deep world of operating systems. \nI hope to make another kernel in the future using the things I learned here. \nThis one still needs a lot of love and care it probably won't get.\n\nNamed after [Enki](https://en.wikipedia.org/wiki/Enki), \nSumerian god of water, knowledge, crafts, and creation. \n\n## Features / Goals\n\n- [x] Custom bootloader\n- [x] FAT-16 file system (except `fwrite`)\n- [x] PS/2 keyboard driver\n- [x] Static ELF file loading\n- [x] Partial LibC\n- [x] Process create/manage via TSS\n- [x] Userland with basic shell\n- [x] Basic Multitasking (timer based)\n\n![docs/enki-test.png](docs/enki-test.png)\n\n## Building Locally\n\n- Install dependencies and build cross compiler: `make toolchain`\n- Build OS image: `make`\n- Build OS image and launch in QEMU: `make qemu`\n- Build OS image and launch with GDB connected to QEMU: `make debug`\n\n## TODO Items\n\n- Proper trapping/exception handling\n- Shift key\n- Scrolling terminal\n- Cursor support\n- Clear terminal\n- Init Floating Point Unit (FPU)\n- Reboot command\n- ACPI\n- PC speaker support\n- Terminal color support\n- Abstraction over PIC\n- Abstraction over timer\n- Gather system info and print on startup (memory, timer, etc)\n- Stack smash protector\n- Multiboot header\n- Dockerfile with toolchain installed? Github action?\n\n## Limitations\n\n- Lazy A20 line enable; Could potentially fail on some systems\n- Memory fragmentation\n- Only one drive supported (master - drive 0)\n- Missing FAT16 write\n- ELF file loading loads entire file into heap memory...\n- Only supports loading static ELF files\n- Simple multitasking via timer\n- Limited process control (no fork or exec)\n- No threading\n- Probably a lot more I'm forgetting...\n\n## References\n\n- [OSDev.org](https://wiki.osdev.org/Main_Page)\n- [BrokenThorn OS Dev](http://www.brokenthorn.com/Resources/OSDevIndex.html)\n- [x86 and amd64 instruction set](https://www.felixcloutier.com/x86/)\n- [Ralf Brown Interrupt List](https://www.ctyme.com/rbrown.htm)\n- [Operating Systems: Three Easy Pieces](https://pages.cs.wisc.edu/~remzi/OSTEP/)\n- [Little Book About OS Development](https://littleosbook.github.io/)\n- [PC Interrupts: A Programmer's Reference to BIOS, DOS, and Third-Party Calls](https://www.amazon.com/PC-Interrupts-Programmers-Reference-Third-Party/dp/0201624850)\n- [Executable and Linkable Format (ELF)](https://refspecs.linuxfoundation.org/elf/elf.pdf)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarrettotte%2Fenki-os","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbarrettotte%2Fenki-os","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarrettotte%2Fenki-os/lists"}