Thursday 20 June 2019

Moving to Firefox

I was a big fan of Firefox from approximately the introduction of Live Bookmarks (before Google Reader or even my own use of Bloglines - literally all three of these RSS tools are now dead so RIP RSS in general: push notifications for new website content seems like the obvious right way to do things and yet support is slipping away) up until some decisions I considered strange (eg removing the ability to restrict which websites ran Javascript unless you installed a plugin to manage what I consider a core task of a browser interested in basic security). When Firefox still hadn't added back those basic security tools but decided to lock down running unsigned plugins (like the ones I'd written myself & didn't need external security audits) with the stable release branch, I had already mainly moved to Chrome as my daily browser (which retains the ability to decide which plugin code need to be signed & offers granular whitelist support for managing locally executed website code). Android has been the one place where I've continued to keep FF around as an option (although recently I had also basically moved to exclusively using Chrome because of how it syncs history, bookmarks, tabs, and settings between versions).

But recently my use of Chrome for daily browsing and Edge for occasional tasks with access to a different rendering engine (to avoid bugs) has been defeated by MS giving up on their own rendering engine and deciding that Chrome is the standard. Everything close to mainstream is a child of KHTML now (WebKit & Blink are not identical but they're both derived from a common ancestor and just steered in slightly different directions by Apple and Google). It's starting to feel Microsoft EEE plan crushing to stick with the Blink renderer in 2019; and I also have an ecosystem interest in Servo (built as one of the tentpole projects for Rust). But moving to Firefox wasn't entirely painless so it's time for a quick rundown for anyone else making the move - I'm starting from the Firefox Developer Edition (because they still force you to get your plugin code signed for the main stable branch) as Waterfox's Servo-derived version sounds like it is still early so I'm not yet thinking about projects that have forked from the main Firefox path.

Save often

An early crash seemed to wipe out FF's settings database, which includes most plugin configuration data, so make good use of the Export to File options that most plugins seem to offer. I'd personally prefer if all settings were stored in flat files which were easy to back up and sync between devices but it seems like FF prefers a central database which also stores most of the settings for the browser itself.

Outside of that one disaster of a crash (which ate customisation data & forced me to configure things twice, this time saving backups once I was done), everything seems stable. I was also leaving Chrome due to some rare stability issues that seemed to be triggered while several video streams were running at once and so far none of those issues have happened in FF. A tab has crashes once or twice but with about the same frequency as Chrome and the isolation (so it doesn't take out any other tabs) seems to be just a solid. Discord introduced a bug (that I only saw in FF) for about two days that caused its internal engine to detect a failure state and require refreshing, which indicates the major concern with moving away from the market leader: sites will not be as well tested in FF. On the other hand, a long-standing bug in TweetDeck (making scrolling a column jump around) is simply not an issue on FF so it's good to keep an open mind about which gripes you're just accustomed to.

Customise everything

One of the nice visual updates to Chrome some time ago was to drop the OS stock scrollbars and give us something a bit cleaner and often narrower (using a style extension to manage it). Unfortunately FF does not pick up on that extension but rather has its own extension with which you can request a skinny scrollbar (or the complete removal of one). I had to tweak some of my old CSS injections to customise the pages I often visit (eg TweetDeck) to look more like they do by default under Chrome. I'll write my own CSS injector for FF (as I did in Chrome - it's an ideal "my first plugin" learning experience) but right now I'm using Stylus.

Because I have a 4K desktop and so run my Windows UI above 100% zoom (in the mess that is the various HiDPI APIs in current Windows 10) there have been a few times I've needed to prod the page zoom settings to get everything feeling the same as before. The standout glitch was Discord, where the visible scrollbars are fake (elements drawn by the website, not the browser itself) but the code to hide the real scrollbars doesn't work perfectly outsize of 100% zoom in FF. But as they're not the actual scrollbars you're looking at or interacting with, the above extension can also be used to completely hide them and clean up the visuals (making it look just like in Chrome). Basically it's a lot easier to adapt when you're used to poking CSS to your satisfaction for certain web-apps anyway. I even caught up to modern CSS and the more recently added wildcards to catch all the Discord elements in a single line: div[class^="scroller-"] {scrollbar-width: none;}

Basically all of the actual browser experience customisation maps directly from Chrome to Firefox, from font preferences to interface layout and customisation. You can even tweak the "density" of the main UI to tweak whitespace, something I don't think Chrome offers, which leaves you with a narrower tab bar and more vertical space on a 16:9 screen for the actual website. A really nice stock feature is the Reader View, which toggles a clean article view when detecting a main text block (far from unique, but it's a clean stock implementation unlike Dom Distiller or a plugin). I think we're at a point where the stock features are pretty comparable, even if you do have to do the occasional search to translate it over (as I did for the scrollbars) or find a plugin on one platform to reach parity.

Plugin list

Most of the plugins I had in Chrome also exist for Firefox. Here is a list I'm currently running until I've moved most of my internal stuff to the new ecosystem. I'm not saying I've audited code, but I did at least do basic checks to avoid obvious snooper extensions (eg Stylus is designed to be the non-telemetry alternative to Stylish). There is currently no way to restrict which pages each plugin can read and modify, something I'm shocked hasn't been copied from Chrome on a browser that advertises it's security (FF only just added restricting plugins to not work on Private/Container tabs).

Facebook Container - Keep your logged in FB session in a special container so it's slightly harder for FB to track you elsewhere on the web.
Privacy Badger - EFF tracker blocker & url click-tracker remover for Google search etc links.
HTTPS Everywhere - Another EFF classic: make https the default for websites which haven't made the switch yet.
NoScript - IMO this should be a core feature in Firefox. In previous versions this was a stock feature. For now I'll use this to whitelist the few sites that do need client-side code execution rights.
uBlock Origin - I'm mainly using this as an easy way to suppress certain page elements as I read until I port over my plugin that does that job (I typically do not go for "Adblock" plugins but it's easy to configure & you can turn most of it off). It's a good extra line of security until I get comfortable with NoScript & my own plugins properly protecting me from JavaScript nasties.
Stylus - As mentioned above, this makes CSS injection really quick and easy until I port my own plugin over to customise how regular websites look.
Awesome RSS - Firefox took the classic RSS icon out of the address bar (so did Chrome: Google made an official plugin to add it back). Weep for RSS, an idea that made the web so much nicer to use that they tried to kill it!
Snap Links - This is the equivalent of the most esoteric plugin I love in Chrome: Linkclump. My index of RSS feeds in Feedly: sometimes I want my browser to open lots of links in several tabs ("I've got half an hour, give me 5 articles I've put a pin in as worth reading fully"; "Open all webcomics that have updated since last I checked") and this makes that as easy as dragging a box over all the nicely lined up links.