Skip to content
DevMeme
1862 of 7435
Enterprise Java's Love Affair with JDK 8
Languages Post #2070, on Sep 20, 2020 in TG

Enterprise Java's Love Affair with JDK 8

Why is this Languages meme funny?

Level 1: New Toy vs Old Teddy Bear

Imagine you have a favorite old teddy bear that you sleep with every night. It’s a bit worn out and patched, but you love it and it makes you feel safe. Now suppose you get a brand new toy robot as a gift. This robot is shiny and exciting — it can dance, flash lights, and sing songs. You look at the new robot and say, “Wow, this is brilliant!” because it’s so cool and fun. But when bedtime comes, you still hug your same old teddy bear and say, “I like my teddy best.” Why? Because the teddy is familiar and comforting, and you trust it to help you sleep.

This meme is just like that story. It shows that even if something new is awesome and impressive, people often still choose the old, comforting thing they’re used to. It’s funny because it’s true in everyday life: we might get a cool new toy (or gadget) and be amazed by it, but we keep using our old favorite because it makes us feel comfortable and safe. Just like you trust your old teddy bear more than the fancy new robot when you want to feel cozy, programmers trust an older, reliable software version that they know well, even though a newer version has come out with lots of exciting features. The contrast is what makes it humorous – we’re basically saying, “The new thing is great, but I’m sticking with my old favorite.”

Level 2: Shiny New vs Trusty Old

First, let’s decode the basics of the meme. We have two cars and some text:

  • The red car labeled “JDK 14” represents Java Development Kit version 14 – a new, modern version of the Java language (released in 2020).
  • The white car labeled “JDK 8” stands for Java Development Kit version 8 – an older, very popular version of Java (released in 2014) that many companies still use today.
  • The captions come from a well-known Top Gear meme. Top Gear is a British car show, and in this scene host Jeremy Clarkson admires one car but ultimately prefers another. The text “This is brilliant” is him praising the red car, and “But I like this” is him showing he actually favors the white car.

In the meme’s analogy, developers are Clarkson. We’re seeing a developer’s two conflicting thoughts:

  1. “JDK 14 is brilliant” – They’re excited about the new Java version 14 and all the cool things it offers.
  2. “But I like JDK 8” – They still choose to stick with Java 8 for real work because it’s familiar and reliable.

