🐋

サイボウズ・ラボユースでコンテナランタイムを作ります

#tech#zatsu

2024-5-7

タイトルの通り,サイボウズ・ラボユースに「Rustで"小さな"コンテナランタイムを作る」的なテーマ(詳細後述)で応募して第14期生として採択された.存在自体は去年くらいに知っていたが今年になって出す気になって出した.詳細は後述するし,そこで述べているのだが,ランタイム作成自体は最低要件でしかなく,これをどれだけ早めに片付けてそこにどういった独自性を持たせられるかという部分が勝負のしどころと考えている.ラボユースの過去に採択された人たちを見るとかなり錚々たるメンバーといった感じなのでその人たちに続けることはかなり嬉しい.

ラボユースとは

サイボウズ株式会社がやっている事業で,言ってしまえば趣味の開発に対して給与が出る.まあ未踏事業の民間資金版と思えば良いと思うし,実際未踏名鑑にもそんな感じで書いてあるのだからそういう認識で良いんだと思う.

一応枠としてはサイボウズ・ラボユース生以外にもサイボウズ・ラボユース研究生というのがあり,こちらは給与支払いが無く,翌年度以降にサイボウズ・ラボユース生に応募できるという形らしいが,この枠での採択がどの程度あるのか不明(最初の方は成果発表会のブログ[1]に枠が書かれていたが,最近は書かれていないため).

公式のリンクはこれ

経過

説明会に出る

第14期用の説明会があったので出た.

実際の募集自体はこれより1週間くらい前から開始していたので出してしまっても良かったのだが,何となく持っていた疑問を解消してからにしたいと思い,実際解消できたので,終了後30分くらいで文をフォームに書いて投げた.

面談をする

フォームに書いた内容が審査され,いわゆる書類選考を通過したらしい.面談をすることになったのだが,1時間の枠でかなりパソコンの話をしていたと思う.本当に悪い癖である.何を思ったか徐にCVE-2024-21626の話とかGoの名前空間の話をしてしまった.コミュニケーションが下手.

聞かれる内容は当然人によって異なると思うのだが,自分はこれまでのプログラミング経験やコンテナ技術に興味を持った経緯,何故Rustなのか,コンテナランタイムの機序,B4なので卒研との折り合いをどうつけるか,現在取り込んでいること,ラボユース期間での開発の着地点の見通しなどについて聞かれた.

現在

2024/4/26の午前に面談を行い,2024/5/7の午前に結果が返ってきた[2]ということで現在に至る.2024/4/27~2024/5/6は所謂ゴールデンウィークなため,もう少しかかるだろうと踏んでいたがそんなことは無かった.よく分からない.

やること

プリミティブな機能を備えたミニマルなコンテナランタイムをRustで作る.これは最低要件でしかないため,何かしらの独自機能は備える可能性がかなり高い(多分基本的な部分だけの実装だとそもそもそこまで時間を使わないという見立てが自分の中であるし).

なぜコンテナランタイムなのか

(以下の文章は応募に用いた文章ではない(メールから引っ張ってくるのが面倒なので).ニュアンスは大体同じだと思う)

近年ではコンテナ技術が急速に人口に膾炙している.これは実際に様々な場所で労働などをしてきた経験からも実感がある.また,2024年度中にはcontainerdのV2が正式リリースされる可能性が高い.これはrunwasiによるwasmアプリケーションの管理や,shimにttrpcのみならずgRPCを用いることができるようになるなど,様々な機能拡張が入る可能性が高い.

この様に話題に事欠かないコンテナ技術だが,その実,コンテナ技術は様々なレイヤーの複合体であり,その安全な運用には正確で広範な知識が求められるため,システムの構築者はこれを有しておくべきであるという持論がある.実際にコンテナランタイムがどのような動きをするのかを知るには実装に当たるのが一番であるが,如何せんruncなどは巨大であるため,万人が取っ掛かりを得られるわけではないと考える.

そこでミニマルな,しかし使途として求められる広範な機能を有しているOCI specification準拠の低級コンテナランタイムを実装することで,理解しやすいコンテナランタイム実装を提供したいと考えている.ここに如何様な独自性を持たせるかは検討段階で,何も決まっていない(はい).ネタは何個かありだが全てやるかどうか未確定だし,随時募集中といった感じ.

何故Rustなのか

コンテナランタイムの実装には,CやC++,Goが用いられることが多い.しかし前者は足を撃ち抜く可能性がかなりあり,後者は,特に低級コンテナランタイムであれば自ずと多くなるシステムコールの呼び出しをシュッとはできないといった問題がある.またGoについてはスレッド管理に対する低レベル制御に関する問題が指摘されていたりする.

Rustは両者の欠点らしきものが薄いので,適すると考える.

脚注
  1. こういうのとか ↩︎

  2. 普通に生活習慣が終わっているので,連絡が来ていた11:00くらいには余裕で寝ていた ↩︎