Testing old new waters with Linux
I was using a MacBook as main device at home since ~2019 and at work since ~2022.
For me MacBooks are a near perfect combination of robustness, ease of use and flexibility.
With the Apple Silicon transition Apple added performance, no fan noise and battery life to that already long list.
The macOS software ecosystem is full of really nice apps. From home banking (MoneyMoney) over system stats (iStatMenus) to awesome Git clients (Fork). All are perfectly tailored to the very limited set of variation that can happen in Apple land.
Then I decided to go all-in: Apple keyboard, iPhone, Apple Watch, iPad and even an Apple Studio Display and I was happily living the Apple dream 😀 (I left out the Apple Mouse. Sorry but everyone needs to have a line that is not crossed 😉)
Last year a few things happened: I got bored, Apple decided to use some really dubious arguments to get itself out of some EU regulations and promised AI things that were not even remotely finished (as it turned out lately they seem to have been caught off guard on that end) so I decided to go back to Android again.
To be honest: It felt wrong in iOS land for me the whole time. I’m an Android developer at heart and I think this won’t change that easily. It feels right to carry a device around that can contain the apps that I love most developing. Maybe weird but I’m sure there are some people out there that can understand me.
Replacing my iPad with a Samsung Tablet made the Apple Studio Display useless for the “tablet connected to monitor” use-case. Not that I do that very frequently but just knowing that this is not an option drove me nuts so I sold the Studio Display and went with the Samsung Viewfinity S9.
So at that point I was already half way out of the Apple ecosystem.
Since the beginning of this year I frequently ran into capacity issues on my M1 MacBook (512 GB) so I was seeking a replacement with more storage (and RAM, I had 16GB).
I quickly configured a M4 MacBook and immediately discarded that idea seeing the price. I don’t have CPU performance issues, I just wanted to increase memory and storage so I also had a look at used MacBooks that meet my requirements.
At that point I realized that it would cost me around 1600€ to do that upgrade.
Meanwhile - a few weeks ago I stumbled across an old Dell notebook from our daughter. I think it is 8 years old by now, has no Windows 11 support any more and the battery is at 40% capacity. Just to tinker with it I decided to install Ubuntu on it just to see what the current state of Linux is these days.
It performed really well and everything worked just out of the box.
This experience and the times we live in (do you really want to make your computing world dependent on one company that has its jurisdiction in a country that could turn into an autocracy at any moment?) made me curious and an idea was born: What if a used notebook running Linux would also fulfill my daily needs in terms of computer usage? This way I could get my RAM and storage increase for a much lower price and I would have way more hardware options.
For sure this would cost me a bit performance and battery life but given that were not really the limiting factors for me I was ready to give it a shot.
So I searched different forums, Reddit and throughout the whole internet to find out what the best notebook and Linux distribution combination would be.
Hardware selection
I learned that there are a couple of brands that are known to work well with Linux (as well as it can get). I have a few special requirements:
- it would be cool if the display would be nice. I can live with a slightly worse display compared to my Mac but I don’t want to have a super cheap LCD display with bad brightness and viewing angles
- I have a Thunderbolt (4) setup on my desk. The monitor, wired network and a couple of USB devices are connected via one Thunderbolt 4 cable.
I learned that AMD is the way to go in terms of performance and battery life for the range of notebooks I was looking at (1-2 years old) but I was not sure if the “USB-4” that’s written on AMD based notebooks would play nicely with my setup.
I also learned that AMD processors tend to have standby issues on Linux.
In terms of brands it seems that one wants to have a Lenovo, Dell, Framework, Tuxedo or System76 device nowadays. Framework, Tuxedo and System76 are quite hard to get as used ones here and I remembered the old days at university where I was jealous at all those IBM ThinkPad users as I was not able to afford one.
So I decided to go with a ThinkPad and found a good one (T14s, Gen4, Intel i7, 32GB RAM, 1TB storage, OLED screen) and bought it.
Linux setup
While eagerly waiting for the ThinkPad to arrive I tried to find out the best distribution to use for ThinkPads.
The internet is full of people telling you that their configuration is the one and only goto solution and everything just works which doesn’t make this easier 😀
In the past I always defaulted to Ubuntu with Gnome as this was the most stable and widespread distribution so it was easy to find help if something goes wrong.
I also read some praises for KDE that seemed to have made a major leap forward and now offers a much more modern look (compared to that wannabe Windows 95 look back then) so I decided to start with Kubuntu.
The installation went smooth and after 20 Minutes or so I was able to use my new system.
I immediately missed the touchpad gestures that you get used to as a MacBook user and searched on how to enable them only to find out that KDE seems to lack any nice application overview. So even if I would manage to install a software that can do the gestures I would have no target that should be triggered…
So I decided to install OG Ubuntu to get the nice Gnome gestures.
Ubuntu felt much better in terms of modernity and gesture support. The fingerprint reader did not work right out of the box (in contrast to Kubuntu) but it was just one terminal command away from working.
I started to set up the ThinkPad and realized that all the Electron apps are blurry. This kicked off a whole evening of reading through the internet to find ways how to solve that.
The culprit of this blurriness was the fractional scaling that I had to enable because of the screen selection I did (native resolution would be way too small and 2x is too big).
The solution to this problem is Wayland. The system needs to be switched to Wayland and the apps need to also use Wayland (otherwise they get bridged over from their X APIs causing all kinds of issues). Of course this has to be done differently for different apps and has different side effects. Just a few examples:
- Warp terminal: this is a setting in Warp. Works flawlessly afterwards (why not automatically? 🤷🏻♂️)
- Bitwarden: find the
.desktop
file and add those parameters:--enable-features=UseOzonePlatform --ozone-platform=wayland
. This is true for almost all Electron apps. Special side effect of Bitwarden: Window resizing is not working any more (only via Windows Key + right click) - Chrome: go to “chrome://flags”, search for “Ozone platform” and set it to “Wayland”
- Edge: no way. Did not find a solution (which made me switch back to Firefox)
- Android Studio: add
-Dawt.toolkit.name=WLToolkit
to the command in the.desktop
file.
As you can see it started already with quite a bit of tinkering but that’s why we are here, right?
Then I realized that I did not enable any disk encryption. I wonder why this is not the default but I really need this as otherwise anyone could just remove the SSD from my notebook, mount it and read all the data.
Sadly there is no easy way (at least for me) to add the encryption after the fact. There is a guide in the internet that I followed but afterwards the system acted weirdly (Gnome Keyring was no longer accessible). Glad that I made a full backup beforehand.
But given that I have to re-install anyways I thought that might be a good opportunity to try something completely different.
I searched around and the first thing I tried was OpenSuse. This is a very old distribution that I remembered as very old looking and complex to use (dialogs over dialogs of selecting the components to install) but I have read really nice things about it. They seem to have a built in BTRFS based system that is similar to the system recovery points (not sure how they are called in English) from Windows. If anything breaks you can directly boot into a former snapshot of the system. That’s nice, right?
So I installed it and configured the disk encryption in the installer. After installation I rebooted and got stuck after entering the disk decryption key. At least it seemed that way. In fact the decryption of the disk took around 1 minute before the boot completed. I almost did the hard switch off. 1 minute is really long if you sit in front of the computer waiting for something to happen.
I did not dig into that more deeply but decided to move on so I tried PopOS next. They are about to release a new Desktop system called “Cosmic” that is based on Wayland. As I need to use Wayland anyways I decided to give that a shot.
It installed just fine and as far as I remember all the hardware was immediately working.
Sadly the design of this new Cosmic UI was really not my turf. Too playful I guess? Also there weren’t that many options to tinker with different settings (e.g. to add plugins for all kinds of stuff like a dock or statusbar icons) so I decided to move on again.
Last on my list was Fedora. I used it briefly in the past but there were too many things not working so I switched to Ubuntu back then.
Either I was lucky or this is a completely different story nowadays. I installed Fedora 42 and almost everything worked right away. Wayland is already the default and the Electron apps were not blurry at all. Not sure why. Maybe because they use newer components?
In the end I needed to force the apps to use Wayland anyways but not because of blurriness but because of performance (especially resizing is an issue with X based applications in Wayland)
So I started configuring the system again with all the bells and whistles that I need.
Most importantly:
- Bitwarden
- VS Code
- Cursor
- Warp
- Timeshift
- Syncthing
- Nextcloud
- Thunderbird
- Bluebubbles
At that point we are already a few days into my Linux journey. The days are blurry in my memories so I can’t tell exactly how long it took but those were some really fun nerd evenings tinkering around for sure.
So all set up and ready to go?
No! There is one thing to do left.
The end-boss
I had one final end-boss: Building iOS apps on Linux.
“But how should this work?” you may ask. The answer is: Qemu and patience to tinker around.
This is not a step-by-step guide but what I basically did was:
- clone QuickEmu (really clone, not install from a repository - we need to adapt it)
- install MacOS Sequoia using QuickEmu
- boot into MacOS - don’t login (this won’t work as Sequoia detects the VM)
- Mount the OpenCore partition and add the entries mentioned here to it
- Reboot - you should now be able to log in with you Apple Id and install XCode
At that point we can already build and release an iPhone app. But that’s not enough: We want to debug on a real iPhone.
For this to happen we need to teach Fedora to ignore the iPhone and we need to teach the VM to pass it through. I roughly followed this guide (you need to scroll down to the edit, there is the solution) with some adaptions mentioned here
This will basically remove the iPhone photo capabilities in Nautilus / Gnome and manipulate QuickEmu so that the iPhone gets passed through.
After those changes I was able to connect XCode in Qemu with my iPhone and run an app on it.
Verdict
So for now I consider this experiment to be a success.
- I can live with the performance and battery life hit I got (most of the time this is not noticeable but there are some occasions like building where one can feel a difference)
- I can do my software development related stuff the same way as I could on MacOS.
- I actually prefer the ThinkPad keyboard over the MacBook one.
- I really like the status LED in the ThinkPad logo that shows if the device is currently active or suspended.
For now I will stay here in Linux land but I keep my MacBook in case I change my mind once the “shiny new thing to tinker with” fog is lifted.
But given the effort this took I can already tell: 2025 will not be the year of the Linux desktop.
So long. Happy coding.