I've recently been coming across some major commercial software that has gone the .NET route. It's very disappointing and sad to see great software come to this. When a software developer chooses to use/develop thier application .NET, it looses users, becomes lesser in quality, and locks itself into Windows. The purpose of this article is to inform developers why they should avoid .NET.
Microsoft's .NET Framework was meant to replace the legacy Visual Basic 6 run-time. No doubt, VB6 was a great platform. However, it was quickly becoming dated. At the same time Microsoft was having some "issues" with Sun Micro Systems regarding the Java run-time. Application's written with Microsoft's version of the Java Run Time where incompatible with other run times. Clearly done on purpose, and Sun did not like this.
Microsoft elected to drop Java, because after all it's not in Microsoft's religion to be multi-platform compatible. So they invented thier own Windows only run time environment similar to Java. It's intent was to replace both Java and offer an updated Visual Basic at the same time. They would call this .NET.
Many Visual Basic users did not like the new language syntax. Many believed it would be impossible to port the old code, and the new language was much more difficult than VB. "Real" Java programmers wondered why Microsoft was reinventing the wheel, while others knew exactly why. Microsoft fans and die-hards (known as "Microsofties" from here on in) where in joy.
It would be wrong to blame Sun for the existence of .NET, after all it was Microsoft that was violating the licensing by making sure Java applications only ran on Microsoft JVM.
What is .NET
To this day no one is 100% sure of what .NET is. A language? A run time? A platform? Software as a service? Microsoft's evil plan to take over the world? Perhaps all the above.
One thing for sure is that .NET was meant for the creation of "software as a service", a paid service. Whether that's good or bad depends on who you are. If you're not sure about it, consider this idea: You could receive a monthly statement entitled "Microsoft Windows Subscription".
What .NET isn't
It's perfectly clear what .NET isn't, and for these specific reasons, developers should NOT write their application's in .NET.
By utilizing .NET libraries, your are locking your application to Windows. A few years ago, this was somewhat acceptable. Most of the world was still on Windows. However, things have changed drastically, Windows is slowly (but surely) loosing some market share. As Apple, Linux, and other operating systems work towards standardization and increased usefulness, Windows is becoming less relevant.
Not a Standard
Whats that? You say it is a standard? I suggest you look more closely at what the defined standard is, and what .NET is.
Microsoft can (will, and has) at anytime change the .NET language or discontinue particular functionality for it's own interest, making your application not work anymore. Thus forcing you and your users to upgrade.
Many do not know this, but .NET has existed for only a few years. Why would you code your application on something that is still new and un-proven when their are plenty of other technologies that have been around for years, offering more, and are proven to be reliable.
Probably because the .NET frame work is still in it's infancy, but every .NET application I come across is very low in quality. In fact, I've recently learned that to build something in .NET requires almost no programming knowledge.
No Large Scale Adoption
No matter how much Microsoft tries to force .NET upon us, it still does not have the market share it sought for. Although annoying, .NET is only present in the "less" important applications. This is not because of it's infancy, but because those developers are intelligent enough to realize that .NET is not the correct path.
When you distribute your .NET application, the majority of your users will need to install the .NET Framework on their Windows based computer. A rather large inconvenience for many, and a big no no for some. The .NET Framework is huge, and in many cases makes Windows unstable and reduces system performance.
Every time I see a major application go .NET, I wonder why.
Why does .NET even exist? We already have (and always had) Java, and many would say it does a better job. The differences between C# and Java are almost dismal. .NET is nothing more than Java with a different name designed to run only on Windows. It's small differences in naming that make the code between the two incompatible.
For some reason, Java has a bad reputation; slow, bulky, and limited. If you still believe this, I suggest you give Java another look. Java's performance was very bad at one time, but things have change significantly. Whatever your opinion is on Java, it can not be argued against the fact that it has a higher adoption rate.
Almost every device/OS/platform has a Java Virtual Machine, and you are more likely to come across a Java app than a .NET one. Sure Java has been around longer (another reason why you should use it instead of .NET), but developers continue to choose it over .NET because they realize it's power and potential.
What about Mono
What about it? Mono is a C# run time environment, not a .NET replacement. Even if (and when) it gets to the point of actually running a complex .NET application, it will never have support from Microsoft and their is no guarantee that your application will work with Mono.
Mono will never be a 100% .NET Framework replacement.
Microsoft is Desperate
It's a fact that .NET is a technology designed specifically to lock you into Windows, It's impossible to argue against this. Microsoft could not control Java, and without this control, Java applications could run anywhere. It's Microsoft's worst nightmare: Windows not required.
Microsoft's religion would not allow for this, thus .NET was born.
Since the adoption rate of .NET has been rather disappointing (in Microsoft's view), they have had to bully developers into utilizing .NET to increase adoption. Citrix and ATI/AMD come to mind here. The Windows version of the Citrix thin client now requires .NET (Sorry Citrix, but your "thin" client is no longer as thin as it used to be) and ATI's drivers (by default) install the .NET Framework. Citrix is a mission critical application for businesses and ATI's Catalyst Control Panel suite is a must have for gamers. Both of these companies develop for Linux and Apple, but for some reason are using the .NET framework. It makes no sense.
Their desperation shows in Silverlight, a Microsoft made Adobe Flash competitor. Basically Silverlight is to Flash as .NET is to Java. As the Flash player becomes more capable of offering application-like qualities, developers are beginning to write their software with Flash. Microsoft sees this, and identifies it as a potential threat, thus Silverlight, a .NET version of the Adobe Flash plug-in. How desperate is Microsoft? Well, they made a Silverlight plug-in for Mozilla Firefox, the same browser that crumbled the Internet Explorer empire.
The most interesting act of desperation is one that I recently wrote about. A very popular game, The Sims 3 by Electronic Arts was released a few months ago. It's a multi-platform game because it also runs on OS X and some consoles. The Windows version has a .NET based launch applet for the game that can't do anything a non .NET program couldn't do. Knowing that the game was highly anticipated, Microsoft most likely had a "word" with EA.
As a developer, I wouldn't write my application on something that has such a bad reception it needs to be forced fed to everyone.
Don't Use .NET
Java is a great multi-platform technology, but it's not the only one. If you absolutely hate Java for your own reasons, do yourself a favor and explore other options. Don't just take the easy way out, that's not what being a developer is about
Windows will not be the dominant operating system forever. Plan ahead, and make intelligent decisions. Multi-platform applications are becoming more and more important each day as other operating systems like OS X and Linux gain market share. Just look at what happened with Internet Explorer.
.NET is not the answer.