Need help with blog_os?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

phil-opp
7.9K Stars 616 Forks Other 2.5K Commits 47 Opened issues

Description

Writing an OS in Rust

Services available

!
?

Need anything else?

Contributors list

# 7,044
kernel
Rust
HTML
x86-64
1845 commits
# 96,348
Rust
HTML
x86-64
Vim
39 commits
# 60,437
Shell
Rust
HTML
introdu...
11 commits
# 97,535
Rust
Perl
Electro...
dropbox
10 commits
# 13,734
Rust
Postgre...
SQLite
actix
8 commits
# 6,525
Less
React
ant-des...
SQL
8 commits
# 165,777
Rust
Shell
HTML
x86-64
7 commits
# 78,675
Shell
Rust
Swift
kernel
6 commits
# 165,854
Rust
Shell
CSS
iframe
5 commits
# 213,363
Rust
Shell
x86-64
C#
4 commits
# 212,728
Rust
Shell
HTML
x86-64
4 commits
# 71,581
Rust
Heroku
Rails
rust-la...
4 commits
# 86,977
emacs-l...
pascal
rpc-fra...
gRPC
4 commits
# 9,886
Rust
travis-...
mixins
Ember
3 commits
# 85,425
Rust
text-ba...
rpg
Qt
3 commits
# 155,259
Elixir
Shell
HTML
distrib...
3 commits
# 211,401
Shell
css3
guidebo...
Angular
3 commits
# 199,029
The Jul...
cheat-s...
julia-l...
macOS
3 commits
# 8,152
Rust
Ember
automat...
nfa
3 commits
# 142,775
Less
single-...
messeng...
Rust
2 commits

Blog OS

This repository contains the source code for the Writing an OS in Rust series at os.phil-opp.com.

If you have questions, open an issue or chat with us on Gitter.

Where is the code?

The code for each post lives in a separate git branch. This makes it possible to see the intermediate state after each post.

The code for the latest post is available here.

You can find the branch for each post by following the

(source code)
link in the post list below. The branches are named
post-XX
where
XX
is the post number, for example
post-03
for the VGA Text Mode post or
post-07
for the Hardware Interrupts post. For build instructions, see the Readme of the respective branch.

You can check out a branch in a subdirectory using git worktree:

git worktree add code post-10

The above command creates a subdirectory named

code
that contains the code for the 10th post ("Heap Allocation").

Posts

The goal of this project is to provide step-by-step tutorials in individual blog posts. We currently have the following set of posts:

Bare Bones:

Interrupts:

Memory Management:

Multitasking:

First Edition Posts

The current version of the blog is already the second edition. The first edition is outdated and no longer maintained, but might still be useful. The posts of the first edition are:

Click to expand

Bare Bones:

  • A Minimal x86 Kernel
    ([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_1))
  • Entering Long Mode
    ([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_2))
  • Set Up Rust
    ([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_3))
  • Printing to Screen
    ([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_4))

Memory Management:

  • Allocating Frames
    ([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_5))
  • Page Tables
    ([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_6))
  • Remap the Kernel
    ([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_7))
  • Kernel Heap
    ([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_8))

Exceptions:

  • Handling Exceptions
    ([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_9))
  • Double Faults
    ([source code](https://github.com/phil-opp/blog_os/tree/first_edition_post_10))

Additional Resources:

License

This project, with exception of the

blog/content
folder, is licensed under either of
  • Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
  • MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)

at your option.

For licensing of the

blog/content
folder, see the
blog/content/README.md
.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.