重力に縋るな

千種夜羽です

夏休みにconnectFreeのインターンに行った話

3週間京都でインターンしてた

ブログ書くのめっちゃ久しぶりですね.sksatです.

ちなみに大学生になりました. 大学受験のこととか,大学生活のこととかはそのうちなんか書こうと思います.

で,まあなんだかんだあったとはいえ大学生という身分を利用して最近色々やってます. 研究室入ったり,ロケット打ったりとかね.

あと,長い夏休みを利用して3週間ほどconnectFreeという会社にインターンに行ったりしてました.今回はその話です.

経緯

一般的なインターンって,会社が募集して学生が申し込んで,なんかしらの選考を受けて...とかやるらしいんですが, 今回は全然そんなかんじじゃなくて,行きたいな〜と思っていたらスッと決まっていました.すげえ.

多分最初にconnectFreeに興味を持ったのはLDScellさんのブログ記事だったと思います.

「アホだから,やるんだよ!」,なんでもかんでも自分で車輪の再発明しちゃいたいオタクっぽくてめちゃめちゃ好き. 低レイヤで面白いことやってる企業ってだけでもう興味しかないですね. その後,鮟鱇さんのツイートを見て更に興味が湧きました.

僕は計算機弄りが大好きで,大学も計算機弄るために進学したようなものです. なので,バイトとかやるとしても計算機弄りがいいなあと思っていました(まあ,他が無理というのもあります). でも,計算機弄ってたらお金が貰えるようなものって大体Web〜,とかスマホアプリ〜,とかばっかりじゃないですか(偏見). そもそも僕が計算機弄りを初めたきっかけは中学生の時に『30日でできる!OS自作入門』に何故か出会ってしまったからで, それからも低めのレイヤでわちゃわちゃするか数値計算っぽいことをやるかぐらいしかしてませんでした. ゲーム自作とかもほとんどやったことないですし.

もちろん,組み込み系のところを探せば低レイヤでわちゃわちゃすることもできると思うんですが, あんまりこのご時世に責任が発生するものをCでゴリゴリと書きたくはないですね... 贅沢かもしれないですがせめてC++(11,14,17)は使いたいですし,ナウでホットなRustとか使ってたらめっちゃ良いですよね. Rustあんまり書いたことないけど.

そんなことを思いながらなんとなくバイトを探すなどしていたんですが, そこでこんなものを見たらエーッッッこれ面白そう!!!ってなっちゃうわけです.

そんなこんなでconnectFree面白そうだな〜と思ってツイッターをしていたらなんか見学させてもらえることになったので見学させてもらいました.

見学では,

  • EVER/IPのデモ
  • Zen言語
  • NETBOY

などを軽く見せてもらいました.

EVER/IPはL3のセキュアなプロトコルで, アドレスなどがIPv6互換になっているため,上のレイヤのソフトウェアを書き換えることなく導入が可能になっています. 実際に,connectFreeのGitLabはEVER/IPを使って運用されていて,「自社プロダクトで開発環境が運用されてるのめちゃめちゃ良いな...」と思いました.

ZenはconnectFreeが独自開発しているシステムプログラミング言語で,Zigという言語をforkしたものです. ベアメタル環境などで使われることをとても意識した言語で,標準ライブラリも多くのものがベアメタル環境でも使うことができるようになっています. その上,パターンマッチなどのモダンな言語機能や,メモリアクセスの範囲チェックをコンパイル時に行ってくれたりします.

NETBOYは独自のボードで,もちろんこれの上で動くOSもZenで書くとの話でした.

気持ちになりました.はい.

めちゃめちゃ良さそうだったので,帰り際にぜひバイトとかしてみたいですね〜みたいなことを話しました.

その後,第15回Kernel/VM探検隊に行ったらconnectFreeのCEOが発表してたので, 直接会って話したら,「来たらええやん!」と言われてなんか京都に行くことになっていました.ウケる.

経緯としてはこんなかんじです. そんなわけで9/2〜9/20の間京都に行ってじっくりインターンをやらせてもらいました. ちなみに,京都までの交通費はもちろん,インターンの間住む所の手配とかも全部総務の人がやってくれました.

やったこと

Zen言語の学習

connectFreeでは色々なソフトウェアがZenで書かれているため, 最初の数日はZen言語の学習をしていました. @LDScellさんが作っていた色々なドキュメント(zenbeddedとか)を見ながら色々書いてはコンパイラに怒らていました. ちゃんと怒ってくれるコンパイラも,ベアメタルでも使える色々な標準ライブラリも,諸々のモダンな文法もすげえ...ってなってました.

現在は基本文法・標準ライブラリのドキュメントが公開されているので,興味がある人は見てみてください. Public Beta版のコンパイラも公開されているので,ぜひ遊んでみてください!

個人的には,u1,u2みたいなビット数を指定した変数を作ることができるとことか, comptimeでコンパイル時計算がゴリゴリできるところとか, interfaceとか,UEFIプロトコルが標準ライブラリにあるところとかが好きです.

Zenを使った(組み込み)OS開発

Zenを一通り学んだ後,Zenで組み込みOSを作っていました.やったぜ. 独自のプログラミング言語で独自のOSをフルスクラッチできるインターンとか最高すぎるし他では(多分)絶対できないんだよなあ...ありがてえ...

どのZenの機能をどう使ったら綺麗に実装できるかな〜と考えてコンパイラに怒られるのは楽しかったです. また,途中からこのOSは複数人で開発することになったのですが,今まで複数人での開発というものをやったことが無かったので色々と新鮮でした.

あと,インターン中にもZenコンパイラはゴリゴリと実装が進められていくので, それを眺めるのも,出社即git pullしてmakeするのも,「エーッ先週CEOと話してたことが新機能として生え初めてる!?」ってなるのも楽しかったです.

その後

インターン中に弄っていた開発ボードを貰うなど.中々高機能なので弄り甲斐があるボードです.

そして,お賃金の方も結構いただけたので,思い切って人生初の「自作PC」ってやつをやりました. まあ自作といっても本当に買ってきたパーツを組み上げるだけでしたが.

あとなんかアキバでオタクに煽られて光るメモリにしました. メモリが光ると何がうれしいのかよく分かりませんが,なんとメモリが光るんですよね.

あと調子に乗ってNVMeにしました.速くてうれしい.

もちろんArch Linuxを入れました.

また,インターンが終わった後もリモートでちょいちょい働かせてもらえることになりました. というかしてます.やったね! 多分また長期休暇期間に京都行って集中的にやりたいなーとも思ってます.

あと,僕はどうやらconnectFree初のインターン生だったみたいなのですが, 技術書執筆サークルの強いオタクがconnectFreeに興味を持っていたので社の人に紹介したらちょうど僕と入れ替わりぐらいのタイミングで京都に吸い込まれていきました.

元気にZenを書いているみたいで何よりです. 僕も元気にZenを書いていきたいですね. そのうちロケットの電装に使いたいなあ...