I've been fond of FreeBSD since I first used it around version 9, when it was the base of FreeNAS 9.x back in 2012, and my wild customisations of that software taught me how FreeBSD worked and I liked how it stayed closed to the UNIX philosophy and was a minimal but tightly integrated base system+applications that stayed distinct compared with a well worn in Linux installation that quickly blurs the boundaries. In all that time though, I have never once tried using it as a desktop system, I've run it on plenty of servers at home and at work but they are never accessed locally so I was curious what that might be like.
The system I will use is my PC of Theseus "monster" that I first built as a high end Pentium II system in 1998 but was last overhauled in 2009 so is "mature" hardware today with an Intel Core 2 Duo E8400 and more recently upgraded GPU, SSD, 8GB RAM, USB 3 controller, new PSU, the last upgrade was in 2024 because this system is close to my heart and I can't help myself but keep It going! Although it'll not win any benchmark contests, it is still perfectly usable for mild home/office use, or in my case as a system for testing new operating systems and configurations on well understood hardware.
I burnt FreeBSD 14.2 to DVD, as it's the correct way. The installer is console mode and has a small number of easily understandable steps. I wanted to get it online via WiFi but this never came up as an option, only the built in wired Ethernet was available so I plugged that in temporarily while I figure out WiFi later. I installed root on ZFS to the SSD and the install process proceeded very quickly. Once it was done I dropped to a command prompt with a chroot of the new system letting me make further configuration changes before reboot.
Again I went to look at the WiFi matter, I followed the handbook section on networking but in the end I established that the new 802.11ac USB WiFi dongle I have is not supported in FreeBSD. In hindsight I should have got a older 802.11n dongle for broader support > performance so I rebooted the machine and let it start up from the SSD.
Start up times in FreeBSD are slow compared to modern Linux with systemd but it is still very quick and much faster than Windows. FreeBSD lacks Plymouth so dumps a tonne of debug to the console which I actually prefer. Eventually it gave me a log in prompt and I logged in as my unprivileged user to a tcsh
shell. First thing I installed was doas
so I could easily elevate privileges since neither it nor sudo
are installed by default as you would find on Linux. While su
is available, it is less convenient for one-shot commands. Doas itself comes with a sample config but it doesn't assume a default config for you (very BSD) so I ran echo "permit :wheel" > /usr/local/etc/doas.conf
and it was ready since I already assigned my user to the wheel group during installation.
Next I went to install the GPU drivers. I've never needed to do this on servers so it was new territory. This PC has a Nvidia GTX 750 Ti card so I followed the handbook on how to get the drivers installed, then I installed Xorg so I could see it in action. With a startx
Xorg booted up and I was presented with nobody's favourite WM of last resort - twm. I noticed it looked a bit blurry and running xrandr
confirmed that the resolution was less than the 1080p native resolution of the display. I look up how to diagnose this issue and installed mesa-demos
, which gives me glxgears
and glxinfo
, these showed my GPU was llvmpipe, which I understand is the failback driver, so it appears my Nvidia card is not working.
I tried a few things to fix the problem, reinstalling the driver, installing the kernel modules, which I think are the FreeBSD equivalent of the Nouveau drivers on Linux (but don't quote me on that) and non of this worked. After a good hour of failure I called it a night and slept on it. Next morning I tried first to downgrade the driver to alternative version provided in the repos, although the docs claim my card was supported on the latest version, many other 700 series cards were dropped so perhaps the docs were inaccurate? No dice though so I next tried compiling the drivers from ports, I believe some binary packages are built against older FreeBSD releases and sometimes this causes problems so compiling from scratch might help? But again, no improvement. Eventually I decided to try hard coding the driver in the Xorg config because maybe auto-configuration was failing, this worked! The next time I started up X the display was much crisper and xrandr
confirmed I was running at 1080p and glxgears -info
now shows my Nvidia card is being used, wonderful!
It's been so long since I had such a hard time getting drivers to work on Linux that I forgot that this is what it was like. I was fortunate that the clues were all there in the excellent documentation, but it took a bit of experimentation to zero-in on the specific problem, I wasn't so lucky with WiFi but we'll come back to that next time...