From Fedora Project Wiki

< Java

Revision as of 04:17, 28 August 2012 by Mojavelinux (talk | contribs)

This page outlines the plan to make Fedora the preferred environment of choice for Java and JVM platform development. Achieving this goal is one of the objectives of the Fedora Java SIG and is attainable thanks to the hard work done by that group and other contributors to Fedora.

Important.png
Working Draft
This document is a working draft. The content is currently under review. If you have ideas on how to improve it, we welcome your input. Feel free to offer corrections or discuss the content on the marketing mailinglist (or on the java-devel mailinglist if it relates to a more technical subject).

If you are just interested in the key points, refer to the first section, TL;DR.

TL;DR

  • Java is one of the most popular languages (#2 @ Tiobe Index, #5 @ github, #1 @ sourceforge)
  • ~ 8 million Java developers
  • JVM supports many other languages, which means even more developers
  • < 1% of these developers use Fedora
  • Fedora Java SIG has made creating Java packages easy, consistent w/ packaging guidelines
  • Fedora has the latest and most popular stuff on the JVM platform, including Java 7 (OpenJDK), Eclipse 4.2, Maven 3, JBoss AS 7, Tomcat 7 and JBoss Tools
  • A Fedora Java Spin is in the works
  • Fedora should be the operating system of choice for JVM platform developers!

Market size

There are roughly 8 million Java developers worldwide [1], a significant pool of users to target that could make Fedora their preferred development platform. But this story isn't just about the Java language. It's about what runs on the Java Virtual Machine (JVM), Java bytecode. Java bytecode is an intermediate language typically compiled from Java, but can also be compiled from other languages. The JVM supports a wide array of languages in addition to Java [2], including Groovy, Scala, Clojure (flavor of LISP), JRuby (Ruby), Jython (Python) and Rhino (JavaScript). The Java Virtual Machine is available for all major operating systems and the same code can run anywhere, so its painless for JVM platform developers to switch to Linux.

All the major JVM languages are already available in Fedora today. Several of those languages are drop-in replacements for their C-based counterparts. Groovy has become the scripting language of choice on the Java platform and there are a lot of amazing tools based on it. Now consider that JRuby can run almost all Ruby frameworks, most notably Rails, which could attract enough developers to easily dwarf Groovy. Thus, the number of "JVM platform developers" (and those that could migrate to it) extends well beyond the 8 million Java developers.

Timing

The JVM is more than a decade old, so why is this runtime interesting now? There are two key reasons, performance and packaging support.

Performance

The JVM can execute code faster than any other runtime. This is particularly noticable for long-running processes like web and enterprise servers and the applications that run on them. As one example, JRuby outperforms C Ruby in nearly all benchmarks, in some cases as much as 4x faster [3]. This boost is the result of numerous optimizations made by the JVM, the most significant of which is "invokedynamic".

"invokedynamic" [4] is a recent change that demonstrates the JVM is being optimized to better support dynamic languages such as Groovy, Ruby, Clojure and JavaScript. Not only will these languages run faster, it makes the JVM a common runtime (i.e., melting pot) for programs written in these languages to interoperate seamlessly. It allows you to chose the right language for the right task. In otherwords, the JVM is an ideal polyglot runtime.

Above all, the JVM has proven itself to be the runtime to go to for large scale and cloud-based applications. The Just-in-Time (JIT) compiler, garbage collection facilities and multi-threading support, plus general stability, make it an absolute winner.

Packaging

The biggest challenge to getting Java applications packaged for Fedora is due to a culture clash. Most modern Java applications rely on pre-built binary libraries that are retrieved from one or more remote repositories. As far as the Fedora packaging guidelines are concerned, these repositories, and what they contain, cannot be trusted. Therefore, it's necessary to ensure that the dependencies are built in addition to the application.

Members of the Fedora Java SIG [5] made a breakthrough when they figured out a way to the build tools so that they would map and resolve dependencies from the system instead of reaching out to the internet to grab them. This change also drastically reduced the effort to create a package for a Java application. For Maven project, it's just a matter of using mvn-rpmbuild instead of mvn to build the project. There are complements for other build tools as well, including Gradle and Leiningin. Utilities from the JPackage Project, which defines standard file system locations and conventions for use in Java packages, handle many other tasks necessary to create a Java package. The door is wide open now to bring the Java ecosystem to Fedora.

What developers dig more than language runtimes are tools. Tools to develop. Tools to compile. Tools to deploy.

Tools

Eclipse is by far the most popular Integrated Development Environment (IDE) among Java developers, accounting for more than two-thirds of the market [6]. Fedora was the first distribution to package Eclipse 4.2 (Juno), the latest release. Ironically, the urgency to package it was not driven by packagers with an interest in Java, but rather the Linux Tools [7]. Either way, this is a force multiplier for Fedora Java.

Out of the momentum to package Eclipse 4.2 spawned a Google Summer of Code (GSoC) project to prepare a Fedora Java Spin. During the course of the summer the student, Gerard Ryan, packaged a large portion of JBoss Tools, a collection of Eclipse plugins aimed at Java EE development. The momentum to get Eclipse and other JVM applications packaged wouldn't have been possible without the efforts and support of the Fedora Java SIG.

The other reason the Eclipse packages are so important is because they solve a major pain point of Eclipse, getting updates. Eclipse has a built-in updated manager that is notoriously slow and error prone. As a result, most developers are running outdated versions of Eclipse, foregoing bug and security fixes. By allowing the package manager to handle updates, developers can keep their IDE updated and not even have to worry about when it happens or how long it takes.

Application Servers

A majority of Java developers are creating web applications and middleware, which run inside application servers. They are most likely deploying it to a data center or cloud environment, but the need to be able to test it locally for rapid development. That's why it's critical to be able to easily install an application server. The most popular application servers, JBoss AS, Tomcat and Jetty, are all packaged in Fedora.

JBoss AS 7 is the most promising because it is as fast and simple as Tomcat, but supports many additional enterprise features and is more efficient, especially at increased scale. It can also accomodate multiple instances (clones). Instances that are setup inside the developer's home directory can be run without elevated priviledges. These features make it well suited for both development and production. Fedora is the only distribution which has a package for JBoss AS 7.

Adoption

Fedora has the potential to be an ideal development platform for Java developers. The packages are there, but the opportunity is virtually untapped. Max Andersen, lead of the JBoss Tools project, recently analyzed two years of statistics collected by JBoss Tools pingbacks [8]. The statistics show that Windows is still the dominant platform for Java development, accounting for 84% of the market. Out of the 12% of the users on Linux, only 10% run Fedora (close to 80% run Ubuntu). Java 7 only recently rose above 20% usage, with Java 6 still the most widely adopted runtime. The most surprising statistic is that there are three times as many Linux users as Mac OSX. Linux hasn't lost that battle yet.

New in F18

  • Gradle, build automation evolved, upgraded to 1.0, repackaged and configured to use the system Java libraries
  • JBoss Tools, a suite of plugins for Eclipse that cater to Java EE development and cloud deployment
  • JPA functionality with support for multiple providers added to JBoss AS (Hibernate 3 and OpenJPA 2.2)
  • Leinengen, the build tool for Clojure, configured to use the system Java libraries
  • Clojure libraries and frameworks, including Korma and Noir
  • Clojure environemnt for Vim (VimClojure)

Recap

The pool of Java developers is large.

Fedora has the goods to appeal to them. Many of the tools that Java developers already know and love are available right out of the box in Fedora, including the latest version of Java (OpenJDK 7), the latest version of Eclipse (Eclipse 4.2), all the major JVM languages and the dominant build tool (Maven 3). A developer workstation that would take hours or even days to build with Windows or Mac OS X can be installed on Fedora and running in less than an hour, thanks to yum and the great OSS software that Fedora has built and packaged. There's even a Fedora Java Spin in the works that caters to these developers.

The pool of Java developers remains largely untapped.

It's time to let them know about it. Let them see how ideal it is. Let them know how much time it will save them. If they can't install it on their machine, we should encourage them to use it in a virtual machine. We just need to get them to try it to realize that Fedora is an ideal environment for Java and JVM platform development.