Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


Writing an OS in Rust

Subscribe to updates I use blog_os

Statistics on blog_os

Number of watchers on Github 1283
Number of open issues 39
Average time to close an issue 5 days
Main language Rust
Average time to merge a PR about 12 hours
Open pull requests 6+
Closed pull requests 10+
Last commit almost 2 years ago
Repo Created over 4 years ago
Repo Last Updated almost 2 years ago
Size 2.19 MB
Homepage http://os.phil-op...
Organization / Authorphil-opp
Page Updated
Do you use blog_os? Leave a review!
View open issues (39)
View blog_os activity
View on github
Fresh, new opensource launches πŸš€πŸš€πŸš€
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating blog_os for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

Blog OS

Build Status Join the chat at

This repository contains the source code for the Writing an OS in Rust series at

Bare Bones

Memory Management


Additional Resources


You need to have nasm, grub-mkrescue, mformat (included in mtools), xorriso, qemu, a nightly Rust compiler, and xargo installed. Then you can run it using make run.

Please file an issue if you run into any problems.


The source code is dual-licensed under MIT or the Apache License (Version 2.0). This excludes the blog directory.

blog_os open issues Ask a question     (View All Issues)
  • over 3 years Some comment/question for β€œSet Up Rust”
  • over 3 years Recommend wrimg for burning images
  • over 3 years Use new ElfSectionsTag::string_table to print section names
  • over 3 years Use new panic-strategy field in custom target?
  • over 3 years Use redox-os/ralloc?
  • over 3 years Fix private_in_public problems in the Page Tables post
  • over 3 years Add a β€œcompiling on other operating systems” guide
  • over 3 years Avoid data race on output buffer
  • almost 4 years PhysicalAddress and VirtualAddress types probably shouldn't be interoperable
  • almost 4 years ARM port?
  • about 4 years Flush tlb also on `map_to` for exotic CPUs
  • about 4 years [Page Tables] Do we need atomics for `Entry`?
  • over 4 years Mac OS support
  • almost 3 years Code snippet not changed over in Set Up Rust
  • almost 3 years Entering Long Mode: Mention physical address bits in the table describing a page table entry
  • almost 3 years Boot failed: Could not read from CDROM (code 0009)
  • almost 3 years Wrong link at bottom
  • almost 3 years Recursive mapping question
  • almost 3 years undefined reference to rust_begin_unwind error
  • almost 3 years .bss section is not zeroed
  • about 3 years Do we need to save callee saved registers in an interrupt handler?
  • about 3 years Overflowing the stack doesn't work, function optimized away
  • about 3 years Adjust x86 doc links in posts
  • about 3 years Multi Core Issues in Linux Kernel Scheduler
blog_os open pull requests (View All Pulls)
  • Identity map the multiboot structure to fix the frame allocator
  • Add note that `stack_bottom` needs to be above `stack_top` in the source
  • Test for rustfmt/xargo instead of using `|| true`
  • Added more specific instructions for nightly
  • Fix 'pwd' command substitution
  • Wrong method referenced in prose
blog_os list of languages used
Other projects in Rust