The distinction between "firmware" and "software" these days is pretty thin. With that in mind, how should you treat non-free firmware blobs on a modern system? @mjg59 has a great post that talks through a lot of the considerations that should go into making the decision for yourself:
https://codon.org.uk/~mjg59/blog/p/to-update-blobs-or-not-to-update-blobs/
It's hard to build hardware w/o blobs. If you want details, check out my talk on Purism's attempt to build RYF-compliant hardware:
To update blobs or not to update blobs
A lot of hardware runs non-free software. Sometimes that non-free software is in ROM. Sometimes it’s in flash. Sometimes it’s not stored on the device at all, it’s pushed into it at runtime by another piece of hardware or by the operating system. We typically refer to this software as “firmware” to differentiate it from the software run on the CPU after the OS has started1, but a lot of it (and, these days, probably most of it) is software written in C or some other systems programming language and targeting Arm or RISC-V or maybe MIPS and even sometimes x862.