mruby専用クラウドOS「μOSv」を作りました

追記:μOSvはOSv本家にマージされました。
こちらのWikiの「OSvをビルドしてより多くのアプリを試す」以下を参照して下さい。



μOSvというものをgithubで公開したので、ここに簡単な説明を書いておきます。

実行イメージ動画:

これは何?(OSvを知らない人向けの説明)

ローカルマシン上のKVMXenや一部のIaaSサービス・VPSなどで走る、mrubyスクリプトを実行する事のみに特化されたOSです。
mrubyインタプリタの実行に汎用OSを必要としないため、とても少ないメモリ使用量(今のところ90MB以上なら動く)・ディスクイメージサイズ(今のところ26MB)・とても速い起動時間(今のところ2秒くらい)で動作します。
mrubyなのでRubyで使えるAPIが全て使えるわけではありませんが、ネットワークアクセスを行う小さなアプリケーションであればLinux上で動作するRubyスクリプトを作るのに近いイメージで気軽にスクリプトを書くことが出来ます。
OSvというJavaアプリケーション専用のオープンソースなOSを改造して実装しています。

OSvを知っている人向けの説明

OSvのビルド設定を弄ってOpenJDKやJavaアプリケーションを取り外し、ZFSを無効化し、代わりにmrubyを実行するようにしたものです。
実際にはOSvのforkではなく、OSvのビルドステージを改造するシェルスクリプトを配布しているものです(厳密には、"module support" patchが未マージなために本家のosvリポジトリを使用していませんが、マージされればこれは解消できます)。
オリジナルのOSvで使われているCRaSHシェルはJava実装であるため、これは削除して代わりにmrubyで書いた小さなシェルを実装しました(今のところlsとmrubyプログラム実行くらいしか出来ませんが)。
残念ながらssh/sftpには対応していませんが、代わりにユーザが書いたmrubyスクリプトをディスクイメージに書き込む仕組みと、シェルからmrubyプログラムを実行する機能を備えています。

ビルド方法、実行方法など

githubのREADME.mdを読んで下さい。
現状ではμOSvの大本となっているOSvやmruby、各種mrbgemsも含めて何もかもが開発途上バージョンなため、ビルド失敗や実行時エラーなどが普通に起こるので、githubのissuesTwitterなどでガンガン報告して下さい。
Ubuntu 13.10+KVM以外の環境では全くテストされていないので、他の環境でも試して頂けると助かります(※ただし、KVMXen以外のVMMでは動きませんのでご了承下さい)。

μOSvのmrubyで使えるAPIは?

build_config.rbでconf.gemされているものだけが動作します。
このmrbgemsも入れてくれ、という要望はgithubのissuesに書くか、黙ってポーティングしてpull requestして下さい。

ライセンス?

ごった煮なので流用しているコードによって複数の種類のライセンスが適用されていますが、いわゆるオープンソースです。
GPLは混じっているかもしれません、そのうち整理しようと思います)

基本的にmruby関係はほぼMIT、OSv関係はほぼBSDLです。

product dependencies license
OSv FreeBSD, ZFS, Prex, Musl BSDL
FreeBSD - BSDL
ZFS(disabled) - CDDL
Prex - MIT
Musl - MIT, BSDL
mruby - MIT
mruby-dir - MIT
mruby-env - MIT
mruby-errno - MIT
mruby-ipaddr - MIT
mruby-mock - MIT
mruby-mtest - MIT
mruby-pack - MIT
mruby-process - MIT
mruby-regexp-pcre - MIT
mruby-require - MIT
mruby-simple-random - MIT
mruby-socket - MIT
mruby-tempfile - MIT
mruby-msgpack - MIT
mruby-uv libuv MIT
libuv - MIT
mruby-http mruby-uv MIT
mruby-json - MIT
mruby-msgpack-rpc mruby-socket,mruby-msgpack MIT
mruby-yaml libyaml MIT
libyaml - MIT
mruby-base64 - MIT
mruby-md5 - MIT
mruby-vedis - Sleepycat License
mruby-sleep - MIT
mruby-simplehttp - MIT
mruby-httprequest - MIT
mruby-aws-s3 mruby-uv, mruby-http, mruby-digest, mruby-pack, mruby-simplehttp, mruby-httprequest MIT
mruby-cfunc libffi MIT
libffi mruby-cfunc MIT
μOSv build scripts - MIT
mruby-eshell mruby-io,mruby-dir,mruby-ipaddr MIT

これらのコピーレフトなモジュールはデフォルトで無効にされています。

product dependencies license
mruby-polarssl PolarSSL LGPLv3
PolarSSL - GPL/Commercial(Dual)
mruby-sha1 - GPL

現状の問題点

  • mruby-libuvがまだ不安定でOSvへ移植したlibuvが未だ不安定なため、mruby-uvを使用するとOSvが落ちる事があります。
  • OSvに含まれていたZFSを外してしまったので、ramfsしか搭載していません。ファイルを書き込むことは可能ですが、再起動・シャットダウンでデータが失われます。ZFSを再び有効化するのは簡単ですが、大量のメモリを消費してしまうのでμOSvの用途に合いません。