Hardware support in FreeBSD is not so bad: over 90% of popular hardware is supported!

On the Internet, in specialized communities and on forums, you can often find statements that hardware support in FreeBSD is poor. After six months of research, I was able to understand that the hardware support in FreeBSD is not so bad. I'll explain why next.

How to estimate state of hardware support in the operating system? It would seem that this is simply the ratio of the number of supported devices to the total number of devices on the market. But it's not that simple. First, both quantities are not known exactly or even approximately. Secondly, not all devices are equally popular. There are widely used devices, the support of which is necessary and there are rare ones, the users of which can be counted on one hand. In addition, new device models appear in the world every day as well as new drivers in the operating system, so any assessment quickly becomes outdated.

In order to estimate the number of supported devices in FreeBSD, I had to write a heuristic parser for the kernel sources, as a result of which I was able to get an approximate list of supported PCI and USB devices. The problem with compiling such a list is that not all devices are explicitly mentioned in the kernel code; sometimes a driver supports a whole class of devices without specifying particular model identifiers.

The popularity of devices in users' computers was assessed using the Linux-Hardware.org project, which has accumulated a fairly large user base over 5 years of its existence. A new repository was created specifically for the study, which presents the population of PCI devices on users' computers. Thus, we now know which devices are more important and require better support.

Left a little — to sum up all instances of supported devices and divide by the total number of supported and unsupported ones, and repeat all this for different categories of devices. I posted the results in this repository. The average support level for the most important device categories (Ethernet, WiFi, ATA/IDE/RAID, graphics card, and sound) is about 90% for FreeBSD, and this is the lower bound. The corresponding estimation for OpenBSD is 75%, and for NetBSD it is 60%. The weakest side of FreeBSD, as expected, was the WiFi-cards category, the share of compatible devices in which was just over 70%.

FreeBSD compatible hardware exists and there are many! The problem is rather in the choice of compatible configurations from the whole variety. These are guaranteed to be found in the iXsystems and pfSense stores. You can also find community tested configurations at BSD-Hardware.info, or estimate compatibility using the method described in the article How it fits BSD?.

Thank you all for your attention. Please add probes of any of your computers to the database — this will help a lot with finding BSD-compatible configurations!

EDIT 1: In this article, "90% of popular devices" == "90% of all devices taking into account number of their samples". Rare ones are also counted, but with a lower weight.
 
Well. I would said FreeBSD's hardware support is only after Linux. It's very good except... anything about Wifi. I have to ditch my usb dongle and bought a very long cable when I switched to FreeBSD.
 
  • It's not to blame FreeBSD, but hardware vendors who do not provide enough info to develop Open Source drivers.
  • Anyone is free to prefer hardware from vendors who do so.
  • Linux has a much broader user base, especially regarding consumer hardware, thus more contributors & opportunities to test new hardware.
The last topic underlines my efforts to convince others about the importance of a good user experience for desktop & laptop on standard FreeBSD out-of-the-box. Enhancing this is a key to enlarge FreeBSD's user base, and will result in more contributors, more installations on servers once these users get responsible to manage projects in their professional career, and better hardware support.
 
Well. I would said FreeBSD's hardware support is only after Linux. It's very good except... anything about Wifi. I have to ditch my usb dongle and bought a very long cable when I switched to FreeBSD.
Maybe that was just bad luck. Both the Wifi chip on my PC’s mainboard and the one inside my laptop work fine with FreeBSD. Also, when I grabbed the Wifi USB dongle from my wife’s Windows PC for testing, it also worked out of the box with FreeBSD.
 
For Wifi you just plug a very cheap USB stick in the laptop. And this works perfect.
It is however interesting to know which "categories" of hardware don't work.
Onboard Wifi, old laptops, USB music keyboards, USB audio can be problematic.
Very modern accelerated video cards can be problematic, but Linux has an identical problem.
 
