Java’s open source ecosystem is strong and healthy, one of the primary reasons for our creation of OSCON Java. Over the last decade, several projects have traveled beyond mere adoption and had effects dominating the Java world, into software development in general, and some even further into the daily lives of users.
Ported to Java by Kent Beck and Erich Gamma from Beck’s work in unit testing in Smalltalk, JUnit has been largely responsible for popularizing test-driven development over the last decade. Many implementations have been created, in .NET, C, Python, Perl and just about every language in popular use.
As Java and its APIs matured in the early 2000s, the Eclipse IDE provided a way for programmers to be productive and negotiate the growing Java ecosystem. Eclipse was also the first major project to use the SWT UI toolkit, providing important competition to Sun’s Swing and showing that Java programs can provide a rich native interface. Eclipse has evolved toward a goal of being a universal IDE, and it now provides a rich foundation for platform vendors to integrate with.
The Spring Framework has played an important role in enabling Java developers to be productive, managing a balance between simplicity and features. Spring gives Java developers a set of services providing commonly used application functionality such as data access and transaction management. As a competitor to Sun’s Enterprise Java Beans system, Spring enabled an alternative and simpler path for Java applications, as well as ensuring a healthy competition of ideas in the way Java applications are constructed.
The Solr server, and the Lucene search engine it encapsulates, has been for many years a simple and practical solution to providing search capabilities to web and enterprise applications. Solr’s genius is in providing HTTP access to the powerful and fast Lucene search library, enabling it to become a part of any system, regardless of whether it is implemented in Java or not. More than any other project, Solr has ensured that good search is a checkbox item for modern web applications.
Hudson and Jenkins
Originally developed as Hudson, and now also as Jenkins, this continuous integration tool is a key part of a Java development setup. Jenkins provides automated build and testing of a software project, continuing in the footsteps of JUnit in enabling agile development on the Java platform. While both Hudson and Jenkins persist for now as forks of each other, it doesn’t detract from the work of Kohsuke Kawaguchi in creating a world-class continuous integration platform and so enhancing the quality of much Java development.
This Java implementation of the famous MapReduce model is the powerhouse that has enabled most “big data” systems. By lowering the cost of extracting value from large data sets, Hadoop has made practical the personalization and advertising businesses of Facebook and Yahoo, and many other companies. In the same way that Linux enabled large websites to be built on cheap hardware, Hadoop enables large-scale distributed computing by handling failure at the software level. Both Hadoop and the above-mentioned Lucene are the product of the work of Doug Cutting.
Controversy is never that far from Java, whether the custodian be Sun or Oracle. Google’s choice to use Java as the programming language for its massively popular Android mobile operating system has led to a renewed interest in the language from whole new communities of software developers. Android programs undergo a further step to convert JVM bytecode to Dalvik bytecode — Dalvik being a virtual machine optimized for mobile devices. Google has been able to leverage Eclipse to provide software developers with a mature development environment for creating Android applications.
Oracle and Google are currently engaged in a lawsuit over a claim that Android infringes on multiple patents held by Oracle. The results of that suit notwithstanding, Android has done much to recruit developers and perpetuate the use of Java in client-side software development.