This may be too broad of a question, but I'm not really sure what exactly I'm looking for. My main question is how the open source community reverse engineers windows drivers (for say, video cards) to re-write them under linux.
I'm an EE graduate, so I've taken courses in microprocessor design and such, assembly, C for embedded systems, and I've worked on embedded linux. But I feel like I'm missing something when trying to understand how drivers are written for linux without an API from the hardware manufacturer.
What leads to my question is that on some new laptops, they come with dual video cards. Both an integrated one and a discrete one. There's driver software that allows switching between the 2 in windows, but as far as I know, there's no either open source or proprietary drivers. Obviously I'm not asking something stupid like "omg how do I write that msyelf". But it did make me realize that I've always wondered the process of getting hardware support on linux.
Links to resources are fine, I don't expect a tutorial on driver development in an answer. But at least I need to be pointed in the right direction.