Fairly frequently, I get questions from people asking me just what the heck Eclipse is. It’s difficult to understand what Eclipse is by looking at our website (though that’s something that’s changing—slowly). The problem is that Eclipse is actually pretty hard to define.
Most people know Eclipse as a Java Integrated Development Environment (IDE). This is pretty natural, since that’s the thing that you download when you click on the “Download Eclipse” button on the Eclipse home page. The Java Development Tools (JDT) provide very advanced features for Java developers (a discussion of these features is out of the scope of this posting).
Of course, it’d be great if only it were that simple. The odd thing about how most people know Eclipse as an IDE is that we don’t actually produce one. The “Eclipse” you download by clicking that horrendous orange button is actually the Eclipse Software Development Kit (SDK). This is quite a lot more than just an IDE, it’s an SDK for developing Eclipse products. It includes tools for building extensions to the environment, heaps of documentation, and all the source code. While this does technically include a great Java IDE, the SDK is far more than the average Java developer needs.
Eclipse was originally intended to solve an integration problem. In the past, a developer’s arsenal of tools was typically a mixed bag of applications from different sources that did not tend to work together. Eclipse fixes this problem by providing a base “platform” upon which tools can be built. With Eclipse, that entire arsenal of tools can be loaded into a single application that brings all the necessary functionality to the developer’s fingertips. Eclipse doesn’t ship with all that functionality, but it can be extended through with bundles (traditionally referred to as plug-ins) that provide that functionality. To date, thousands of bundles exist that provide all sorts of functionality.
Eclipse is a platform for building IDEs. The JDT is what we refer to as an “exemplary product” built on the platform. It is “exemplary” in two senses of the word: it is an example, and it provides a pattern for building IDEs that deserves imitation. You can quite easily remove the Java development tools (JDT) from Eclipse and add C/C++ development tools (CDT). In fact, you can have the JDT and the CDT in Eclipse at the same time. Then you can add PHP Development Tools (PDT), Ajax development support, and more. The idea is that all these languages are supported by the same IDE. The Eclipse “platform” provides the base upon which the support for the various languages are added. The platform includes support for basic file editing, refactoring, debugging, accessing source code repositories, and more. Language support is provided by various bundles.
It’s more general than that though. Eclipse is a platform for building tools. Other tools, like database access tools (DTP), reporting tools (BIRT, Crystal Reports for Eclipse), project management tools, network management, and more can be added to the platform.
It’s still more general than that. Eclipse is a Rich Client Platform. If you strip away the bits that make Eclipse an IDE platform, you’re left with what we call the “Eclipse Rich Client Platform” (RCP). In effect, RCP is an application framework. You can think of it as being a higher level of abstraction over a widget tool kit. It provides things like window and menu management, a real component model, pervasive extensibility, an update mechanism, and more. Organizations are using RCP to deliver end-user applications. NASA uses Eclipse RCP as the basis of the applications their mission controllers use to control space craft. JPMorgan uses Ecilpse as the basis for their One Bench application platform.
More fundamentally, Eclipse is an open source project. There are currently (as of May 2007) ten “top level” projects and numerous “subprojects” building open source software. Many of these projects are concerned with building APIs and frameworks that can be used as a basis for building products. Only one of the ten top level projects is concerned with producing the Eclipse SDK. Many of the projects also produce “exemplary products” that—like the JDT—serve as examples and patterns worthy of emulation. There are many more examples.
This leads to the final bits (hopefully you aren’t snoring too loudly at this point). Eclipse is a community and an eco-system. The community is composed of numerous committers, contributors, and users. Some folks write code, other author articles, some teach. Everybody benefits. The eco-system is composed of numerous member and non-member companies who base their open-source and commercial products on Eclipse technology. These companies tend to also contribute to the open source projects. You can get a hint of how large the community is by spending a few minutes minutes browsing Eclipse Plug-in Central.
There are many examples of companies basing their commercial product offerings on Eclipse technology; companies like BEA, Business Objects, IBM, QNX, WindRiver, and many, many others are using as a foundation for their products. Some of these companies, as well as some others, provide distributions of Eclipse. If you’re a little frustrated that you have to pull all the different pieces together yourself, you should look at the distros. Here you can find pre-packaged (and even dynamically assembled) Eclipse packages containing everything you need to get the job done.
Of course, Eclipse is also a foundation. The foundation makes sure that the developers and other participants have the resources that they need, that all the code contributed to Eclipse projects can safely be used by adopters, that inter-project communication is occuring, that Eclipse is properly represented on the world stage, and more (“and more” seems to be a pretty common theme).
I apologise for the long story. But maybe you can
see our problem (and it’s a good problem to have): it’s hard to concisely state what Eclipse is.
A good place to start for more information is the FAQ on the Eclipse Wiki. You might also find some useful information on the resources page. EclipseLive also has some content that will help you understand more about Eclipse.