When I used to do Java, I always found that Spring was a much better framework than Java EE, and have used it in most projects I've worked.
Oracle did not take a note from the Microsoft book and is really behaving that an evil corporate overlord.
It's clear at this stage that they bought Sun in order to slowly turn Java proprietary, and charge billions to the companies that are now fully Java-based for the next few decades.
I'm glad I saw the writing on the wall and switched, but the problem is that Java is still being taught a lot at schools, and school programs especially universities are hard to adapt and only change every 4-5 years or so.
Java/JVM was in the ideal position to dominate the software world for the whole 21th century 15 years ago. Instead they did an IE6 and stagnated for so long that their competitors became plain better.
It's hard for me to take all the "Java is dying" threads seriously when they don't even seem to understand where Java plays. Webassembly? Really? That's a client-side tech, and 99.999% of Java devs ceded the browser battleground pre-9/11.
I've seen zero actual encroachment into anything that earns me money for the past 10 years now, and at this point I'll probably be retired before I have to worry about it.
For example, Go is becoming the default in Kubernetes applications. It's eating tech companies that became large in the last few years like Lyft and Uber. It'll spread to other large tech companies like Amazon or IBM with ease. It will possibly get picked up by a significant number of universities for undergrad courses within a few years as well.
I've seen no indication of it changing which languages people choose to containerize (Node containers probably being way more common than Go ones). If anything, easy containerization negates one of Go's strongest selling points (i.e. standalone executables with no need for a runtime environment).
However I think the rule of enterprise software is that it’s increasingly fragmented and diverse - that’s partially why Kubernetes and containers were so attractive because it allows operations to unify footprint on prem and have a path to cloud.
Nobody in an enterprise ever stopped using a piece of technology. It lives on forever (and public cloud just gives it new places to live).
I don't know about that, I think that is still a strong selling point for Go, even in a containerized environment. Somewhere I saw a statistic that says over 90% of container images in the wild contain unpatched CVE vulnerabilities and (searching...)  here's an article that shows just how bad the problem is, according to this article in just the top 10 docker images, there are over 8000 known vulnerable paths.
The reason is probably not because those 10 products are simply nightmarish from a security perspective and expose the lions share of the vulnerabilities in their own code paths, it's because of unchecked dependencies. If someone took a tree shaker to those images and removed all of the unnecessary packages that aren't real dependencies, you see that number going down by probably about 30% if not more.
Even then, you're still seeing lots of potential issues caused by far-away dependencies that we do actually need, but don't really care about. There's something to be said for a development stack that is geared toward automatically pruning out packages you've included when the compiler can prove you're not even using them, and helping you reduce the scope and size of your external, far-away dependencies.
From an InfoSec perspective that's the biggest problem I see in containerized environments, (and true that just not using containers won't really make it much better) so correct me if I'm wrong, but I think that Go does all of that for us.
As a consultant, I see Java widespread. Every organization is either writing Java or running an application dependent on Java that is also mission/business critical. Most of my work happens on the backend, but we see lots of Java upstream with mobile apps, big data, ETL, etc...
There are many uggly things on Go language that can be considered nice features for system programming. Even though, if you go too much on the low-level (such as for operating system, drivers or embedded devices) it's still a issue to use go instead of a more hardcore systems language such as C++ or C. It is, at most, a niche language today. And probably will stay this way unless it goes into a major redesign.
Better to talk about Rust or Kotlin, which are languages that have much more potential and can be a real threat to the dominant languages/platforms today. But right now, they are too unknown to be taken in consideration just as many other good languages that never came to be.
I'm sure there's still a bunch of C++ devs working in finance, and making decent money, but I think the industry has moved on now.
The industry always moves on
Edit: I'm also confident you can ensure Go’s gc doesn’t run when you don’t want it to so there’s that.
As far as Node.js being the only JVM alternatively to take seriously, I don't even know what to say. There are lots of enterprises with mature .NET (not Core) business apps, doing all that very stuff that you list - EAI, ETL etc.
No wonder it takes the IT group 2 years to write an application I can have in production in 3 months! I don't need a reverse proxy! I don't need redundancy! I don't need an encrypted file store! It's a shared, specialized to-do list application! I don't need the overhead of a global financial application running on Sun E10K's!
Nothing personal, but there are a lot of us out here who can't WAIT for people who have based their careers on "enterprise" Java to get out of the way already, and retire. When computers were as powerful as smart watches, we NEEDED all that distributed processing and faffing about with off-line data. Now? Not so much.
"Hype trains" Rust, .NET, Go, etc.? Maybe you, too, think that Rails is too "new" and "unproven" to use for anything.
We have thousands if not dozens of thousands of different data providers and it is mostly financial data.
Everything important is PHP and Python. It was Perl 10 years ago. There is some Java, but not in the ETL subsystems.
LLVM has replaced JVM as a programming language target bytecode in the last 10 years (except Kotlin no new JVM language). JVM has lost web to JS 20-15 years ago, and Webassembly is now taking shape as proper web bytecode.
I do not know what will be the most dominant language + bytecode in 25 years, but I would bet $10000 that it isn't Java and JVM.
Java's never going to be on the bleeding-edge of trendiness (thank goodness). But there have been fewer JVM-targeting alternative languages over the past decade, because Java itself started leaning in a functional direction. It became "good enough" to negate the purpose for most of them.
At any rate, counting compile targets for hobbyist toy languages is barely one step beyond measuring GitHub stars.
> I do not know what will be the most dominant language + bytecode in 25 years
In 25 years, I'll be long gone and you can have it. By then, the industry will be pushing to automate most programming jobs out of existence altogether, and you can be the old guard arguing against that.
What about Clojure?
I 100% agree with you on Java. Some of these people who compare Java to Cobol have no idea. It’s hard for anyone to predict the future in tech but at this point Java is so widely used in the enterprise that it’s foolhardy to think that Java will disappear anytime soon.
To the credit of the Java community they keep the language relevant and refreshed.
I agree it’s always about 1-2 years behind other languages in terms of features but most enterprises don’t give a damn. Most enterprises just want to get work done. They don’t care about functional or OO.
In the last 3 years I have seen maybe 40% of developers use the latest features from java 8.
So while java might be slow to catch up that’s what it’s customers want.
Spring and Vert.x and similar Java frameworks will always keep Java relevant that it will be hard to ignore
Isn't that PART of the Java to Cobol comparison? Someone making that comparison wouldn't be saying that Java will disappear anytime soon.
The windows server running java is an area I am not sure and not much encountered. But windows and Microsoft languages are the only competitor here.
LLVM only emerged as a major target in the "last 10 years", so there's that.
And JVM already had so many major languages it didn't really have much space for others (Scala, Clojure, Groovy, and so on, including fully working clones of Ruby and Python).
Still, 4 major new languages: Scala, Clojure, Groovy, Kotlin -- all in the TIOBE top 50, from a single platform (which wasn't designed to be a language neutral target in the first place, it just happened because of it being too successful), plus the number one TIOBE index spot (Java), sounds like enough.
And the idea that corporate developers or even frankly any developers are switching to LLVM and WebAssembly en masse is pretty ridiculous.
Java as a language may be getting less developer interest but Scala, Clojure and Kotlin are as strong as ever.
Also the Kotlin compiler has a LLVM based backend which can compile native binaries, without use of any VM ( https://kotlinlang.org/docs/reference/native-overview.html ).
My main non-JVM use of Kotlin is that when I want to use some arcane aspect of Kotlin, which I may not be too familiar with, I might write and test a small toy function on the command line using it and then copying it over to a big Android Kotlin project, as opposed to trying to work out how to use the arcane feature in the middle of a big Android project.
I'll gladly take that bet. People said the same about lambdas.
> Java/JVM was in the ideal position to dominate the software world for the whole 21th century 15 years ago. Instead they did an IE6 and stagnated for so long that their competitors became plain better.
I don't see any competitor coming anywhere near Java on technical merits. Not only is there no stagnation, but true breakthroughs -- in GC, compilation and observability are being made in Java and almost nowhere else in the past few years. That's not to say that Java doesn't have some glaring deficiencies but they're being addressed.
Are they being addressed too slowly? Perhaps, but that's something we've heard about Java for a long time, and the perception has usually turned out wrong. I think this is because such complaints are made by HN readership that misunderstand the industry's priorities.
Java's short-lived complete domination was a fluke. Now its market share represents a more normal one for a technological leader.
LLVM and webassembly are eating the JVM's cake only on HN. Kotlin shares well over 90% of its code with Java, and is a part of the Java ecosystem. C# has always been a big competitor, and Rust is not really chipping much away from Java as it's optimized for different domains. Go certainly took a bite, but its rise has stalled. This leaves JS and Python. JS has truly been a remarkable success due to its ubiquity on the browser, and it has taken a big bite out of all languages. Python is the most interesting one in the bunch. It is nowhere near as technologically advanced as Java, but it has other important benefits that many companies now care about.
I never understood the purpose of Valhalla. They should just introduce a 128-bit scalar type and call it a day. Nobody actually cares about automagically storing value types in HashMap — all interested parties (HFT, computing) have already written dedicated collection libraries for working with primitives, and those libraries have little in common with object-based ones.
> LLVM and webassembly are eating JVM's cake
pffft, hahahaha, no they don't.
JVM and LLVM don't even share same market niche — one is a feature-complete runtime, another is a "make-your-own-language" build kit. Webassembly? What webassembly?
I agree. When I look at the allocation profiles and heaps of our Java applications (which I assume to be fairly typical Java enterprise applications) boxed types do not show up. What really matters are Strings, both in the heap and the allocations.
Other interesting languages you have on the JVM is Scala (multi-paradigm), Clojure (Lisp), EtaLang (Haskell)
Java is already losing market share to JVM competitor languages.
JVM is in a stronger position than Java, but imagine a world were 15-10 years ago native compilation for JVM bytecode became available instead of 1 year ago. LLVM wouldn't have stood a chance.
Kotlin and Scala (I'm not too familiar with Clojure and others) are hedging their bets and making JS/Webassembly and LLVM versions.
Also bear in mind LLVM is not really a JVM competitor despite the name. LLVM is a toolkit for building compilers, primarily, C/C++ compilers. Other languages that targeted it have had to do a lot of work to change LLVM for that language. It's not actually a "VM" in the JVM or V8 sense, for instance, it doesn't provide a garbage collector and LLVM bitcode is neither platform neutral nor a stable format.
It started out as a (lower-level than JVM) VM and evolved into what it is now, mainly because of Apple's requirements and funding.
As for your problem, it looks very strange to me, only similar to compiling C and C++ on underpowered hardware.
For example, PTC, Aicas, Aonix (now also owned by PTC), IBM RealTime WebSphere, some variants of J9, Android since version 5 (although it isn't technically a JVM), RobotVM, Codename ONE, GluonVM, IBM i JVM (uses OS/400 TIMI), JRockit.
Really, any examples? And not Go and Rust (down 30+ places in the TIOBE index compared to Java, and as insignificant as to not even exist in the global job market).
> webassembly is not eating any cake.
And C++ is still around, and one of the top choices, despite 25 years of other languages chipping away at it.
Java is very mature, it doesn't need to evolve a whole lot - and most everything you need is there.
Oracle is definitely a risk to this, but I don't see TS/JS/Node taking over.
Kotlin is a strategic choice by Google due to Oracle woes, otherwise it would be a very rare language: consider that it really hasn't made a big roar outside of Android, i.e. it's not really anywhere on server side.
Java isn't going anywhere for a while yet.
There will need to be some kind of tectonic shift for this to happen.
If Google or AWS for example fully embrace some new thing, that might do it - but I don't see what the candidate is.
Without Android adoption (and G did this specifically because of Oracle issues) I don't think anyone would really be using it. Outside of Android, it's not a big thing.
I've gone Java to Kotlin and back again simply because the few advantages to Kotlin just aren't worth the phase shift. FYI almost every single code example in Android has Kotlin and Java the same length. It's not really any shorter or more concise in the end.
I wish Kotlin well, and it's a great example of how the JVM can be leveraged.
The JVM is probably Java's greatest foundational asset, which is why Graal has such potential, if Oracle doesn't screw it up ...
The GraalVM team is working to run a bunch of stuff all together on the JVM
Nobody seriously uses webassembly outside of the web broswer.
So much for hyperbole.
At any given time most developers will neither have much real choice when it
comes to technology nor have a longer term perspective. Hence most developers will stick to what they know and what organizational inertia seems the path of least resistance.
The comparison to COBOL is good for several reasons.
So how is this "JVM world" escaping the grip of Oracle? E.g. graalvm is directly Oracle's, or am I missing something? Specifically, what is preventing any of the Java-related things people use now (including those that you mention) to end like the OP is describing?
Asking as somebody outside of that world, but interested "how much it's worth considering" under the given circumstances (Oracle being Oracle, demanding a lot of money for everything Oracle's that some company could use, and owning a lot of that "world"). Where are the boundaries? What is safe and outside of reach of Oracle? E.g. what is safe for a small company to use?
OpenJDK does not need commercial licensing, but Oracle JDK which is built from OpenJDK needs.
Then there are plenty of other vendors to chose from if you absolutely does not want to interact with Oracle.
IBM and now Eclipse foundation OpenJ9 is a very interesting TCK compliant JVM, then you have Azul Systems that innovates a lot with Zulu/Zing.
What can be used only using BSD, MIT, Apache licenses? And what from the GPL-licensed products is safe to use to produce and sell own closed source products (e.g. where the exception to GPL exists for just linking the libraries or similar)?
Edit1: Long term dangers/costs of depending on the technologies that need commercial licenses like Oracle’s are also important.
Edit2: And additionally, just as an old example, once I’ve considered using Berkeley DB in the closed source product (before some of the current alternatives were available), and my interaction with Oracle proved that only a bigger corporation could fund that. For a library which was already open source, but owned by Oracle. It's not that I'm in the "I don't want to pay for anything" camp -- I'm simply having a perspective of a small player. And about small players Oracle couldn't care less. However, the significant changes very often come at that level of cheapness and overhead, most of technologies would be still not widely accepted otherwise.
Maybe I'm missing something, but AFAIU you have to publish any changes to that library, not your sources.
It the context of my questions here, and as an example, my guess is that I can't use graalvm to produce a binary which I can sell without either open sourcing everything I've made or paying too much to Oracle. But I don't know for sure and for each of the mentioned technologies, that's why I'm asking very specific questions.
GraalVM CE is licensed under GPL 2 with Classpath exception (https://github.com/oracle/graal/blob/master/LICENSE), specifically so that binaries created with GraalVM (which contain the GraalVM runtime) don't fall under the GPL.
Why would you? What is the point of "escaping"? It is like asking, "how would Go world escape the grip of Google?" — no one cares to, because nobody asks Oracle for permission to make software for JVM.
Java EE has been in maintenance mode for a long time, but Spring and Dropwizard are alive and well despite that. Incidentally, Nginx Unit has recently implemented Servlet spec — a cornerstone of JEE! — but they are stuck at it's initial version, without asynchronous Servlet support. Maybe Oracle should give Nginx a couple of decades to catch up before drafting next JEE version...
Oracle has open sourced (or deprecated and removed) the remaining commercial elements in the JDK -- OpenJDK now is truly the complete open reference implementation of the JDK, JRE, and JVM.
GraalVM isn't even at version 1.0 so nothing at all to worry about.
My understanding is that it is preinstalled on chrome os and android, but is not preinstalled for any major linux distribution, is a separate third-party download for windows and Mac, and is unavailable for iOS.
I don't see how this is an argument though, there is no Java in a standard desktop/server installation, but it's trivial to install if needed.
As for iOS, RoboVM, Codename ONE, GluonVM are three possible AOT compilers to native code.
I believe Apple donated their customizations (Swing L&F, launcher code, etc.) to OpenJDK.
All good alternatives to the JVM are commercial.
The free ones are generally just repackaging Oracle's work on the OpenJDK, with zero contribution to Java's research and respective improvements.
Hence why it is always ironic to see the crys to use OpenJDK and forget about Oracle.
- Android. No serious competitor to Java yet (JVM is irrelevant). But the Google lawsuit could have some complication.
- Spring stuff. I won't be surprised if they will be replaced by golang and nodejs (along with react/angular/vue etc). Same path for RoR.
- Data processing: Spark stuff, PrestoDB, Flink, Kafka, Hive, HBase, Lucene/Elastic etc. Java/JVM is still dominant but golang could be a future contender. A few new application databases/KV stores are implemented in golang.
The problem for Java is that the last category is mostly services (instead of libraries/frameworks) so you can potentially use any language to work with them, and the industry probably won't create many jobs for building generic services especially in the cloud era. So having the dominance doesn't provide a lot of protection.
It's weird that you put Spring and react/angular/vue in the same sentence, because there is no overlap in these problem domains.
There is a clear trend there to grow static features, and I think a lot of people ask themselves why they shouldn't go directly to a more traditionally compiled language then.
I know there are other Java frameworks out there that are more optimized for smaller modular projects, but there's also the cost of operationalizing the JVM in something like Docker. Fat JAR deployments are relatively simple, but tuning the JVM isn't always straightforward. I'm definitely jealous of the simplicity of producing a single binary as your deployment artifact.
Was hoping that Kotlin+Spring could be a good alternative to GoLang for realtime apps, but haven't tried it yet.
This has been said for at least the last ten years. Not only is Java not dying, but companies like Apple and Facebook (not to mention Netflix, Amazon and Google, that are mostly or largely Java already) are increasing their investment in the platform. This was not the case when COBOL was 25.
The reason this is so is that Java is by far the most technologically advanced server-side platform in existence. It continuously presents technological breakthroughs in GC, compilation, and low-overhead profiling technology (just in the past few years it did so again in all three -- with ZGC, Graal and JFR). Node, Python, Go, Erlang -- none of them even come close. .NET comes closest, but even it is pretty far behind. This certainly wasn't the case when COBOL was 25.
> Oracle did not take a note from the Microsoft book and is really behaving that an evil corporate overlord.
Oracle has just open sourced the entire JDK. Sun didn't do that and even .NET isn't entirely open source. I have no knowledge or involvement with EE, but it seems Oracle simply doesn't have faith in EE, and doesn't want the Java trademark associated with it.
(I work at Oracle on the JDK -- i.e. OpenJDK -- but speak only for myself)
I can say that my company’s use of java is diminishing rapidly over the last 5 years too.
No matter what you think of the technological advancement of the language and ecosystem- it matters not if people are not using it.
Oracle itself is a pariah, the vast majority of the tech industry avoid it.
C++, Java, C#, Smalltalk, Prolog, Lisp, OCaml (used to be Caml Light), Haskell are still being taught.
Those doing compilers, also get to enjoy Algol, PL/I, COBOL, Fortran and a couple of other relevant languages in the history of computing.
No surprise, Java never had a great standing in FOSS. Most FOSS in java originates from companys or research-projects. Which might be the reason why many data science FOSS-tools these days are written in java. Sometimes I even get the impression apache foundation is now an oracle-sweatshop because of all the java-software they have now.
Huh? You have Spring and Tomcat and Jetty and Spark and Netty and Kafka and Lucene and ElasticSearch, and even the Java language alone is consistently in the top three most popular languages on GitHub
Don't know about kool-aid, but if you want to do interesting platform work -- on GC, compilers or low-overhead observability -- you could work at Microsoft on .NET, at Google on V8 (or Go), or at Mozilla on WebAssembly, but the truly cutting-edge, state-of-the-art work is done at Oracle on the JDK (and related projects like Graal), which is where I get to lead a project to add delimited continuations and fibers to the JDK. We're obviously keeping an eye on what's going on elsewhere, and while there are certainly great ideas out there (some we're happy to steal, as others steal from us) we look around and don't see similar overall technological leadership elsewhere. That's not to say others won't pick up mindshare or win certain niches, or that technological leadership is the determining factor, but if you're in interested in the technology and familiar with what people are doing, it's hard to deny that Java is ahead of the pack in the technologies I mentioned.
> there isn’t a whole lot of mindshare going towards java these days. At least in regards to new FOSS projects.
I'm not sure your numbers are correct. Java is not the only game in town as it was for a few years in the first half of the naughts, but "not a whole lot of mindshare" seems to be detached from reality. I can't predict the future, but remember when PHP had all the mindshare and totally killed Java? Remember when Ruby did the same? I would like to think that Java still being the leading server-side platform after being killed over and over has something to do with its technical excellence, but I know that's being naive. Nevertheless, wishful thinking on the part of some don't make reality, and usual fluctuations don't make a trend. Eventually, something will kill Java -- or at least mark its true lasting decline -- but it doesn't seem like that something is here yet.
> I can say that my company’s use of java is diminishing rapidly over the last 5 years too.
That may well be, but we're also seeing companies switching to the Java platform in quite significant numbers, in cases where both performance and observability are top priorities. There seems to be movement inside the Java ecosystem (e.g. among the Java language, Kotlin, Clojure and Scala) or outside it (e.g. people switching among Ruby, Python, Node and Go), but we're not seeing any significant shift away (except on the client side, where the browser has won). There are also certain niches, like machine learning, where the Java platform isn't number one, but it's doing much better than Node, Go or .NET.
> Oracle itself is a pariah, the vast majority of the tech industry avoid it.
I'm not a manager, but I'm not sure the numbers support your conclusion. The opinions developers voice on HN and Reddit are... fickle, and don't necessarily reflect market shifts. In any event, the competition doesn't seem to be doing too hot in comparison, either. I can tell you that personally I'm certainly unhappy with some of the things Oracle has done, but at least it's not surveilling on the entire world, putting thousands of small businesses out of business, or getting kids into conspiracy theories. Also, my colleagues are so far not famous for outbursts of racism or misogyny. Now, I admit that’s not exactly high praise, but these days, as far as Big Tech is concerned, that’s not not nothing, either, and I’ll take annoying some other corporations over those any day.
A couple of years ago I was a CTO of a midsized company which had a misfortune of building the main product on top of Oracle DB (decision was made before me).
Oracle the database is great: performant, scalable. A bit pricey and complex to manage but that's acceptable for what it delivers.
Oracle the company is absolutely horrible. I've never dealt with anyone worse than Oracle.
Just one example: we accidentally turned on a feature called "advanced data guard" or some such. The DB is large and complex, it was a mistake of one of our DBAs who reported it right away. We never used the feature and could prove it with logs. Nevertheless Oracle demanded us to pay close to $1m or they would shut us down: we would have to discontinue the use of the entire DB in 30 days which was impossible.
The funny thing is that once ADG is turned on it cannot be turned off. Which made me suspect that such traps were created on purpose.
We ended up paying less than $1m but in the form of purchasing their cloud services. Apparently that's how their sales people get commissions.
But, dear Oracle, I've learned my lesson. Never again will I use anything with Oracle name on it. No company under my leadership will use anything Oracle. Not even Java or MySQL. Regardless of the technical merits of the product. Oracle is too underhanded to be trusted.
P.S. We also decided against using the Oracle cloud services we paid for. We just let it sit there, never even logged in. I'm sure Oracle reported their cloud as growing.
Now THAT is leadership I can follow. So, uh... you hiring?
I've no love for Oracle, but the amount of uninformed comments here is scary.
Last time I had to download a JDK I got a warning about having to pay a license for commercial use. I think most enterprises care more about the licensing arrangement than access to the source.
You need to realize that Oracle does over 90% of the work on OpenJDK, and that the Java ecosystem is so big that there are other very large corporations who want to make money off of Java, and so are very interested in painting a picture of a "non-cooperating" Oracle. But again, whether you use a build from Amazon or Adopt, those source code behind those builds is developed and maintained by Oracle developers. And I can also tell you that we beg companies that build distributions or make money off of Java to contribute more, but so far, they can't or won't. We're happy to see Google starting to contribute more, and, of course, we've been cooperating with Red Hat for a long time. But so far, Amazon and IBM contribute little if at all (but I will say again that some companies cooperate nicely with Oracle -- Red Hat, SAP, and now it seems like Google may be starting to do that as well).
: https://blogs.oracle.com/java-platform-group/building-jdk-11..., https://blogs.oracle.com/java-platform-group/the-arrival-of-...
I am unfamiliar with Java and am curious: if I open 2 Java-based apps on my Mac or Windows box, how much of the memory devoted to Java tooling that would have been shared if the apps were built with the assumption that there is a JRE already installed locally is instead duplicated because of the recommended practice that you describe?
These are the only builds for which you can directly report OpenJDK bugs against. This is not because of some conspiracy, but merely because most organizations that provide JDK builds (like Amazon or Adopt) do not contribute much or at all to OpenJDK -- usually because they don't have the resources or the knowledge, and in some cases because they don't want to.
Because the responsibility of developing and maintaining OpenJDK -- in all builds -- mostly falls to Oracle developers, we can only "back" builds we actually know. If you find a bug in Adopt, you'll need to report it to someone who will first reproduce it on an official build and only then report it to OpenJDK, where, in all likelihood, an Oracle developer will address it. Other companies can back Adopt because they're not the ones who maintain the project, anyway, so they bear little or no responsibility. We're happy that OpenJDK is doing so well, but with limited resources, we can only focus on builds that are under our control.
Java suffers from having some 20-year old codebases because it's been so popular for so long but I can open up a 2004 WebLogic project in Eclipse or InteeliJ and trace everything it's doing. And modern Java has added all the nice features we expect a modern language to have. Java's slow demise is due to terrible PR and Oracle's endless insistence on JEE when every sane developer is using Spring.
But the build toolstack is a pure, unadulterated nightmare. I used to think Maven's XML orgies, archetypes and learning curve were bad, but diving into Webpack et al was a new dimension of horror. This time based on JSON, though.
Java has been the new COBOL since its inception in the 1990s.
I programmed quite a bit in COBOL early in my career. It's an extremely efficient language for scanning records especially in an era when a large proportion of data was stored offline on mag tape. Most common business problems of the era could be expressed and solved effectively in COBOL, which is why it became so popular.
I programmed in both C++ and Smalltalk in the early 1990s, which were innovative but also difficult to use for large systems. Java hit a happy medium with its C++-like object syntax, built-in libraries, and virtual machine operation with garbage collection. Add in the network effects from wide adoption (leading to tools and libraries) and it became a huge hit.
Oracle seems to be going out of its way to submerge the language in confusion. But nobody should mistake this as a reflection on the inherent capabilities of Java or its fitness for use.
Edit: correct typo
In fact, you described exactly why it is the new COBOL: because it is also an efficient and popular language for common business problems of our era, that is hugely popular, but mostly in "unexciting" places like large internal enterprise apps, out of sight for many. And just like COBOL, it will keep ticking on like that, probably forever.
Where I am (geographically, company wise and ecosystem) Java and the Java ecosystem are very much thriving.
I'd consider Spring as more of a non-JavaEE application server. Pick either Spring or Wildfly/Glassfish/Websphere/etc and you're either using part of the JavaEE specification with the former or the full specification with the latter.
Avoiding JavaEE for micro-services requires moving to something like DropWizard. Instead of a 200MB application server you end up with a 20MB application. Unfortunately, running that application in a Docker container will spin up a 180MB JVM. So the main reason we're moving away from JavaEE is actually more related to our move to container orchestration and that was originally driven by our adoption of micro-services. If you write a micro-service with a single end-point why should it use 500MB of memory?
Not in any industry I know.
When people say Ruby is dying, it would be more accurate to say they are not growing or they are shrinking. But given the size of Ruby marketshare of less than say ~2%. I would not really disagree with their notion.
But Java? I mean even from a Web Development prospective, given you mention Node, JS and Spring Framework, it is Far from dead.
And this is speaking as someone who likes Ruby and dislike Java.
Like C++, it's modern features are being slowly added. There's a huge difference between Java 8 and 11, in performance and features. Innovation is hardly dead.
Java EE and Spring are both terrible. I recommend trying some of the newer frameworks out there to see how much nicer things have become. DropWizard is my favorite right now.
I'm no Oracle fan, but Java is more "open" in many ways than it has been since the beginning. It wasn't till a few years ago we had a feature-complete high performance OSS implementation as the standard.
Oracle will try to ruin it, but the GPL JDK and history of projects being forked away from them makes it fairly safe. It's not in the interest of any Java user to have more than one standard.
IMO Java isn't going anywhere. It's been top 3 most popular language for over a decade. JS is somewhat promising but will never match Java in performance and multi-threading support due to core design decisions. Go is too verbose to get industry buyin to replace Java in most use cases. WASM is promising in the far future but it will take years to have a full browser and server ABI. The only real contenter to replace Java is C# and so far it's not getting much traction.
If anything killed Java it would be C#. Value types, no type Erasure, unsafe code and some native vector support. But it hasn't and probably won't ever dethrone Java. Java has a combination of decent features and an insanely huge amount of library support that makes it the default language of many companies.
At least it would be if Oracle wasn't trying to squeeze it dry.
And I think Java is more alive then Delphi, at least no one is setting up a site like http://www.isdelphidead.com/ :D
You and I may regard it as evil, but it's a perfectly valid strategy. Perhaps it's more common outside IT? It's the brutally honest business strategy.
I can sort of appreciate that they don't play around. Perhaps not my first choice of technology, but you certainly know where you have them.
b) Android isn't switching to Kotlin because of licensing since it is a JVM language after all. It's purely because it is a much better language than Java and has great tooling courtesy of Jetbrains.
It's the opposite, it's that old school entreprise type software & frameworks are getting less used.
> b) Android isn't switching to Kotlin because of licensing since it is a JVM language after all. It's purely because it is a much better language than Java and has great tooling courtesy of Jetbrains.
I think it's a mix of both, getting sued by Oracle probably did not help.
And there is Kotlin-Native but the likelihood of JetBrains reimplementing the entire JVM SDK is pretty slim. Not to mention all of the common third party libraries e.g. Guava, HTTPClient.
Yes but there's a lot of efforts from Google to support the language as well since now it's the new Android language.
Kotlin is just one option more, and the tooling is still not mature as Java.
Specially in compile speed, incremental compilation, debugging, speed in type completion, FFI.
"Android apps can be written using Kotlin, Java, and C++ languages. "
And regarding Google, Kotlin is not among the beloved ChromeOS and Fuchsia languages.
So it depends very much on their internal politics.
I believe it supports Most Android and Linux apps now.
Android and Linux apps support is made via containers, aka they are not native to the OS, and isn't supported across all Chromebooks models being sold.
And even then, there are support issues.
Zoom - a tiny net income of 7.6 million
Slack - losing money.
So why is it a “great time” for enterprise software?
Imagine you do a medical product and the regulations needed for FDA approval require you to check for vulnerabilities in your product and build infrastructure. Have you ever checked all packages in a npm dependency tree for vulnerabilities?
The same way as any other language? With audits? I don't get your comment.
Hence, same amount of code, much more work (it is a magnitude).
You might also like C#, Rust, Elixir, and several other languages that each offer their own tools, libraries, and features. I'm seeing a pattern with many frontend developers in the last few years that they at some point become full stack developers and shortly after start adding more languages to their repertoire. I know former node.js developers doing Rust, Go, Elixir, Kotlin, Rust, etc. now. Most of them are not very eager to move back to doing node.js projects.
Like Kotlin all these languages are all coming to the node.js/browser ecosystem through WASM. Full stack in 2020 is going to be a very different beast than just a few years ago.
Likewise, there's an ecoysystem of multi platform kotlin libraries emerging and that allows you to build wasm or native applications and libraries without needing things like webpack, npm, etc (but using gradle instead). Same with C# and blazor. Each of those ecosystems uses browsers and node.js as runtimes but try to minimize/eliminate/replace most of the rest of that ecosystem. In the same way the Kotlin ecosystem is also starting to provide alternatives to stuff from the java EE and Spring ecosystem. E.g. Ktor is a multi platform web application framework that you can use instead of spring boot and run natively or on the jvm. It's also a drop in replacement for anything you might want to do with e.g. express.js. Doing express.js applications in Kotlin is of course also possible, but why would you when you can have ktor instead? In the same way building react applications in Rust is possible, but replacing it with a rust specific framework is much less awkward.
You might make the point that there are all these millions of npms out there that can't be replaced easily. I'd counter that with the point that an awful lot of them seem to have very short shelf lives and are in fact replaced/discarded regularly.
You can't compare these frameworks. They're in entirely different spaces, with different requirements and constraints.
But it is the right thing to do. Oracle is not trustworthy.
The fact is that every single one of the largest companies has some Java or Scala code within their core platform. And none of them have ever raised Oracle as a risk.
If Oracle had succeeded, would that mean that every developer that downloaded the Eclipse IDE would be subject to Oracle's licensing and a possible audit target? I believe that it would.
Everyone should move off of Oracle's VM. I think Oracle is going to be more agressive in discuraging this or making it more difficult.
Anecdotally, nearly every CIO/CTO I’ve encountered in the last few sees Oracle as a huge risk. Most particularly with regards to databases, which are even sticker than applications which have shorter life cycles.
Oracle is, as you say, on the radar primarily because of databases. But it is really the risk of dealing with a company that is likely to screw you if they can do so with sufficient ROI (where the investment is audits and litigation)
Developers and CxOs/company boards risk very different things and when things go bad, have very different downsides.
Seeing that Apple started a project to rewrite Maps back in 2014, hopefully they didn’t decide to rewrite it using WebObjects (https://appleinsider.com/articles/14/07/01/apple-overhauling...)
Maps uses Clojure, and is partially developed here in Berlin.
No job is secure.
The days of pure coding jobs are over.
Docker and k8s are the NoSQL of 2019.
Just keep monitoring their job openings in Germany.
MS did have a Java clone 20 years ago, but gave up due to legal threat from Sun and the DOJ lawsuit.
Ironically, MS has quite a few of Android apps . Has been for several years. I guess there is at least some Java there. Unless you don't consider Office "core".
So Oracle's attitude to OpenJDK and the possibility that it cuts back on development is a likely factor for people considering the platform.
Yeah, Google thought the same
If Oracle's copyright argument holds up, then they can kill or cripple OpenJDK at will by denying it the ability to implement new Java APIs.
As somebody who's not deep in the Java ecosystem, the precise relationship is not clear to me, but it does seem that Oracle is a major contributor to OpenJDK at least, most likely also involved with the project steering.
I don’t think this is accurate. Alpine and Debian OpenJDK have been getting point releases (u###) through the distribution package manager. I’ve got apps running on openjdk 8 and 11 (the LTS versions) and they are still getting u### releases with security fixes and bug fixes despite Java trunk already having moved past 11.
Edit: did some further research on this and it looks like various distros are providing the LTS support for java 11. For instance Amazon Linux will be supporting Java 11 through 2023. https://dzone.com/articles/oracle-continues-long-term-suppor...
Far as I understand having any Oracle products is a liability. They can't 'audit' you if you don't use any of their products.
I hope other organisations with a director from Oracle are taking note.
In the EU the same is happening. Poland and Hungary have found a loophole allowing them to ignore EU rules and sanctions while still profiting from subsidies and market access.
All sanctions against a member state require unanimous-1 (all states except the sanctioned member) votes and Poland is vetoing all sanctions against Hungary, and Hungary all sanctions against Poland.
What I remember from history lessons in school agrees with Wikipedia's description, so I'll just quote:
"Many historians hold that the liberum veto was a major cause of the deterioration of the Commonwealth political system, particularly in the 18th century, when foreign powers bribed Sejm members to paralyze its proceedings, and the Commonwealth's eventual destruction in the partitions of Poland and foreign occupation, dominance and manipulation of Poland for the next 200 years or so. Piotr Stefan Wandycz wrote that the "liberum veto had become the sinister symbol of old Polish anarchy". In the period of 1573–1763, about 150 sejms were held, about a third failing to pass any legislation, mostly because of the liberum veto."
"To give a minority a negative upon the majority (which is always the case where more than a majority is requisite to a decision), is, in its tendency, to subject the sense of the greater number to that of the lesser. Congress, from the nonattendance of a few States, have been frequently in the situation of a Polish diet, where a single VOTE has been sufficient to put a stop to all their movements. A sixtieth part of the Union, which is about the proportion of Delaware and Rhode Island, has several times been able to oppose an entire bar to its operations. This is one of those refinements which, in practice, has an effect the reverse of what is expected from it in theory. The necessity of unanimity in public bodies, or of something approaching towards it, has been founded upon a supposition that it would contribute to security. But its real operation is to embarrass the administration, to destroy the energy of the government, and to substitute the pleasure, caprice, or artifices of an insignificant, turbulent, or corrupt junto, to the regular deliberations and decisions of a respectable majority. In those emergencies of a nation, in which the goodness or badness, the weakness or strength of its government, is of the greatest importance, there is commonly a necessity for action. The public business must, in some way or other, go forward. If a pertinacious minority can control the opinion of a majority, respecting the best mode of conducting it, the majority, in order that something may be done, must conform to the views of the minority; and thus the sense of the smaller number will overrule that of the greater, and give a tone to the national proceedings. Hence, tedious delays; continual negotiation and intrigue; contemptible compromises of the public good. And yet, in such a system, it is even happy when such compromises can take place: for upon some occasions things will not admit of accommodation; and then the measures of government must be injuriously suspended, or fatally defeated. It is often, by the impracticability of obtaining the concurrence of the necessary number of votes, kept in a state of inaction. Its situation must always savor of weakness, sometimes border upon anarchy.
It is not difficult to discover, that a principle of this kind gives greater scope to foreign corruption, as well as to domestic faction, than that which permits the sense of the majority to decide; though the contrary of this has been presumed. The mistake has proceeded from not attending with due care to the mischiefs that may be occasioned by obstructing the progress of government at certain critical seasons. When the concurrence of a large number is required by the Constitution to the doing of any national act, we are apt to rest satisfied that all is safe, because nothing improper will be likely TO BE DONE, but we forget how much good may be prevented, and how much ill may be produced, by the power of hindering the doing what may be necessary, and of keeping affairs in the same unfavorable posture in which they may happen to stand at particular periods."
Not sure what they were thinking with such a policy. Unanimity is something you can have at the village level.
AFAIK this was tit-for-tat: HU & PL closed/sold-off their industry in favor of WEU in exchange for subsidies. Removing these subsidies for any reason would violate the main economic agreement between them and EU. Mind you, there is no significant locally grown industry in those countries anymore (outside of a few state-owned industries), WEU profited from this enormously, especially Germany. As economic potential of this arrangement has been exhausted after 25 years already, incorporating UA is the next move to give EU (primarily DE/FR/NL) some nice economy boost for the next 10 years. EU is essentially playing Sim City.
After some time Poland found some niches for itself, e.g. Polish transportation companies dominate EU market in truck freight. What was the EU response to that? They recently passed change in labor laws, that would make this business unprofitable.
So: common EU market is fine as long as Western countries benefit from it, but Poland or other Eastern countries making money from business in the West is against the rules :)
Are you talking about those labor laws, which require truckers driving in Germany to be paid German minimum wage? Totally unprofitable.
Basically the law change is this:
Now, if you are Polish truck driver employed in Poland, you are subject to Polish tax and labor codes, including things like tax rate, minimum wage, etc. What France wants (and what was passed, but is not in effect yet) is that if said truck driver crosses the border of another country (say, France) he should be subject to that country tax and labor code. Which is riddiculous, because the driver does not change his tax residence, he just enters France for a few days it takes to make a delivery, and then comes back to Poland.
It would be ridiculous, because the factory worker would be working at a company domiciled in the other country. That is because, a company in one country can not just open a factory in another country without having an entity in the latter country.
Consider an alternative situation: Franz is employed in Hungary as a writer of fiction, but crosses into Austria many days and uses wifi to work there. Should Franz be paid Austrian minimum wage?
All kinds of other local laws apply just by entering a country.
Local laws do apply, but generally one can not just enter another country and work there. Very often one is specifically prohibited from working in another country without a visa.
But that's not really the situation here: it's a business providing services for customers in another country. You send a driver abroad for a few days, that should not make him subject for local tax and labor laws. If you can prove that said worker spent significant period of time there (most tax treaties use 183 days as a rule of thumb) then that's a different matter.
The Netherlands always vetos Romania's application to enter the Schengen zone as Romania's harbors to the Black Sea will provide cheaper alternatives for import of goods to the Dutch ones.
However, the endemic corruption could be the real reason.
And it doesn't have anything to do with the fact that the Romanian coastal surveillance system was conveniently down when cocaine started to shop up on the beaches.
All of the countries that could - and would (given the right kind of existential threat posed by another) kill a few _hundred million_ people in even a limited exchange are on the council.
There are other, non-nuclear states that could cause similar (<10m) deathcounts if they had a conflict. What we don’t want to do is frame the security council as “the nuclear club” which allows them to dictate global security - that would give states like DPRK and Hussein’s Iraq even more motivation to pursue a nuclear weapons programme.
To an extent it does come down to sincerity - I’m not concerned about India being a nuclear power despite it bordering Pakistan and PRC: I have faith in India’s democracy and stability to use their power responsibly (Kashmir is another discussion) - but I don’t extend that to DPRK who are clearly using it to avoid a Libya-type situation but who may end up using it anyway given the inherent instability of autocratic dynasties.
It's more an economic issue than a nuclear issue IMO. And, I think the veto should be done away with.
I'm imagining whether China might veto this...
If a EU state refuses to do a thing, that's basically it.
If anything, few people mention the dutch trade surplus (I presume because the "netherland is evil!!" narrative is not as common as "german is evil!!").
Take for example the Italian government's decision to run a deficit higher than what is allowed under EU rules (2% per year if I recall correctly). The EU tried to put a brave face on it: they held negotiations with the Italian government and announced a compromise, but it was pretty obvious to people who follow EU politics that the EU had no effective means to enforce the rule on Italy.
And this cap on deficit spending by governments of member nations is no minor rule. Many had stated over the years since the introduction of the Euro that the rule is necessary for the single currency to work.