ブログ
リンク
サイボウズ・ラボユース 開発コース
このコースの募集は 2023 年度から復活します。応募をお待ちしております。
低レイヤ開発(担当:内田 公太)
低レイヤ開発コースでは OS や CPU などの開発プロジェクトを募集します。 「ゼロからの OS 自作入門」の執筆や「CPU+コンパイラ自作ワークショップ」の開催経験をもとに、皆さんの研究開発をサポートします。
私は「OS」を広い意味で捉えています。OS=カーネルに限定せず、アプリケーションまで含めて OS という考え方です。 人間が便利にコンピュータを利用し、高度な知的生産活動を行うには、アプリケーションを含めたシステムが重要です。
「OS を作る」と聞くと、メモリ管理プログラムやタスクスケジューラ、デバイスドライバを書くのかと思うかもしれません。 それらは OS の大切な側面ですが、他にも、アプリケーションを作る土台としての側面や人間とのインターフェースとしての側面もあるのです。 例えば、アプリケーション作りを支援するためには、システムコールや各種ライブラリの整備、分かりやすいドキュメントの充実が必要でしょう。 人間にとって分かりやすいインターフェースを提供するためには、どのアプリケーションでも同じ操作ができるように OS が支援したり、 目的のファイルを見つけやすくする機能があるといいかもしれません。
CPU 開発については、CPU の開発自体が目標となるようなテーマでも、何か他の開発プロジェクトの一部として CPU を開発するのでもかまいません。 独自の CPU と並行して専用のコンパイラ(C 言語や独自の言語)を作るようなテーマも歓迎します。
CPU の開発に際しては興味深い要素がたくさんあります。 命令セット、レジスタ構成、信号線と命令デコーダ、周辺機能などです。 命令セットは CPU を特徴づける主要な要素です。 応募に際しては独自の命令セットを持ったものでも、既存の命令セットを採用したものでもかまいませんが、既存の命令セットを採用する場合は他の部分で独自色を出せるといいと思います1。 是非、面白いテーマを考えて応募してください。
※このコースは募集期間が通年ではありませんのでご注意ください(詳細は後述)
開発テーマの独自性について
独自のアイデアが含まれる開発テーマをお待ちしております。 「独自」といっても、世界初のアイデアを求めているわけではありません(もちろん世界初のアイデアも歓迎しますが!)。 例えば、次のようなアイデアでも十分に独自性があると考えます。(採択を保証するものではありません)
- 他の OS が持つ機能を自分の OS にも追加してみる
- 既存の OSS(例えばテキストエディタ)を自分の OS に移植して動かしてみる
- 既存の OS を、ほとんど移植されたことのないプログラミング言語に移植する
- 同じ機能をもつプログラムが他の CPU より省サイズで実現できる CPU を目指す
- パイプライン実行などの高速化機構を自分の CPU に付け足す
- コンパイラの実装に必要な最低限の機能だけを持つ CPU を作ってみる
逆に独自性がないと考えるのは、例えば、書籍などの資料をなぞるだけの開発テーマです。 「OS や CPU の勉強のために○○という本に沿って実装します」だけでは、残念ながら採択されない可能性が高いです。 プロジェクトの初期段階にそのような知識習得の期間がある分にはかまいませんが、メインテーマには独自アイデアを盛り込んでください。
メンターから期待できるサポート
- C、C++、Rust、Python、Verilog で書かれたコードのレビュー
- x86-64、PCI、UEFI、USB、FPGA、電子回路、マイコンなどの知見の提供
- アルゴリズムや手法を一緒に考えたり、改良するための議論
- 文章執筆やプレゼン発表のアドバイス
応募要件
本コースへの応募に際しては、開発に用いるプログラミング言語などの基礎的技能をあらかじめ習得している必要があります。 可能であれば、能力を説明する資料(自作プログラムを載せた GitHub リポジトリや、これまでの活動が分かるブログ記事など)を応募用紙に書いてください。
C言語を例に、言語スキルの到達指標を載せます。 これらが絶対条件ではありませんが、レベル感の参考にしてください。
- ソースコードの理解:「はじめての OS コードリーディング」や「ゼロからの OS 自作入門」に掲載されているコード各行の動作は分かりますか? 書籍の内容に理解できない箇所があったとしても、ソースコードに関しては、少なくとも構文を理解できる程度のスキルは必要です。
- プログラムの作成:書籍やウェブサイト等を見ずに、malloc/free を使って双方向リンクリストを実装できますか? 本コースが対象にするような低レイヤの世界では、ポインタを使いこなせる力が必要です。
募集期間
本コースは募集期間が通年ではありません。以下のスケジュールを確認してください。
- 第 13 期のスケジュール
- 2023 年 5 月 10 日:応募締め切り
- 2023 年 5 月 15 日~5 月 22 日頃:書類選考の結果通知
- 2023 年 5 月 22 日~6 月 12 日頃:面接の実施と結果通知
- 採択から最長 1 年間:ラボユースで活動
ラボユース活動の進め方
本コースに採択された場合、典型的には週に 20~30 分ほどの定例会議を設定します(個別の調整あり)。 普段は個人で開発を進めてもらい、定例会議で進捗を確認したり質疑応答を行ったり、コードレビューを実施したりします。 ラボユース活動を効果的なものとするためには、定例会議に臨む前に、話したいことを整理しておくと良いです。
必要に応じて別途時間を取り、何らかのトピックについて講義したりコードレビューの延長戦をしたりすることもあります。 これら追加の活動は、ラボユース(研究)生からの求めがあり、メンターの都合がつく場合に実施されます。
-
逆に、既存の命令セットを採用することで独自性を出せる可能性もあります。実機が手に入らないような珍しい CPU の命令セットを模倣し、その CPU 向けのプログラムを無改造で動かす、というテーマの場合、既存の命令セットであるからこその独自性があるでしょう。 ↩