Skip to main content

Building a ring-native OS with Claude

I've hacked around in SerenityOS from time to time, mostly to familiarize myself with the basics of an operating system.

I've found the code incredibly readable. Even a simple web developer like myself can understand most things. It is not cluttered by macros and has limited CPU architecture support, which to me is a huge plus since it makes the codebase less intimidating.

Inspired by it, I wondered how hard it would be to build my own kernel. Well, it is hard of course, to make something actually useful, but what if i strictly focus on the basics?

Turns out, not too hard. With Claude that is.

I had a few ideas on what I would like to accomplish. Besides the kernel basics like your allocators, MMUs, interrupt handling, schedulers, I was really interested in learning one thing specifically. That is io_uring. I wanted to build a kernel that would largely avoid sync system calls and instead borrow the ideas from io_uring for all user-space I/O operations.

I also did not want to implement fork or execv. I wanted to spawn new processes via the ring, so creating new processes is async as well. I wanted to avoid creating system calls for as many operations as possible.

It turned out that, building this simple ring-based ABI was not too hard for Claude at all. It took one Saturday to build a reasonable version that had all of this working.

While Claude did all the typing, I wanted to stay very much in control and approve and understand every decision and design choice. Also in here, Claude was very useful. You can endlessly question it with detailed reasoning and explanations of common patterns.

I was also positively surprised how well Claude could write ARM64 instructions. It literally zero-shotted almost everything. Having said that, I kept the ARM developer guide nearby to make sure I was keeping track (well... at least I like to say that to myself) of what was going on. It did not do the copy_to_user quite right (failed to use STTRB unprivileged store, skipping permission check) but those were a few omissions I could clearly see were wrong. Of course, I am no kernel expert.

Not sure how much further I will go on with this. It is an extremely rewarding and interesting project to work on though. It feels genuinely surreal to build something very low-level with a coding agent. The layers of abstraction could not be further apart.

https://github.com/jjylik/jatuli



 

Comments

Popular posts from this blog

Bird is causing high CPU on my macOS

There is no lack of people complaining about MacOS Tahoe, mostly about rounded corners and inconsistent design decisions. I have not paid that much attentention to that, but there is one mac bug i have paid attention to. It hasn't been a visual or ux but rather few system processes pegging the CPU. trustd , alongside with ecosystemd and ecosystemanalyticsd all reported high CPU usage. I can't exactly recall when this started, it might have predated my Tahoe upgrade but anyway, the trio of processes all had high CPU usage. Sure, it may have been the virtual efficiency cores and whether it affeced battery life or slowed down other processes i don't know to be hon...

I'm not a passionate developer

A family friend of mine is an airlane pilot. A dream job for most, right? As a child, I certainly thought so. Now that I can have grown-up talks with him, I have discovered a more accurate description of his profession. He says that the truth about the job is that it is boring. To me, that is not that surprising. Airplanes are cool and all, but when you are in the middle of the Atlantic sitting next to the colleague you have been talking to past five years, how stimulating can that be? When he says the job is boring, it is not a bad kind of boring. It is a very specific boring. The "boring" you would want as a passenger. Uneventful.  Yet, he loves his job. According to him, an experienced pilot is most pleased when each and every tiny thing in the flight plan - goes according to plan. Passengers in the cabin of an expert pilot sit in the comfort of not even noticing who is flying. As someone employed in a field where being boring is not exactly in high demand, this sounds pro...

How my work has changed in the past few years

When I started at my current job 3ish years ago, we had nothing but a few PowerPoint slides and a Figma prototype. I recall talking with one of the founders, whom I had worked with some 10 years ago, and pointing out that the very next step after PowerPoint and Figma was still the same as it had always been: translating those slides and mockups into CRUDs, forms, and other basic building blocks. Sure, all the new fancy tools and frameworks (we had jQuery then) help, but I still had to tinker with very basic primitives like tables and forms. I could not just say, "here is a table, here is a form." Well, yes, technically I could, but I still needed to write a lot of code to make a working form or table. This was around the time of GPT-3, Copilot beta, and very early Cursor. I did attempt to use them, but they could only perform very basic tasks and were pretty much useless for frontend work. We, being one of the first-wave "ChatGPT wrapper" startups has naturally pus...