Now, why would developers stick with Java 8 instead of immediately upgrading to Java 14? Let’s break it down in simpler terms:

  • Java (JDK) 8 – the Old Reliable: This is an older release of Java that introduced big features back in its day (for example, Java 8 added lambdas which was a huge deal then). More importantly, Java 8 became a long-term support version, meaning it’s been maintained and patched for many years. Many companies standardized on it. Think of it like a dependable old car model that every mechanic knows how to fix and that rarely breaks down. Legacy software at a lot of companies runs on Java 8 because it’s proven to be stable. Everyone has tuned their tools, libraries, and processes to work with it. It’s the “trusty” option.

  • Java (JDK) 14 – the Shiny New Toy: This is a newer release that came out years later. It has modern improvements (fancy new features under the hood) that make developers go “cool!” For example, Java 14 added something called records which let you create simple data objects without writing a lot of boilerplate code (so you can make a data class in a few lines instead of dozens). It also introduced text blocks for easily writing multi-line strings, and various performance improvements. It’s like a new sports car with advanced gadgets and a more powerful engine. It sounds great, and in test drives (small experiments or pet projects) developers say, “Wow, this new version is brilliant!”

  • Production Environment = Real World: When we talk about “production,” we mean the actual system that real users or customers are using – essentially the live, real-world running of the software. In production, the number one rule is don’t break things. It’s like the difference between a concept car vs. the car you drive to work every day. The everyday car needs to be super reliable. So, upgrading the Java version in a production system is a big deal. It’s not done casually, because if something goes wrong, users might be unable to use the application (which could mean anything from unhappy customers to lost revenue).

  • Risk of Upgrading: Moving from Java 8 to Java 14 isn’t just like flipping a switch. Since Java 8’s time, there have been changes in the Java language and the Java Virtual Machine (the engine that runs Java programs). Some of these changes can break compatibility with existing code. For example, Java 9 introduced a new module system (Project Jigsaw) that could prevent some older libraries from working unless they were updated. So imagine you have a big application with dozens of third-party libraries (common in enterprise software). If even a few of those libraries aren’t ready for Java 14, upgrading Java could make your application stop working or throw errors. It’s like trying to put a new engine part in an old car – sometimes the new part doesn’t fit with the rest. Because of this, teams are reluctant to upgrade quickly. They want to wait until they are sure all the other pieces (libraries, tools) will work with the new Java. No one wants to be the person who upgraded the system and suddenly caused a crash. It’s that classic idea: “if it ain’t broke, don’t fix it.” And in their eyes, Java 8 ain’t broke.

  • LTS (Long Term Support) vs. Short Releases: The Java community has the concept of Long Term Support versions. These are versions intended to be supported for many years with bug fixes and security patches. Java 8 was one; later on Java 11 and Java 17 became LTS versions too. But Java 14 was what we call a feature release with only short-term support. Many companies have a policy: only use LTS versions in production. Why? Because they don’t want to upgrade the underlying platform every six months – that’s a lot of work validating and testing. So even though Java 14 brought nice goodies, it wasn’t an LTS release, meaning it would only get updates for a short time. Companies figured, “Let’s wait for the next LTS (Java 17) or stick to the current LTS (Java 11 or still Java 8) instead of jumping on 14.” In other words, stability trumps novelty for businesses running critical systems.

  • Tech Debt and “We’ll Upgrade Someday”: Over the years using Java 8, teams might have built up a lot of code that is specifically tailored to Java 8. Some of it might even rely on quirks or deprecated stuff that hasn’t been cleaned up. This accumulation of outdated practices is what we call technical debt – like rickety scaffolding that’s holding your system together. Upgrading to Java 14 means you have to confront all that debt: you might need to refactor portions of code, update many libraries to newer versions compatible with Java 14, re-run the entire test suite (if you’re a bank or so, that could be tens of thousands of tests), and ensure performance is still okay. It’s a huge task. It’s so huge that many teams keep postponing it. They say “We’ll do it later, not this quarter.” That’s why you get situations where it’s 2020 and the software is still on Java 8. It’s not that developers don’t know about the new version; it’s that moving to it is expensive and risky without a clear immediate benefit. This “we’ll upgrade eventually… just not today” mindset is both a cause and effect of technical debt. The longer you wait, the more changes pile up between your old version and the current version, making the upgrade even harder.

To put it simply: Java 14 is the shiny new thing with better features and potential improvements. Java 8 is the old reliable friend that has proven itself over time. Developers find this meme funny because it rings true to their experience: we often loudly cheer for the latest Java in theory, but quietly our actual deployed systems run on an older version because it’s the safe choice. A dev might play with Java 14 in a side project or read about its features (just like taking that sports car for a test drive or reading car magazines), but when it comes to the application that really matters at work, they’ll use the version that has “always worked” (like sticking with the trusty old car for the daily commute).

Here’s a small example to illustrate how code differs between an older Java and a newer Java feature:

// Using a modern Java feature (Java 10+ allows 'var', and Java 9+ has List.of()):
var newList = List.of("Java 14", "cool features");
// ^ 'var' lets Java infer the type, and List.of creates an immutable list conveniently.

// On Java 8, you can't use 'var' or List.of(), so you would do:
List<String> oldList = Arrays.asList("Java 8", "still going strong");
// ^ We explicitly write List<String> (no var), and use Arrays.asList (available in Java 8).

