In particular my friend complained about the a.out to ELF migration; Then the ELF libc5 to libc6 migration, and apparently the new version of libc6 breaks their application again. They still update their software, but older binaries distributed to the public stop working on new releases of the product. Internally I know that all those changes were needed for Linux, and also that it is possible for the Linux community to provide the backwards compatible packages. Although this is possible in theory, in practice these compatibility libraries are not shipped with the main distributions
He is right to emphasize the importance of this. If you work on the Windows platform you feel pretty confident that your software will work on future versions of Windows whereas it seems that with Linux that you will lucky if it works on all the current distributions and very lucky if it will still work with any distribution two years from now. I'm not saying this is necessarily the reality, only the perception amongst people who don't do a lot of work with Linux. I agree with Miguel that Mono offers a lot here. A small example was a .NET program using XML-RPC.NET I wrote a few days ago. I built it on Windows using the Microsoft C# compiler, and copied the program and the XML-RPC.NET assembly to a Linux machine. I then ran it on the Linux machine. No recompilation necessary. It just worked. This is a big step forwards. Of course Java enthusiasts may disagree with the last statement but I am looking at this from a Windows developer's perspective where Java is probably not the chosen development environment.