サイボウズ・ラボへ転籍して1年を振り返る

196 Views

December 26, 20

スライド概要

uchanが2020年1月にサイボウズ・ラボ株式会社へ転籍したので、1年の振り返りをしました。

profile-image

サイボウズ・ラボ株式会社で教育向けのOSやCPU、コンパイラなどの研究開発をしています。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

サイボウズ・ラボへ転籍 して1年を振り返る 2020年12月26日 忘れないゼミ@Discord サイボウズ・ラボ 内田公太

2.

自己紹介 名前:内田公太 Twitter:@uchan_nos  2018年~東京工業大学 情報工学系 特任助教(週2)  2020年~サイボウズ・ラボ株式会社(週3) 2008年にロ技研入部 2012年6月~2013年3月:サイボウズ・ラボユース第2期生 2014年4月~2020年1月:サイボウズ株式会社 2020年1月~現在:サイボウズ・ラボ株式会社

3.

みなさん、この本知ってますか? • 2006年に出版された • 30日かけてOSを手作りする • 内田はこの本でOSを学んだ • 中学2年頃に川合さんから原稿を 渡されて読んでた • 内田のバイブル的存在

4.

低レイヤ技術者育成 内田のラボでの活動テーマは「低レイヤ技術者育成」 2020年のラボカツ  現代のPCで動く教育用OSの開発 『30日でできる!OS自作入門』の「はりぼてOS」はもう起動しない  セキュリティ・キャンプ全国大会 2020 オンライン 低レイヤ技術に明るい若者の発掘・育成をするよ  OSと言語処理系を全部自作するOpeLaプロジェクト セルフホストなOS+言語処理系を自作するという夢を追い求めるよ

5.

ラボカツ1:教育用OSの開発 MikanOS  未完、蜜柑  https://github.com/uchan-nos/mikanos MikanOSの特徴  UEFIで起動  64ビットモードで動作  USBマウス・キーボードが使える  ページングによるメモリ管理 MikanOSの見た目

6.

東工大での自作OSの授業 システム開発プロジェクト応用第二  シラバス http://www.ocw.titech.ac.jp/index.php?module=General&action=T0300&GakubuCD=4&GakkaCD=342323&KeiCD=23&course=23&KougiCD=202004868&Nendo=2020&vid=03 今年限りの講義 200分×7回で自作OSの全体像を舐めていく  オペレーティングシステム / UEFIと64ビット環境  画面描画とフォント / PS/2とUSBマウス  APICと割り込み / メモリ管理  タイマー / マルチタスク  ファイルシステム / アプリケーション  アドレス変換 / システムコール  アプリによるファイル読み書き / アプリのメモリ管理

7.

ラボカツ2:セキュリティ・キャンプ 「システムソフトウェア自作トラック」のプロデュースを担当 今年も多数の低レイヤ人材を輩出! システムソフトウェア自作トラック: コンピュータシステムの基盤となるシステムソフトウェアを実際 に手を動かして作ることで理解を深める  OS  データベース  Cコンパイラ

8.

ラボカツ3:OpeLaプロジェクト セルフホストなOSと言語処理系を自作  OpeLa OS  OpeLa言語仕様とコンパイラ  x86-64/AArch64アセンブラ  リンカ、ライブラリ、ビルドツール OpeLaを道具として、低レイヤに興味 ある若い人を発掘・育成したい ドキュメント https://github.com/osdev-jp/osdev-jp.github.io/wiki/uchan-OpeLa 自作コンパイラ ソースコード 入力 第1世代 自作コンパイラ コンパイル 第2世代 自作コンパイラ セルフホスト: 自分自身をコンパイルすること

9.

自作言語をセルフホストする道のり 第1世代 自作コンパイラ opelac.cpp 書き直し 入力 入力 入力 コンパイル clang++ 第2世代 自作コンパイラ opelac.opl 第1世代 自作コンパイラ コンパイル 第2世代 自作コンパイラ コンパイル ここまでくれば ぐるぐる回せる (はず) 第3世代 自作コンパイラ

10.

OpeLaの進捗 OpeLaコンパイラに基礎的な文法を実装した  四則演算、大小比較  ローカル、グローバル変数  if、for  関数定義と呼び出し  ポインタ、配列、文字列 x86-64とAArch64のアセンブラを出力するようにした  x86-64のLinuxと、M1 Macで実験可能 lewing@isc.tamu.edu Larry Ewing and The GIMP https://www.apple.com/jp/mac/m1/

11.
[beta]
OpeLa言語によるRPN
func main() {
var stk [128]int;
stk_i := 0;
var a int;
var b int;

var buf [128]char;
bytes := read(0, &buf[0], 128);
p := &buf[0];
for i := 0; i < bytes; i += 1 {
if p[i] == ' ' || p[i] == '\n' {
} else if p[i] == '+' {
b = stk[stk_i];
a = stk[stk_i - 1];
stk[stk_i - 1] = a + b;
stk_i -= 1;
} else if p[i] == '-' {
b = stk[stk_i];
a = stk[stk_i - 1];
stk[stk_i - 1] = a - b;
stk_i -= 1;
} else if p[i] == '*' {

b = stk[stk_i];
a = stk[stk_i - 1];
stk[stk_i - 1] = a * b;
stk_i -= 1;
} else if p[i] == '/' {
b = stk[stk_i];
a = stk[stk_i - 1];
stk[stk_i - 1] = a / b;
stk_i -= 1;
} else { // digit
stk_i += 1;
stk[stk_i] = p[i] - '0';
}
}
var s [2]char;
s[0] = stk[stk_i] + '0';
s[1] = '\n';
write(1, &s[0], 2);

}
extern "C" read func(fd int, s *char, n int) int;
extern "C" write func(fd int, s *char, n int) int;

12.

【完全版】自作セルフホストの道のり 第1世代 opelac.cpp 第2世代 opelac.opl clang++ 第1世代 opelac 自作OS用 opelac.opl 第2世代 opelac これらはLinux用opelac 第3世代 opelac 自作OS用 opelac 自作OS向 けに修正

13.

自作OSのセルフホストを目指して 自作OS my_os.opl 1 自作OS用 opelac.opl 1. 自作OSをLinux用opelacでク ロスコンパイル 2. 自作OS向けに調整した自作 言語処理系をLinux用opelac でクロスコンパイル 3. 自作OSを自作OS用opelacで コンパイル 4. 自作OS向けに調整した自作 言語処理系を自作OS用 opelacでコンパイル 4 2 3 Linux用 opelac 自作OS用 opelac Linux 自作OS

14.

まとめ 内田のラボでの活動テーマは「低レイヤ技術者育成」 MikanOSを作ったよ セキュリティ・キャンプのプロデューサをやったよ OpeLaコンパイラを実装してるよ

15.

【宣伝】サイボウズ・ラボユース 世界に通用する日本の若手エンジニアの発掘と育成が目的 学生の若手クリエイターに研究開発の機会を提供する場 https://labs.cybozu.co.jp/youth.html 「サイボウズ・ラボユース生」 アルバイト代が出る(上限:年間103万円) サイボウズ・ラボ社員からのアドバイスがある 成果物の権利はラボユース生に帰属  成果物を卒論や修論にしてもいいし、売ったりしてもいい  原則としてOSSにする、以外の制約がない