Development, Machine Learning

TIL: How to Build Firefox from Source

Baby’s First Nightly Build

I finally got around to hanging my diploma on the wall of my office, 10 years after I first earned it. Despite my computer science degree being hard-fought, I had somehow managed to leave school thinking that I had learned nothing. What I needed was a vacation; what I did instead was transition into a full-time role at Microsoft straight into program management.

Today, I learned how to build Firefox from source. I’ve been a Mozillian since 2019, but this is the first time that I built the browser on my own machine. My sophomore year of college, I used Visual Studio and an embedded iexplore.exe window to make a simplified browser that had bookmarks permanently placed as UI buttons. I can’t even remember if it had an address bar, but I remember feeling accomplished that my portal to the internet was uniquely mine.

Since then, so much of the investment in and access to technology has been aimed at the services and account stack. Thousands of voices are standing between you and your friends now: the ones who decided which friend to show you today, the ones who decided to mine and sell your conversations for advertising money, the ones who coerced publishers through their algorithmic delivery monopolies… I digress.

Liv is in a halloween costume dressed as the Firefox mascot - a red fox holding a globe

Getting my local build of Firefox running was very straightforward.

// Operating System - Pop!_OS 22.04
// Python version - Python 3.10.6
// Processor: Intel Core i7-8700 CPU @ 3.20GHz x 12
// Graphics: NVIDIA GeForce RTX 3080

I followed the instructions here: https://firefox-source-docs.mozilla.org/setup/linux_build.html

Prior to this, I didn’t have Mercurial installed. This is included in the instructions and worked for me. At step two of the instructions, it did take me a minute to realize that it’s an ‘O’, not a zero, in the curl instruction.

It’s called Nightly! I had to triple-check to convince myself that the build had run perfectly the first time I tried. The Mozilla nightly builds say “Firefox” on this screen, but this says “Nightly”!

Why am I doing this?

  1. It’s really cool. I’m getting opportunities to really figure out how to make my computing environment work for me.
  2. I’m concerned about the future of the internet. Right now, there is a TON of money and power concentrated in a few big companies, and there are a lot of access and privacy conversations happening right now. So, I’m learning how to support work happening to bring autonomy and choice to a wider audience of people. To me, that means learning how to work with software that I can actually *own*, and contributing to bigger community initiatives where that type of work is being pushed forward.
  3. I want to explore the role of my “user agent” online in a more nuanced way than using an account, and part of that is looking into ways that I can integrate my local machine learning experiments into my daily browser workflows. I’m not sure entirely what that looks like yet, but I think that it’s an exciting place to be exploring.

My next steps are going to be to try and add some code that hasn’t been merged into Firefox yet, and see if I can make it build with the additional functionality. Let’s actually go!

(And yes – I did use my locally running version of Firefox to write and publish this. YAY!)