FirefoxのElectrolysisについて

マルチコア化プロジェクトであるElectrolysis、これによって仕様がずいぶんと変わり動かなくなるアドオンがたくさんある。
自分も陥ったしそれ以外でも多くある動かなくなる理由に、
document.location が使えなくなった
var で宣言した変数が"変数"になる
の二つがある。
どちらもこれだけ読むと何を言っているのかわからない、有り得なかったり当たり前だったりする話で、そのせいで混乱するし、ドキュメント化されていない理由でもあるのだろう。


1、 document.location が使えない
Electrolysisではコンテンツ部分へのアクセスがこれまでに比べて制限されている。
アドオンだけでなくWeb開発でも document.location で現在のURLを得るというやり方は当たり前に行われてきたことだと思うが、コンテンツ部分とそれ以外が切り離された結果、例えばツールバーボタンの処理でいきなり document.location としても何も得られなくなった。
切り離されたことでマルチコア化、レスポンス向上、処理性能向上がもたらされるので個人的には大変喜ばしいことだと思っているが、世間一般では今まで当たり前にできていたこと、目に見えている部分に当たり前にアクセスできる当たり前の方法、そういうものが使えなくなると影響は大きい。
当然今まで当たり前に動いていたアドオンが動かなくなる。


2、 var で宣言した変数が"変数"になる
それこそ当たり前のように思うかもしれないが、意外と面倒で影響範囲は広い。
JavaScriptでは変数の型を意識する必要がなく、整数型でも文字列型でもそういうのを意識することなく単に var で宣言して何でも好きなものを代入すればいい。なんなら宣言自体しなくても構わない。
これまでFirefox用のアドオンでもその通りだったのだが、Electrolysisでは var で宣言するとその変数はごくベタな意味での変数としてしか機能しなくなり、オブジェクトを代入できなくなる。
今まで当たり前にできたことなのでこういう手法を取っているアドオンは多く、従って動かなくなるものも多い。
変数を宣言せずに使っているようないい加減な書き方をしている場合、かえってこのトラブルは起こらない。



そしてこの二つが厄介なのは、いつも常に絶対動かなくなるというわけでもない点。
仮に修正に取り掛かった開発者がいても一貫性が無いように見えると諦めて投げ出す人も出てくるだろうと思う。



それと、Electrolysisそのものについて、Nightly33でマイルストーンを迎えたものを使えるようになった当初、 browser.tabs.remote.autostart をtrueにすればOnになっていたが、その後Nightly35でハードウェアアクセラレーションもOnにしないと機能しなくなり、アドオンの対応状況がよほど悪かったのか、これと同時期に従来と同様にアドオンを動かす互換モードが追加された。
現状アドオン側がマルチコア対応であると明示している場合以外デフォルトでは互換モードで動く。
また将来的にはデフォルトでマルチコアモード、非対応が明示されている場合のみ互換モードになる。


互換モードがあればかなりの数のアドオンが延命されることになるだろうが、メンテナンスされなくなった古いアドオンはびっくりするほどいい加減で適当なコードで成り立っている場合が多いので、延命措置は最小限にしてほしい。