This node is still here for historical purposed and for support for the nodes bellow it. I've learned a lot more than what I knew back in my school days, when I wrote this. I'll add, as time permits, an accurate account of the facts.

This node describes and documents the differences and the similarities of two programming languages, namely Java and C#. These programming languages are meant to satisfy the same kind of needs and are best suited to a certain type of project, the "enterprise application". Naturally, this rivalry sparked countless debates and comparisons, and this node tries to separate the truth from the vaporware and the FUD (fear, uncertainty and doubt).


Buzzword no. 1: "4th generation languages"

Both Java and C# are 4th generation languages. In simple terms, this means that they are both quite evolved and complex. These languages are typically used for advanced "enterprise applications" like:

These are highly specialized applications that are generally developed "in-house" (each company develops it's own) and are not typically sold like regular software (in a box, with a manual)


Buzzword no. 2: "Platform"

Java and C# by themselves are more or less useless. Because of the high degree of abstractisarion used, they both relay on a set of applications and libraries that connect the language to the OS (operating system) and different data sources (databases, directories, etc.).

These components, took together, are called a "platform". It's actually these platforms that programmers use to create the end applications.


A little history

Java was created at the Sun Microsystems research labs (http://research.sun.com/) as early as 1995 and was designed to be a platform for mobile computing and non-PC devices. After the Internet boom of the 90s, it soon became well known due to annoying little applications called "applets" which ran inside the web browser. In the late 90s, the Java platform had evolved in one of the most complex systems for client-side computing but mostly for server-side applications (interactive sites, like eBay, email, news and chat).
Sun, capitalizing the momentum of Java, created the "Java 2 Enterprise Edition" platform, a complete and mature solution for database-driven applications. This will be later incorporated in the "Sun ONE" (Open Network Architecture) initiative for web services.

About 2 years ago (1999) the Microsoft Corporation (http://www.microsoft.com/) was offering several 3rd generation languages, including MS Visual Basic and MS Visual C++, bundled in the "MS Visual Studio Platform". These offered little regarding web technologies or portability, but were widely available because of their ease of use and powerful integration with MS Windows.
After failing to "embrace and extend" Java, a technique often used by Microsoft to control and monopolize other companies' intellectual property, Microsoft decided to enlist the help of Borland Delphi veterans to develop it's own enterprise platform.
This platform's name was .NET and it was all about "web services", a new and exciting concept taking over the IT&C news sites. But this new platform needed a new language to replace the problematic and baroque Visual C++ … enter C# (pronounced "C sharp").


Buzzword no. 3: "Web Services"

"Web Services" refers to different technologies that enable:

1. A common login for a single user to all sites (resulting is a single username/password combination being used on all systems)
2. "Smart" server-side services/sites that connect to one another to create a realistic context and real-time integration for the user.

This concept exists now mainly as proposals and un-tested protocols. This being said, if such systems are ever to be implemented on a large scale on the Internet, they will probably use SOAP, which is compatible with both Java 2 Enterprise Edition and .NET.


Buzzword no. 4: "n-tier architecture"

As far as performance is concerned, both Java and C# are too slow to be used in games or most "regular" applications, they are designed to be used for "n-tier systems".

"n-tier" means that the applications is spread between different computers, each one doing a specific task. This is an extension of the classical and popular "client-server" architecture.

The tiers are:


Industry support, the decisive factor

Java and C# are very much alike. Some would say C# is just a Java clone, deployed by Microsoft in a hurry to catch the new wave of Internet computing (distributed computing, web services, etc.). Even from this point of view, C# is still a powerful alternative to the widely used and stable J2EE platform.
What .NET lacks is wide industry support. Most important IT companies dealing with server technology have their own J2EE implementation and have been selling these for over 2-3 years now. By the time this node was completed, few companies manifested interest in joining the Microsoft side, as the .NET platform was yet unreleased (an early beta3 was available).

C# has some added programming features like pointers and operator overloading, that have been removed from Java because they were considered as problem-makers and obsolete, even in 1995. Overall, C# presents some improvement in code style and syntax but most differences are not missed while working with Java.


Buzzword no. 5: "the open monopoly"

The recent success of open-source software (properly called "free software"), like the GNU project, while used for servers and server-side applications, determined a Sun analyst to claim the beginning of an "open monopoly".
More and more, open systems (GPL or not) are used because of their performance and reliability. Although they might not be as user friendly as Microsoft's packages, they are "free" (as in no cost) and "free" (as in open-source).

The Java 2 platform (Enterprise Edition, Standard Edition or Mobile Edition) is a good example of open software. It's not GPL but the sources to the libraries and platform are open and free (no cost). In contrast, Microsoft's platform is all "closed".

This raises the issues: how does Microsoft expect to have success with its new platform, a totally proprietary system, while most companies are looking for open software that enabled growth and cost reduction, without locking you into a certain vendor's software?


Open source implementations

Because of licensing issues, related to Sun patents, a truly open-source (as in GPL, artistic license, Mozilla license or BSD license) version of Java is not available. This means that all the 4-5 language implementations (Sun, IBM, Blackdown, etc.) are proprietary, even if they are free (no cost) and in some cases the source of the libraries are also open (Sun's).

What Java does have is a full J2EE implementation licensed under the GPL, called JBoss. The latest version implements all the J2EE specifications and is 100% compatible with other implementations, like Oracle's for example. This means that one can build cost-free, high performance servers, running Linux as OS, JBoss as application and web server and PostgresQL as database, at virtually NO software cost, while still enjoying the latest in "enterprise computing".

On the other end of the spectrum, Microsoft's .NET lacks any open source, or even free, implementation. A linux company, called Ximian, is working on porting the C# language to Unixes but it won't be able to implement some vital parts of the .NET platform, greatly reducing the overall usability of the software.


Buzzword no. 6: "WebOS"

The "web os" is the name different analysts gave the trend of porting and developing applications for the n-tier architecture, where the client is connecting with a web browser, via the Internet.

The increased reliability of corporate networks and even the Internet itself, coupled with the thin-ness of the HTTP (web) protocol has created a perfect environment, accessible to PCs and portable devices alike.

Instead of writing traditional software and installing it on several hundred computers across the enterprise, contemporany programmers choose to develop dynamic web site.
Advances in DHTML, XML and JavaScript enable highly interactive interfaces, while keeping all of the administrative work centralized on the server. Patches can be applied on the fly, without any software being modified or installed on the client's machine.

With the successful development of the Mozilla and Konqueror browsers for Unixes and portable devices, Microsoft's monopoly (as determined by the US Supreme Court) on the desktop market becomes more and more irrelevant. Applications are no longer written for Windows or for Linux... they are written for the "WebOS", actually a set of standards formed around (XHTML, DHTML, XML, JavaScript, Java Applets and CSS).

So, in this battle, Microsoft will be unable to leverage its desktop monopoly as it did with Netscape, as some analysts would suggest.


My conclusion

It seems to me that Sun's offer is more than complete, both in terms of programming performance and TCO (total cost of ownership, usually obtained by adding to the purchase cost the costs generated by mainteinance and training).

Microsoft's solution brings insignificant performance and style improvements over current systems, and the lack of Java-to-C# porting tools will turn the transition from a platform to another into a full blown application rewrite, even if the languages are similar.

Even if these platforms are being developed with web services in mind, the bulk of applications will still be day-to-day intranet reporting and management tools. Java tradition]'s in the field, and the increased use of "alternative" platforms such as Zope (Python-based), Cocoon (XML-based) or Jabber will leave little room for Microsoft's .NET.

On the other hand, Microsoft has thousands of Visual Basic programmers caught in endless pay-upgrade-pay cycles, more than willing for a change and its marketing] techniques have saved the company more than once.

Java has become very portable, running from cell phones (J2 Micro Edition), to desktops (J2 Standard Edition), large servers and even old COBOL mainframes (J2 Enterprise Edition). Meanwhile C# binds the programmers to a single OS, Windows, a single IDE, Visual Studio and a single architecture, IBM-PC (Windows runs on Intel x86, IA64 or old and obsolete Alphas).

Overall, this is going to be a very interesting fight that may ultimately decide the fate of the Internet as a free communication medium, and maybe even the demise of Microsoft as an IT monopoly.