Developing Firefox in Firefox with GitpodFreiburg, Germany
Gitpod provides Linux-based development environments on demand along with a web editor frontend (VS Code). There is apparently no limit on what you can do in a Gitpod workspace, e.g., I ran my own toy kernel in QEMU in the browser.
I like Gitpod because it…
- avoids potential issues when setting up a new project, which is great for the maintainers (e.g., it is easier to reproduce an issue when you have access to the same environment) and the newcomers (e.g., no fatal error when trying to contribute for the first time)
- allows anyone to have access to a (somewhat) powerful machine because not everyone can afford a MacBook Pro. I suppose one needs a pretty reliable Internet connection, though
My main machine runs MacOS. I also have a Windows machine on my desk (useful to debug annoying Windows-only intermittent failures), which I access with Microsoft Remote Desktop.
Except my ever growing collection of single-board computers, I don’t have a Linux-based machine at home^W work, though. I haven’t used Virtual Machines on Apple Silicon yet and I’d rather keep an eye on Asahi Linux instead.
This is why I wanted to give Gitpod a try and see if it could become my Linux environment for working on Firefox. Clearly, this is a nice to have for me (I don’t necessarily need to build Firefox on Linux) but that might be useful to others.
Assuming a Gitpod-based setup would work for me, this could possibly become a strong alternative for other contributors as well. Then, mayyybe I could start a conversation about it internally in the (far) future.
Firefox development with Gitpod = ❤️
I recently put together a proof of concept and played with it since then. This GitHub repository contains the Gitpod configuration to checkout the Firefox sources as well as the tools required to build Firefox.
It takes about 7 minutes to be able to run
./mach run in a fresh workspace
(artifact mode). It is not super fast, although I already improved the initial
load time by using a custom Docker image. It is
also worth mentioning that re-opening an existing workspace is much faster!
Gitpod provides a Docker image with X11 and VNC, which I used as the base for my custom Docker image. This is useful to interact with Firefox as well as observing some of the tests running.
I don’t know if this is the right approach, though. My understanding is that Gitpod works best when its configuration lives next to the sources. For Firefox, that would mean having the configuration in the official Mozilla Mercurial repositories but then we would need hgpod.io 😅
On the other hand, we develop Firefox using a stacked diff workflow.
Therefore, we probably don’t need most of the VCS features and Gitpod does not
want to be seen as an online IDE anyway. I personally rely
git with the excellent
git-cinnabar helper, and moz-phab
to submit patches to Phabricator. Except for the latter, which can easily be
./mach install-moz-phab, these tools are already available in
Gitpod workspaces created with my repository.
In terms of limitations, cloning mozilla-unified is the most time-consuming task at the moment. Gitpod has a feature called Prebuilds that could help but I am not sure how that would work when the actual project repository isn’t the one that contains the Gitpod configuration.
In case you’re wondering, I also started a full build (no artifact) and it took about 40 minutes to finish 🙁 I was hoping to have better performances out of the box even if it isn’t that bad. For comparison, it takes ~15min on my MacBook Pro with M1 Max (and 2 hours on my previous Apple machine).
There are other things that I’d like to poke around. For instance, I would love
rr support in Gitpod. I gave it a quick try and it does not seem
possible so far, maybe because of how Docker is configured.
gitpod /workspace/gitpod-firefox-dev/mozilla-unified (bookmarks/central) $ rr record -n /usr/bin/ls [FATAL /tmp/rr/src/PerfCounters.cc:224:start_counter() errno: EPERM] Failed to initialize counter
As I mentioned previously, this is a proof of concept but it is already
functional. I’ll personally continue to evaluate this Linux-based development
environment. If it gets
rr support, this might become my debugging
environment of choice!
Now, if you are interested, you can go ahead and create a new workspace automatically. Otherwise please reach out to me and let’s discuss!
One more thing: Mozilla employees (and many other Open Source contributors) qualify for the Gitpod for Open Source program.
Feel free to fork and edit this post if you find a typo, thank you so much! This post is licensed under the Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.