WasmOS: Introduction
I am a 'self-taught' developer.
I put 'self-taught' between quotes because I didn't teach myself: the internet was full of excellent resources to learn to code1.
Product of my era, I learned to code with React circa 2017. It was great for a while and I had a lot of fun grokking React and its ecosystem.
Fortunately, being curious by nature, I didn't stop there and slowly worked my way down2 the stack as time went on. I developed a knack for good UI and UX and worked as a UX engineer. I then moved onto full-stack roles, and dipped into infrastructure and devops. Self-hosting came next and with it, a dabble of networking.
However, almost ten years later I still had not a complete understanding of what was going on under the hood. I always worked at a high level of abstraction.
Fast forward to today, I am now finally getting into low level programming and I am currently going through the excellent OSTEP book. This lead me to this idea of WasmOS.
WasmOS is (or rather, will one day be, maybe?) a virtual OS running in the browser.
It is purely an educational and experimental project.
It won't be a complete OS, there are obvious limitations to creating a virtual OS in a browser.
Goal
WasmOS is an educational and experimental project.
The overarching idea is to expand my circle knowledge while having fun.
In particular, I wish to:
- acquire experience with lower level system programming,
- find an excuse to use zig,
- build a deeper understanding of the underlying machine,
- combat 'AI' fatigue,
- follow my curiosity,
- document my way through my learnings,
- create an endless project to tinker on, without boundaries or deadline,
- recreate the now extinct magical feeling of creating things by typing on a keyboard in a flow state while listening to good tunes (RIP),
- go slow and go deep,
The project has no real world application, this is a purely curiosity-driven project.
It might not (and most likely won't) be useful beyond the intellectual stimulation of pursuing a lofty goal.
Rules
Given the nature of the project, these are the rules I am setting to ensure the project is successful3
No LLM to generate or review code
Niet. Nada. Nope. Rien.
LLMs may have a place when there is a time-bound or financial goal. Maybe.
But in this case, the use of LLMs to generate the code would be entirely counter-productive to the success of this project.
Every line of (questionable) code in this repo will be handwritten by myself.
No LLM generated code. No exception.
No LLM to research or validate ideas
I have no idea what I'm doing here, and that's the point!
I intend to not use LLM to do any research or validation of my theory so I can fail.
I want to fail. Failing is good.
Avoiding LLMs will push me to come up with my own theories and mental models, and test them out.
I expect to be in struggle-city a lot on this project, and that's by design.
Failing is becoming a luxury in the LLMs age, I believe it's robbing us of creating expertise in many cases.
I will still use books and internet, but I will not use any LLM-driven chatbot.
No time limits
This is intended to be an ongoing experiment.
I might choose to terminate it early - or I will never finish it.
I won't put any deadlines on myself and approach it with a slow productivity mindset.
In the current insane pace of the modern world, I want to create an environment where things take the time they take.
Go slow or go home.
Devlog
As I'm writing this, in October 2026, I don't know much about operating systems.
I am about one third of my way through the awesome OSTEP book, but that is as far as my experience goes with operating system.
I am a web developer, not a system programming expert (yet!). And what an opportunity!
LLMs have robbed us of the beginner's trough (which is a tragedy in my opinion).
Nothing like a fresh start, when you have no idea what you're doing and you suck at it. That's the dreamer's stage, nothing is impossible.
As part of this project, I will be writing a devlog of my progression as I go along.
I will do my best to describe my thinking; I expect to write stupid ideas and be often incorrect, but I'm looking forward to it.
This will give me the opportunity to improve my written communication, cement the knowledge I acquire, and give me the opprtunity to look back in a few years and think: "Man, I have come a long way!".
There is nothing as satisfying to me as looking back and seeing the progress you made.
In my opinion, the journey is the most important part of any endeavor, be it life, or a geeky pursuit like this.
Have fun
Finally, the most important rule: this is about having fun - there is no expectations here.
Where to start?
That's a good question. I don't really know where to start!
The first question I need to answer is: what part of the OS can I realistically build in WASM? What does an OS in WASM look like?
My first task is to do some research about WASM and see what it is all about.
The second, is simply to set up a Zig development environment.
I did the Ziglings about a year ago, but I haven't used it or touch it since then. I won't do them again, I am just going to use a refresher and learn as I go.
Alright, I will be back once I have a clearer picture of what I am actually trying to build here.