icon

nazo6.dev

一覧に戻る
2022/10/27 9 min read

Firefoxをいじる


#(2022-10-27)

Floorp というブラウザを最近見てFirefoxに興味が湧いたので調べてみるメモ

#参考資料 (2022-10-27)

#Firefoxのビルド (2022-10-27)

なにはともあれFirefoxのソースがないと始まらないので一度ソースをもってきてビルドしてみる。 今回はwsl2(Arch Linux) on Windows11で試す。

#bootstrap (2022-10-27)

手順は

これに従うだけ。 mercurialって使ったことないけどmercurialがおすすめと書いてあるので一応そうしとく。gitでも使えるらしいが・・・

sudo pacman -S mercurial
curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O
python3 bootstrap.py

途中Artifact Buildがどうかを選ぶところがあるがこれは事前コンパイル済みバイナリを使ってC++とかのコア部分を開発しない場合にビルド時間を短縮するものらしい

とりあえず今回はArtifact Modeじゃなくて普通にコンパイルする。

他のオプションはMozillaにcommitするかというところ以外は全部Yにした。

#build (2022-10-27)

ビルドするには

cd mozilla-unified
./mach build

を実行。

CargoのログとCのログが入り交じりながら15分ぐらい待つと無事ビルド失敗。なぜ。

#(2022-10-27)

こういう時は経験則上エラー内容を調べても無駄なので最初からやりなおし。 せっかくなので次はgitを使ってみる。git-cinnabarというものが必要らしい。

paru -S git-cinnabar
curl https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py -O
python3 bootstrap.py --vcs=git
cd mozilla-unified
./mach build

今度はビルド成功。 ちなみにi7-12700、メモリ32GBでビルド時間は約18分だった。メモリによって並列実行数か決められてるような表示が一瞬見えたからwslのメモリ割り当て増やしたら速くなるのかな? あと現時点でのmozilla-unifiedフォルダの容量は約24GBだった。

#実行 (2022-10-27)

./mach run

なぜか文字化けしてる。そしてウインドウを動かしたら治った。謎だ。 あと設定が開けない。about:preferencesは開ける。謎だ。

というかドロップダウンメニューの項目が全部押せない。wslgが悪いのかな?

#(2022-10-27)

AURのfirefox-nightly-binを入れたりUbuntuにもnightly入れたりしてみたところ同様に押せなかったのでnightlyとwslgの相性問題があるみたい?

#Releaseタグでビルド (2022-10-27)

現時点で最新の106.0.2に切り替える。

git fetch --tags hg::tags: [tag "*"]
git checkout -b 106.0.2 refs/tags/FIREFOX_106_0_2_RELEASE
./mach build

ここでなんかclobberが云々みたいなのが出てきた。前のバージョンに戻したからかインクリメンタルビルドができないみたいなことが書いてある。 とりあえず書いてる通りに実行する。

./mach clobber
./mach build
./mach run

これだとちゃんとメニューとかも動く。ただロゴとかがnightlyのままだけど。

#Windowsでビルド (2022-10-27)

やっぱりWindowsでも使いたいのでWindows環境構築

まずMozillaBuildというのをインストール。デフォルトのディレクトリに入れろと書いてあったが無視して変えた。大丈夫かな

でこの先はmozilla-build\start-shell.batで専用のシェルを起動しないといけないらしい。

cd /d/dev
mkdir mozilla-source
cd mozilla-source
wget https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py
python3 bootstrap.py --vcs=git

ここでgit-cinnabarのパス~\.mozbuild\git-cinnabarを通す

git fetch --tags hg::tags: [tag "*"]
git checkout -b 106.0.2 refs/tags/FIREFOX_106_0_2_RELEASE
./mach bootstrap
./mach build

ここでwasiが云々というエラーが発生。

に従い、.mozconfigを作成し、

ac_add_options --enable-bootstrap

を追加。再ビルド。 今度は成功した。ビルド時間は約22分。やっぱりLinuxより遅いか

./mach run

で実行すると正常に動作しているようだ。

#(2022-10-27)

というかそもそも公式ではWindows用バイナリはLinux上でのクロスコンパイルで実現しているようだ。

Floorpのgithub actionsもそのようになっているっぽい

#Floorp (2022-10-27)

Floorpはオープンソースで開発されてる。

ざっと見たところfloorp関連のソースコードは/floorpディレクトリに集約されていて元のFirefoxのコードにそれを呼び出すものがあるようだ。

#いろいろ (2022-10-27)

#気づいたこと (2022-10-27)

  • Firefoxのソースはフロント部分とバックエンド部分に分かれている。フロント部分をいじるだけでけっこういろいろなことができそうだ。
#Meta
  • Firefoxのソースは最新ソースコードmozilla-central、リリースのmozilla-releaseなどがある。自動でダウンロードされたリポジトリはmozilla-unifiedだがこれには全部含まれているらしい。mercurialに精通していないのでよくわからない。
#フロント
  • FirefoxではFirefox自体のUIがhtmlなどのweb技術で書かれている。まあuserChrome.cssなどもあったしこれは驚くことでもない。
  • 開発者ツールの設定から有効にするとブラウザーツールボックスというFirefoxのUIを調査できる開発ツールを使える。
  • 見たことがない拡張子としてjsmがある。jsmファイルはそのまま使えるがjscssはコンパイル作業が必要というようなことが書いてある(https://firefox-source-docs.mozilla.org/browser/components/newtab/docs/index.html#for-jsm-files)。
  • .xhtml・・・まだ生きてたのか
  • jsソース内ではPreferencesなどのオブジェクトが使われているがこれはtoolkit/content/で定義されている。が、恐らくここ以外にもある。
  • xhtml内では<browser>など独自要素が使われている。これらの要素についてドキュメントがあるかは不明。
  • 残念ながらまともに型はついていないが一応eslintプラグインがある。mach npm iでインストールできる。これで間違ったことをすると多少教えてくれるようだが…?(https://firefox-source-docs.mozilla.org/code-quality/lint/linters/eslint-plugin-mozilla.html)

色々書いたがFirefox Source Docsにかなり情報が乗っているのでそれを見る。

#ディレクトリ構成 (2022-10-27)

browser
│ base             <- ブラウザのUI全体
│ └ content
│ branding
│ components       <- 色んなコンポーネント
│ extensions       <- ビルトインの拡張(pipとか)

#ベンチマーク (2022-10-27)

ちょっと気になったので公式ビルドと手製ビルドでベンチマークの差を比較

#公式ビルド 106.0.2

#手製ビルド 106.0.2

まあやはりという感じではあるがこちらのほうが遅い

#(2022-10-27)

パフォーマンス改善できないかと色々調べたが効果がありそうな--enable-releaseはほとんど意味なし。 どうやら公式ビルドではPGOとLTOが有効になってるのでそれをしないと公式と同じ数値には達しなさそうだがWindowsでのPGOはサポートされてないっぽい? Linux上のクロスコンパイルビルドだとできるってことかな

#(2022-10-27)

https://firefox-ci-tc.services.mozilla.com/tasks/ZSb95bHiSrm5Pf6jYUeryQ 多分これが公式リリースのciだと思うけどようわからん

Share this article:
一覧に戻る

© 2025 nazo6. All rights reserved.