University student vibe-codes an entire operating system from scratch
A computer engineering student has produced an operating system using the latest version of Anthropic’s Claude large language model that boots on real ARM64-based hardware and an emulator.
“VibeOS runs in QEMU aarch64 and Raspberry Pi Zero 2W. It browses the web, runs Doom, and has a C compiler and Python,” explains Kaan Şenol, a student at the Polytechnic University of Turin in Italy.
MyBroadband tested VibeOS using QEMU, and it works as advertised, albeit with significant caveats. Still, one person producing a functional OS with a graphical shell in a month is impressive.
“In real-world time, it took about a month, but I took many breaks. If I worked on it every day, it would have taken roughly two weeks. You can also see this in the git logs,” he said.
Şenol told MyBroadband that he used the Claude Max 5x plan for $100 (R1,640) and Gemini Pro, which was free for students.
The entire operating system was created with Claude over 64 sessions, with the sessions documented in files contained in the VibeOS GitHub repository.
This kind of AI-assisted software development is sometimes called “vibe coding”. The term was coined by Andrej Karpathy, a co-founder of OpenAI and former AI leader at Tesla.
However, the strictest definitions of vibe coding state that the developer neither reviews nor manually edits the code, relying solely on AI tools to evaluate and improve it.
Under this strict definition, Şenol said his experiment was not pure vibe-coding. “To be able to make this, you still need to have a general idea of what a computer is and what is going on,” he said.
“AI is not that good. But still, I don’t know systems development and I did not write any code at all. It was mostly breaking things up into smaller steps for Claude.”
AI needs a pep-talk

Şenol said Claude generally falls into certain patterns of failure with this level of project difficulty, and you need to notice and catch them.
“The biggest problem with a project like this is managing the context window. AI will forget about the scope of the project, or what the project even is about, occasionally,” he said.
“My initial idea was updating claude.md every run, but Claude turned that into a formatted session log inside claude.md, which is why the session logs exist. They served well.”
Claude.md is a text file that the large language model automatically pulls into context when starting a conversation.
Although Anthropic states that there is no required format for the file, it suggests using it to document core files and utility functions, code style guidelines, and testing instructions.
Şenol said the inadvertently created session logs were especially useful to motivate Claude to tackle a scary feature. “It could read a few of the session logs, get impressed by the project and work harder.”
Şenol said that motivating the large language model to do the work was a real thing and that everyone should do it.
“AI agents work better in already created, pretty large codebases; otherwise, they fall back into ‘demo’ mode where they make garbage things from the first episode of a YouTube tutorial series,” he said.
“You need to impress it to get better results. This is less necessary for building iOS apps and more necessary for VibeOS. It’s also not a bulletproof solution, but it worked well.”
He said the main motivational method was being nice to the assistant and having it read a bunch of irrelevant code or the session logs at the start of the session to understand how cool the project is.
“Then you tell it, ‘See, you built all this, you can make a browser, an OS is harder than a browser,’” he explained.
“The irony is when you vibe-code it, the browser is harder than the OS because you need to parse one million things, and that’s why the VibeOS browser sucks, but the technique is useful.”
Our experience with the browser confirmed that it does, indeed, suck. Although it could download and display plaintext webpages, any modern website would cause the whole OS to crash.
Using Gemini to explain bugs to Claude

Another technique Şenol used was to use Google’s Gemini large language model to help Claude understand and fix bugs.
“When debugging, looking at multiple files that are potentially bigger than Claude’s context window is necessary,” he explained.
“For this, I repomixed a bunch of files in subfolders and asked Gemini to find out the reason why the code was not working, and explain it in English for Claude to fix.”
Repomix is a tool that packs an entire code repository into a single, AI-friendly file specifically for feeding whole codebases into different large language models.
Şenol said he no longer wanted to work on VibeOS, but that he was fairly satisfied with how the experiment played out.
“The initial goal was to make a non-graphical OS with things like Snake and Tetris, but I wanted to see how much further it could go, and the scope crept up,” he said.
“Currently, it has a bunch of coreutils [core Linux programs], Python, a browser made in Python, a C compiler, a code editor, Doom, an image viewer, and a music player.”
VibeOS only has USB and SD card drivers on the Raspberry Pi, so networking only works in QEMU. The OS has no memory protection and no system calls, meaning any program can do anything.
Şenol said that things which were difficult and took a long time were the USB driver, making VibeOS run fast on the Raspberry Pi, including enabling D-Cache.
There were also several features for Raspberry Pi that were too difficult and which he could not get working in time, such as Wi-Fi support, a GPU driver, and HDMI Audio.
Think Different

While Şenol’s experiment demonstrates how capable AI software development assistants have become, it also highlights their limitations.
Producing an entire, functional operating system in a few weeks is incredible, so long as developers also understand that agentic coding tools will not generate perfect or even good code.
Large language models can significantly boost productivity, but they also do not completely negate the tedious work of finding and fixing bugs.
There is a significant gap between a functional prototype and software that is ready for public use. However, agentic coding tools can also help with this.
The expectation shouldn’t be that an agentic AI will produce perfect code. Instead, they iterate over their work, just as a human developer would, to identify and fix problems in the codebase.
More VibeOS screenshots
