この素晴らしい世界に変革を!

とある物忘れの激しい高専生による備忘録

ぼくとOS開発とセキュリティキャンプ

はじめに

みなさんこんにちわ。ヤマゲンです。今回はセキュリティキャンプに行ってきたのでそれについて感想をつらつら書いていこうと思います。最後に書くと忘れそうなので、先に書いておきますが、セキュリティキャンプについて聞きたいことがある人は是非聞いてください。答えられることは答えます。

セキュリティキャンプってなんぞや

セキュリティキャンプについてはいろんな方がブログで紹介していたので書くまでもないかもしれませんが一応書いておきます。

セキュリティ・キャンプとは

セキュリティ・キャンプとは、日本における将来の高度IT人材となり得る優れた人材の発掘と育成を目的とした独立行政法人情報処理推進機構(IPA)の事業の一つです。 現代においては、情報セキュリティの脅威は高まる一方です。 本事業では、セキュリティ分野に興味を持ち、将来同分野で活躍したいという意志をもった若者に対して、高度な情報セキュリティ技術の習得機会を提供しています。また、モラルや法律遵守の意識、セキュリティ意識、職業意識、自立的な学習意識についても向上のための機会を提供しています。 本事業は、2004年度のスタート以来、2017年度のセキュリティ・キャンプまでで計663名の将来が有望なIT人材を輩出しています。セキュリティ業界はもとより各方面から、高度なIT人材育成に有益なイベントとして高く評価されています。 https://www.ipa.go.jp/jinzai/camp/2018/zenkoku2018_about.html

ふむふむなるほど。よくわからないですが、なんかすごそうです。

まあ簡単に言えば国が支援してるハッカー養成キャンプってとこでしょうか。まあこれも応募とかいろいろしないといけないんですけど、選ばれたので行ってきました。

行く前にしたこと

ぼくのところでは、自分のやりたいことに向かって事前学習を各々進めていくという感じで、僕は30日でできる自作OS入門という本を読みました。それについては別記事で書いてるのでそれを参照してください。まあこんな感じで、いろんなことしながらやっていたので精神が悲鳴を上げました大変でした。そしてバタバタと5日分の着替えを買い揃えて東京に向かったわけです。

行ってからしたこと

どうやって書こうか迷いましたが、記憶が曖昧なので、何日目とか書くのはやめて、まとめて書こうと思います。

今回僕はYトラックのOS開発ゼミ:フルスクラッチOSを作ろう に参加しました。僕はOS開発はおろか、低レイヤのことすら全然やったことがなかったので、とりあえず、30日OS本で作ったはりぼてOSを拡張しようという目標を立てて実際に行いました。具体的には、ファイル操作系のコマンドを実装しました。ここで細かく書くべきなのかは迷うところなのですが、まあ何をやったのかくらいは簡単に書いていこうかと思います

全体講義

初日は専門講義はなく、全体で受ける講義やグループワークを行いました。全体講義ではセキュリティの人的影響的なことと、OSCに参加しよう!ということと、セキュリティに関する法律のお話などを聞きました。ここくらいは結構大衆向けというか、かなり一般化された講義に感じました。ここのお話は全然セキュリティの知識がない僕でも理解できたので、いつか内容を噛み砕いて部活とかでアウトプットしたいなと思います。

グループワーク

グループワークではセキュリティ・キャンプ終了後、何をしたいか。のようなことを全日通して班の人たちと喋ったり講師、チューターの方や企業の方から話を聞いたりして、考えていきました。これについては最後に書こうかと思います。

専門講義

ぼくは集中開発コースだったので、2〜4日目はずっとPCとにらめっこして開発していました。ここでは2日目から、自分のプログラミングスキルがいかに足らないか、ということを叩きつけられました。言い訳なんかしたくありませんが、プログラミングを興味を持ってはじめてからおそらく1年半くらいですが、それなりにたくさん経験を積んできていたと思っていたので、それなりにショックは大きかったです。そのときから、自分はクソ雑魚なのだからもうプライドとかそういうものは捨ててしまおう。と思いました。自分から質問することや話しかけることはとても苦手で、なかなか積極的にはできませんでしたが、聞けるタイミングにはできるだけたくさん教えてもらうようにしていました。本当に迷惑をかけたと思います。ごめんなさい。しかしとてもいい経験になりました。こんな変な経験をここで積むのもおかしな話ですが、僕はいつでもおかしな人間だった気がするので仕方がないと思います。反省してます。

さて、自分が何をしたかというと、まずははりぼてOSにrmの実装をしようと思いました。rmといえばファイルの削除ですよね。これははりぼてOSにはなかったコマンドだったので自分で実装しようと思いました。本当だったら事前にやっておきたかったのですが、いろいろと逃げ回った結果当日から実装していくことになりました。最初はファイルのところを全部0で埋めればいいじゃん。とか思ってたのですが、そんな簡単な話ではなかったので、とりあえず最初はFATの仕様から勉強しました。わかってしまえば意外と簡単で、ファイルネームの先頭を0xe5にするとかそんな感じで実装しました。これでコマンドの実装は完了です。今までは写経しかやっていなかったので、自分で考えて動いたコードというのはとても嬉しいものがありました。(まあ他のところでもこういったことはやっていたのですが、いつでもこの感動は大きなものです。)

続いてmvの実装です。mvといえばファイルのディレクトリ移動なのですが、ディレクトリはまだなかったので、とりあえず名前の変更だけおこないました。まあ言うのは簡単なのですが、ここで意外と結構つまづきました。引数(?)を2つ取るというのが結構めんどくさい作業で、いや、実は難しくもなんともない作業なのですが、知識が足りない僕はこれをfor分でぶん回して切り分けるという荒業で実装しました。これに関しては後ほど先生から便利ツールを教えてもらうのですが、これは一つ、自分の力と頭の足りなさを悔やむ結果となりました。まあ、いい勉強です。

