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

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...

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...

Ousterhout's law

Back in the day, everyone was using Winamp. It is a music player with the user interface of a mixing console. The bloody thing had an equalizer on the front page! As an amateur music producer, I know that EQ is a powerful tool but making changes that sound good is difficult, to say the least. Mixing engineers spend considerable effort with the artist to balance the frequency ranges to arrive at the desired musical outcome. I bet the 15-year-old me butchered a lot of songs with the thing. Now we are using Spotify, a player with basically a search bar and a play button. I ran into something called Ousterhout's Law on the  Operating Systems: Three Easy Pieces book . Here is a quote from the book TIP: AVOID VOO-DOO CONSTANTS (OUSTERHOUT’S LAW) Avoiding voo-doo constants is a good idea whenever possible. Unfortunately, as in the example above, it is often difficult. One could try to make the system learn a good value, but that too is not straightforward. The frequent result: a configura...