- Blog OS リポジトリには、os.phil-opp.com の Writing an OS in Rust シリーズで使われるソースコードが収められている
- 各記事のコードは個別の git branch にあり、記事に沿って進めた後の途中状態を確認できる
- 現在の第2版の記事は Bare Bones、Interrupts、Memory Management、Multitasking のカテゴリで構成され、最新記事のコードは
post-12 ブランチにある
- ブランチ名は
post-XX 形式で、例えば post-03 は VGA Text Mode、post-07 は Hardware Interrupts 記事のコード
- 第1版は現在メンテナンスされていないが、今でも参考にでき、プロジェクトコードは
blog/content フォルダを除き Apache-2.0 または MIT のいずれかを選べるライセンスを採用している
Blog OS リポジトリの目的
記事ごとのコード構成
- 各記事のコードは個別の git branch にある
- 記事に沿って進めた後の途中状態を確認できる
- 最新記事のコードは
post-12 にある
- 各記事のブランチは、以下の記事一覧の
(source code) リンクから確認できる
- ブランチ名は
post-XX 形式を使う
post-03: VGA Text Mode
post-07: Hardware Interrupts
- ビルド方法は各ブランチの README を参照する必要がある
git worktree を使うと、特定のブランチをサブディレクトリにチェックアウトできる
git worktree add code post-10
- 上のコマンドは、10本目の記事である Heap Allocation のコードを含む
code サブディレクトリを作成する
現在のエディションの記事一覧
- 目的は、個別のブログ記事を通じた 段階的なチュートリアル の提供
-
Bare Bones
-
Interrupts
-
Memory Management
-
Multitasking
第1版
- 現在のブログは 第2版
- 第1版は古く、もうメンテナンスされていないが、今でも役立つ可能性がある
- 第1版には Bare Bones、Memory Management、Exceptions、Additional Resources のカテゴリの記事が含まれる
ライセンスとコントリビューション
blog/content フォルダを除くプロジェクトは、ユーザーが選択して Apache License 2.0 または MIT license として利用できる
blog/content フォルダのライセンスは blog/content/README.md を参照する必要がある
- 別途明記されていない限り、取り込みを意図して提出されたコントリビューションは、Apache-2.0 の定義に従い、追加条件なしで上記の デュアルライセンス が適用される
1件のコメント
Hacker Newsのコメント
数年前に第2版を最後まで読んだが、本当に目が開かれる内容だった
オペレーティングシステム開発の説明として優れているだけでなく、Rust本を読んだ後にRustをさらに学ぶための資料としても有用だった
著者はRustのイディオムをよく理解していて、自分ならどう書くかと比べながらコードでどう表現するかを見るのも学ぶ点が多かった。特に、Rustでfutureがどのように実装されるかを説明した async-await in Rust は、このテーマで見た中で最高だった
Philがもう一度やる気を取り戻して、EFIベースの第3版の作業を続けてくれるといいのだが。Gitブランチのコミットを見る限り止まっているように見えるし、GitHub Sponsorsも1年ほど支援していたが、「This Month In Rust OSDev」の記事で名前が出てこないのを見るたびに残念だった
それでも第2版は週末の開発時間を過ごすのに素晴らしい教材で、注がれた努力がはっきり伝わってくる
5年前にこのチュートリアルを終えたあとMOROSの開発を始めたが、Rustとオペレーティングシステム開発に興味がある人には強く勧めたい
Philは本当に多くの労力を注いでいて、それがよく表れている。このプロジェクトは多くの内容を扱っており、その後は osdev wiki に進むこともできる
MOROS: http://moros.cc, https://github.com/vinc/moros
MOROSもこの条件を満たしていそうなのでブックマークした
ただ、なぜかQEMUで起動しないのでまだ試せておらず、OS自体よりこちら側の問題である可能性が高いと思う
Rustとオペレーティングシステム開発を深く掘り下げたあとで今日この資料を見つけたが、コンテンツの質に感心した
オペレーティングシステムの歴史や設計を多く学べる一方で、Rustの要素も自然に身につく。Philは本当に素晴らしい仕事をした
Rustconfから戻ったばかりだが、Rust界隈には主要なOSリリースがざっと5つほどあり、特にリアルタイムに焦点を当てたものが多いようだった
ただし、すべてがオープンソースというわけではない
このほかにも、よりニッチなものや公開されていないものがある
従来型のオペレーティングシステム、つまりリアルタイムではない分野では Redox が代表的で、このガイド/投稿の Blog OS を含め、研究・実験・教育向けのOSも多くある
この一連の記事の初版を特に勧めたい
現行版は専用クレートでブートローディング全体を処理してしまうので、少し助けすぎな感じがした
このコメントを見て、実際に一度やってみたくなった。遊びで小さなOSを作ってみたいが、何かができるまともなマシン状態に到達するために呪文のような手順を踏まなければならない部分は好きではない
もちろん、それが悪いということではなく、どの部分を楽しむかは人それぞれだ
この資料のおかげで2021年にRustを始めることになり、このような資料があることに本当に感謝している
Philのオペレーティングシステム開発記事はいつも読みやすい
来月のGOSIMカンファレンスで発表するらしい
https://china2024.gosim.org/speakers#philipp-oppermann
直接会って話せたらいいのだが
https://harvey-os.org/ は引退しており、チームは現在こちらのプロジェクトに取り組んでいる: https://github.com/r9os/r9
プロの開発者ではないが、「Yの上にXを書く」という表現を見ると、Ryan Reynoldsの「But why?」ミームを思い出す: https://screenrant.com/ryan-reynolds-but-why-gif-harold-kuma...
学習目的ならいくらでもやってよいと思う。コーディングは多くやるほど上達する
付け加えると、MOROSはプロジェクトもページも素晴らしく見える