メインコンテンツへスキップ

自作OS開発の入門書がアツい!OS自作erたちが語る、禁断の領域

·2 分
2025/03 OS開発 自作OS プログラミング X86 システムプログラミング

自作OS開発の入門書がアツい!OS自作erたちが語る、禁断の領域

引用元:https://news.ycombinator.com/item?id=43440473

rocky_raccoon 2025-03-22T04:41:27

osdevマジ最高っしょ。最終的に何がしたいかわかんないけど、マジで何でも作れる感じがめっちゃクール。x86の基本的な割り込みとsyscallが動いた時、マジで全てが繋がった気がしたんだよね。syscallが動き出したら、マジで世界は自分のものだよ!趣味でOSいじるの超オススメ。Rustの勉強にもなったし、マジで予想以上だった。今ではRustもそれなりに使えるし、他の誰よりもdouble faultとかtriple faultを発生させられる自信あるわ。

checker659 2025-03-22T08:33:50

FPGAで自作CPUコア作って、その上でOS動かすってのはどう?(どこまでもOystersってことね)

Rochus 2025-03-22T11:40:55

Wirthもこれで楽しんでたみたいだよ:
http://www.projectoberon.net/

endorphine 2025-03-22T05:24:55

本とか参考にした?なんかRustでOS実装する本があった気がする。

hedonhermdev 2025-03-22T07:38:55

https://os.phil-opp.com/
これのこと?

ibobev 2025-03-22T06:18:09

他にもOS開発のチュートリアルがあるよ。Rustのやつもあるよ:
https://github.com/bobeff/programming-math-science?tab=readm

netbsdusers 2025-03-22T02:59:19

残念ながらこの本にはosdevチュートリアルによくある欠点がある。x86の細かい話ばっかりで、OS開発の話が少ない。x86の細かい話はOS開発じゃない。それは基本的なOSが扱うことのほんの一部分にすぎない。

dokyun 2025-03-22T04:11:29

X86以外のものをターゲットにした趣味OSのリソースがもっとあれば最高だよね。一般的ではあるんだけど、ブートストラップとかデバイスの面倒なこととか、頭に入れる必要ないじゃん。386アセンブリを手で書くのはマジでイライラするし、分かりにくいし。RISCマイクロコントローラから始めるのがオススメ。カーネルを起動して、簡単なシリアル通信をするまでに必要な知識が少なくて済むし、命令セットリファレンスとかアセンブラマニュアルとか、必要な情報が全部書いてあるデータシートもあるし。ハードウェアハッキングも楽しいし、自分で周辺機器とか作れるし。

qwerty59 2025-03-22T04:44:20

こういうの?
https://operating-system-in-1000-lines.vercel.app/en/

homarp 2025-03-22T08:12:26

前の議論:
https://news.ycombinator.com/item?id=42631873

dokyun 2025-03-22T06:43:47

これ、マジでイケてるね。

anta40 2025-03-22T06:05:53

もしかして、これのことかな?
https://github.com/mit-pdos/xv6-riscv
昔のxv6はx86ベースで、もう公式にはメンテされてないんだよね。Xinuはどう?https://xinu.cs.purdue.edu BeagleBone(ARM)ポートがあるよ。

dokyun 2025-03-22T06:55:04

出来合いのUnixをいじるのは、OSを趣味にするって考えには向かないと思うな。Unixの仕組みを勉強するなら最高だけど。もし自分で作ったシステムを実験したいなら、先入観なしで、デザインを丸ごとコピーしない方がいいよ。Unix系の趣味OSなんて腐るほどあるし、実験する立場からすると、Unixのエコシステムに縛られすぎちゃうんだよね。Plan 9/9frontの方がいいかも。Bell LabsがUnixを捨てたのは、もはや研究プラットフォームとして価値がなかったから。

anta40 2025-03-22T09:15:19

なるほどね。DOS/Unixじゃないオープンソースの趣味OSもいくつか知ってるけど…残念ながらVisopsysとかKolibriみたいにx86だけなんだよね。
x86以外なら、http://wiki.osdev.org/Projects を探してみるといいかも。好みに合うものが見つかるかもしれないよ。

snvzz 2025-03-23T11:45:42

>昔のxv6はx86ベースで、もう公式にはメンテされてないんだよね。
当然だよね。OS開発を教えるって目的に集中するためには、あのISAには対処しなきゃいけないレガシーなゴミとか醜い部分が多すぎるんだ。