I for one am very happy that the main thing lacking is wifi adapters. Not only do I have a cupboard full of them (I seem to inherit them for some reason) but they are cheap and very easy to replace. Just grab some off Raspberry Pi centric stores and it is extremely likely they will work.
... *and* I use cabled ethernet anyway XD
 
It is however interesting to know which "categories" of hardware don't work.
The LED controller of my mainboard is not supported by FreeBSD:
Code:
uhid0: <AsusTek Computer Inc. AURA LED Controller, class 0/0, rev 2.00/2.00, addr 1> on usbus0
It attaches to uhid(4) because it identifies itself as a HID class device, but there’s nothing I can do with it.

Also, I cannot read the onboard sensors (temperature and fan rotation) with FreeBSD. This is a major problem that affects many popular mainboards. There are some tools in the ports collection that support certain chips (usually via SMB bus), but they don’t work with most of today’s mainboards.

Well, at least I can read the processor’s temperature thanks to amdtemp(4), and the storage devices with smartctl(8). But I would feel a lot better if I could check the CPU fan and the case fan, too.
Code:
 > sysctl dev.cpu.0.temperature
dev.cpu.0.temperature: 35.5C
 > smartctl -A /dev/ada1 // temp
194 Temperature_Celsius     0x0002   139   139   000    Old_age   Always       -       43 (Min/Max 17/55)
 > smartctl -A /dev/nvme0 // sensor
