A thing that I have wondered about: Although Java and C# are similar languages with very similar libraries and features, Java has migrated towards being used for server side and middleware programming. C# however has not gone in this direction even on Windows platforms. What is the reason? Wouldn't it be easy to write the equivalent of Tomcat, JBoss, EJB's etc. in pure C#?
It is surprising that some of the apache projects have .NET equivalents (lucene, log4j, ant) but some others dont........
Windows shops are vary of writing functionality, that might one day compete with Microsoft. Writing net Tomcat/JBoss could clash with IIS and future frameworks. Something like this happened with nant/msbuild and nunit/mstest. Commercial companies find it difficult to justify development of tools with high risk of being obsolete soon (something competing with MS product does not stand a chance in most Windows shops). Apache projects do not care about this risk.
It is surprising that some of the apache projects have .NET equivalents (lucene, log4j, ant) but some others dont........