{"id":19086344,"url":"https://github.com/ugurkantech/kernarch","last_synced_at":"2025-10-16T02:34:32.228Z","repository":{"id":244683063,"uuid":"805915837","full_name":"UgurkanTech/Kernarch","owner":"UgurkanTech","description":"A WIP minimalistic OS kernel. Built with NASM, operates in 32-bit protected mode. ISO images built on Docker and tested with QEMU.","archived":false,"fork":false,"pushed_at":"2024-11-26T21:11:45.000Z","size":475,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-30T14:51:14.404Z","etag":null,"topics":["assembly-x86","docker","nasm","operating-system","osdev","qemu"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/UgurkanTech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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":"2024-05-25T20:47:37.000Z","updated_at":"2024-11-26T21:11:49.000Z","dependencies_parsed_at":null,"dependency_job_id":"06b66b27-3e86-4670-a6dc-e0ddb06f53e0","html_url":"https://github.com/UgurkanTech/Kernarch","commit_stats":null,"previous_names":["ugurkantech/kernarch"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UgurkanTech%2FKernarch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UgurkanTech%2FKernarch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UgurkanTech%2FKernarch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/UgurkanTech%2FKernarch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/UgurkanTech","download_url":"https://codeload.github.com/UgurkanTech/Kernarch/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249493855,"owners_count":21281629,"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":["assembly-x86","docker","nasm","operating-system","osdev","qemu"],"created_at":"2024-11-09T02:59:06.973Z","updated_at":"2025-10-16T02:34:32.180Z","avatar_url":"https://github.com/UgurkanTech.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kernarch - created by Uğurkan Hoşgör\n\nThis is a work-in-progress operating system Micro-kernel being developed with a specific purpose in mind. As part of an ongoing journey in OS development, it's a creative playground where new concepts and skills are discovered.\n\nTo streamline the build process, Docker is used to compile the kernel and create .iso images. This approach ensures a consistent and isolated environment, making the development process more efficient and reproducible.\n\n![demo](https://github.com/user-attachments/assets/6b1ab207-2349-41b5-b5cf-1bab8387feac)\n\n## Current Features\n\nProject Status: [■■■■■■■■■■■■---------------------] 60% Complete\n\n\n| **Feature**                              | **Status**          |\n|------------------------------------------|---------------------|\n| GRUB Bootloader                          | ✔️   |\n| 32-bit Protected Mode                    | ✔️   |\n| Global Descriptor Table (GDT)            | ✔️   |\n| C Runtime Integration                    | ✔️   |\n| Basic Memory Management                  | ✔️   |\n| Interrupt Handling                       | ✔️   |\n| VGA Display Features                     | ✔️   |\n| Keyboard Handling                        | ✔️   |\n| Shell Implementation                     | ✔️   |\n| PIC (Programmable Interrupt Controller)  | ✔️   |\n| IDT (Interrupt Descriptor Table)         | ✔️   |\n| ISRs (Interrupt Service Routines)        | ✔️   |\n| Paging                                   | ✔️   |\n| User Mode                                | ✔️   |\n| Process Scheduling                       | ✔️   |\n| System Calls                             | ✔️   |\n| Multitasking Support                     | ✔️   |\n| C Standard Library                       | ❌   |\n| VirtIO Network Driver                    | ❌   |\n| VirtIO Block Driver                      | ❌   |\n| IDE Drivers                              | ❌   |\n| Graphical User Interface (GUI)           | ❌   |\n\n\n\n- ✔️ = Completed  \n- 🟡 = In Progress (Implemented but not functional)  \n- ❌ = Not Implemented (Upcoming features)\n\nThis adds clarity and a visual distinction to the project's status for users.\n\n## Building ISO with Docker and testing with QEMU\n\nThe ISO is built using Docker and upon successful completion, the ISO file will be created in the output directory. To initiate the process, the start.sh script is run.\n\n```bash\n./build.sh\n```\n\nOnce the ISO is built, it will be tested using QEMU. Please ensure QEMU is installed on your host machine. \n\n\n## Testing with Qemu\n\nTo test purposes, use QEMU. Run the assembled kernel binary with the following command:\n\n```bash\nqemu-system-x86_64 -m 1G -netdev user,id=mynet0 -device rtl8139,netdev=mynet0 -cdrom KernarchOS.iso -drive file=disk.img,format=raw,if=ide,index=0\n```\n\n## Creating an Empty Disk Image\n\nTo create a 512MB empty hard disk image, use the following command:\n\n```bash\nqemu-img create -f raw disk.img 512M \n```\n\n## Manuel building and linking\n\nManual building and linking is not recommended. However, if needed, the assembly can be done with NASM and the compilation with GCC as shown below:\n\n```bash\n# Assemble with NASM\nnasm -f elf32 boot.asm -o boot.o\n\n# Compile with GCC\ngcc -m32 -c kernel.cpp -o kernel.o\n\n# Link with ld\nld -m elf_i386 -T link.ld -o kernel.bin boot.o kernel.o\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fugurkantech%2Fkernarch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fugurkantech%2Fkernarch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fugurkantech%2Fkernarch/lists"}