これまでのあらすじ
これまでのあらすじと今後の開発についてお知らせ。
さて、ココ最近はRATHでVerethragna(ウルスラグナ)の開発にいそしんでおりましたが、Verethragnaも今のところ安定しておりまして、一段落というところになっております。もちろん今後も開発は継続するのですが、RATHとNHKさんとでVerethragnaの拡張版を共同開発となったりそもそもVerethragnaはRATHからの提供であったりでVerethragnaがかなりビジネスユースに傾いておりますので、もしチャレンジングな実装をした場合、不具合の発生や不安定になる可能性が高く、ご利用中のユーザーの方々やRATHにもご迷惑がかかってしまいますので、そういったチャレンジングな実装については、現状ですと消極的な状態でございますのでご承知おきください。もちろん不具合や脆弱性などがあれば対応いたします。
ちなみにそのチャレンジングな実装が何かと言いますと例えば「ブラウザ接続機能」です。
このブラウザ接続機能については何度か記事にも登場しているのですが、途中までは順調と言う風にお伝えしていたのですが、最後の最後に大強敵が控えておりました。
マウスやキーボードの操作系命令をブラウザからサーバーに送信するのですが、これがまるで安定しません。前回の記事の時も発生してはいたのですが何とかなるかと思いきやWi-Fi環境になるとさらにかなりの頻度でエラーでリクエストが届かず。素のGETやPOSTはもちろんのこと、同期や非同期、Fetch APIやXMLHttpRequestなどなど色々と試しましたがまるで安定しません。1秒間に何十回も送る必要があるリクエストですが、サーバー側(Verethragna)は問題ないと思うのですが、ブラウザ側の処理がおかしなご様子。一番安定してるであろう非同期XMLHttpRequestですらダメで。しかもインターネットを介すとさらに致命的に動きません。まあ暗号化もしていないので利用シーンは少ないかもしれませんがもしかすると閉域網やVPNとかでご利用されることもあるかもしれないと試してみましたがヤバイくらい動きません。たぶんもっと良い実装方法があるのかもしれませんがココでずっと悩んでました。いっそのことブラウザ側から送信するストリーミングにしようかと思ってみましたが、現在においてほとんどがWebSocketやWebRTCですのでサーバー側の実装がなかなか難しいやつです。もちろんそれらも実装できなくもないのですがVerethragnaにかなり手を入れることになり通常接続にも多大な影響がありますので選択することができませんでした。Fetch Upload Streamingが使えれば良かったのですがまだ対応ブラウザも少なくMacOSでは動きません。いずれ動くのでしょうけど。これ前回も書いた予感。
とゆーわけでVerethragnaのブラウザ接続機能も最後の操作系で行き詰っている状況でございました。
ブラウザ接続機能の開発をもっと進めるには全ての通信系をWebSocketにも対応させるとかでコア部分にも手を入れる必要があり、そうなるとVerethragnaに悪い影響を与える可能性もでてきましたので進めることができなくなっていました。
ですのでなにかこーVerethragnaではないなにかこーもっと大胆に実験できる場が必要かなと。思えば、BrynhildrとGungnirも同じような経緯で、Brynhildrがビジネスユースになり、GungnirがR&Dのような感じになりました。そうだ、VerethragnaのR&D的な感じのを作れば良いんじゃなかろうか。
とゆーことではじまりました新企画「新しくR&D的なものを作ってブラウザ接続機能をゼロから実装しよう」
根本から考え方を変えます。Verethragnaで実装までしてた簡易HTTP機能ではダメで、はじめから双方向でストリーミングができる前提で考えます。となるとWebSocketが最有力候補です。以前の記事にもある通りWebSocketがあればWebAssemblyも見えてきます。いやまだ見たくないですけど。あと前回の記事で書いたプロキシ対応。あれは忘れてください。幻です。
で、つまりはWebSocketサーバーを実装する必要があるのですが、Verethragnaは既になかなかのボリュームになってますし、前述の通りの事情でVerethragnaに実装は難しいのと、別ブランチにして二重実装も手間なんで新たな触媒を探していました。まあ実験的な感じなんで何でも良いんですけどできるだけ軽量なやつ。
で、見つけたのがBrynhildrのベースとなった「Vritra」です。こいつの良いところはBrynhildrとしての機能を実装する前のシンプル極まりない感じのバージョンが倉庫(?)にありまして。ちなみにこの倉庫には世に出ていないリモートデスクトップの名前付きのプロトタイプがいくつか存在しており。そのお話はまたいずれ。
Vritraの後にGungnirが登場してますので世代的にはかなり古いんですけど、どーせ通信部分から作り直すのでフレーム部分があればまーええかなと。追加実装しやすくシンプルなのが大事で。まあ最新型のコア部分もある程度はパッケージ化できてるんで搭載するにも楽なんですが。通常接続もどこまで実装するか次第なんですけどまあブラウザ接続だけでも質素すぎるので通常接続もついでに実装しようかと。まあ実験なんでね。
てことでブラウザ接続機能をひっさげてあの「Vritra」が約11年ぶりに帰って来ます!乞うご期待!