1/8/2025 at 2:17:01 PM
Author here.I wrote this book so you can spend a boring weekend writing an operating system from scratch. You don’t have to write it in C - you can use your favorite programming language, like Rust or Zig.
I intentionally made it not UNIX-like and kept only the essential parts. Thinking about how the OS differs from Linux or Windows can also be fun. Designing an OS is like creating your own world—you can make it however you like!
BTW, you might notice some paragraphs feel machine-translated because, to some extent, they are. If you have some time to spare, please send me a PR. The content is written in plain Markdown [1].
Hope you enjoy :)
[1] https://github.com/nuta/operating-system-in-1000-lines/tree/...
by nuta
1/8/2025 at 4:17:14 PM
> Designing an OS is like creating your own worldOr like building your temple so you can talk to God directly
by sesm
1/8/2025 at 5:04:51 PM
TempleOS: https://en.m.wikipedia.org/wiki/TempleOSby sohang
1/9/2025 at 6:41:47 AM
We won't know until we try.by 6510
1/9/2025 at 6:59:31 AM
If you want PRs, I suggest you set up Semantic Linefeeds* sooner, rather than later. Each sentence gets its own line, and it really helps avoid merge conflicts.* https://rhodesmill.org/brandon/2012/one-sentence-per-line/
by pronoiac
1/9/2025 at 1:49:10 PM
TIL. It's too late for this book, but I'll try it in the next one.by nuta
1/9/2025 at 2:29:00 PM
You have a line per paragraph now, so a quick and dirty version is to add newlines after "[.!?] ", though code blocks might take some fiddling.by pronoiac
1/8/2025 at 3:02:36 PM
Are you planning to also provide an English translation of your microkernel book? That sounds very interesting...by johndoe0815
1/9/2025 at 1:53:33 PM
Unfortunately not. Maybe I'll write another online book like this in English, after building a more practical microkernel-based OS. It's a very interesting topic indeed :Dby nuta
1/9/2025 at 10:51:14 AM
Right, that would be great.by Rochus
1/9/2025 at 4:28:51 AM
"Designing an OS is like creating your own world"Making video game is also like creating your own world!
And it's order of magnitude less hard than making an OS...
Bonus point, you have a chance to make a living from it!
by jb_briant
1/10/2025 at 2:03:49 AM
actually making a video game would be 100x more complicated. Plus kernel developer jobs are more lucrative than most game dev jobs.by leonewton253
1/10/2025 at 4:09:02 AM
Is it really more complicated to make a video game that a kernel? I don't consider myself knowledgeable enough to make a full kernel by myself but I did manage to make a full 3d video game by myself.Also I'm not speaking about making a game engine along with the game.
Having a kernel dev job is different than making your own kernel, speaking on a "world builder" perspective.
by jb_briant
1/12/2025 at 11:17:10 AM
Even a 3D game engine can be simpler than a fairly complex operating system.by 66yatman
1/8/2025 at 10:45:41 PM
How does your book compare with the classic "Operating systems design and implementation" by Andrew S. Tanenbaum and Albert S. Woodhull implementing MINIX?by niutech
1/9/2025 at 3:37:35 PM
I thinks this 1,000 OS book is a good start for beginners before diving into the MINIX book.MINIX book describes more practical designs, with a more feature-rich implementation. However, UNIX features such fork, brk, and tty are not intuitive for beginners. By writing a toy OS first, readers can compare the toy OS with MINIX, and understand that UNIX-like is just one of many possible designs. That's an important perspective IMO.
Also, readers can actually implement better algorithms described in the MINIX book. It makes the MINIX book more interesting to read.
by nuta
1/10/2025 at 6:38:02 AM
This is so much easier. You are implementing printf on page 5 and it can handle formatted output to the screen for integers, hexadecimals, and strings. Minix eventually gets around to the write system call but even then it is actually just a way of sending bytes from a buffer to a file descriptor. To a what? That is a lot more complexity for, in some ways, less functionality. For write, you still have to write printf on top.The Tanenbaum book is great but it is a particle physics textbook compered to this OS cookbook.
by LeFantome
1/8/2025 at 4:58:16 PM
Hi OP, this looks super cool. I remember hearing about this (https://www.linuxfromscratch.org/) many years ago but have never done it.Curious, what are the prerequisites for this? Do I have to know about how kernels work? How memory management, protection rings or processes are queued? Some I'd like to definitely learn about.
by viraj_shah
1/8/2025 at 5:45:38 PM
LFS is about building a Linux distribution from scratch (i.e. using the Linux kernel.)The book in question is about how to build your own operating system (i.e. a non-Linux) kernel from scratch.
> We'll implement basic context switching, paging, user mode, a command-line shell, a disk device driver, and file read/write operations in C. Sounds like a lot, however, it's only 1,000 lines of code!
by johnmaguire
1/9/2025 at 3:04:14 PM
Thank you! If you've written some programs (ideally in C), you're good to go. You might stuck on some concepts, but you can learn one by one. IMO, implementing it makes you to understand the concepts more deeply, and learn more that you won't notice when you just read textbooks.Also, because the implementation in this book is very naive, it would stimulate your curiosity.
by nuta
1/9/2025 at 12:53:59 AM
Great resource, thanks for sharing.I thought the written text was very high quality and didn't show many of the usual tells of a non-native writer. Could you share some details of how you used AI tools to help write it?
by laurieg
1/9/2025 at 2:14:37 PM
Copy-and-pasting to ChatGPT. Machine translation (JP to EN) before this LLM era was already high quality, but LLM does a really great job. It does not translate as is, but understands the context, drops unnecessary expressions (important!), and outputs a more natural translation.That said, LLM is ofc not perfect, especially when the original text (or Japanese itself) is ambiguous. So I've heavily modified the text too. That's why there are some typos :cry:
by nuta
1/8/2025 at 9:05:32 PM
Did you post to OSDev?by sydbarrett74
1/9/2025 at 3:26:30 AM
Nice project, short and concise enough for an undergrad to learn basic os concept and implementation.by mayli
1/9/2025 at 8:21:20 AM
I almost feel tempted to use your book to both learn about OS and improve my shitty Japanese. :)by Tainnor
1/9/2025 at 2:45:10 PM
Thank you. My efforts on preparing both EN/JP translations paid off :Dby nuta
1/8/2025 at 2:35:48 PM
This is fantastic. Thank you so much for writing this.by ilikeorangutans
1/12/2025 at 11:11:37 AM
Can I write it in js?by 66yatman
1/8/2025 at 4:15:48 PM
Excellent content!by cplusplus6382
1/8/2025 at 3:07:02 PM
Kudos for not being yet another UNIX clone tutorial.by pjmlp
1/10/2025 at 1:52:18 PM
[dead]by spintin
1/8/2025 at 2:42:02 PM
Could you port this to riscv64 please?by pshirshov
1/8/2025 at 7:52:44 PM
Porting to any platform is trivial after understanding the basics as described in these articlesThe author explicitly describes why they chose riscv32
Why would you want the author to use riscv64 instead?
by ndnsjxj
1/10/2025 at 7:23:10 PM
At least on Intel, it was quite a significant difference in some ways, in kernel terms.by foobiekr
1/9/2025 at 2:23:25 PM
No it's "left as an exercise to the reader" ;)But seriously, it's not that hard. Change build options to generate 64-bit ELF, replace all 32-bit-wide parts (e.g. uint32_t, lw/sw instructions), and implement a slightly more complicated page table (e.g. Sv48).
by nuta