金曜ごはん #13 「醤油と塩の2種のお鍋」
おごちゃん
先日Orcinusを開発した理由について書きました。
そのプラットフォームであるCassetteOSを開発した理由については、以前書いています。
CassetteOSについては、結構いい感じに動いていますので、「Ver 1」としてはこれで十分じゃないかと思っています。 あくまでも「better CasaOS」でしかありませんが、それでもbetter CasaOSとしては十分です。 後はアプリストアを充実させることが仕事です。
ただ、これで「OS」として満足かと言えばそうでもありません。 確かに「パーソナルクラウドOS」としては十分ですが、これをさらに発展させて「オフィスクラウドOS」にしたいと思ってます。 そこで、今後どうするかという話を書こうと思います。
背景
CasaOSは「パーソナルクラウドOS」としては良くできていると思います。 何よりも「見た目」とか「アプリストア」とかそういった部分に、「さすがは商品として開発したな」と感じさせるものがあります。 この辺は機能云々と言うより「商品としての完成度」の話と言って良いでしょう。 それは機能で大差ないRuntipiと比較しても感じます。 それゆえ、CassetteOSはCasaOSを出発点として開発しました。
CassetteOSもなるべくCasaOSの良い点をいい感じに継承するようにしています。 その上でCasaOSのダメな点は修正して、「パーソナルクラウドOS」としての完成度を目指して開発しました。
ただし、それはあくまでも「パーソナルクラウド」を実現するための環境であって、「オフィスクラウド」を実現するとなると、いくつか解決したいことがあります。
それは、
- 何でもrootで動いているのは気持ちが悪い(複数人で使い辛い)
- NASとしての機能は微妙
- モジュールの構成が重い
ということです。
現状でも「アプリケーションの実行環境」としては不足はないのですが、「なんでも入れとくサーバ」として使おうと思うと足りないなという問題があります。 正確に言えば「問題」なのではなくて、期待が大きくなり過ぎたわけですが。
何でもrootで動く
これは様々な「厄介なこと」の原因となりえます。
たとえば、CassetteOS(CasaOS)はSambaのファイル共有が最初から使えるようになっています。 これはとても便利なことの一つですが、この時に「全てがpublic」となってしまいます。 何しろ「ユーザー」という概念が存在しませんから、「ユーザー固有のファイル」というものが存在しません。 小規模な環境であれば、「サーバはファイル交換用」「ここはみんなの保管庫」と割り切ればいいのですが、本格的にファイルサーバとして運用しようと思うと、「自分だけのファイル」が置けないのは結構不便です。
これはアプリケーション環境にも言えて、SiYuan Noteのように「起動したユーザの環境として動く」系のアプリの場合、大勢で使う場合には困ってしまいます。 rootというユーザとして動いてしまうので、実質的に「パーソナル」なものが持てません。
これが、Hieronymusのようにアプリが認証系を持っている場合には、アプリ内でユーザを区別してくれるので困ることはありません。 世の中そういったアプリも多いので、こういったアプリを使う場合には問題にならないのですが、「個人環境を快適にする」類のアプリはそうでないことが多いので、「パーソナル」という意味では困ってしまいます(SiYuan Noteに限らずメモ系のアプリに多い)。
さらにセキュリティ的な話をしてしまえば、草しか生えません。 もちろん「何でもroot」とは言えOS自体の機能としてshellが動くようになっているわけではありません。 とは言え、Jupyterのようにshellが使えるアプリケーションもあるわけで、そうなると「もうその先は考えたくない」という感じです。 悪意の攻撃をしなくても、「とんでもない間違い」はあるわけで、そこに何のガードもないのは恐しいことです。
もちろんこれは本来の用途である「パーソナル」ということであれば問題とはなりません。 自分だけが使うのであれば、「全てを自分が握る」だけの話ですから何の問題にもなりません。 ただ、Orcinusという環境を考えると、載せるアプリのレビューを厳しくせざるをえないなというのが実情です。
NASとしての機能が微妙
「みんなで使う(会社の)サーバ」ですから、当然のようにファイルサーバの機能が欲しくなります。 搭載済みのストレージを使う分には、「ユーザ」と「ストレージ管理」の問題を忘れてしまえば便利に使えます。
ただし、NASとして本格的に使おうと思えば、「ユーザ」の問題を忘れるにしても、
- いわゆるストレージ管理が(ほぼ)ない
- ファイル保全(RAIDとかバックアップとか)の仕組みが本体にない(追加アプリを入れればいいんですが)
- 後付けでNASアプリを入れると、既にあるファイル管理と重なる
というような問題があります。
ストレージ管理の問題については、たとえばサポート契約を結んでいただければ、現状でもそれなりの対応はできます。 とは言え、全てのユーザがサポート契約を結ぶという前提は持てませんし、「自分のこと」は自分でできた方が嬉しいよなぁ… ということはお互いに思うところでしょう。
ファイルの保全に関しては標準機能で欲しいところだと思うのですが、「パーソナルクラウドOS」はそのような機能を持っていません。 ファイルサーバとして運用することよりは、アプリケーションの実行環境としての色彩が濃いのではないかと思います。
こういったものは後付けでも良いかなという気もしますし、実際CasaOSだとアプリストアにNextcloudがあります。
ある意味それで十分だとも言えますしそう思っていたのですが、OS本体の持っているFileと重なる部分があったりするので、木に竹を継いだ感じは免れません。
また、Nextcloudを入れてもストレージ管理はありません。 仮にあったところでコンテナの中ですから使いようもありません。
モジュールの構成が重い
前述のような問題を発見したので、対処したいなと思ってコードを読んだり、主な作業をした社長に聞いたりしていたのですが、なかなかの難物でした。
確かにCasaOS(CassettteOS)はいくつかのモジュールに分かれて作られていて、一見モジュール単位で交換可能なように見えます。 私の思った問題の改修も、モジュール単位で何とかすれば良いと思っていました。
ところが、そこまで綺麗にモジュール化されていません。
コードを読むと、そこは「実用コードにありがちの汚なさ」を越えて、あまり綺麗にできない構造になっているような感じがあります。 個々のモジュールが随分と密結合していて、かつ設計もそれを許すような、そんな構造です。
そのため、たとえばFileを新たに作って交換してやろうと思っても、Fileだけの問題に閉じてくれません。
あちこちいじらないと、交換できないようになっています。
これは将来を見据えると、なかなか厳しい話です。
改修計画
このように、現状のCassetteOS(CasaOS)を「オフィスクラウドOS」として使おうと思うと、多くの問題を抱えています。
とは言え、
- パーソナルクラウドOSとしては十分機能している
- 要求を追加しない限りは問題は起きない
- 何よりも、ちゃんと機能している
という点で、必要十分とも言えます。 つまり、「CasaOSで満足であればCassetteOSはbetter CasaOSとして十分機能する」ということです。
ですから、現状のコードにbug fix以上の手を入れる必要はないと考えていますし、現状の「Orcinus」としてスペックを書いた範囲ではそれで十分だろうと考えています。 アプリストアが寂しいことを除けば、何も悪くはありませんし、これは追い追い改善して行きます。
とは言え、「今後の展開」として「オフィスクラウド」について真剣に考えると以下のような仕様を加える必要があります。
- マルチユーザ(何でもrootをやめる)
- より高度なモジュール化(マイクロカーネル化)
- NAS機能の強化
この変化は、「MS-DOSからLinuxへ」という変化に近いです… と言っても若い人には通じませんね。 もうちょっとわかるように言えば、「単なるアプリケーションランチャーから本気のOSになる」変化です。
それゆえこれらについては、「Ver 2」として現状のCassetteOSのコードから離れ、スクラッチからの開発となります。
例によって先行事例について調べてみたのですが、同じ用途を目指したものは存在しないようです。 CasaOSの延長にあるZimaOSがそれに近いんじゃないかと思っていたのですが、ちょっと思っていたのと違いました。 また、あまたある「NAS用OS」は、あくまでもNASのためのOSでしかない点と、歴史と安心感がある分設計思想が古いという点で、参考にはできても採用あるいは流用には向いてないようです。
そんなわけで、完全フルスクラッチの開発です。 幸い、今時はバイブコーディングできますから、開発スピードは上げられます。
マルチユーザ化
「何でもroot」は諸悪の根源と言えます。
セキュリティ的な問題のみならず、ユーティリティとしても問題があることは既に述べたとおりです。
CassetteOSを「パーソナルクラウドOS」から「オフィスクラウドOS」にするためには、ぜひともやらなければならないことだと考えています。
マイクロカーネル化
「マイクロカーネル」と言うと大袈裟と言うか、「なんか違うだろ」と拒絶反応をする人も思いますが、結構本気です。
もちろん、Linuxの上ですし下位OSはUbuntuだろうと思っているので、カーネル屋の言葉で言うところのマイクロカーネルとは異なります。 ウェブフレームワーク等で言われるマイクロカーネルの方が近いでしょう。
そういった用語の話は別としても、プロセスモデルとAPIを見直して、モジュール間のインターフェイスを軽量化して「交換」が容易な形に改修しようと考えています。 これはマルチユーザ化とも関係ありますが、root権限で動かなければならないモジュールの極小化という目的も兼ねています。
NAS機能の強化
まずはストレージ管理、つまりストレージの追加削除等の機能を用意したいところです。
この時に悩むのが、RAID等をどうするかという問題と、それをどう管理するかという問題です。 これは考えると様々な問題があり、また運用も色々な問題があると思います。
そこでCassetteOSでは、RAID等を使わないで「オブジェクトストア」を使うことを考えています。 ファイルサーバ上のファイルは内部的には「オブジェクト」であって、格納機構としてオブジェクトストアを使うということです。
オブジェクトストアであれば、ファイルやブロック(チャンク)単位での冗長化ができます。 冗長化して複数のストレージに置けば、障害時の問題も簡単になります。 さらには… と、様々な問題が解決したり展望が見えて来たりします。
Sambaで使えるようにするためには、オブジェクトストアそのものではダメでファイルシステムとして見えなければなりませんが、SeaweedFSというのがいい感じで使えるようなので、ファイルシステムにはこれを使うことを考えています。 そうすれば、Sambaによるファイルサーバがオブジェクトストア上で稼動できます。
SeaweedFSはパーシャルロックが使えないというような若干の制限がありますが、「現代のファイルサーバ」として割り切れば大丈夫だろうという見通しを立てています。
うまく期待通りに機能してくれれば、リビルドの必要のないファイルサーバとして使えるようになりますし、これはあまたある「NASメーカのNAS」よりも便利なんじゃないかと思います。
期待される効果
これらの方針で新たに「CassetteOS Ver2」を作ります。 そこには
- ちゃんとした「オフィスクラウドOS」になる
- 機能の追加変更がしやすくなる
- NAS OSとして外販できるのではないか?
というような期待をかけています。
ちゃんとした「オフィスクラウドOS」になる
これはマルチユーザ化のところで書いたとおりです。
「オフィス」という複数の利用者がある環境で快適に使えるOSとしての基礎が固められます。 こういった「OS」はないので、作り甲斐はありますし、できると嬉しいですね。
元々このドメインには「普通のdistro」がいたと思うのですが、それを情シス(的な要員)のない環境で運用できるかと言えば、事実上不可能だと言っても良いと思います。 「Ubuntu serverにdesktop環境を入れる」というのとも違うように思います。
機能の追加変更がしやすくなる
CassetteOSはこれからどんどん強化して行きたいと考えています。
それがどこまでできるかはよくわかっていませんが、「オフィスにあるサーバを手軽に便利に使える」という目的に沿って改良して行きたいと思っています。 また、今は「中小零細企業向け」を主眼としていますが、そこそこの規模の会社でも情シスの負担を増やさない、むしろ軽くする方向に使うようにできたら嬉しいかなとも思います。 「OS」としての夢は無限に拡がります。
そうなると、機能も整理されたり強化されたりして行くわけで、それをやりやすくする必要があります。 「モジュールは簡単に交換」「プラグイン」というようなことは、当然に必要だと思います。
そのためにも、機能の追加変更をやりやすくするというのは大事な進化でしょう。
NAS OSとして外販できるのではないか?
これはビジネス的な助平根性とも言えるのですが。
現在Orcinusのハードウェアとして使っているものは、「ベアボーンとして販売されているNAS筐体」です。 OSが添付されてないベアボーンのNASです。 メーカの説明によると、「お好きなOSを入れてください」とのこと。 これは弊社のような再販業者にとっては都合が良いですが、一般向けの商品としては厳しいように思います。
Orcinusを開発する時に様々なNASを調べたのですが、OSに力の入ってないメーカも少なくありません。 悪い言い方をすれば「ハードが売りたいからとりあえずOSもやりました」的なメーカが結構あります。
そういった現状を見れば、「御社のNASにCassetteOS使いませんか?」という営業をする余地は十分あると思います。 また、自分でNASを作りたい人に対しての選択肢の一つとして提案できるかも知れません。
そういったことを考えると、「パーソナルクラウド」を指向するよりは「オフィスクラウド」を指向した方が可能性は大きいだろうなと思います。
まとめ
「パーソナルクラウドOS」としてのCassetteOSには、特に不満も不足もありません。 何より「現状でちゃんと使える」ということは尊いことです。
とは言え、「オフィスにある便利なサーバ」として使うこと、あるいはその延長上の応用を考えると、もっと「それ用」の仕様になった方が嬉しいとも感じました。 特に情シス的なものがない中小零細企業のDXのことを考えれば、「クラウド前提」で積み上げてきた運用が、必ずしも最適とは言えなくなってきているようにも感じます。 そうした中で、管理工数の低い「オフィスにある便利サーバ」の必要性は、 今後さらに高まっていくのではないかと考えています(これについてはいずれ書きます)。
そこで「Ver 2」として改めてプロジェクトを開始しています。 なるべく早い時期に提供できるように頑張りたいと思います。 今のところ、「マルチユーザに対応したファイル管理」のあたりをやってるところです。 この過程でコアについての検討も進むんじゃないかと思っています。