Skip to content

Instantly share code, notes, and snippets.

@voluntas
Last active January 15, 2024 11:34
Show Gist options
  • Star 26 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save voluntas/9ebec70e6240741702e0eb484e696b10 to your computer and use it in GitHub Desktop.
Save voluntas/9ebec70e6240741702e0eb484e696b10 to your computer and use it in GitHub Desktop.
2022 年の夏休みに Zig で QUIC を実装してオープンソースとして公開するお手伝い

2022 年の夏休みに Zig で QUIC を実装してオープンソースとして公開するお手伝い

こちらの応募は終了しました、冬も募集予定です。

成果

目的

夏休み学生向けの OSS スポンサーくらいに考えてもらえれば

  • Zig がとても良い言語だと感じているが、学ぶ余裕はないので代わりに学んで教えて欲しい
  • QUIC は今後インターネットにおいてとても重要な技術となるため学生の間に学んで欲しい
  • TLS は実装しておくとよい経験になるので学生の間に学んで欲しい

注意

この仕事ははインターンではなく、ただのお仕事(準委任)です。

募集人数

  • 最大 2 名

3 名と面談することになりました。応募は終了しました。

応募期限

  • 7/31 まで

早く応募いただいた方から順に面接を行い、双方合意したら契約を行います。

契約開始可能日

  • 8/1 から 8/15 の間

応募条件

  • 学生で 18 歳以上であること
  • Zig (master ブランチ) の std ライブラリのみを利用し TLS 1.3 ClientHello を実装して OpenSSL 3.0 系の openssl s_server から ServerHello を受け取れるクライアントを応募時に GitHub Gist Private に書いて URL を提出すること
    • これを元に必要な技術を持ち合わせているか判断する
  • 契約開始日から約 1 ヶ月間の間で 120 時間を開発にコミットできること
  • QUIC や TLS 1.3 に関する RFC を翻訳ツールなどを使って読むことができること
  • 開発するにあたり、人と相談しながら進められること
  • 何度も同じ質問されても苦にならないこと
  • Git / GitHub が利用できること
  • Discord でのやりとりが苦にならないこと
  • 自分のペースで進められること

特例

一応、学生以外の方も応募可能、ただし学生からの応募を優先する。

応募方法

  • 技術面は Zig による TLS 1.3 Client Hello 実装で確認します
  • その他は面談にて確認します

フェーズ 1

時雨堂コミュニティの Discord サーバー https://discord.gg/shiguredo の #zig-quic チャネルにて @voluntas 宛てに仕事に応募したい旨をメンション飛ばし、 voluntas#6815 宛てに DM で TLS 1.3 Client Hello 実装の Gist URL を送る。

voluntas#6815 から受領のリプライを受け取ったら、応募完了とする。

申込時にはこれ以上の情報を送ってこないこと。

実装評価ポイント

  • ClientHelloExtension
  • HelloRetryRequest
  • ServerHello
  • EncryptedExtensions
  • Certificate
  • CertificateVerify
  • Finished
  • Test
  • Logging
  • Document

フェーズ 2

  • Zig による TLS 1.3 Client Hello の実装をみて、問題ないと判断したらこちらから連絡します
  • 30 分程度ビデオ会議をお願いします
    • 応募した動機などを伺います
    • ここで契約するかどうかを判断します

事前に以下の内容を DM にてお送りください。いただいた情報はこの仕事の契約でのみ利用します。

  • 名前 (フルネームをふりがな付きで)
  • 年齢 (18 歳以上かどうか確認のため)
  • 大学名 (学生であることを証明できるなにか)
  • QUIC サーバ、クライアントどちらを実装したいか
  • いつから作業を開始したいか
  • 延長希望はあるかどうか
  • flano_yuki のメンター必要かどうか

フェーズ 3

  • 契約書を用意しますので、内容が問題なければ合意して契約完了とし開発開始
    • 契約開始日から約一ヶ月間で 120 時間を作業に当てる
      • 60 時間の延長は可能

契約内容

  • 報酬は 120 時間で 40 万円とする
    • 追加で +60 時間、合計 180 時間まで延長できる
    • 追加時の報酬は 60 万円となる

例えば 8/1 契約で、そこから 120 時間 (1 日 6 時間程度) で土日を休みとして 8/26 までには終了する想定。

仕事内容

  • Zig (master ブランチ) の std ライブラリのみを利用し QUIC のクライアントまたはサーバーを実装する
    • macOS / Linux の両方で動作すること
  • 開発中のソースコードは shiguerdo/zig-quic として Apache License 2.0 にて公開すること
    • コピーライトは契約者と時雨堂とする
  • 完璧を目指す必要は無い
    • 最終的に動作はしなかったというのでも良い
  • ギブアップも可能
    • ギブアップした場合はギブアップするまでに労働した時間x報酬金額の時給換算で支払う
  • 日本国内からのフルリモート前提

ゴール

cloudflare/quiche や aioquic や go-quic と正常にやりとりができること

  • QUIC v1 とする
  • サーバーを実装する場合はスケーラビリティ意識せずに非同期シングルスレッドでよい
    • もちろんマルチスレッドワーカーモデルが実装できればなお良い
  • セキュリティ問題を意識する必要はない

開発方針

  • 時雨堂コミュニティの Discord サーバーのパブリックチャネル #zig-quic を利用する
  • 開発進捗は 1 週間に 1 度、進捗を Discord にて共有すること
  • 基本的には自分のペースで自由に進めて貰って問題ない
    • コアタイムなどはなし
    • こちらかあれをやれ、これをやれといった指示はしない
  • 希望があれば QUIC の相談に乗れる人として @flano_yuki を用意する

質問など

時雨堂コミュニティの Discord サーバーのパブリックチャネル #zig-quic でどうぞ。

https://discord.gg/shiguredo

おまけ

  • 仕事がが決まったら、ラムダノートから出版されている QUIC または TLS に関連する書籍をプレゼント

延長戦

  • 本人が希望すれば 10 月以降も月 10 万円を目安に契約可能
    • こちらの手が回らなくなることがわかったので、一旦終了
  • QUIC 足りてない部分を実装していく
    • qlog
    • Multipath QUIC
    • QUIC v2
  • HTTP/2 を実装していく
  • HTTP/3 を実装していく
  • WebTransport を実装していく
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment