Java Is Dead! Long Live Java!

2 hours ago 1

April 23rd 1995, James Gosling and Sun Microsystems released the first public version of Java. Today, some 30 years later, version 25 of the language has just been released. It has gone from being interpreted to JIT-compiled to AOT-compiled via GraalVM, from closed source to open source. It has gained generics, lambdas, streams, records, pattern matching and virtual threads. It has survived C#, Scala, Go, Rust, Kotlin, and Python, and keeps staying highly popular. What is the secret to its longevity, and will it avoid becoming another Cobol? And what about vibe coding?

The main selling point of Java in 1995 was its portability. You would write your software once for the Java Virtual Machine, and it would run everywhere! However, this selling point gradually became less relevant as JavaScript and the Web overtook all competition and became the universal graphical interface platform. Today, Java has found its biggest niche in the enterprise server software domain, making up a large portion of the backend of the Web.

Between its launch and now, the list of failed Java initiatives includes Java Applets, AWT, Swing, RMI, COBRA, JAX-RPC, EJBs and JavaFX. All of these technologies where attempts to solidify Java’s relevance, either in a particular domain, such as user interfaces, or by tackling a problem that was considered important to the industry at the time, such as distributed computing. But if there have been so many failures, why is Java still around? In fact, it isn’t just around, it’s likely the most popular enterprise programming language in the world [1]. It’s only real challengers are Python, JavaScript, C/C++ and C#, out of which only C# has a similar niche.

Programming Languages Are Adopted by Communities

While it is easy to point at historical events to explain Java’s current popularity, such as hype it received at its first launch, or Sun Microsystems’s $500 million Java brand push in the early 2000s, none of these are satisfying explanation by themselves. To get a more solid explanation, we must look at the history of the communities that use Java.

A community of this kind is a collective of professionals working within the same problem domain, such as automotive, enterprise software or telecom, all adopting similar tools and practices. These communities are born, grow, diminish and die as their problem domains evolve. For example, when the mainframe market emerged in the 1960s, a new community formed around it that soon picked COBOL as its preferred programming language. While the mainframe market was never able to grow to the sizes of the later PC, server or mobile markets, it still exists today. The community around that problem domain also lives, with its own culture and practices. As long as mainframes are around, its community is unlikely to disappear or change programming language.

Sun Microsystems, and then Oracle after 2010, have worked hard and long to make as many communities as possible adopt its language. In some communities Java never became a thing at all, as in high-performance computing. In others, the language had some initial success, but soon fell out of favor, such as the Java Applet targeting frontend Web applications. In others, it become the dominant language, such as in the enterprise server domain.

So, why is Java still around? Because it has successfully established itself and continues to be as a highly relevant tool for the jobs it is used for. But will it be around for another 30 years?

How Oracle is Appealing to the Java Communities

The computing landscape is shifting, sometimes gradually, other times quite revolutionary. If Java is to continue to be appealing to the communities that today prefer it, it must adapt to their shifting needs. While there is a list of spectacular adaptation failures, which we referred to earlier, there is also a growing list of successful attempts. Java today has generics, a world-class Just-In-Time compiler, interfaces, lambdas, streams, records, pattern matching, virtual threads, and so on. All of these features have been well-received and add to the language’s relevance.

Why these features in particular? Because the most dominant force of change in the computing industry during the last three decades has been the trend towards increased degrees of parallelism. More cores, more data, more nodes. Parallel processes are notoriously hard to program correctly, and functional programming became perceived as the solution to making it manageable. Java, just as PHP, Python, Ruby, C#, C++ and many more languages, are now more similar to Haskell or OCaml than they have ever been before. As a consequence, they are also more similar to each other.

From Java 22 to 25, the most notable improvements are targeted towards making Java start faster when used in a cloud function. Upcoming features are intended to make it easier and less error-prone to serialize and deserialize objects, reduce startup times, make it more parallelizable, for example. In short, the trend towards Java becoming more functional and performant is continuing into the foreseeable future.

Will the Java Communities Ever Die?

For Java to abandoned, either its communities must disappear or they must all pick other languages. The only threat to the former is some new technological advancement that would make the enterprise server irrelevant, or a new language that would make it comparatively trivial to implement them, while the only threat to the latter is mismanagement of the Java language and branding. Let’s consider these in turn.

What would a technology need to look like that would either make Java’s communities obsolete, or Java as a language obsolete? It would need to provide a way to replace either with few or no technical downsides. There have been many candidates for this in the past, and new ones keep popping up. Domain-Specific Languages (DSLs), no-code, low-code and now vibe coding are all prime examples.

So far, none of these have been more than mildly successful. DSLs and no/low-code tools are typically too limited to be widely employed, even though they can speed up activities within their domains. Vibe coding, which is having LLMs write code for you, is currently suffering from too many quality issues [2] to be seen as a viable replacement of the Java communities themselves. The current state of affairs is rather that the Java communities are learning how to use LLMs as tools to boost productivity.

What would happen if Oracle started to mismanage Java? The likely outcome would be that a community member would fork the OpenJDK, which is open sourced, and then take it in a direction more aligned with its communities. There is too much invested in the Java ecosystem for all of its benefactors to collectively and simultaneously decide that keeping the language afloat is not worth the trouble.

The Next 30 Years of Java

Java will be around as long as there are no seismic shifts in the industry. I cannot promise that this will not happen, of course. But to me, none of the shifts on the horizon, such as quantum computing or the rise of AI, appear to be massive enough to move Java out of its place. Java will continue to become what we need it to be in the years ahead.

Java 25 is here! Let us hope that we will all be around for the release of Java 50. What will be the latest new language feature by then? Probabilistic data structures? Logical programming constructs? Special annotations for LLMs? Your guess is as good as mine!

Read Entire Article