Why I still have a custom-compiled Firefox (early 2019 edition)
For years, I've had a custom-compiled version of Firefox with various personal modifications, generally built from the current development tree. The number of modifications has fluctuated significantly over time; when I first wrote about my history of custom-compiling Firefox in this 2012 entry, it was probably my minimal point for modifications. These days my version has added significantly more changes from the stock version, in larger part due to Firefox's switch to WebExtensions. The somewhat unfortunate thing about this increase in changes is that having this custom Firefox is now more than a little bit important to get the Firefox user interface I really want. Abandoning my custom-compiled Firefox would be something that I'd definitely notice.
The largest set of changes are to deal with Firefox irritations and limitations. In the irritations department, I modify Firefox's current media autoplay code to turn off autoplay for a couple of things that Firefox doesn't otherwise allow you to stop (bare videos and videos with no audio track). In the limitations department, I add a couple of new WebExtensions APIs, which turns out to be surprisingly easy; one API provides 'view page in no style', and the other provides an API to open your genuine home page (as if you did Control-N), which is not otherwise possible in standard Firefox.
(A WebExt can open
about:home, but that is actually
not your genuine home page. My actual home page
file: URL, which can't be opened by WebExt addons.)
My longest standing change is customizing how Firefox's remote access works, which these days also has me customizing the DBus remote control. The current development tree for Firefox seems to go back and forth about whether DBus should be used under X, but I cover my bases to be sure.
For extremely historical reasons I change the Delete key to act like the Backspace key in HTML context. This is probably surplus now, because several years ago I stopped swapping Backspace and Delete so now the key I reflexively hit to scroll the page up generates a Backspace, not Delete. Anyway, these days I often use Control-Space instead, because that works even in stock Firefox setups.
browser.backspace_action setting, and
I don't think it's exposed in the Preferences UI any more. I don't
think I'm quite up to abandoning Backspace entirely just yet,
I modify Firefox's standard branding because on the one hand, I
don't want my builds to be called 'Nightly' in window titles and
so on, and on the other hand I don't want them to use the official
icons or otherwise actually be official builds. I also turn out
to have some small changes to the default preferences, in the
all.js file. I could probably do most or all of these in my own
prefs.js; they linger in
all.js due to historical inertia.
Finally, a few years ago I did a little about the mess that is
Firefox's certificate manager UI by
changing Firefox's name for 'private tokens' from 'Software Security
Device' to the generally more accurate 'Locally Stored Token'. I'm
not sure this genuinely improves things and perhaps I should drop
this change just to be more standard.
(I used to manually modify my
certdata.txt to remove various
CAs that I didn't like, but these days I've concluded it's too
much work and I use the stock one.)
Building Firefox from source, even from the development tree, does have some potentially useful side effects. For a start, custom built versions appear not to report telemetry to Mozilla, which I consider useful given Mozilla's ongoing issues. However it can also have some drawbacks (apart from those inherent in using the latest development tree), which is a matter for another entry.
As a side note, it's interesting to see that back in my 2012 entry, I'd switched from building from the development tree to building from the released source tree. I changed back to building from the development tree at some point, but I'm not sure exactly when I did that or why. Here in the Firefox Quantum era, my feeling is that using the development tree will be useful for a few years to come until the WebExts APIs get fully developed and stabilized (maybe we'll even get improvements to some irritating limitations).
(It's possible that I shifted to modifying and regularly updating the development tree because it made it easier to maintain my local changes. The drawback of modifying a release tree is that it only updates occasionally and the updates are large.)