At least two major reasons, 3 when you consider Linux runs on far more architectures than Windows:
1. Windows and Linux use completely different binary formats: Windows uses a poor excuse of a COFF-format ripoff called PE (Portable Executable, a name that has no meaning whatsoever because NO PE binaries are portable, and not all of them are executable.), Linux uses the almost universally standard format used by everyone and their dog except WINDOWS called ELF (Executable and Linkable Format, a name that actually is accurate to what the format actually is, executable or linkable. Note that even your PS3s and Wiis use ELF.)
2. They're two completely different operating systems! You can't expect them to have matching APIs or ABIs at all, and those are two things any kind of binary has to rely on to work. Thus, even if you get a binary in ELF format, just because it works in Linux A, doesn't necessarily mean it'll work on Linux B, especially if Linux B is on a different architecture or uses a different library set.
3. (Applies only in some cases.) You're trying to run a 32-bit Windows PE-executable on a 64-bit SPARC port of a Linux distribution, where the binary itself is not even going to be anything the system understands without emulation.