junon 2025-03-22T10:17:10

例えばARMをどうやるかって話だけど:
1. まずx86でマルチタスクを動かす。ガイドがたくさんあるから。OSdevのコンセプトを学んで。
2. ARMARMを読む。何千ページもある技術資料だけど、ほとんど必要なことは書いてある。ARM osdevの良いリソースがないのは、環境が全然標準化されてないから。ARMチップは色んな場所で使われてるし、特定のボードをターゲットにすることが多いからね。

dist1ll 2025-03-22T05:55:23

確かにね。lexingとかparsingが言語開発ガイドの焦点になってるのと同じ理由だと思う。コンパイラのほんの一部なのにね。入り口としては理にかなってるし、ある時点からはほとんど自習になるからね。

quotemstr 2025-03-22T04:23:04

みんなSICPを崇拝してるけど、今のコンピューティングアーキテクチャとはほとんど関係ないんだよね。x86はまだ入門には良い方法なのかもね。

charcircuit 2025-03-22T05:10:27

問題はx86が言及されてることじゃないんだ。OSにはCPU上でコードを動かす以外にも色々あるってこと。
RPC、入力スタック、グラフィックススタック、ネットワークスタック、オーディオ、プロファイリング、telemetry、スケジューリング、UI toolkits、セキュリティ、サービス管理…色々あるよね。これらを学ぶには、他のOSのドキュメントとかソースコードを読む必要があるよ。

anta40 2025-03-22T06:00:35

現実世界のOSは間違いなく複雑だよね。でも初心者には、xv6で十分だと思うよ。
https://github.com/mit-pdos/xv6-public
コードベースは小さいし、ドキュメントも充実してるし、GCCをカスタムビルドしたり、dockerとか使わなくても簡単にビルドできるしね。

もっとコメントを表示(1)
nukem222 2025-03-22T07:39:15

x86は今のコンピューティングアーキテクチャとはほとんど関係ないんだよね。あれはただのISAで、データフローに固有のパイプライン処理とかキャッシュの問題を解決する助けにはならないし。
学生にx86を勧めるなんてマジでサディスティックだと思うわ。適当でいいから、もっと扱いやすいISAを選んでやれよ(intel製じゃない1990年以降のやつとか)。

peterfirefly 2025-03-22T09:35:34

x86マシンは安いしどこにでもあるから、ググったりネットで人に聞いたりして簡単に情報が得られるのが良いよね。
仮想マシンとかエミュレーターも充実してるし。
変な仕様は286で大体終わってるから、無視しても問題ないレベル。どうしても無視できない部分は初期化処理くらい。
アセンブラとかハードウェアプログラミングを段階的に学びたいなら、DOSBoxと80年代後半~90年代前半のIDE/デバッガーの組み合わせはマジでおすすめ。Turbo/Borland PascalとかC(++)にTurbo DebuggerとTurbo Assemblerを組み合わせるとか。実行環境もあるし、ハードウェアにも直接アクセスできるし(DOSは邪魔しない)、Pascal/Cからもアクセスできるし、インラインアセンブラも使えるし、外部アセンブリファイルも使える。ステップ実行とかブレークポイントもかなり使えるし。
Raspberry Piとかも良い選択肢だと思う。ARM以外のプラットフォームは無いかな。

egl2020 2025-03-22T19:37:25

x86の細かい仕様は別に嫌じゃないな。実際に動くハードウェア上でOSを作ったり理解したりしたいなら、プロセッサとかハードウェアの細かい仕様は避けて通れないし、これはその一例として、どんな問題に遭遇してどう対処するかを示してるんだと思う。

netbsdusers 2025-03-23T08:16:54

ほとんどのOSでは、プロセッサの細かい仕様を扱うコードなんてほんの一部なんだよね。移植性の高いロジックがほとんど。DOSとかWindows 9xみたいな特殊なOSは例外かもだけど。
チュートリアルを読むと、90%くらいの時間が他の部分に比べて面白くない領域の説明に費やされてる気がする。それって全然魅力的じゃないと思うんだよね。
趣味でOS作ってて、4つのアーキテクチャ(m68k、amd64、aarch64、riscv)に移植した経験から言わせてもらうとね。今はTCP/IPスタックに取り組んでるんだけど、これがマジで楽しいし、すでに多くのことを学べた。他にも、仮想メモリとかページ置換、非同期I/O機構の設計、IPCとか、それぞれの適切な同期処理とかも面白いよね(同期処理だけでも奥が深いし、安全なメモリ再利用みたいな革新的な技術も色々あるし)。人それぞれだろうけど、俺はx86の細かい仕様よりもこういうところに興味があるな。

