本日は会社を休んで,たまっている作業をだらだら進めよう.


ちょうど1年くらい前に12ステップ組込みOS自作本が出版されて,本を出したら次は広報と,ここ1年は「組込みOS自作」というものを広めるような活動をしてきた.具体的にはイベント出展や登壇しての発表,関連記事の執筆などだ.


まあ大流行とはいかないが一部ではそれなりに広まってきて,活動の成果がぼちぼち出ているようには思う.


もともと組込みというのは業界主体の活動が多くてコミュニティベースの活動は少なく,業界の人しか入れないというか,別業界のひとや学生とかがちょっと趣味でやってみるというにはなんだか敷居が高いというイメージがある.


これは組込み業界の中にいるひとからは見えにくいことだが,webやLinuxやっているひとから聞いたことでもあるので,実際のところ,そうなのだろうと思う.


なのでぼくの活動は,電子工作やOSとかの低レイヤーをやっているひとというよりも,webアプリやっているような高レイヤーをやっているひとたちをターゲットにしている.(もちろん低レイヤーの人たちも大歓迎だが)


なので実は12ステップ本はハードウェア技術者向けでなく,非常にソフトウェア技術者向けの視点での書き方がされている.高レイヤーから降りてくるひとが理解しやすいような書き方がされているわけだ.


電子工作やっているひとというのは組込みソフトウェアとかも抵抗感無く入れたりするのだけど,上位レイヤーから低レイヤーに降りてくるというのは,なかなか難しいし敷居も高い.自分もそうだったので,そーいうひとたちにまずは興味を持ってもらえるように,そしてもしも興味を持ってもらえたら,次はすんなりと手を出すことができるようにということを考えている.


ということでぼくの組込み関連の活動は,組込み業界に閉じるのではなく,他業界の人や学生さんにアピールして興味を持ってもらったり,あわよくば引っ張り込んだりするようなことを考えている.

組込みの面白さを広めるのに大切なのは組込み業界のイベントで発表することではなく,むしろweb業界のイベントや学生の勉強会とかに飛び込んで行って組込みの話をしてくるようなことをやるべきだと思うので,そうしている.OSCに頻繁に出展したり去年の楽天カンファレンスでLTやってきたのは,まさにそーいう意味合いが強い.


なので実はターゲットは組込み業界でなく,他業界なのです.まあ異端だとも思うけれど,そーいうことをやるひとが一人くらいいてもいいじゃあないですか.


KOZOS開発のポリシーというのはそういうところにあるので,LinuxやAndroidやArduinoとはポリシーが違う.LinuxやAndroidに求められるのは実用性,Arduinoのウリはパッと動かせることだが,KOZOSのポリシーは入門向け(つまり,とっつきやすさ)と学習向け(つまり,組込みOS動作の本質がすべて学べる)という点だ.


だから国産で日本語資料や書籍が多く十分に枯れているH8というCPUを選んでいるし,低価格で購入できて入手性も良い秋月のボードをターゲットにしている.ボードは出来合いのものを使うが,そのかわりソフトウェアはフルスクラッチですべてゼロから作る.このへんはよく「今の時代はARMでやるべきでは」という意見を聞くのだが,ぼくとしてはARMでなくH8で実装することに明確な理由はあるわけだ.


実用向けの組込みプロセッサの世界的な流行りはARMかもしれないが,入門向けに必要なことは世の中の流行がどうかということよりも,まずは初心者向けの日本語の資料が十分にあるか,割込みやレジスタやI/Oや命令セットがシンプルで理解しやすいか,実験するための環境が安価で簡便に構築できるか,といったことのほうが重要だ.だから,そーいう視点でCPU選定・ボード選定をしている.


その後に他のCPUを使う必要がでてきたら,そのときにそれを覚えればいいだけのことだ.「H8で入門したから他のCPUはよくわからない」のだとしたら,それは入門にH8を選んだことが失敗だったのではなく,その後必要になったときにそのCPUの勉強をしていないことがまずいのだと思う.


