A short note on how LLMs are used in this project, because they show up in the commit history and I’d rather be upfront about it than have people guess.
LLMs are a power tool here — boilerplate generator, rubber duck,
search engine with context. They are not the author. Every design
decision, every architectural choice, every “why is it shaped this
way” answer comes from me. If you ask me on the spot how the
scheduler reaper handles a dead task’s page directory or why
shell_exec_elf stashes exec_params on task_t instead of a
shared global, I can tell you, because I designed it and debugged
it. The LLM helped me type it faster.
I’ve been writing OS code long enough to know what I’m doing. Medli is my previous OS project — a managed-code (COSMOS / C#) hobby OS that I built from the ground up. Makar is the bare-metal C/asm successor: same designer, different language, different goals (closer to Linux ABI, real ring-3, real preemption, eventual self-hosting).
That history matters because it sets the bar for what counts as
“understanding”. I’m not learning paging from an LLM. I’m not
asking it what an IDT is. The kernel internals — GDT/IDT layout,
paging at 4 MiB and 4 KiB granularity, ring transitions via iret,
the Multiboot 2 handoff, FAT32 cluster chains, IDE PIO — all of
that lives in my head, not in a chat window.
shell_exec_elf needs a per-task heap-allocated params struct,
writing the actual kmalloc / strncpy / kfree plumbing is
mechanical. An LLM can produce that in seconds with a clear
enough prompt.CS=0x3F8” and I already suspect a races-and-
globals problem in the exec path, talking through the suspect
code path with an LLM is faster than staring at it alone. The
fix is still mine to choose.sendkey pacing, the decision to run iso-test + ui-test
before every PR — designed and tuned by me, based on which
classes of regression have actually bitten this project.iso-test and ui-test. If something regresses, I
debug it. Sometimes the LLM helps me think through the trace;
the diagnosis is still mine to make.Co-Authored-By: Claude trailers, no “Generated with Claude
Code” footers. The code is mine to maintain, so it ships under
my name.Makar is not unusual in this. By 2026, LLM assistance is openly common across the hobby OS landscape — the question has shifted from “is anyone using these” to “how honestly are they being used”.
A few patterns I’ve seen in other projects:
-ffreestanding,
-nostdlib, and a custom linker script actually do.OSDev sits in a useful spot for LLMs: well-documented public specs, small self-contained projects, decades of prior-art on the wiki and in Linux/BSD source. That makes the assistance genuinely useful for people who already understand the field. It also makes it easy to generate plausible-looking nonsense for people who don’t. Both ends of that spectrum exist in public hobby OS work today; this project tries to be honest about which end it sits on.
Open-source hobby OS projects attract scrutiny, and “did an AI write this” is a fair question to ask in 2026. The honest answer is: I drove every design decision, I understand every subsystem, I can defend every trade-off — and yes, I used LLMs as a fast typewriter and a 24/7 rubber duck. Both things are true. Treating that as embarrassing would be silly; treating it as “the AI built my OS” would be a lie.
If something in this repo doesn’t make sense, open an issue. You’ll get an answer from me, not from a model.