uchan note

プログラミングや電子工作の話題を書きます

セキュリティ・キャンプ 2020 の OS 開発ゼミまとめ

この記事は 自作OS Advent Calendar 2020 の 6 日目の記事です。

セキュリティ・キャンプ とは毎年夏に開催される,合宿形式の勉強会です。 情報セキュリティ分野で活躍する講師が受講生にみっちりと講義や演習を実施します。

2020 年は新型コロナウイルスの影響によりオンライン開催となり,従来の合宿形式ではなく 2 か月の週末を使って少しずつ進める形式となりました。 セキュリティ・キャンプ全国大会 2020 オンラインの修了式が本日(2020 年 12 月 6 日)ありましたので,OS 開発ゼミで何をやったかを振り返ります。

OS 開発ゼミの立ち上げ

今年の OS 開発ゼミは講師 2 名体制で臨みました。私と,Resea OS を開発している 怒田さん です。

10 月 18 日にセキュリティ・キャンプ全体の開講式がありました。 セキュリティ・キャンプ全国大会 2020 は「選択コース」と「集中コース」の 2 つがあり,集中コースの Y トラックに属する OS 開発ゼミは 10 月 24 日が初の講義日でした。 今年は期間が長いこともあり,例年のような事前学習はやらなかったので,この日が本当に初の活動日でした。

初講義では講師 2 名と受講者が集まり,自己紹介をしました。 チューターと,受講者数名は予定が合わず欠席でした。オンラインならではの出来事ですね。

自己紹介の後,講師からそれぞれ講義を行いました。

私は OS と言語処理系のセルフホストを目指す OpeLa プロジェクト の紹介, そして OS と言語処理系をセットにしてセルフホストをすることの意味,意義を説明しました。

怒田さんは「速習マイクロカーネル」という題で,マイクロカーネルの歴史,マイクロカーネルの原理,今実用されているマイクロカーネルの紹介などをしました。 「時代遅れの OS だ,と言われるが,実は逆で,知らないところで世界を支えている」という,事実に裏打ちされた言葉が印象的でした。 Intel CPU や iPhone の中などでセキュリティをがちがちに担保したい場所で,その分離性を生かしてマイクロカーネルが活躍しているのだそうです。すごいなあ。

講師からの講義の後は,受講者それぞれの開発テーマ決めをしました。 基本的には受講者 1 人と講師 2 人という感じでお話してテーマを決めるのですが,外野としてチューターや他の受講者も会話に参加し,開発テーマを練りました。 受講者みなさん,やりたいことがたくさんあって,2 か月でやることをある程度絞って方向性を決めるのが大変でした(笑)

開発テーマの紹介

各受講生の開発テーマを簡単に紹介します。

  • 「30 日でできる!OS 自作入門」の「はりぼて OS」に Intel HD Audio のドライバを追加します。OS 起動時にドラクエのオープニングテーマを鳴らしたいのだそうです。
  • 悠里 OS でのアセンブリ言語x86アセンブリ言語に変換するツールを作ります。
    • 独自世界の OS を作りたい,と聞いたとき,とても興奮しました。めちゃ面白そうですよね。OpeLa も負けてられないぞ…
  • 「作って理解する OS」のサンプル OS に対してユーザランドアプリの実行機能を追加し,テトリスミニゲームを作ります。
    • 最近はこの本を読む人に良く出会います。2019 年に出版された本なのにすべてアセンブラで実装しているので,テトリスアセンブラで実装しようと思っているそうです。大変そう…
  • 最新の C++ を使って「はりぼて OS」を改造します。可能であればページングによるメモリ管理をしてみます。
    • 川合さんオリジナルのツールキットではなく,Linux の標準的なコマンド(gcc や ld)を用いて開発できるようにするのが目標です。
  • 「はりぼて OS」にページングによるメモリ管理機構を導入します。
    • ページングは人々を惹きつける魅力があるのかもしれません。デマンドページングやメモリマップトファイル,仮想記憶など,応用範囲が広い要素技術ですからね。
  • xv6 に NIC ドライバを搭載し,ping コマンドを打てるようにします。
    • xv6 は PCIバイスの認識ができないので,そこからのチャレンジです。
  • ELF 形式のカーネルを起動できる UEFI 対応のブートローダを作ります。
    • ELF ヘッダの解析も初めての方のチャレンジでした。UEFIAPI を一生懸命習得しながら,ELF ヘッダの読み取りをやります。

さいごに

目標にしていたことを完全に達成できたなー,という方はいませんでしたが,皆さん確実に知識を付け,成長できたのではないかと思います。 Linux の操作が初めてだった方が操作できるようになったり,PCI の制御なんて知らないところから NIC の認識まで行けたり。

今回は長期間のオンライン開催になったため,例年以上に受講者の積極性と,オンラインならではの発想の転換が必要で,結構難しかったみたいです。 オフラインの合宿形式では,講師がふらっと近寄ってサポートすることが容易でした。そうすることで,受講者が悩み過ぎて時間を浪費してしまうことを防げます。 時間をかけることも大事な勉強なんですが,講師のリソースを使える場面では悩み過ぎずに講師にサポートしてもらうのが良いですからね。

長期オンラインでは,講師が受講者にふらっと近寄ることができません。講師のリソースを使いたい受講者は,受講者の側からヘルプを求める必要が出てきます。 合宿形式の開催ならその 5 日間は受講者も講師もどちらも都合が良いことが保証されますが,長期オンラインでは両者が都合が良い時間帯をすり合わせる必要もあります。 この 2 点(能動的にヘルプを求めなければならない,予定を合わせなければならない)から,講師のリソースを使いきれなかったようです。

今後もしばらくは各種のイベントがオンラインになっていくでしょうから,今回の経験を生かしてより良くしていきたいですね。