Longtime readers of mine will know that I have a lot of love and respect for some of the less popular languages and programming models like Perl and functional programming (in the order of "love" and "respect"). With that in mind, I am strongly encouraging Microsoft to put as many resources as possible into getting the .Net platform ported to *Nix immediately. Why? Because .Net is quickly emerging as a powerhouse for less mainstream languages! With the impending release of IronPython and the recent release of F#, .Net is establishing major credibility in areas traditionally dominated by *Nix.
Many of the lesser known languages suffered from a lack of proper tools such as IDEs and debuggers. Debugging Perl, for example, is very similar to the way I debugged BASIC in 1991: with statements to dump variable and program state to the screen or a log file. All too many languages are in this boat. Visual Studio, on the other hand, is a fantastic programming environment.
In addition to a lack of tools, many of these less used languages suffer from a shortage of quality libraries. For too long, Visual Basic, C#, and Java were easier and quicker to write code in, not based on any particular strength of the language itself, but on the huge base of quality libraries available. Indeed, the .Net Framework is an incredibly comprehensive library, encompassing most of the Windows API in a rational, consistent fashion. Meanwhile, other languages lag behind with the libraries.
As more and more languages move to the .Net Framework, it is increasingly possible and important to be able to write code in more than one language. A function that may be 100 lines of code in VB.Net may only be 10 lines in Perl. The 4,000 line monstrosity in C# can become 100 lines in a functional language such as O'Caml. With IronPython and F# (an O'Caml derivative) now in a usable state on the .Net Framework, the game is changing. Now, you can use VB.Net to handle the interface, catch events, and handle database operations which it is great for, pass data back and forth to C# code to deal with the multithreading aspects of the code, and have F# perform some intense analysis of the data. All at nearly the same speed of natively compiled code. Indeed, I have read of F# spanking C# in terms of speed on some projects!
And the only conclusion I can come to is that Microsoft needs to get their act together and get the .Net Framework ported to *Nix as soon as possible. If possible, they should put a GUI abstraction layer in it, to interface with X with no changes to code needed. At the very least, as long as one is not using concepts specific to Windows and its associated technologies (Active Directory, NTFS file permissions, some aspects of networking, and so on), software should run on a *Nix platform with no changes needed. For example, if a piece of code receives a request from a Web server, connects to a database, works some magic, and outputs HTML, that should work flawlessly.
I recognize that the Mono project exists, but it is not perfect, from a number of standpoints. The most obvious one is that Microsoft has never been great about sharing the nitty-gritty details of their technology with others, particularly when it gives them an edge. Another problem is that Mono is steered by Novell, who is on less than friendly terms with Microsoft. At the very least, the Mono community needs to be working closely with Microsoft to make sure that they get things right. From what I have read and heard, porting applications from the Microsoft .Net Framework to Mono can involve a good deal of work. I believe that unless someone is using Windows-specific code, the transition should be minimal.
At this point in the game, the only nail .Net is currently unable to put into Java's coffin (as well as become the de facto platform for many languages) is cross-platform support. If Microsoft can get .Net running on Linux, it should be fairly easy to then get it to Solaris and the BSDs, and then finally to MacOSX. Every article I read about a new language being ported to the .Net Framework, particularly dynamic languages, say the same thing: the .Net CLR is an excellent system to be basing languages on. People set out to show the shortcomings of the .Net CLR, and end up becoming its biggest supporters. Ruby is quickly moving to .Net. IronPython is nearly out. F# is already released. ActiveState's Perl is now able to work with the .Net Framework, although not as seamlessly as I would like. Within a year or so, every major language, most of the mid-level languages (Perl, Ruby, Python, etc.), and many of the minor languages (O'Caml, COBOL, and so on) will be fully ported to the .Net Framework. That means that languages that used to be relegated to special-purpose uses are suddenly viable options for mainstream developers. It also means that it is now possible to perform much special-purpose programming on Windows, more easily than ever, with those special-purpose languages. This brings Windows well into the realm of science, statistics, GIS, and other niche markets.
And the only thing missing is top-shelf *Nix support. Microsoft, are you listening?