2009年4月1日水曜日

Silverlight 3で追加されたaglimitパラメータによる機能制限はSilverlight広告への布石?

【注意】aglimitはエイプリルフールのネタで実際には存在しませんのであしからず。(追記 2009/4/3)

●はじめに

先月発表された、Silverlight 3 Beta 1でちょっと面白い機能を見つけました。

HTMLからSilverlight3アプリケーションを呼び出す時は、<object>タグを使用するのですが、その内部で、<params>タグを使って指定するパラメータにaglimitというパラメータが追加されているのです。
まずはサンプルを挙げてみます。
1: <object data="data:application/x-silverlight-2," type="application/x-silverlight-2">
2: <param name="minRuntimeVersion" value="3.0.40307.0" />
3: <param name="aglimit" value="audio+movie" />
4: ...
5: <object>

上記の value="audio+movie"の部分で、Silverlightアプリケーションでの動画や音声の再生が禁止されます。
ちなみに、agは銀の元素記号で、Silverlightを指しています。
Silverlight関連で、agを接頭辞に持つ名前が色々あるのはそのためです。(例:agcore.dll、AgDLR)

ついでですが、Silverlight 3 Beta 1で作成したアプリケーションを呼び出す<object>タグの使い方については、@matarilloさんの、「ユーザーがSilverlight 3ベータ版をインストールするときの挙動」が必読です。少なくともSilverlight 3アプリケーションを公開するかもしれない人は全員読むべきだと思います。

●なぜaglimitが追加されたのか?


Microsoft側としては、Silverlightの表現力を制限する機能であるaglimitをあまり大っぴらに宣伝したくないのか、MIX09でのSilverlight関連の発表でも触れられていないようですし、開発者向けのドキュメントやヘルプにもまだ記載がありません。

そのため、aglimitが追加された理由については、はっきりとは分からないのですが、個人的には、aglimitは「Silverlight広告」の推進の布石ではないだろうか?と予想をしています。
というのは、従来のFlash広告には、この手の機能を制限する仕組みがほとんどありません。
ですから、広告のあるページを開いただけでいきなり音が鳴ってビックリした経験をお持ちの方も多いと思います。Flash広告が嫌われる理由の一つですね。

この問題については、仮に広告掲載側がFlash広告での音声の再生を禁止しようとしても、基本的にはFlash広告の中身を提供する側との契約内容で制限し、それを信頼するしかありませんでした。
つまり、Flashは広告として利用するにはアプリの自由度が少し高すぎるという欠点があったわけです。

Microsoftはこの点に目をつけて、Silverlight広告を掲載するページのHTML側でSilverilghtアプリケーションの機能をきめ細かく制限する方法を提供し、Flash広告との差別化を図ろうとしたのではないでしょうか?

HTML側から機能制限が可能になれば、広告を掲載する側が、Silverlight広告が悪意を持ったコードを含んでいるかどうかを心配する必要性が多少は減りますし、広告を提供する側も、一つのSilverlight広告を、禁止内容が異なる複数のサイトで使いまわすことができます。

●aglimitの詳細


先ほども書いたように、現時点ではドキュメントやヘルプにaglimitについての記載がないので、ごにょごにょして調べてみたのですが、どうやら以下の文字列を指定可能のようです。内容については一通り確認してみましたが、一部推測が混じってますので、注意してください。
  • audio - 音声再生の禁止
  • movie - 動画再生の禁止
  • media - audio+movie
  • cookie - cookieの受信の禁止
  • http - HTTP使用の禁止
  • socket - ソケット使用の禁止
  • link - URLリンクの禁止
  • network - cookie+http+socket (linkは対象外)
  • ps - ピクセルシェーダの禁止
  • hwaccel - GPUを使ったハードウェアアクセラレーションの禁止
  • gpu - ps+hwaccel
  • is - 分離ストレージの使用の禁止
  • fullscreen - 全画面モードの禁止
  • all - 上記全てのオプションを有効
(注)
文字列は+で連結して複数指定が可能。
 aglimit=audio+movie -> audioとmovieを同時指定
文字列の前に-をつけると禁止を無効にできる
 aglimit=media-audio ->movieとimageは無効でaudioのみ有効
