Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
PicoRubyではじめる自作カーネル入門
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
S.H.
October 31, 2026
32
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PicoRubyではじめる自作カーネル入門
PicoRubyKaigi 2026 Assemble
S.H.
October 31, 2026
More Decks by S.H.
See All by S.H.
Termfront: Ruby標準ライブラリだけで作るFPS
gamelinks007
1
150
Ruby on Bare Metal
gamelinks007
0
130
Ecosystem on parse.y
gamelinks007
0
850
ゆるゆるMastodon 鯖缶生活
gamelinks007
0
850
1週間で作るActivityPubリレーサーバ
gamelinks007
0
210
Rails 8で作るActivityPub リレーサーバ
gamelinks007
0
690
Developing an ActivityPub Relay with Rails 8
gamelinks007
0
130
Mastodon on Ruby master
gamelinks007
0
230
Trying to Make Ruby's Parser Available as a Gem
gamelinks007
1
980
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
It's Worth the Effort
3n
188
29k
Speed Design
sergeychernyshev
33
2.2k
How to Talk to Developers About Accessibility
jct
2
600
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
290
Accessibility Awareness
sabderemane
1
270
Are puppies a ranking factor?
jonoalderson
2
4.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
What's in a price? How to price your products and services
michaelherold
247
13k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
570
Transcript
PicoRubyではじめる 自作カーネル入門 S.H.
自己紹介 S.H. Hamada.rb ESM, Inc. 最近はOSのカーネルに興味がある 自作カーネルなどでCRubyを移植して遊んでいる
PicoRubyを 使ってますか?
何に使っている? PicoRubyで音を鳴らす? PicoRubyでゲームを作る? PicoRubyで電子工作をする? 僕は自作のカーネルを作るのに使っています
カーネルを作るきっかけ 『Ruby on Bare Metal』 RubyKaigi 2026 LT CRubyをベアメタル環境で動かす試み 動かすためのカーネル部分をCで書いていた
のめり込んでいった 『Lightning Talk on Steam Deck with Ruby』@松 江Ruby会議12 『Paint
it Red!』@北陸Ruby会議02 『Run Ruby Everywhere with the seL4 Microkernel』@RubyWorld Conference 2026
自作カーネルの面白さ いろいろなハードで動かせて楽しい Steam Deckの上に移植したCRubyでLTとか カーネルの仕組みについても知れる
課題もあった CかRustでカーネルを書くことが多い Rubyほどシンプルに書けない なんとか低レイヤーもRubyで書けないか メモリ管理とかRubyで書けると楽にならないか
PicoRubyで カーネルを実装 すればいいのでは?
PicoRubyで書くメリット Rubyでカーネルを書けると楽しそう システムコールとかRubyで書けたら楽しいのでは? せっかくCRubyを動かすカーネルを書くのであれ ば、Rubyでカーネルを書きたくなりますよね?
PicoRubyは カーネル開発に 向いているか?
個人的な仮説 全てをCで書かなくて済むので入門には良さそう Rubyでsyscallを書けるのであればカーネルの勉強に 良さそう ただ実装を進めてみないと分からない
PicoRubyを カーネル開発で 使ってみた
作ったもの picoruby-kernel https://github.com/S-H-GAMELINKS/picorubykernel Cで書いていた自作カーネルを参考にしている
構成 Cでの実装と同様にmusl libcを使う PicoRuby(mruby VM)でカーネルの一部の機能を実 装 CRuby 4.0.6 + irb/Relineがユーザーランド
全体のアーキテクチャ
RubyとCの役割分担 できるだけRubyで書ける場所はRubyを使う Cのほうが向いていそうなところはCを使う ハードウェアを直接触る部分とか
Rubyに任せた部分 一部のsyscall処理 端末部分 メモリ管理 VFS
Cに任せた部分 syscallの一部 syscallのRubyへの振り分け処理 割り込み タイマー シリアル
syscallの振り分け syscall番号のビットマップでRubyに渡すかを決める syscallを1つずつRubyへ移せる bridge_route(1 bridge_route(0 bridge_route(2 bridge_route(16 bridge_route(9 /* SYS_write
/* SYS_read /* SYS_open /* SYS_ioctl /* SYS_mmap */); */); */); */); */);
Rubyでsyscallを分岐 def self.dispatch(number, a1, a2, a3, a4, a5, a6) case
number when NR_WRITE then sys_write(a1, a2, a3) when NR_READ then sys_read(a1, a2, a3) when NR_OPEN then sys_open(a1) when NR_IOCTL then sys_ioctl(a1, a2, a3) when NR_MMAP then sys_mmap(a2, a5, a6) else ENOSYS end end
メモリ管理もRuby Multibootの情報からメモリの量を調べる 空き領域を「開始位置と長さ」のリストで管理 PicoRubyのVM用メモリの使用量を抑えるため 解放された領域は隣の空き領域と結合して再利用する FREE = [[start, length], ...]
I/OポートはCで操作 シリアルはI/Oポートに1バイトずつ読み書きする CPUのin/out命令を使う部分があるためC側に実装し た outb(COM1 + COM_DATA, c); inb(COM1 +
COM_DATA); /* 1文字書く */ /* 1文字読む */
デモ QEMUを使用して行います PicoRubyが使われたカーネル上でirbを動かします 行編集、履歴、Tab補完など 余裕があればFPSゲームもやりたい
答え合わせ
PicoRubyは カーネル開発に 向いているか?
向いている
なぜ向いているのか Cでベースを作り、ロジックはRubyで書くことがで きる 一部のsyscallやメモリ管理などをRubyで書ける RubyistとしてはCより扱いやすい 入門には良い Cだけを書くよりはモチベーションが維持しやすい
オススメの入門方法 QEMUで「Hello World」と表示するカーネルを書く CとPicoRubyで書いてみる Cやハードウェアの分からない部分はLLMにサポート してもらう 意外とローカルLLMでも良いサポートが得られる
必要な環境 QEMU PicoRubyとCがビルドできる環境 Cの標準ライブラリ(musl libcなど) 必要であればmakeなどのビルド自動化ツール
実装手順 Cで起動する最小構成のカーネルを作る Rubyのコードで「Hello World」を書く CにバイトコードとしてRubyのコードを埋め込む picorbcで変換すればよい
Rubyのコード putsで出力するだけのシンプルなコード puts "Hello, World!"
Cのコード カーネル内でVMを初期化し、Rubyのコードを処理 させる mrb_state *mrb = mrb_open_with_custom_alloc( pool, sizeof(pool)); mrb_define_method(mrb,
mrb->kernel_module, "puts", kernel_puts, MRB_ARGS_ANY()); mrb_load_irep(mrb, hello_rb);
Hello Worldまでの流れ
その後 好きなように拡張してみる 入出力をサポートしてみるとか 簡単なゲームを作って動かしてみるとか
まとめ PicoRubyで自作カーネルは開発できる PicoRubyはカーネル開発の入門に向いている Rubyを使ったカーネルの上でCRubyが動くのは楽し い