To be able to run free software you need compatible hardware. Sure you can use some of them on windows or macos but those OSes are not examples of free operating system, do not provide a healthy ecosystem for them to thrive and do not respect your freedom.

Easy and fast check

The fast and easy check if you already have access to the hardware is to run the OS and to see what is working or not.

GNU/Linux Libre

I suggest you start with one of the GNU/Linux libre distribution since they are the most respecting of your freedom (i.e Trisquel for the more traditional approach or Guix my personal favorite, ...). Be aware than due to being 100% free, recent hardware and more specifically some sound cards, video cards (mainly AMD and Nvidia) and wifi cards are not likely to work.

The complete list of distros that follows the Guidelines for Free System Distributions can be found at https://www.gnu.org/distros/free-distros.en.html

GNU/Linux with blobs

If it works, great! Otherwise the next best thing is to choose among the multitude of GNU/Linux distributions (i.e Debian, Gentoo, NixOS, ...). Nowdays unless you have a really esoteric piece of hardware I assure you that you will be able run it.

BSD

You may even take a look at the BSD family of operating system (i.e OpenBSD, NetBSD, FreeBSD, DragonFly ...). They too have a decent hardware compatibility although not as good as GNU/Linux.

A more thorough analysis

Checking your hardware

Linux

lspci, lsusb are commands from pciutils and usbutils to inspect pci and usb devices.

Report info to h-node

If you run the following command using a fully free GNU/Linux distribution or Debian (includes only free software by default) do not forget to report it to h-node. H-node is a hardware database that report if a device works on a fully free system.

lspci -vmmnn 
# -v verbose
# -mm machine readable output
# -nn numbers and names for pci vendor and devices code 

https://h-node.org/search/form/en

If something is missing add it otherwise do not forget to check the validity and accuracy of the others entries.

Example

Key Value
Model Name Intel Corporation HD Graphics 520
VendorId:ProductID 8086:1921
Year of commercialisation 2016
Interface PCI-E
Tested on Guix
Kernel version 5.10.2-gnu
Works with Free Software works with 3D acceleration
Free Driver used i915
lspci -nnpk -d 8086:1921
00:02.0 VGA compatible controller [0300]: Intel Corporation HD Graphics 520 [8086:1921] (rev 0a)
lspci -vnnmm -d 8086:1921
Slot:   00:02.0
Class:  VGA compatible controller [0300]
Vendor: Intel Corporation [8086]
Device: HD Graphics 520 [1921]
SVendor:        Lenovo [17aa]
SDevice:        Device [3802]
Rev:    0a
lspci -v -d 8086:1921
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 520 (rev 0a) (prog-if 00 [VGA controller])
Subsystem: Lenovo Device 3802
Flags: bus master, fast devsel, latency 0, IRQ 125
Memory at d0000000 (64-bit, non-prefetchable) [size=16M]
Memory at c0000000 (64-bit, prefetchable) [size=256M]
I/O ports at e000 [size=64]
Expansion ROM at 000c0000 [virtual] [disabled] [size=128K]
Capabilities: [40] Vendor Specific Information: Len=0c <?>
Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable- 64bit-
Capabilities: [d0] Power Management version 2
Capabilities: [100] Process Address Space ID (PASID)
Capabilities: [200] Address Translation Service (ATS)
Capabilities: [300] Page Request Interface (PRI)
Kernel driver in use: i915

BSD

The previous commands lspci and lsusb also works on the BSDs but they are not included by default. The compatibility list can be found on their respective website.

OpenBSD

pcidump
Domain /dev/pci0:
0:0:0: Intel 82441FX
0:1:0: Intel 82371SB ISA
0:1:1: Intel 82371SB IDE
0:1:3: Intel 82371AB Power
0:2:0: Bochs VGA
0:3:0: Intel 82540EM

NetBSD

pcictl pci0 list
000:00:0: Intel 82441FX (PMC) PCI and Memory Controller (host bridge,revision 0x02)
000:01:0: Intel 82371SB (PIIX3) PCI-ISA Bridge (ISA bridge)
000:01:1: Intel 82371SB (PIIX3) IDE Interface (IDE mass storage, interface 0x80)
000:01:3: Intel 82371AB (PIIX4) Power Management Controller (miscellaneous bridge, revision0x03)
000:02:0: vendor 1234 product 1111 (VGA display, revision 0x02)
000:03:0: Intel i82540EM 1000baseT Ethernet (ethernet network, revision 0x03)

FreeBSD

pciconf -l # -l list devices
hostb0@pci0:0:0:0: class=0x060000 card=0x11001af4 chip=0x12378086 rev=0x02 hdr=0x00
isab0@pci0:0:1:0: class=0x060100 card=0x11001af4 chip=0x70008086 rev=0x00 hdr=0x00
atapci0@pci0:0:1:1: class=0x010180 card=0x11001af4 chip=0x70108086 rev=0x00 hdr=0x00
intsmb0@pci0:0:1:3: class=0x068000 card=0x11001af4 chip=0x71138086 rev=0x03 hdr=0x00
vgapci0@pci0:0:2:0: class=0x030000 card=0x11001af4 chip=0x11111234 rev=0x02 hdr=0x00
em0@pci0:0:3:0: class=0x020000 card=0x11001af4 chip=0x100e8086 rev=0x03 hdr=0x00