Monaのプロトコルスタックの方向性について考える

mones2の実装をいろいろ進めていましたが2つの狙いがありました。

  1. 実装を通してのドライバインターフェースの設計の種とする
  2. ネットワークの知識の習得

「実装を通してのドライバインターフェースの設計の種とする」

狙い

NICドライバの最小インターフェースは何か?
さらに進めて今までの経験をあわせて、最小のドライバーインターフェースは何か?
を探るという狙いがありました。

成果

これは、uipのtapデバイスドライバ、WinSock RawSocket、WinPcapを見ていくことで見えてきました。
結論から言うと、Initilize/Write/Readあたりで十分そう。
必要があればioctl的なものを追加すればいいかな。

「ネットワーク知識の習得」

狙い

Monaにネットワーク機能を導入するには大まかに以下の方法があると思います。

  • 自分で全部実装する
  • 誰かに実装してもらう
  • 移植

どの場合も、私がネットワーク周りの知識を持っていることが必須と考えました。
更にネットワーク周りのAPIの設計にもその知識は必要でしょう。
その辺りに狙いがありました。

成果

id:Yamamiさんの選考実装monesを参考に、本読みと実装の繰り返しでARP/IP/ICMP/UDP/TCP(途中)を勉強できました。
一番の成果が苦手意識の克服です。
ドライバはともかく、プロトコルの部分は純粋にソフトウェアプログラミングなので不可能なほど難しいところはありません。
ファイルシステムの実装と意外と似ている部分があっておもしろいです。
APIに関してはまだ具体的なものが見えていませんが、敷居はだいぶ下がりました。

Monaプロトコルスタックをどうするか?

このような前提で、いろいろ進めてきたなかで感じたことを適当に書いてみます。


以前は、プロトコルスタックを全部自分で実装するのは勉強にもなるしやるべきだと思っていました。
ですが今では、自分で実装しなくても、移植でもありかなと思うようになりました。


理由は

  • ネットワークプロトコルは仕様がきちんと定められているという点において自由度がないこと。(実装方法の自由度はもちろんあります)
  • 個人で実装すると、信頼性を上げる部分に膨大な時間がかかりそう。(動く程度の実装に比べての話)
  • ネットワークプロトコルの実装の違いで、Mona OSだけの特長は出しづらい
  • 移植性の高そうなプロトコルスタック実装がいくつかある


などです。


そういう心境の変化もあり

などを物色しています。
junjunnさんのNineBirdも見てみようと思います。