initramfs 2025-03-22T06:19:41

この本がどんなOSについて書かれたものかよく知らないけど、x86のアーキテクチャ的な側面は、多くのx86 OSにとって「標準」と見なされてる部分が多いんじゃないかな。x86、MIPS、SH-2のコード密度は、軽量RISCプロセッサに比べて高いってよく聞くし。あるいは、OSの普遍的な側面を軽く触れて、x86固有の機能に焦点を当ててるのかも。

01HNNWZ0MV43FF 2025-03-22T03:55:22

wasmみたいなVMを使って、プレエンプションできる、マシンに依存しないユーザースペースOSを作ったら何か面白いこと学べるかな?

pjmlp 2025-03-22T07:55:45

マジで、Xerox PARCの有名なOSは全部VMベースみたいなもんだったよ。
コンパイラがバイトコードを生成して、CPUはマイクロコードで動いてた。
だから最初のブートフェーズは、マイクロコードをCPUにロードして、それからSmalltalk、Interlisp-D、Mesa、Cedar環境を起動するって感じ。
Amiga OSの後継を目指したプロジェクトもあって、それもバイトコードベースでJITを使ってた。
>https://news.ycombinator.com/item?id=9806607
Inferno with Limboもそうだし、wasmをdisVMの代わりにするとか。
AndroidのARTとかもそうだし。
ah、IBM i (旧AS/400)もカーネル上でJITを使うバイトコードベースだね。
UNIXだけじゃないってこと。

PhilipRoman 2025-03-22T07:37:32

https://github.com/rswier/swieros
は独自のVM(Cコンパイラ込み)を使ったクールなプロジェクトだよ。色々な機能があってびっくりした。

xmprt 2025-03-22T01:36:57

俺が一番好きなOSの本は(開発より仕組みについてだけど)Operating Systems: Three Easy Pieces。HTMLとPDFで無料公開されてるけど、印刷された本も売ってるよ。
https://pages.cs.wisc.edu/~remzi/OSTEP/

checker659 2025-03-22T08:35:44

一番良いのは、古典的な論文とか資料への参考文献が付いてるところ。

servercobra 2025-03-22T02:14:27

UWの教授で一番好きなRemziの授業だ!最高だったな~

drudolph914 2025-03-22T02:11:49

おすすめされて読んでみたらめっちゃ良かった!

dlachausse 2025-03-21T21:28:38

ありがとう!参考になるね!
10代の頃に作ったOSのソースコードがまだあればなぁ。MBRブートローダー作って、プロテクトモードに切り替えて、画面に文字表示して、キーボード入力できるようにしたんだよね。面白いからおすすめだよ。

shpongled 2025-03-21T23:51:49

俺も昔、自分の“OS”(ほぼBran’s Kernel Development Tutorial [1]のコピーだけど)作ったなー。システムのプログラミングとか裏で何が起こってるのか学ぶのにめっちゃ良い経験になった!
[1] http://www.osdever.net/bkerndev/Docs/gettingstarted.htm

qingcharles 2025-03-22T00:53:44

マジか!俺もだ。コードなくしちゃったけど。ベアメタルで起動するのはマジで楽しかった。この本に助けられたよ。
https://www.amazon.com/Developing-32-Bit-Operating-System-Cd

pjmlp 2025-03-22T08:03:38

みんなおすすめしてるけど、俺はProject Oberonが好き。2025年のコンピューティングには合わないかもしれないけど、メモリ安全なシステム言語で書かれた、ちっちゃいグラフィカルOSで、OS開発について学ぶのに十分な内容がある。
https://www.projectoberon.net/

fragmede 2025-03-21T22:26:54

OS開発といえば、ゲームで学ぶのも面白いよね。コンピューターの歴史を旅しながらOSを学べるゲームを作りたいと思ったことがある。プレイヤーはプロセススケジューラとか割り込みハンドラになって、最初はシングルCPUのシステムから始めて、SMPシステムに成長して、最終的にはマルチシステムの分散コンピューティングプラットフォームにたどり着くんだ。