基礎さえしっかりと身につけば,他のCPUに移行することは難しいことではない.だから複雑なCPUでいきなり基礎を勉強するのではなく,まずは構成がシンプルで理解しやすく資料が充実しているCPUで基礎を勉強して,OSの勉強の面白さを知ってから,その後で徐々に複雑なものを勉強したほうがいいと思う.


この点に関しては,「値段が同じなら高機能なCPUのほうがよい」ということは無い.なぜなら,高機能CPUは割込みまわりが複雑でまともに動かすのにそれなりの設定や知識が必要になったり,シリアル出力をするだけでもいろいろ設定が必要で一苦労だったりするからだ.


たとえば高機能なCPUだとデフォルトで省電力側に振ってあるので,コントローラへの電源供給の設定とクロック供給の設定をしないと,いくらシリアルコントローラの設定をしてもシリアル出力ができなかったりする.そしてその事実はマニュアルのシリアルコントローラの章には書いておらず,電源管理の章とクロック管理の章に点在しているので初心者がパッと気がつけるようなものでは無かったりする.こーいう設定を初心者がすべて独学で行うのはきつい.で,LinuxやArduinoの場合の解決方法は「すでに使えるようにドライバを用意してありますこれを使ってください」なわけだが,これは実用やパッと遊ぶにはとてもいいと思うし否定するものではないのだが,勉強にはなりにくいとは思う.


イベントでぼくがよく言っていることだが,組込みは「大は小を兼ねる」ではなく「適材適所」の世界だ.高機能CPUだからといっても,すべての用途に向いているわけではないのだ.むしろ低機能なほうが取り扱いが楽でありがたい場合も多々ある.


そして重要なことは「勉強の面白さを知る」ということだ.


この点が,仕事でやることなのか個人の勉強でやることなのかの大きな違いになる.仕事でやることならば「仕事なのだからやらなければならない,だからやる(やれ)」で終わりだ.だけど個人の勉強はそうはいかない.まずは面白さを知らないと長続きしない.逆に面白ささえ知ってしまえば,モチベーションを保って勉強を続けることができる.このへんに,プロとアマの会話のギャップがあるように思う.プロに必要なのは「実用性」「業務に直結すること」だが,アマチュアに必要なのは「楽しいこと」「モチベーションを続けられること」だ.


だからぼくはプログラミング言語とかも,最初に本格的な言語をいきなり勉強するのではなく,パッと結果が出て面白い簡単な言語で入門するほうがいいと思う.本格的かどうかということよりも,まずは楽しさを知ることのほうがずっと重要だ.それでまずはプログラミングの楽しさを知って,その後に興味が出ればまた新しい言語を勉強すればいい.その後で他の言語に移行できないとしたら,それは最初に勉強した言語の選択に問題があるのではなく,他の言語の勉強をしようとしないことのほうに問題があると思う.


そもそも組込みなんて多神教の世界で,CPUもOSも星の数ほどあり,それぞれに独自の存在価値があれば生き残っていける(これが,汎用PCとは大きく異なる点だ).だから,これひとつだけ覚えておけばずっと通用するなんていう技術は無い.はやりもすたりもあるし,常に複数の選択肢を持って,取捨選択ができなければならない.必要になったらそのCPUでもOSでも言語でも勉強して身に着けるべきであって,今流行のこれこれを勉強してきたから一生安泰なんて思ったとしたら,そっちのほうがよっぽど危険だよなあ.


だからKOZOSは組込みOS学習の「とっかかり用」のOSとして,実用性はさておいて,楽しんで勉強できるようなものにしていきたい.そのためには初心者用の解説本や勉強会が必要だし,イベント出展などで身近に感じられることや,開発者の話が気軽に聞けること,仲間がいるということも大切だ.そのような複合的な意味で「学習向け」を目指している組込みOSは他に見ないので,これはこれで独自の存在価値がある.