Yes, you need different versions for different operating systems. Remember, almost all programs depend on the kernel for "housekeeping" operations (memory management, file access, etc.), and the the M$ kernel is implemented differently from Linux kernels.
The kernel is also called to load a program executable file, resolve system calls, etc.
M$, Linux, and, I believe, Unix, all use different "entry points" and "call stacks," so, even with identical source code, the executable binary files will be different.
Oh, and, of course, most M$ programs are not available without paying the $.