6 ms·
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 f
by nuta 2y ago
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/main/website/en https://github.com/nuta/operating-system-in-1000-lines/tree/...
- ilikeorangutans 2y agoThis is fantastic. Thank you so much for writing this.
- pshirshov 2y agoCould you port this to riscv64 please?
- ndnsjxj 2y agoPorting to any platform is trivial after understanding the basics as described in these articles The author explicitly describes why they chose riscv32 Why would you want the author to use riscv64 instead?
- foobiekr 2y agoAt least on Intel, it was quite a significant difference in some ways, in kernel terms.
- nuta 2y agoNo 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).
- johndoe0815 2y agoAre you planning to also provide an English translation of your microkernel book? That sounds very interesting...
- pjmlp 2y agoKudos for not being yet another UNIX clone tutorial.
- cplusplus6382 2y agoExcellent content!
- sesm 2y ago> Designing an OS is like creating your own world Or like building your temple so you can talk to God directly
- viraj_shah 2y agoHi OP, this looks super cool. I remember hearing about this (https://www.linuxfromscratch.org/ 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.
- radlad 2y agoLFS 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!
- deleted 2y ago[deleted]
- nuta 2y agoThank 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.
- sydbarrett74 2y agoDid you post to OSDev?
- niutech 2y agoHow does your book compare with the classic "Operating systems design and implementation" by Andrew S. Tanenbaum and Albert S. Woodhull implementing MINIX?
- nuta 2y agoI 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.
- LeFantome 2y agoThis 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.
- laurieg 2y agoGreat 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?
- nuta 2y agoCopy-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:
- mayli 2y agoNice project, short and concise enough for an undergrad to learn basic os concept and implementation.
- jb_briant 2y ago"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!
- nullbyte808 2y agoactually making a video game would be 100x more complicated. Plus kernel developer jobs are more lucrative than most game dev jobs.
- jb_briant 2y agoIs 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.
- 66yatman 2y agoEven a 3D game engine can be simpler than a fairly complex operating system.
- pronoiac 2y agoIf 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/ https://rhodesmill.org/brandon/2012/one-sentence-per-line/
- Tainnor 2y agoI almost feel tempted to use your book to both learn about OS and improve my shitty Japanese. :)
- nuta 2y agoThank you. My efforts on preparing both EN/JP translations paid off :D
- spintin 2y ago[dead]
- 66yatman 2y agoCan I write it in js?