There used to be a lot of cards based on same or similar chips, but with small differences. That made little changes to drivers common. It’s a bit like LCD modules or audio chipset quirks. One driver with tons of little differences depending on what each manufacturer decided to do differently.
Yeah, I know, that’s why the kernel with the drivers is not more than 150MB. Otherwise, you’d have the Windows situation where driverpacks compressed with 7z (LZMA2, solid archive, 273 word dictionary size and 2GB decompression memory, which requires about 128GB of RAM to compress) take about 30GB.
You have to pack the driver from each manufacturer because of signatures, even though they might even be the same with other drivers in the pack… but, REV differs and oh well, the driver installer doesn’t recognize that driver as a valid one for that device.
Of course, the kernel drivers are now commonly signed. The real problem is catering to manufacturers demanding to have their own bespoke driver pack, often including some stupid branded management application, when it’s just the same as the other dozen manufacturers packaging of the same product. Then you end up with bloated “driver packs” and a system tray of a half dozen vendors screaming for you to pay attention to them and know that they are somehow contributing to your experience.
In Linux, you have a kernel driver and a myriad of vendor’s pci ids mixed together and the vendors just have to deal with it. As a side effect, a USB to serial dongle is about 99% likely to work in Linux, and in my experience 90% unlikely to work in Windows (can’t find the driver for it, or in one very prominent case Microsoft bans drivers of counterfeit chips that function fine, but violate IP rights). Punishing the counterfeiters may have been understandable, but ultimately the unwitting customers paid rather than the counterfeiters (they still sold their devices, but the users that were oblivious suffered).