Rust言語によるOSと言語処理系ができるまで
タイムライン
Rust言語で簡単なファームウェア、OS、言語処理系を作成したが、そのタイムラインはだいたい以下のようなものであった。もともとは、Rustでどの程度できるか検証するために始めた実装で、OSを作る予定ではなかったのだが、やっていくうちに面白そうなことができそうなので、どんどん作っていったら、そこそこ動くものが出来上がった。
2020年
2月13日:cargoでリポジトリ作成してgithubに登録
2月16日:シリアルコンソールへ出力
3月9日:MMUの有効化に成功
3月15日:同期処理コードを追加
3月29日:slab allocator有効化
4月2日:言語処理系の設計・実装開始
4月10日:FF7リメイク発売のためしばらく停滞
6月7日:言語処理系の実装終了
7月5日:Pine64+へ移植
8月5日:電源周りの実装開始
8月28日:電源周りの実装が一段落
9月2日:セキュアワールドとノーマルワールドのコンテキストスイッチを実装
9月16日:buddy allocator実装
所感
作ってみると、Rustにはスライスがあるため、unsafeであってもメモリの保護はかなり強力に出来るというのがわかった。また、代数的データ型もあるため、unsafeなコードであってもエラーハンドリングを忘れづらいというのも良い。ただし、グローバル変数にアクセスすると、レースコンディション関係は正真正銘unsafeとなるので、注意する必要がある。
Rust自体の難しさはそれほどなかったが、MMUや電源周りの仕様などを読み解くほうが苦労した。あとは、GICを制御できれば基本的な機能はできるはずなので、その後に隔離機構の設計・実装を行っていきたい。また、現在は、基本がCのコードで、Rustの機能をフルに活かしているとは言い難いため、そちらも改良していきたいと思っている。
ただ、いまは別の仕事をしているため、まずはそれを仕上げてからかなと思う。こちらもRustをふんだんに使っているので、仕上がったらまた公開したい。
この研究は現在は完全に個人研究で行っており、そろそろ研究予算をとってこないと色々とつらいため、何とかしたいところである。