2日目はこれくらいだったと思います。

次はmkdirの実装です。これはディレクトリを作るという操作なのですが、これは意外とすぐできた気がします。というのも、先生が持ってきてくださった本にいろいろ書いてあったので、理論はすぐ理解できました。あとはやるだけです。まあだいたいそうなのですが、やることはわかっていても実装できないという事案が多発して、まあこれは誰でも悩む壁ではあるのだろうと思いますが、今回は人生で最もそのことについて悩まされたと思います。どれだけ悩んだかはちょっと忘れちゃったんですけど、実際に自分の作ったディレクトリがdirコマンドででてきたときはかなり感動しました。消した時もそうだったんですけど、この辺の操作は感動が半端ないです。やっぱり目に見える成果というものはとてもいいですね。

その次はddirというコマンドを作りました。これ、実際はdirコマンドの機能の一つなのですが、引数で場合分けしないといけなかったので、面倒だなと思って別コマンドにしました。特に支障はなかったのでわけてよかったと思います。これはサブディレクトリ、つまりmkdirで作ったディレクトリの中身を見るコマンドです。これの実装もだいたいやることはわかっていました。確かこれもシュッとできた気がします(あんまり覚えてない)まあ作ったディレクトリには"."と".."しか入ってないのですが、出てきたときは結構嬉しかったです。mkdirもうまくいってるってことですしね。

あ、そうでした。touchコマンドも作りました。これはファイルを作るというコマンドなのですが、やったことは基本的にはmkdirと同じだったので、そんなに引っかかることもなくできました。先生には「全然報告してくれないよね」と言われてしまいました。すみません...(タイミングを伺っていたのです...)

これで確か3日目は終了です。4日目は成果報告もあったため、がっつりできる時間は午前中と飯食った後くらいまでだったのでだんだん着地地点が見えてきた感じがしました。

ということで次にやったことはmkdirの改良です。今のままではまだルートディレクトリ直下にしか作れなかったので、作ったディレクトリの中に作ってやろうという感じです。これは想像以上に難しい、というか、わかりづらいところでした。まずは"/"で名前をわけて、一つひとつディレクトリがあるかを探して、最後に来る名前のディレクトリを一つ前のディレクトリに作るという動作です。まあこれも言うのは簡単ですね。ところが、4日目はこれにほとんど時間を食われました。すべてに苦労したのですが、一番時間がかかったのはやはりディレクトリ名を分けるところだと思います。今、自分が何をしてるのかさえ全然見通せなくなってしまい、かなり助け船を出してもらいました。また、Linux開発者の半田先生にも助けていただき、つくづく、自分の理解の足らなさを痛感しました。結局動くコードを作れたのですが、このままでは作ったディレクトリの中身を見ることができません。

ということで最後にddirの改良を試みました。ここでも半田先生につきっきりで実装を手伝っていただき、足らない頭をぐるぐる回し、がんばっていたのですが、その時すでに相当混乱していたので、とても迷惑をかけました...結局、mkdirで作られていることは確認できたのですが、その中身までをみることができませんでした。また、時間があるときに実装していきたいと思います。

その後は成果発表をYトラック内で行いました。Yトラックではベアメタル、Cコンパイラ、そして、OS開発があったのですが、どこも全然違うことをしていてとても興味深かったです。他の人はすごいことを発表していて理解するのが難しかったですが、自分は勢いだけで発表していた気がします。ということで、これで専門講義は終了となりました。最後にお菓子をたくさん食べれたので嬉しかったですが、他の先生方とももっとお話しておけばよかったなどと思っています。

まとめみたいな

最後の方は、ほとんどグループワークで、セキュリティ・キャンプが終わったらどんなことをしたいかなどをアンケートに書き込みました。全文載せるのは恥ずかしいので要所をまとめると、いろいろコンテストに出て勉強会に参加する、もしくは開催するといったことを書きました。確かに今回はつらく苦しい場面も多くありました。しかし、これからもっと強くなれる!むしろアド!みたいな考え方になってきて、もっと精進しようという気分になりました。いろんな方が仰っていましたが、セキュリティキャンプはスタートだということを実感しました。まあ他の方がどうかは知りませんが、セキュリティキャンプをきっかけに低レイヤに興味を持ったと言っても過言ではありませんし、なにより、自分自身の技術の高まりを感じました。他の人から見たら些細な進歩かもしれませんが、意外とこの1歩2歩が大事だったりするのです。今まで高レイヤしか知らなかった人間が低レイヤに触れるというきっかけはそうはありません。その貴重な機会となったと考えると良さそうです。これを継続していくことに意味があるとたくさんの方は言われます。まさにその通りだと思います。しかし興味は移り変わるもので、やりたいことはたくさんあります。しかし、今回学んだことは、ただ単純にOSだけの知見ではなく、システム全体、プログラミング全体に関わる大きな知見になったと思います。これを多くの場所でアウトプットし、自分を高めながら、後に続く人たちを出していけたらなと思います。

長くなりましたが、こんな感じです。ただやったことを列挙しただけなので、こんなの読めねえよって方は直接聞いていただければオタク特有の早口で説明します。

最後になりましたが、今回お世話になった講師の内田先生、半田先生、チューターのひばりさんを始め、多くの方に感謝したいと思います。ありがとうございました。これからも精進していきますので今後もよろしくおねがいします。