In the code above, you can see the newer Java lets us write a little less and use a handy factory method (List.of) that didn’t exist in Java 8. These kinds of improvements are why Java 14 is “brilliant” to developers. But if your project is stuck on Java 8, you won’t get to use any of that new neat stuff in your day-to-day code. That’s exactly why Clarkson (playing the developer in the meme) admires the new JDK 14 car but then sticks with his Java 8 car for actual everyday use.

So, the meme is highlighting language adoption habits in a funny way. No matter how great a new programming version is, companies often wait a long time before embracing it. They’ll prefer what’s tried-and-true (trusty old Java 8) over what’s new and unproven. It’s like loving the idea of a new gadget but being a little too comfortable (or too cautious) to give up the old one that works fine. Developers who see this meme laugh and nod, thinking, “Haha, that’s exactly us – we get excited about Java 14’s cool features, but our servers are still running on Java 8!”

Level 3: Better the JDK You Know

In the top panel of the meme, Jeremy Clarkson from Top Gear is standing next to a flashy red Ford labeled “JDK 14”, exclaiming “This is brilliant.” In the bottom panel, he gestures affectionately to a plain white Volkswagen labeled “JDK 8” and says “But I like this.” This perfectly captures a common reality in the Java community: developers applaud new Java versions (with their shiny features and improvements) yet cling to the tried-and-true Java 8 in their production systems. The humor hits home for senior engineers because we’ve all witnessed this “new vs. known” tension in real projects.

Why would seasoned developers praise Java Development Kit (JDK) 14 as brilliant but still run their mission-critical apps on JDK 8? The answer lies in a mix of technical caution, enterprise support policies, and tech debt realities:

  • Long-Term Support (LTS): Java 8 (released in 2014) became the de facto long-term support version that companies standardized on for years. Oracle and the community provided updates for Java 8 for a long time, so it’s battle-tested. JDK 14 (released 2020), on the other hand, was a non-LTS release. Enterprises typically only trust LTS versions (like Java 8, 11, 17) for production because they receive updates for many years. JDK 14 might be brilliant with new features, but it won’t be supported long-term, so adopting it could mean upgrading again in six months – a big no-no for risk-averse organizations.

  • Stability vs. Innovation: Production systems value stability over novelty. Upgrading the Java version under a huge application is like replacing an engine mid-flight. Legacy systems often have thousands of classes and depend on specific behaviors of the old runtime. A new JDK can introduce subtle changes: perhaps a library used some internal API that got removed in Java 9+, or the garbage collector algorithms changed timing in a way that affects performance. Even if JDK 14’s features are well-designed, a senior engineer knows that “no one ever got fired for sticking with what’s working.” The meme gets a laugh because Clarkson is basically voicing every cautious tech lead: “Sure, the new thing is great, but I’m not gambling production on it yet.”

  • Technical Debt & Compatibility: Years of running on Java 8 mean a codebase accumulates assumptions that it’s on Java 8. This is technical debt: every version upgrade deferred is a debt that eventually comes due (with interest, in the form of a bigger leap and more testing later). Many enterprise applications also rely on a web of frameworks and dependencies – and those might not all be ready for Java 14. For example, some older library might break under Java 14’s JVM because it uses reflection hacks or unofficial APIs that the newer JVM locks down. Upgrading one piece (the JDK) could force upgrading dozens of libraries. It’s a domino effect that experienced teams don’t take lightly. Thus, they postpone it, sometimes to the point of absurdity where you’re running an app in 2020 on a Java runtime from 2014. It’s funny because it’s true – many of us have been there, proudly reading about Java’s new features at conferences, then returning to an office where everything still runs on Java 8 because “it ain’t broke.”

  • New Features Temptation: Java 14 introduced exciting improvements – e.g. Records (taking the boilerplate out of simple data classes), Text Blocks (multi-line string literals without ugly "\n" hacks), Switch Expressions (making switch-case logic more concise), and performance perks (a low-pause Z Garbage Collector, etc.). As developers, we see these and feel like Clarkson praising the sports car: “This is brilliant!” We imagine writing cleaner, modern code. However, in practice, if your production code is stuck on Java 8, you can’t use any of those features in the code that actually runs your business. The meme hits a nerve because it’s that bittersweet recognition – the tools have evolved, but our production code hasn’t caught up.

