2012-04-19

GNU/LinuxにおけるWeb上のゲーム

さて、前回書かなかったゲームのプラットフォームがひとつだけある。それは、Webだ。ただし、Web上のゲームは非常に混沌としているので注意が必要である。

今回、考察するのは、純粋にブラウザー単体で動くゲームのことだ。GNU/Linuxには規格準拠度の高い自由やオープンソースなソフトウェアのブラウザーがあるので、ブラウザーのプラットフォームは自由である。問題は、ゲームが自由なソフトウェアかどうかだ。自由なソフトウェアを使うことは非常に重要である。自由を何よりも重視する我々は、いかなる誘惑があろうとも、決して不自由なソフトウェアを使ってはならない。ここでは、Web上のゲームが自由なソフトウェアかどうかを確認する際に重要な項目を説明する。

ここでも問題にするのは、あくまでソフトウェアの自由である。リソース(画像、動画、音声、テキストなど)の自由は問題にしない。また、オープンソースライセンスも許容範囲とする。

まずブラウザーだ。ブラウザーが自由なソフトウェアか、最低でもオープンソースライセンスであることを確認すべきだ。もちろん、不自由なソフトウェアのブラウザープラグインを使っていないことを確認することも重要である。

HTMLには、video要素とaudio要素があり、動画や音声を生成できる。あらかじめ静的に生成された動画や音声は、ゲームでよく使われるリソースである。このとき、動画や音声のフォーマットが、自由かどうかを気にしなければならない。何故ならば、圧縮技術には多くの特許が取得されているからだ。純粋なアルゴリズムや数学が、ソフトウェアで実装しただけで特許を認められるというのは非常に不思議だが、世の中の法律がそうなっている以上、受け入れるしかない。

さて、著作権や特許は、実は、自由なライセンスの妨げにはならない。むしろ、自由なライセンスを助けるものである。何故ならば、これらは著作物やアイディアに独占的権利を認めるものである。自由なライセンスは、この独占的な権利を賢くハックすることにより成り立っている。

だから、動画や音声のフォーマットが自由なライセンスで提供されているかどうかを確認することは重要である。何故ならば、フォーマットのエンコーダー、デコーダーを自由なソフトウェアで作成するには、自由なフォーマットであることが重要だから。ここで問題にしているのは、あくまでフォーマットの自由であり、そのフォーマットで表現されたリソースの自由ではない。

HTMLには、canvas要素があり、スクリプト言語から操作することによって、2Dや3Dの描画ができる。このスクリプト言語には、事実上の業界標準として、JavaScript言語が用いられる。JavaScriptは本物のプログラミング言語である。ソフトウェアを実装するJavaScriptコードは、当然自由でなければならない。そこで、自由なソフトウェアに賛同する者は、JavaScriptのコードが自由なライセンスで提供されているかどうかを確かめなければならない。

まず、自由なソフトウェアの定義する「ソースコード」が提供されているかどうかを確かめるべきである。ソースコードは人間の読める形式でなければならない。一般的に、エンドユーザーの実行するJavaScriptコードは、コードサイズを削減するために、圧縮変換されている。これ自体は悪ではない。JavaScriptの圧縮には妥当な理由がある。しかし、自由なソフトウェアであるためには、圧縮前のソースコードが提供されていなければならない。

また、他の言語やツールからJavaScriptコードを生成することも一般的に行われている。例えば、CoffeeScriptやDartなどだ。この場合、ソースコードとは、プログラムであるJavaScriptを生成した元ソースコードである。もし、JavaScirptコードの生成に特別なビルドシステム(makeなど)が使われているならば、そのビルドシステムを動かすためのソースコード(makefileなど)も公開されていなければならない。

ただし、リソースを表現するためにJSONを使うことも一般的である。JSONはJavaScriptの文法から考案されたフォーマットであるが、プログラミング言語ではない。JSONがゲームに必要なリソースを記述するために使われている場合は、ソフトウェアの実行に必須ではない限り、ソースコードではない。

HTMLやCSSは、それ単体ではソフトウェアとはなりにくい。もちろん、HTMLやCSSを変態的に使えば、プログラミング的挙動をさせることも可能かもしれないが、基本的には、単なるマークアップ言語やスタイル指定のための言語である。ただし、もしJavaScriptのコードが、その実行のために特定の記述がされたHTMLやCSSを必要とするならば、それもソースコードに含まれる。ただし、リソースと混同してはならない。Webアプリのゲーム中で使われるリソースをHTMLでマークアップするのは自然であるし、スタイル指定をCSSで行うのも自然だ。

また、ChromiumにはNaCl(Native Client)という機能がある。これは、x86のネイティブコードを、x86環境のChromiumがサポートしているOS上で、最低限の安全を保証した上で、互換性を保って実行させる機構である。この機構を利用したゲームでは、ネイティブコードを生成するためのソースコードが自由なライセンスで提供されているかどうかを確かめなければならない。

その他にも、FlashやSilverlightやJavaアプレットなどといったブラウザのプラグインとして提供されているプラットフォーム上で動くゲームがある。これについて深く解説はしないが、ゲームが自由なソフトウェアであるかどうかの確認はもとより、そのプラットフォームの実装が自由なソフトウェアであるかどうかも気にしなければならない。

No comments: