what browser should i use on linux?

The changes that Google is getting ready to roll out for Chrome, that will effect add blocking via third party extensions, is growing close. I’ve placed links at the bottom to help explain many of these issues in greater detail. Meanwhile, I’ll discuss why I see it effecting my browser choice.

Google Chrome uses the Blink browser engine. So do other browsers, including but not limited to, Microsoft’s Edge, Vivaldi, Brave, and Opera. I’ve been an almost exclusive user of Vivaldi on macOS, Linux and Windows (while I ran Windows), falling back to Safari (macOS) and Chrome when I needed to check an odd behavior. One browser that does not use Blink, but that I’ve avoided for some time now, has been Firefox. I’ve avoided Firefox because of UI changes it’s made that, to be honest, annoyed the crap out of me. The worst UI change, in my opinion, was from tabs to buttons across the top of the browser. Apple tried this design idea with a beta version of Safari, but got so much grief over that change that they put regular tabs back, and put a toggle in the browser settings page to select that “advanced” feature if that’s what you wanted.

I’m back to considering Firefox because I can no longer trust what will happen to Blink, and by its association, to Vivaldi in particular. I feel Vivaldi is excellent, but if they continue to use Blink (and honestly they couldn’t switch if they wanted to) then I really don’t want to use Vivaldi. That’s why I’m beginning to move back to Firefox on Linux Mint, starting with fixing the one UI feature I can’t stand — new-style button tabs.

There’s a link at the bottom to a question asked about how to fix the button tab issue, followed by a number of answers. I’m going to paraphrase that answer and show what solution I settled on. Here are the steps I took, and what it looked like along the way on my end.

  • Open about:config
  • Search for toolkit.legacyUserProfileCustomizations.stylesheets
  • Double-click the value to set it to true

  • Open about:support
  • Search for Profile Directory
  • Click Open Directory

Opening the path shown will put you immediately into the profile directory. In that directory create a folder called chrome, and then navigate into chrome. Inside the chrome folder create a new file called userChrome.css

Open the empty file, and then copy and paste the following:

.tab-background {
  border-radius: var(--tab-border-radius) var(--tab-border-radius) 0 0 !important;
  margin-top: 1px !important;
  margin-bottom: 0 !important;
  padding-bottom: 31px !important;
}
.tabbrowser-tab[multiselected=true]:not([selected=true]) .tab-background {
  border-radius: var(--tab-border-radius) !important;
  margin-top: 2px !important;
  margin-bottom: 1px !important;
  padding-bottom: 29px !important;
}
.tabbrowser-tab[selected=true] .tab-background ,
.tabbrowser-tab[multiselected=true] .tab-background {
  background-color: var(--toolbar-bgcolor) !important;
  background-image: var(--toolbar-bgimage) !important;
}

Save what you just pasted into userChrome.css, then exit and restart Firefox. You’ll then have normal tabs back.

You might well ask yourself why must I go to this much trouble? I don’t have a definitive answer for you, but I can imagine that a singular developer decided to do it this way, and they were in their own little echo chamber/bubble that reinforced that decision. As I wrote earlier Apple tried this and got soundly beaten back, to the point that Safari was released with Plain Old Tabs. But at least you have an ability to actually fix the Firefox tabs issue.

It’s surprising how much better I like Firefox with this one change. Believe it or not I now feel comfortable leaving all other browsers and moving back into using Firefox.

Links

solving a clang++ compiler problem on linux mint 22.1

During my initial setup of Linux Mint on the Samsung Series 7, I installed the Flutter toolkit ( https://docs.flutter.dev/get-started/install/linux ). Flutter has additional application requirements, one of which is Clang. So I installed all the additional requirements, then installed Visual Studio Code, then within VSCode I installed Flutter plugin.

Note that I did not install support for Android (Android SDK and Android Studio) nor the Web (via Chrome). All I’m doing is writing Flutter desktop applications.

The Flutter plugin within VSCode automates quite a lot. Using the VSCode Command Palette, you can create an initial Flutter application (Flutter: New Project) that will create skeleton code and build files that compiles and runs the graphical equivalent of hello, world.

Visual Studio Code with the Flutter plugin and an initial Flutter application, running that application in debug mode.

As you can see, the Flutter tools for both the framework and the VSCode plugin provide an effortless on-ramp to developing applications. Creating the start of an application is ridiculously easy, and it’s capable of building and executing from the get-go. One feature this has and I use quite a lot is hot reload. When I make changes to the code, when I save the changes they’re rebuilt and the running application restarted immediately showing those changes. That’s why I use this setup.

Sample Flutter application running on the desktop.

And here is the initial application’s extremely simple desktop window. When this works well, it’s a little like magic.

Unfortunately I ran into a problem where Clang, one of Flutter’s dependencies, could not link a C++ application that is part of the Flutter application. The error message reported by the Flutter tooling was (with much superfluous reporting snipped away):

...
/usr/bin/ld: cannot find -lstdc++: No such file or directory
...

This really annoyed me because I have this same setup on my other Linux Mint system, the UM250. With a bit of googling I discovered what was wrong, and how I’d accidentally side-stepped the issue on the UM250. I solved the problem on the Series 7 with sudo apt install libstdc++-12-dev. After that the Flutter tool chain just worked.

Why didn’t I see this issue on the UM250? Because I’d installed gcc/g++ version 12 to support another small project I was working on. On the UM250 I have both versions 11 and 12. Then when I later updated an older installation of Flutter and ran the same simple tests, everything worked there as well. I don’t intend to install gcc/g++ version 12 on the Series 7 as there is no need.

What I don’t understand is how Clang and GCC got out of sync on Linux Mint 22.1. The version of Clang installed is version 14, and requires libstdc++-12. Unfortunately Linux Mint 22.1 installs GCC version 11, which means that if you wanted to build with Clang you’re out of luck unless you know of Clang 14’s dependencies.