其实这就是一个非技术问题。
先拆分成两种情况:
一种是同一种操作系统升级的情况:比如从WIN2000升级到WINXP,升级到WIN7,升级到WIN10.
任何一个设计的比较好的操作系统,都会有一个硬件抽象层(HAL),驱动几乎都不会直接操作硬件,所以如果HAL的变化不大,那么从WIN2000升级到WIN7,有一些驱动是可以正常工作的。
WIN10被人骂的比较多,一个原因是WIN10的HAL层变化太大,很多驱动都要重写,我写的一个东西,在WIN10 2004版本上工作的比较好,在WIN10 20H2上就有一些问题。
另外一种情况是期望不同操作系统使用同样代码的情况:比如希望Linux和Windows使用同一套二进制驱动。
技术方面的原因很简单,就是两个操作系统的HAL层完全不同(暂时不谈二进制文件格式的问题)。
那能不能设计成相同的?答案是不能,原因有很多:
1. 不同操作系统发展路线不一样,Linux是从学习UNIX的设计发展而来,Windows则是另外一个独立的设计(并且WIN2K和WIN9x也不是同一个发展路线),这就意味着他们的原始设计差异非常大。写代码的人都知道,对于一个庞大的架构来说,修改某一个模块很容易,但整个架构推倒重来,基本不可能,厂商没有那么多人力去做这件事(但也有人做了,后面会说)。
Linux里,一切皆文件的思路贯穿于内核设计,但Windows的核心设计不是文件,就这一个区别,会让驱动设计有巨大的差异。
2. 有一些设计,是存在专利保护的,换句话说,你想让两个不同的操作系统完全一样,对不起,这是违法的。Linux有很长一段时间不能光明正大的支持NTFS/exFAT,说到底还是这方面的风险。
既然费力又不讨好,那么厂商这么做的意义在哪?
当然,题主既然想到了,肯定有别人也能想到,而且也有人这么做了。
比如WSL1,这个就是微软搞出来的,兼容Linux的,但又不是Linux的内核,刚出来的时候一片叫好,结果呢,微软发现这玩意收益不到,到WSL2的时候,微软就不再独立开发兼容Linux的内核了,直接搞虚拟机多好,厂商也要考虑成本的。
在一些小众领域(嵌入式),这种情况特别普遍,VxWorks一直以来是嵌入式(工控、自动化、军工、航空航天)领域里使用率比较高的操作系统,这方面国内也有很多公司在做国产化,国产化的一个很重要指标就是:兼容VxWorks API甚至是二进制。
看到了吧,能做,有人做了,收益不高,负担太大。
所以,不是技术问题。