サイボウズ・ラボユース 開発テーマ

低レイヤゼミ(担当:内田 公太

低レイヤゼミでは低レイヤ的視点を持ったソフトウェアの開発プロジェクトを募集します。 OSの開発とプログラム解析・合成ツールの開発の2つのテーマを主としますが,その他でも私が面白いと思うテーマであれば受け付けます。

低レイヤ的視点というのは一段低いところから物事を見ることです。 一段低いところのソフトウェアを開発することで,より広い範囲に効果を発揮することができます。 例えば「Wikiシステムの開発」に対して「Wiki記法を提供するグラフ構造ファイルシステムの開発」は低レイヤ的視点を持っていると私は考えます。 Wikiシステムは1つのアプリケーションに閉じますが,ファイルシステムなら様々なアプリケーションにその恩恵をもたらせるのです。

募集する開発テーマ

低レイヤゼミでは,主に2つの「低レイヤ」なテーマで開発プロジェクトを募集します。

オペレーティングシステム(OS)

このテーマでは,1から自分のOSを作るとか,既存のOSを拡張したい人を募集します。 今までにない独創的なOSを作ってみたい,自作の電子回路用のデバイスドライバを書いてみたい, 知的生産活動を支援するアプリ横断の機能を作ってみたい,などを想定していますが,それ以外のテーマでも構いません。

私は「OS」を広い意味で捉えています。OS=カーネルに限定せず,アプリケーションまで含めてOSという考え方です。 人間が便利にコンピューターを利用でき,高度な知的生産活動を行うには,アプリケーションを含めたシステム全体の設計が重要です。 「OS」テーマはメモリ管理プログラムやデバイスドライバを書くだけではない,その言葉の印象とは裏腹にとても範囲の広いゼミなのです。 教科書の通りに実装するのではなく,独自の世界観や機能を持つOSを作り上げることが望ましいです。

広い意味でのOSであってもカーネルやドライバの開発が必要になります。 カーネルやドライバ開発が未経験であれば,始めの数カ月は教科書に沿って勉強し, その後で独自性を盛り込んだOSを作るという計画で大丈夫ですので応募してみてください。 長年x86-64向けのOSを自作してきた経験をもとに,私が皆さんの開発をサポートします。

プログラム解析・合成ツール

プログラムには必ずバグが潜んでいます。プログラムを解析して自動的にバグを見つけるツールはプログラマのデバッグ作業を強力にサポートします。 例えば並行プログラムの競合状態は見つけたり直すのが難しいバグの1種ですが,どんなパターンでスレッドが切り替わると競合状態が発生するかが分かるとデバッグがしやすくなるでしょう。

また,プログラマが仕様を与えるだけでプログラムが自動合成できれば時間や労力を削減できるかもしれませんし, プログラマの想像を超える効率の良いプログラムを得られるかもしれません。 実際,将棋や囲碁の世界ではAIにより次々に新手が編み出されていますよね。

プログラム解析は対象プログラムの一段下から解析をすることになります。 プログラム合成は仕様を実装に落とし込むため,やはりレイヤが一段下がります。 そのような理由から,私はこれらを低レイヤ技術だと考えています。

このテーマではプログラム解析,合成ツールを開発したい人を募集します。 解析対象はソースコード,バイトコード,機械語など,限定しません。 私はプログラム解析,合成の分野ではまだまだ初心者です。一緒に勉強しながら知識を付け,開発しませんか?

その他

その他にも,私が興味を持ちそうな開発テーマを思いついたら応募してみてください。

メンターから期待できるサポート

  • C,C++,Pythonで書かれたコードのレビュー
  • x86-64,PCI,UEFI,USB,電子回路などの知見の提供
  • アルゴリズムや手法に関する議論
  • 文章構成やプレゼンの指導

応募要件

本年の「低レイヤゼミ」は OS や周辺技術の開発支援を主としており, 開発に用いるプログラミング言語をあらかじめ習得されている方を対象としております。

きっと C 言語を使おうと思う人が多いと思いますので,C 言語スキルの到達指標を載せます。 これらが絶対条件ではありませんが,本ゼミで求めているレベル感の参考にしてください。

  • ソースコードの理解:「はじめての OS コードリーディング」や「30 日でできる!OS 自作入門」 に掲載されているコードの各行の意味が分かる程度が目安です。 本の内容自体は難しいかもしれませんが,各行の構文や意味が分かる程度のスキルが望まれます。
  • プログラムの作成:書籍やウェブサイト等を見ずに,malloc/free を使って双方向リンクリストを実装できますか? 本ゼミが対象にするソフトウェア分野ではポインタを使いこなしたプログラミングができると良いですね。