Temperature Sensor 1:               41 Celsius
Temperature Sensor 2:               48 Celsius
(In case you wonder, I've configured my shell to use “//” as a global alias for “| egrep -i”.)
 
Worst problem I had with WiFi was an iwn(4) WLAN chip in an old laptop, until I found out I need to set s/th like intel_iwn_license_ack="yes" in loader.conf(5) (old driver, now this seems gone). For the sensors: Some ACPI vendor-specific kernel modules provide access to these. E.g sysctl dev.acpi_ibm
Code:
dev.acpi_ibm.0.handlerevents: NONE
dev.acpi_ibm.0.mic_led: 0
dev.acpi_ibm.0.fan: 1
dev.acpi_ibm.0.fan_level: 0
dev.acpi_ibm.0.fan_speed: 3054
dev.acpi_ibm.0.wlan: 1
dev.acpi_ibm.0.bluetooth: 1
dev.acpi_ibm.0.thinklight: 0
dev.acpi_ibm.0.mute: 0
dev.acpi_ibm.0.volume: 5
 
It would be interesting to precisely define the verb "to work" when referring to hardware support.
WiFi "works" under FreeBSD if one just means "provides network connectivity", but it takes its time to "work", to say the least. :(
 
Comparing to Windows and Linux, FreeBSD has a poor hardware support. We have to face this truth, haven't we?
Why is, without a doubt, interesting, but the fact is there.

Manifacturers of new devices always make a driver for the Microsoft OS and often for Linux. Some people convert Linux drivers to FreeBSD, but it can take a long time.
 
Last edited:
It would be interesting to precisely define the verb "to work" when referring to hardware support.
WiFi "works" under FreeBSD if one just means "provides network connectivity", but it takes its time to "work", to say the least. :(
Why not name what you mean ;) Many will know what you mean, but some do not...
 
Comparing to Windows and Linux, FreeBSD has a poor hardware support. We have to face this truth, haven't we?
90% coverage is pretty good, not poor. My high end workstation I built, about six years ago, uses all off-the-shelf components from NewEgg and all of them worked on FreeBSD 7 (or was it 9? Don't recall).
 
90% coverage is pretty good, not poor.

Exactly. macOS would be ~3% and users don't moan about that.

Windows 10 would be ~30% (for example doesn't often run on laptops older than 6 years old. No drivers XD).

The only "competition" we have is Linux but frankly they are breaking stuff left right and center. They no longer support the Intel GMA 915 past OpenGL 1.5 anymore as one example.

Also, many of the popular distros don't support 32-bit so instantly FreeBSD wins here ;)
 
well, my new desktop pc is working better under FreeBSD than Linux ... the USB-hardware just works in FreeBSD whereas in Linux I have to find the proper slot that is working
 
  • Like
Reactions: a6h
Why not name what you mean ;) Many will know what you mean, but some do not...

It's no secret FreeBSD's WiFi is very slow. The first time I installed FreeBSD on bare metal, I thought there was a network failure and rebooted the router.... :/

Another example is Intel HDA support, for which a couple of PR are open since 2018 or 2019 and still affecting 13-CURRENT. When you run FreeBSD on a machine using an Intel chipset, sound may work, or it may not. A factor influencing your good fortune is having a display connected to the HDMI port. Frankly, it's not the first thing you'll think of trying when your machine is too busy filling your system logs with error messages to respond...

I give these examples to underline why a clear definition of "working" or "supported" is absolutely required.
And of course, this definition should be rigorously taken into account in the way any research on hardware support is conducted.
Moreover, doing a cross-OS research implies using the same definition with all OS for results to be meaningful.
 
It's no secret FreeBSD's WiFi is very slow..

Another example is Intel HDA support..

I certainly understand what you are saying and I do agree but Linux is no walk in the park here either. In the past I have had endless issues with alsa. For some reason it would disable my onboard sound and mic and default to some naff microphone and speaker in a cheap £5 usb webcam when it is plugged in.
No amount of fiddling in alsamixer could fix it.

This isn't an issue in itself (I am used to broken crap). However the worst part is that I am fairly sure the drivers were great, it was just the documentation that was lacking. The best I had was a bunch of random forums mostly discussing the Gnome sound GUI or pulseaudio failures. Neither of which I was using.

My experience with Linux wifi mostly revolves around Raspbian and Debian. For some bizarre reason the wpa_supplicant service is configured to interact with dbus rather than a unix descriptor or even read the wpa_supplicant.conf. This dbus daemon is completely machine driven and only useful for desktop environments. So not fit for purpose as a generic computing platform.

So yes, the drivers *are* likely better, but they are let down by an absolute mess of an OS.
 
For some bizarre reason the wpa_supplicant service is configured to interact with dbus rather than a unix descriptor or even read the wpa_supplicant.conf.

An interesting post is pinned on top of the home page. The same still holds true if you replace the word "FreeBSD" with "Linux".

Each OS has its own way and this is very good. If there were only one OS, we'd have to endure it. As long as they keep being different, we have a choice.

And what's more, we can choose to use these differences as a source of inspiration, not to copy the others, but to nurture our creativity.
DragonFlyBSD, NetBSD and OpenBSD have all implemented interesting things that could inspire FreeBSD, so did Linux.

Hatred is a blindfold and as long as you wear it, you have no other choice than throwing the wheat with the chaff.
It's not a problem, though, it's just sad.
 
Each OS has its own way and this is very good. If there were only one OS, we'd have to endure it. As long as they keep being different, we have a choice.

Well that is kind of true, except many Linux distros do happen to have correct wpa_supplicant defaults (Alpine, Arch, etc). Completely inconsistent.
 
Left a little — to sum up all instances of supported devices and divide by the total number of supported and unsupported ones, and repeat all this for different categories of devices. I posted the results in this repository. The average support level for the most important device categories (Ethernet, WiFi, ATA/IDE/RAID, graphics card, and sound) is about 90% for FreeBSD, and this is the lower bound. The corresponding estimation for OpenBSD is 75%, and for NetBSD it is 60%. The weakest side of FreeBSD, as expected, was the WiFi-cards category, the share of compatible devices in which was just over 70%.

This is very interesting and informative. Did you use R or a spreadsheet, and if so can you push that to git or share it?
 
Yes I saw these, I was wondering about the actual calculations. Using your formula I ran a quick pass on a spreadsheet just using the 12.1 hardware data and encryption controllers (since there are few) and found a different result than yours. I wasn't clear if you used only 12.1 or other versions, nor did I check if hardware support differed between them in any event.
 
Back
Top