Windows 7 and Vista have the .NET 2.0/3.5 language runtime installed, so whatever you code in 3.5 will run on Windows 7 and most of it on Vista, too. But Windows 8 only delivers the .NET 4.0 CLR. When executing an assembly build with .NET 3.5, Windows 8 would need to install the .NET 3.5 runtime.
This would be a contra for .NET 3.5, but a contra for .NET 4.0 would be the low market share on Windows 7 and below.
What .NET framework should be used if you want high compatibility?
According to this MSDN article you won’t need to install 3.5 on Windows 8 as it is backward-compatible:
Also, this question might be of intrest:
https://serverfault.com/questions/121563/are-net-versions-backwards-compatible.