The .NET platform has an array of technologies under its umbrella. Microsoft has presented these as alternatives to other existing platforms, like J2EE and CORBA, in order to attract developers to the Windows platform. Here’s an executive summary of .NET development vs. J2EE development:
Features: .NET and J2EE offer pretty much the same laundry of list of features, albeit in different ways.
Portability: The .NET core works on Windows only but theoretically supports development in many languages (once sub-/supersets of these languages have been defined and IL compilers have been created for them). Also, .Net’s SOAP capabilities will allow components on other platforms to exchange data messages with .NET components. While a few of the elements in .NET, such as SOAP and its discovery and lookup protocols, are provided as public specifications, the core components of the framework (IL runtime environment, ASP+ internals, Win Forms and Web Forms component “contracts”, etc.) are kept by Microsoft, and Microsoft will be the only provider of complete .NET programming development and runtime environments.
J2EE, on the other hand, works on any platform with a compliant Java VM and a compliant set of required platform services (EJB container, JMS service, etc., etc.). All of the specifications that define the J2EE platform are published and reviewed publicly, and numerous vendors offer compliant products and development environments. But J2EE is a single-language platform. Calls from/to objects in other languages are possible through CORBA, but CORBA support is not a ubiquitous part of the platform.