There’s also a historical backdrop senior Java folks know: between Java 8 and Java 14, Java’s release cycle sped up (a new version every six months) and Oracle changed how Java was licensed and supported. Organizations that settled on Java 8 were hesitant to move forward because Java 9/10 were short-lived experiments, Java 11 was LTS but came with licensing changes, etc. By the time Java 14 arrived (with free OpenJDK builds available), many managers had a “wait and see” attitude. This created a culture of production inertia – better to stick with the devil you know (Java 8) than risk the devil you don’t (Java 14’s unknowns). It’s ironic humor: the community says “Java is improving so fast!” while the enterprise says “not so fast…” 😅.

In summary, the meme is a nod from one experienced developer to another – acknowledging that yes, Java 14 and newer releases are fantastic on paper (“This is brilliant”), but when you have a massive legacy system keeping the business running, you’ll favor the old, stable Java 8 that you trust with your life (“But I like this”). It’s a playful poke at the gap between modern technology and legacy reality, a gap every senior engineer has navigated at some point.

Description

A two-panel meme using the 'This is brilliant, but I like this' format from the TV show Top Gear, featuring host Jeremy Clarkson. In the top panel, Clarkson stands between a red Ford Fiesta labeled 'JDK 14' and a white Volkswagen Up!, saying, 'This is brilliant.' In the bottom panel, he gestures fondly towards the white car, now labeled 'JDK 8', with the caption, 'But I like this.' A small watermark for 't.me/dev_meme' is in the bottom left. The meme humorously captures the tech industry's, particularly enterprise Java development's, reluctance to upgrade from older, stable Long-Term Support (LTS) versions like JDK 8. Despite newer versions like JDK 14 (at the time) offering modern features, the comfort, stability, and massive existing ecosystem of JDK 8 make it a preferred choice, illustrating the powerful inertia of 'if it ain't broke, don't fix it.'

Comments

7
Anonymous ★ Top Pick JDK 14 has records and pattern matching, which is nice. But JDK 8 has something far more critical for enterprise survival: a decade's worth of approved security scans and the ability to run on a server that hasn't been rebooted since 2016
  1. Anonymous ★ Top Pick

    JDK 14 has records and pattern matching, which is nice. But JDK 8 has something far more critical for enterprise survival: a decade's worth of approved security scans and the ability to run on a server that hasn't been rebooted since 2016

  2. Anonymous

    JDK 14’s records and pattern-matching are brilliant, but until that mission-critical vendor jar stops reflection-grabbing sun.misc.Unsafe, Java 8 is our accidental Forever LTS

  3. Anonymous

    After 10 years in production, JDK 8 has achieved what every enterprise architect dreams of: it's become too critical to fail and too expensive to replace. Meanwhile, JDK 14's 6-month support window expired before the change request even made it through the CAB meeting

  4. Anonymous

    JDK 8 is the COBOL of the JVM world - released in 2014, still running half the Fortune 500 in 2024, and no amount of pattern matching, records, or virtual threads will convince architects to migrate until Oracle literally pulls the plug. The real joke? By the time enterprises finish their JDK 8 to 11 migration planning committees, JDK 25 will be out and they'll just stay on 8 anyway because 'the business doesn't see value in the upgrade.'

  5. Anonymous

    JDK 14 is brilliant - records, switch expressions, faster GC - but the support matrix spreadsheet tops out at 8, and around here the spreadsheet is the chief architect

  6. Anonymous

    JDK 14's brilliant, until migration hits; JDK 8's the LTS with more SO answers than your codebase has lines

  7. Anonymous

    Records and helpful NPEs are brilliant, but our vendor’s SOAP stack wants JAXB-in-the-JDK and the APM bytecode agent only supports 8 - so the change board calls it “strategic LTS alignment.”

Use J and K for navigation