Slide 1

Slide 1 text

RustでOS作りたい そんな話

Slide 2

Slide 2 text

はじめに

Slide 3

Slide 3 text

自己紹介 Twitter: @segfo Qiitaとかでいろいろ書いてます。 https://qiita.com/segfo 30日で作る本(30日では書けないけど)でこの世界に入門しました。

Slide 4

Slide 4 text

C言語難しくない???? 作りたいものを作れず、そこらじゅうエラー・例外ハンドラだらけ ちょっとコード書くとバッファオーバーフロー ちゃんと書かないとすぐ汚くなる。(だんだん混乱してくる) プログラミングが下手なので厳しさだけを感じる

Slide 5

Slide 5 text

つらい C言語以外でデバイス叩きたい

Slide 6

Slide 6 text

「RustでOSを作る」という選択肢 今回は「Rust」という言語を紹介します。 ● 速度はC++並み ● コンパイル時にバッファオーバーフローを一部検出できる ● プログラミングが下手でも、ほぼ正常系で記述できる

Slide 7

Slide 7 text

Rustってなに? Mozillaが開発しているプログラミング言語 マルチパラダイムで、割と今風(※OOPとか)に書ける

Slide 8

Slide 8 text

そこでRust 簡潔に言うとC++の上位互換っぽい(C++よくわからない) クラス・継承の概念が使える GCを使わないけど、リソース管理ができる(Drop Traitという仕組みを使う) BOFするコードが有ったらコンパイルできない もしコンパイルできたとしても、実行時エラーで確実に止まってくれる

Slide 9

Slide 9 text

デモ  x86_64 UEFI (LONGモード(64bit)で動作) デモで使用するプログラム https://github.com/segfo/rust-uefi-sample

Slide 10

Slide 10 text

コード コンパイルエラー

Slide 11

Slide 11 text

コード 実行時エラー(QEMU上)

Slide 12

Slide 12 text

panicの実装 panicしたらとりあえず、無限ルー プしとく実装。 RebootでもOK

Slide 13

Slide 13 text

UEFIブート&RustでOSを作る意味 ● やりたいことに集中できる ○ BIOSブート:Real mode→Protected mode→Long mode ■ しかもコード書ける領域が 512バイト縛り(1セクタ分)しかない ○ UEFIブート:Long mode ■ コード書ける領域が実質無限 ○ Rustは例外処理やパターンマッチが書きやすい ■ 例外処理ばっかりなコードとはお別れできる ● C/C++では「未定義動作」が一番OS作る上では一番厄介 ○ Rustでは、未定義動作が徹底的に排除されている ○ 典型的な「配列の溢れ」なんかは すべて定義された動作 (基本はpanic)に移行する ○ 安全かつ安心して書きたいものを書ける 未定義を踏まないのでデバッグもしやすい

Slide 14

Slide 14 text

おわり