Probleem met C# is natuurlijk dat MS het nooit heeft ontwikkeld en bedoeld als platformonafhankelijk.
Dat is niet helemaal waar. Bij de allereerste Microsoft conferentie waar ik kennismaakte met dotnet en C# (DevDays 2001, als ik het me goed herinner) hadden ze nog hun mond vol van operating system platform-onafhankelijkheid, in elk geval voor de CLR. Dingen zoals System.IO.Path.DirectorySeparatorChar wijzen er ook op dat dit bewust in het ontwerp is meegenomen. DotNet met de CLR was immers bedoeld om te concurreren met Sun's Java en de OS independent Java VM. Overigens maakt java ook geen native code en het is weldegelijk cross platform. Executie op een VM en compiled libraries voor elk platform zijn gewoon 2 mogelijke oplossingen voor multiplatform-software, allebei met hun pro's en con's (
* berend_engelbrecht heeft jarenlang de multi-platform windowing toolkit XVT in de benelux ondersteund, die van native binaries gebruik maakt. De problemen met onbewuste platform-specifieke aannames waren hetzelfde: portabiliteit viel gewoonlijk erg tegen).
In sommige Microsoft documentatie zie je dit OS independence idee nog terug, bijvoorbeeld
hier:
Understanding Managed Code
[...]MSIL is the intermediate language used by the .NET platform. It is a CPU-independent instruction set that looks similar to assembly language but has some important differences. [...] The MSIL is the key to the .NET Framework's platform-independence. All that is required for an assembly to run on a non-Windows platform is for the CLR to be ported to that platform.
Ze hebben dit echter nog voor de .Net 1.0 release deels losgelaten, met name in de Windows Forms library (niet verwonderlijk dat dit 1 van de onderdelen was die het moeilijkst naar Linux te porten was in het mono project). Windows Forms zijn handig, maar op onderdelen is het zelfs een stap terug t.o.v. win32. Probeer er bijvoorbeeld maar eens achter te komen wat de pixel aspect ratio van je display is in dotnet 1.1
De "party line" is tegenwoordig
dit:
Unlike J2EE, in which the Application Server is completely independent from the OS, the .NET Application Server is the Microsoft Windows® Operating System (and the services provided by Windows). The .NET Framework was designed to integrate closely with IIS and COM+ to provide reliable application hosting services and native support for Web services standards like XML, SOAP, UDDI and WSDL. This integration provides a significant performance boost to .NET applications, but requires platform monogamy. The level of integration is much tighter than with any J2EE server, and results in more features and faster performance.
Ofwel... we hebben het niet echt afgekregen/komt ons niet uit om OS independent te zijn (kies maar wat je waarschijnlijker vindt) en de marketingafdeling mag het goedpraten

. Gelukkig is er nu mono, ik vind C# een hele gave taal en het zou zonde zijn als het aan Windows vastgebakken zou blijven.