By now, you may have seen this funny word floating around the Java development community: Quarkus. And, you may have seen the latest Red Hat news around it, that we are excited to welcome Quarkus as an official Red Hat Runtime.
But, what does this mean, and why should you be excited about Quarkus? This post will dive into what it means to take Java into the modern, distributed, Kubernetes-first, cloud-native application development world we are in today, and why it is so important.
First, remind me what Quarkus is?
Quarkus is a Kubernetes-native Java framework tailored for GraalVM and HotSpot, crafted from best-of-breed Java libraries and standards. The goal of Quarkus is to make Java a leading platform in Kubernetes and serverless environments while offering developers a framework to address a wider range of distributed application architectures.
Quarkus can help to deliver cost savings through faster startup times, the automatic scaling up and down of microservices based on need and use, and delivering a higher density by significantly reducing the size of the application and container image footprint.
Quarkus offers features designed to help increase developer productivity, cost savings, faster time to market and reliability. Another of the primary design goals of Quarkus is for it to be a joy to use, and who doesn't want a bit of joy in their development environment?
Okay, great! But why is Quarkus and Kubernetes-native Java so important?
Despite Java being introduced 25 years ago, it remains one of, if not the most, popular programming languages today. As of May 2019, according to SlashData, there were more than 7.6 million Java developers around the world.
Java was originally designed for monolithic applications stacks, not cloud-native, modern applications and Java apps can be slow at startup and carry too much memory to be functional in the new, lightweight frameworks. Quarkus aims to bring Java into the future.
Quarkus was created to provide developers the ability to use their Java skills and the broader Java ecosystem to address these new deployment environments and application architectures. It is important that Java be able to scale in the new Kubernetes application environments, because Kubernetes is increasingly being used for business-critical applications.
Kubernetes is a very lightweight, dynamic and resource-constrained environment that has a fast startup time and low memory footprint, which is in direct contrast to how Java operates. Even though Java is still the dominant language in enterprise programming, it can create unnecessary overhead in a Kubernetes environment where containers are scaled up or down quickly and with relatively short lifespans.
Especially now, with distributed workforces, it is crucial that applications be able to be spun up using minimal resources and bandwidth. Quarkus moves much of that processing to the build phase such as optimizing library frameworks, minimizing dependencies, and eliminating unused code to greatly reduce startup time and the memory needs of the application. It means that Java can be used with containers which is exactly what we - and the millions of Java developers want - there is no reason why they should have to learn new programming languages just to use containers!
Aren’t there newer programming languages that can replace Java? Why is it so important that we take Java into the future?
Okay, this is an interesting question. Yes, we have seen an influx of new languages hit the mainstream in the past few years, including Ruby, Go and Rust. However, as shiny as these newbies may appear, these are not languages that are used by app developers, rather, they are system development languages, as they do not have capabilities for business customers.
What this means is airline reservation systems, for example, will choose Java over these languages because Java offers the rigor of type safety and compile times. In fact, the world of programming languages moves fairly slowly, and as proven by C and C++, it can take a decade or longer for a language to truly become robust and optimized to be a fundamental piece of the stack. Developers are not going to take risks on new languages if they do not need to, and especially on ones that are less than 10 years old. So by these standards, Java being 25 is still fairly young, and it is well poised to be able to evolve within new environments.
Given all of the Java developers in the world and the sheer number of business critical applications that are built on Java, it is imperative that Java be compatible with Kubernetes-native applications. Kubernetes has proven to be an incredibly successful system for deploying, scaling and managing containerized applications, but in order for it to be a long-term option, it has to be able to support Java.
One of the founding principles of Quarkus was to bring joy back to enterprise Java developer’s work. This is because Quarkus enables Java developers to use their existing expertise to build cloud-native microservices and event-driven applications. This is important for the enterprise because it means that developers do not have to spend time being trained in new languages, they can preserve their existing talent while standardizing on a single language for developing cloud-native microservices.
Why is Red Hat committed to building Java's future?
Red Hat has a long history with the Java community, and being a leader within it. In fact, Red Hat has been a member of the OpenJDK community since 2007 and is one of the largest contributors to the project.
We are committed to an open, community process and we intend to continue to be at the forefront of Java’s future. We also intend to keep Java as community-oriented as possible, drawing on our Open Source roots and ethos.
When we talk to customers, we hear questions about Java ecosystem fragmentation, with various vendors offering their own, proprietary Java products. Red Hat, in addition to experts from popular cloud-native Java open source projects, is steward of the Quarkus community.
We believe in working in the open and being collaborative, and we're looking to work with you to spearhead bringing Java into the Kubernetes-native future.