{"id":625405,"date":"2026-01-16T15:05:04","date_gmt":"2026-01-16T13:05:04","guid":{"rendered":"https:\/\/mybroadband.co.za\/news\/?p=625405"},"modified":"2026-01-16T15:51:59","modified_gmt":"2026-01-16T13:51:59","slug":"university-student-vibe-codes-an-entire-operating-system-from-scratch","status":"publish","type":"post","link":"https:\/\/mybroadband.co.za\/news\/software\/625405-university-student-vibe-codes-an-entire-operating-system-from-scratch.html","title":{"rendered":"University student vibe-codes an entire operating system from scratch"},"content":{"rendered":"\n<p>A computer engineering student has produced an operating system using the latest version of Anthropic\u2019s Claude large language model that boots on real ARM64-based hardware and an emulator.<\/p>\n\n\n\n<p>\u201cVibeOS runs in QEMU aarch64 and Raspberry Pi Zero 2W. It browses the web, runs Doom, and has a C compiler and Python,\u201d explains Kaan \u015eenol, a student at the Polytechnic University of Turin in Italy.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>\u201cIn 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,\u201d he said.<\/p>\n\n\n\n<p>\u015eenol told MyBroadband that he used the Claude Max 5x plan for $100 (R1,640) and Gemini Pro, which was free for students.<\/p>\n\n\n\n<p>The entire operating system was created with Claude over 64 sessions, with the sessions documented in files contained in the <a href=\"https:\/\/github.com\/kaansenol5\/VibeOS\">VibeOS GitHub repository<\/a>.<\/p>\n\n\n\n<p>This kind of AI-assisted software development is sometimes called \u201cvibe coding\u201d. The term was coined by Andrej Karpathy, a co-founder of OpenAI and former AI leader at Tesla.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>Under this strict definition, \u015eenol said his experiment was not pure vibe-coding. \u201cTo be able to make this, you still need to have a general idea of what a computer is and what is going on,\u201d he said.<\/p>\n\n\n\n<p>\u201cAI is not that good. But still, I don\u2019t know systems development and I did not write any code at all. It was mostly breaking things up into smaller steps for Claude.\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">AI needs a pep-talk<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1275\" height=\"830\" src=\"https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-desktop.jpg\" alt=\"\" class=\"wp-image-625408\" srcset=\"https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-desktop.jpg 1275w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-desktop-600x391.jpg 600w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-desktop-1200x781.jpg 1200w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-desktop-768x500.jpg 768w\" sizes=\"(max-width: 1275px) 100vw, 1275px\" \/><figcaption class=\"wp-element-caption\">The VibeOS desktop<\/figcaption><\/figure>\n\n\n\n<p>\u015eenol said Claude generally falls into certain patterns of failure with this level of project difficulty, and you need to notice and catch them.<\/p>\n\n\n\n<p>\u201cThe 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,\u201d he said.<\/p>\n\n\n\n<p>\u201cMy 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.\u201d<\/p>\n\n\n\n<p>Claude.md is a text file that the large language model automatically pulls into context when starting a conversation.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>\u015eenol said the inadvertently created session logs were especially useful to motivate Claude to tackle a scary feature. \u201cIt could read a few of the session logs, get impressed by the project and work harder.\u201d<\/p>\n\n\n\n<p>\u015eenol said that motivating the large language model to do the work was a real thing and that everyone should do it.<\/p>\n\n\n\n<p>\u201cAI agents work better in already created, pretty large codebases; otherwise, they fall back into \u2018demo\u2019 mode where they make garbage things from the first episode of a YouTube tutorial series,\u201d he said.<\/p>\n\n\n\n<p>\u201cYou need to impress it to get better results. This is less necessary for building iOS apps and more necessary for VibeOS. It\u2019s also not a bulletproof solution, but it worked well.\u201d<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>\u201cThen you tell it, \u2018See, you built all this, you can make a browser, an OS is harder than a browser,\u2019\u201d he explained.<\/p>\n\n\n\n<p>\u201cThe irony is when you vibe-code it, the browser is harder than the OS because you need to parse one million things, and that\u2019s why the VibeOS browser sucks, but the technique is useful.\u201d<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Using Gemini to explain bugs to Claude<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1284\" height=\"833\" src=\"https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-browser-and-sysmon.jpg\" alt=\"\" class=\"wp-image-625407\" srcset=\"https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-browser-and-sysmon.jpg 1284w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-browser-and-sysmon-600x389.jpg 600w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-browser-and-sysmon-1200x779.jpg 1200w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-browser-and-sysmon-768x498.jpg 768w\" sizes=\"(max-width: 1284px) 100vw, 1284px\" \/><figcaption class=\"wp-element-caption\">VibeOS browser and system monitor<\/figcaption><\/figure>\n\n\n\n<p>Another technique \u015eenol used was to use Google\u2019s Gemini large language model to help Claude understand and fix bugs.<\/p>\n\n\n\n<p>\u201cWhen debugging, looking at multiple files that are potentially bigger than Claude\u2019s context window is necessary,\u201d he explained.<\/p>\n\n\n\n<p>\u201cFor 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.\u201d<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/yamadashy\/repomix\">Repomix<\/a> 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.<\/p>\n\n\n\n<p>\u015eenol said he no longer wanted to work on VibeOS, but that he was fairly satisfied with how the experiment played out.<\/p>\n\n\n\n<p>\u201cThe 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,\u201d he said.<\/p>\n\n\n\n<p>\u201cCurrently, 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.\u201d<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>\u015eenol 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.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Think Different<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1275\" height=\"830\" src=\"https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-DOOM.jpg\" alt=\"\" class=\"wp-image-625409\" srcset=\"https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-DOOM.jpg 1275w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-DOOM-600x391.jpg 600w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-DOOM-1200x781.jpg 1200w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-DOOM-768x500.jpg 768w\" sizes=\"(max-width: 1275px) 100vw, 1275px\" \/><figcaption class=\"wp-element-caption\">VibeOS running DOOM. It didn&#8217;t run well, but it ran.<\/figcaption><\/figure>\n\n\n\n<p>While \u015eenol\u2019s experiment demonstrates how capable AI software development assistants have become, it also highlights their limitations.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>Large language models can significantly boost productivity, but they also do not completely negate the tedious work of finding and fixing bugs.<\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>The expectation shouldn\u2019t 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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">More VibeOS screenshots<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1275\" height=\"830\" src=\"https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-terminal.jpg\" alt=\"\" class=\"wp-image-625410\" srcset=\"https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-terminal.jpg 1275w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-terminal-600x391.jpg 600w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-terminal-1200x781.jpg 1200w, https:\/\/mybroadband.co.za\/news\/wp-content\/uploads\/2026\/01\/VibeOS-terminal-768x500.jpg 768w\" sizes=\"(max-width: 1275px) 100vw, 1275px\" \/><figcaption class=\"wp-element-caption\">VibeOS terminal windows<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>VibeOS was produced by a computer engineering student using the latest version of Anthropic&#8217;s Claude large language model.<\/p>\n","protected":false},"author":15,"featured_media":625406,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_sma_x_autopost_status":"idle","_sma_x_autopost_error":"","_sma_x_post_id":"","_sma_facebook_post_id":"","_sma_instagram_post_id":"","_sma_threads_post_id":"","_sma_x_attempts":0,"footnotes":""},"categories":[92837,16],"tags":[102894,102896,102895,102897,8043,34191,102893],"class_list":["post-625405","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-software","tag-kaan-senol","tag-politecnico-di-torino","tag-polytechnic-university-of-turin","tag-qemu","tag-raspberry-pi","tag-raspberry-pi-zero","tag-vibeos"],"_links":{"self":[{"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/posts\/625405"}],"collection":[{"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/comments?post=625405"}],"version-history":[{"count":2,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/posts\/625405\/revisions"}],"predecessor-version":[{"id":625412,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/posts\/625405\/revisions\/625412"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/media\/625406"}],"wp:attachment":[{"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/media?parent=625405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/categories?post=625405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mybroadband.co.za\/news\/wp-json\/wp\/v2\/tags?post=625405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}