後ろのパラメータが優先
 aglimit=movie+audio-movie ->audioと同じ
大文字小文字は無視される
 aglimit=Audio -> aglimit=audioと同じ
TYPOは黙って無視される
 aglimit=soket -> socketのTYPOだが何も起こらない

かなり細かい指定が可能なのが分かると思います。

●aglimitの使用上の注意点


・パラメータを一つでも有効にすると、アプリケーション側からのJavaScriptとDOM操作が禁止される。
 これは、aglimitで制限を加えても、JavaScriptやDOM操作を可能にしてしまうと機能制限を解除されてしまうからじゃないかと思います。

・httpまたはnetを指定した場合に、Assembly Caching機能が使用できない。
 Assembly Cachingは、Silverlight 3で追加された新機能で、拡張ライブラリである.slvx形式のファイルを実行時にWebサイトから読み込むことで、アプリケーション本体のサイズを縮小し、一度読み込んだ拡張ライブラリをキャッシュして複数のアプリケーションで使いまわす機能です。.slvx形式のファイルは、アセンブリと呼ばれる.dllファイルを含んでいるのが普通ですが、もし他のファイルを含んでいた場合、aglimitでhttpやnetを使って外部ファイルの読み込みを禁止しても回避できてしまいます。故にAssembly Cachingも禁止対象になったということだと思います。

・Sloob(SilverLight Out Of the Browserの略)化すると、aglimitが無効になる。
 Sloob化したSilverlightアプリケーションには、<params>の内容を渡すことが元々できませんので、これはまあ仕方ないと思います。

・aglimit=audioは音声を完全に禁止できるが、aglimit=movieは動画を完全には禁止できない。
 movieはMediaElementを使った動画ファイルや動画ストリームの再生を禁止する事はできますが、複数の画像ファイルの連続表示を使った擬似的な動画再生を禁止することはできません。
かといって、imageも追加指定すると普通の静止画像も禁止されてしまい、表現力が大幅に損なわれます。この辺りは難しいところですね。

・hwaccelはCPU利用率を上げてしまうことがある。
 GPUを使ったハードウェアアクセラレーションが、ソフトウェアエミュレーションに切り替わるからです。hwaccelは、GPUの利用によってシステムの安定性が下がることが懸念されるケース、例えば同じページ内にGPUを酷使している物が他にある場合等に限るか、gpuを指定してソフトウェアによるエミュレーションも完全に禁止した方がいいかもしれません。

・aglimitではCPU使用率はそんなに下がらない。
 aglimitによる機能制限は、net等を指定して通信エラーが発生するような場合を除けば、アプリケーション側からはaglimitの内容を確認しない限りaglimitによる制限を感知できないようです。
ですから、audioを指定して音声の再生を禁止すると、音は鳴りませんが、アプリケーションは音声を流したつもりになっています。
これはアプリケーションの開発者がaglimitの存在を気にせずにコードを書くことを可能にするためじゃないだろうか?と予想していますが、よく分かりません。

・<params>で指定するパラメータとしてaglimitが予約されたので、他の用途で使えなくなった。
これは可能性としては低いだろうと思いますが、もし既存のSilverlight 2アプリで独自にaglimitパラメータを使って何らかの処理をしていたアプリケーションはソースの修正が必要になります。

●aglimit機能への要望


一見、いいことづくめに見えるaglimit機能ですが、一つ残念なことがあります。
それは、実際に閲覧するユーザ側ではaglimitの指定が簡単にはできないことです。
これについては、Silverlightの構成に「機能」のようなタブを追加して、limitで指定するのと同等の制限を与えられるといいのではないかと思います。
Silverlightの構成のタブについては、Silverlight 2の「アプリケーション記憶域」タブもBeta 2になってから、ようやく追加されたという前例がありますので、今後、正式リリースまでの間にタブが追加される可能性はありそうです。

●最後に


以上、Silverlight 3で追加されたaglimitパラメータについて、ざっと説明してみました。尚、Silverlight 3はまだBeta 1ですので、正式リリースまでの間に仕様の大幅な変更があることも充分考えられますので、実際に試す際は注意してください。
ひょっとするとドキュメントやヘルプに記載がないのもそのせいかもしれません。(了)

0 コメント:

コメントを投稿