markus_zhang 2025-03-21T23:08:37

核戦争前に壊れたビンテージコンピューターを修理するために部品を集めて、マニュアルを探してプログラムを書いてクエストを解決するFallout 3/4のmodを作ろうと思ってる。

SoothingSorbet 2025-03-22T00:45:32

面白そうだね。アセンブリのゲームをデザインしようとしたけど、ただ「一般的なアルゴリズムをアセンブリ言語で実装する」みたいなのしか思いつかなくて。仮想ファームウェアからPCをブートストラップしてOSを書くっていうのはいいかも。

ignoramous 2025-03-22T09:57:37

>…コンピューターの歴史を旅しながらOSを教える。プレイヤーはプロセススケジューラや割り込みハンドラーの役割を演じ、非常に限られたRAMを備えたシングルCPUシステムから開始…
Ben Eaterの似たようなやつ(ゲーム開発ではないけど):
https://youtube.com/playlist?list=PLowKtXNTBypFbtuVMUVXNR0z1

もっとコメントを表示(2)
vibrantrida 2025-03-22T00:00:10

日本語のOS開発本で、グラフィカルな環境まで解説してるのが2冊あるんだよねー。英語訳がマジで欲しい。[0]はMikanOS、[1]は30日OSのこと。誰かが30日OSを英語に翻訳しようとしたけど、途中で終わっちゃったみたい。[0] https://github.com/uchan-nos/mikanos [1] https://github.com/kamaboko123/30daysOS [1] https://github.com/handmade-osdev/os-in-30-days Fusion以外でここまで詳しく解説してる英語の資料ってない気がする。

khaledh 2025-03-22T04:50:11

Fusionの作者だよー。まだ開発諦めてないし、グラフィックサブシステムとかネットワークスタックもちゃんと作るつもり。今は効率的なゼロコピーIPCを実装しようとしてて、これができれば開発スピードも上がるはず。進捗はちゃんとドキュメントに書くから。

warangal 2025-03-22T09:27:16

Nimのchannelsでメッセージパッシングをしようとしてるの?俺の場合は、コピーを防ぐためにpointersを渡すようにしてるよ。ロックを使わないように、独立したメモリー領域に書き込むようにしてるけど、一般的なパターンじゃないよね。もし何か良いパターンを見つけたら教えてほしいな。

khaledh 2025-03-22T12:17:35

違うよー。Nimのchannelsは同じプロセス内のスレッド間通信用で、メッセージのディープコピーが発生するんだ。Fusionのchannelsはそれとは全然違う。カーネルオブジェクトで、syscallsを使ってcreate/open/send/recv/closeする。ゼロコピーを実現するために、channel heapはuserspaceに置く必要があるけど、カーネルが管理する。POSIXのshared memoryに似てるけど、メッセージパッシングの意味合いが強いかな。Fusionはシングルアドレス空間OSだから、tasks間でpointersを直接渡せるのが強み。保護はpage table mappingsで実現してるよ。

warangal 2025-03-22T16:05:10

詳しく説明してくれてありがとね!ゼロから作ってるから、機能のモデル化も自由にできるんだね。数ヶ月前にこのprojectをbookmarkしたけど、まだちゃんと理解できてなかったんだよね。ドキュメントがあるの知らなかったから、これから読んでみるよ!

furkanonder 2025-03-21T22:03:31

この本は良いよね。でもGitHubのissuesを見てほしいなー。直さないといけないところがいくつかあるんだよね。最後のcommitが10年前ってのが気になる。

roywashere 2025-03-21T22:12:34

activeなforkがあるよ: https://ordoflammae.github.io/littleosbook/

vishnuharidas 2025-03-22T06:39:22

2000年代のplanet-source-code.comを思い出すなー。たくさんの人がミニOSを書いて公開してたんだよね。C/C++とかAssemblyで書かれてて、Mingw32でコンパイルして、フロッピーディスクから起動してた。

initramfs 2025-03-22T06:21:02

リトルレッドOSブックのマニュアルはどこにあるんだ? https://en.wikipedia.org/wiki/Kylin_(operating_system)

zelphirkalt 2025-03-22T02:05:51

「The Little…」シリーズってタイトル、ちょっと紛らわしいよね。

記事一覧へ

海外テックの反応まとめ
著者
海外テックの反応まとめ
暇つぶしがてらに読むだけで海外のテックニュースに詳しくなれるまとめサイトです。