Negotiations Failed: How Oracle Killed Java EE
headcrashing.wordpress.com
headcrashing.wordpress.com
I have the impression that a lot of the mindshare has switched to the Node and Javascript ecosystem, especially the frontend devs, via the Typescript / Angular path, which is a natural path to Java developers due to the comfort given by familiar concepts like static types, classes, etc.
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.
Ref:
- https://openjdk.java.net/projects/valhalla/
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.
GraalVM isn't even at version 1.0 so nothing at all to worry about.
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.
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.
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.
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.
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.
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'd say Java/JVM is now where IE was in 2008. Still massive majority market share, but in decline because people are switching to competitors. LLVM and webassembly are eating JVM's cake, and a multitude of languages like Kotlin, C#, Go, Rust and even Javascript and Python are chipping away at Java's market share.
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.
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.
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.
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).
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.
However Kotlin can be targeted to other platforms as well. Kotlin can target JavaScript ( https://kotlinlang.org/docs/reference/js-overview.html ).
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.
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.
Java's bread and butter is EAI, ETL, and server-side business application development. Particularly with pieces requiring heavily distributed design. Node might pick away at some of the lowest-hanging fruit (e.g. JavaScript webdevs writing their own REST endpoints to fetch user settings from the database). But most of that crowd doesn't understand what the terms "EAI" or "ETL" even mean. Hell, most of that crowd has never had the experience of working for a company that turns a profit. The next major downturn will be interesting to watch...
And JavaScript is the only JVM-alternative to take seriously at all. Hype trains come and go for Rust, .NET Core, Go, etc. But they never really gain serious traction beyond a non-Java niche area, and/or devolve into endless arguments about generics or whatever.
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...) [1] 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.
[1]: https://snyk.io/blog/top-ten-docker-images-contain-over-8000...
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.
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.
mentioning javascript or webassembly is also a bit strange and would seem to demonstrate some kind of misunderstanding.
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.
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.
Nobody seriously uses webassembly outside of the web broswer.
So much for hyperbole.
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.
> LLVM and webassembly are eating JVM's cake, and a multitude of languages like Kotlin, C#, Go, Rust and even Javascript and Python are chipping away at Java's market share.
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.
> 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
- 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.
Was hoping that Kotlin+Spring could be a good alternative to GoLang for realtime apps, but haven't tried it yet.
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.
Where I am (geographically, company wise and ecosystem) Java and the Java ecosystem are very much thriving.
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.
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.
https://developer.android.com/guide/components/fundamentals?...
"Android apps can be written using Kotlin, Java, and C++ languages. "
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.
The only languages that are used more currently are Python and Javascript.
https://medium.com/memory-leak/pagerduty-s-1-analysis-an-ipo...
Zoom - a tiny net income of 7.6 million
https://www.cnbc.com/2019/03/22/video-conferencing-company-z...
Slack - losing money.
https://www.reuters.com/article/us-slack-ipo-idUSKCN1S21FD
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.
Java/.NET/Python ecosystems tend to be more professional with this regards. JavaScript catches up but is not completely there yet (you can see this with the amount of repositories who add licenses in 2016/2017 timeframe, years after creation).
Hence, same amount of code, much more work (it is a magnitude).
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?
At least it would be if Oracle wasn't trying to squeeze it dry.
Guess what, if you like typescript, you'll love Kotlin. It's a much cleaner language, just as expressive, and it has a whole range of things that typescript simply can't do or that it simply does better/more elegantly because typescript is stuck preserving compatibility with javascript and all it's weirdness. MS has done a wonderful job of shoving a lot of that under the carpet with typescript but fundamentally types are optional because all javascript has to be valid typescript and therefore it has to also allow all the silly hacks, misguided features, and other cruft that javascript people have been coming up with for the past decades.
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.
Right now WASM already allows lots of languages to be used for just about anything that people currently do with javascript and typescript in browsers or in the node.js ecosystem. As this becomes more mature, people are inevitably going to change the ecosystem. This is already happening. E.g. Rust is being used for many low level npms for a few years now. However people have also been developing frameworks and libraries in Rust that work around/replace that ecosystem entirely. For a Rust person dealing with crates is preferable to dealing with npms, webpack and all the other stuff that is used in that ecosystem. So, they are fixing that. The goal there is to run pure rust in wasm in the browser or on v8 with 0 npms pulled in or used during the build process.
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.
So, I agree things are changing but I'd say the node.js/browser landsace is changing as well and will not involve a whole lot of javascript/typescript for people coming from the JVM or other ecosystems.
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.
Not in any industry I know.
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.
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.
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.
It is true that for a short period of time, somewhere between 2002 and 2005, Java was more dominant than it is today, but that was a fluke. More "scripty" runtimes and languages were usually more successful in the "smallish software" domain. In 1995-2002 that was VB (and others); now it's Python. Also, there has been some decline in all languages due to the ubiquity of JavaScript on the browser, but Java did not suffer more than others. Maybe less so.
> 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.
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.
I've no love for Oracle, but the amount of uninformed comments here is scary.
Now THAT is leadership I can follow. So, uh... you hiring?
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
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.
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).
[1]: https://jdk.java.net/jpackage/
[2]: 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.
And I think Java is more alive then Delphi, at least no one is setting up a site like http://www.isdelphidead.com/ :D
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.
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.
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.
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.
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.
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 [0]. Has been for several years. I guess there is at least some Java there. Unless you don't consider Office "core".
[0] https://www.microsoft.com/en-us/mobileapps?activetab=pivot_1...
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.
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.
https://developer.ibm.com/javasdk/support/commercial-licensi...
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.
Yeah, Google thought the same
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...
So Oracle's attitude to OpenJDK and the possibility that it cuts back on development is a likely factor for people considering the platform.
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.
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.
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.
[0] http://business-review.eu/news/pm-ciolos-future-of-constanta...
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.
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.
Edit: Ukraine.
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 :)
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.
Are you talking about those labor laws, which require truckers driving in Germany to be paid German minimum wage? Totally unprofitable.
Not sure what they were thinking with such a policy. Unanimity is something you can have at the village level.
If a EU state refuses to do a thing, that's basically it.
https://piie.com/blogs/realtime-economic-issues-watch/france...
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!!").
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."
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...
;)
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.
But it was a lot of time wasted:
Apache Harmony/Java
LibreOffice/OpenOffice
MariaDB/MySQL
Jenkins/Hudson
now Eclipse/Java
Right now, they are in sales hurry mode, calling at all occasions technical contacts each time you create a new account to download something on their web site...
...
https://cloud.oracle.com/containers/kubernetes-engine
...
In O/WebLogic, javax.* imports are by default private.
Open9J vs Graal
https://blogs.eclipse.org/post/mike-milinkovich/update-jakar...
Note: Oracle ECM, WebCenter Content has no simple Virtual Document solution.
WORA was never perfect, I would be surprised if there was even a single JRE release that didn't note a breaking change in its release notes. So vendors should have a process to update their releases just for that already in place.
> The future is unclear because Oracle already started a blocking politics at the Eclipse Foundation’s board, where Oracle has a seat, and where unanimous decisions are needed.
They have no rules to out board members acting in bad faith?
Edit: as to the reference to the last part of your comment, I have only been using what I knew to do the job I needed, I'm not a full time coder so I can't search the latest and greatest, another reason I picked this thread to ask :-)
And a proper story for something similar to Swing, not even considering JavaFX here. There is Xamarin, but again, the platforms with Java compilers available.
And I am stating this as someone that works daily within .NET eco-system.
And I guess for you .NETduino doesn't count for .NET devs, because it isn't .NET as defined by specification.
Today your server is x64 and it's running Linux. Your client is a browser.
And plenty more.
It is not that is impossible to have them as .NET deployment target, just that right now, those industries don't care about it.
Now Cobol, there's a much better bet, because Oracle can't sabotage it and audit everyone using it to make a few bars of silver!
Outside HN bubble most companies are perfectly fine with its management.
In case you missed it, modern COBOL compilers, outside mainframes, target JVM and CLR as deployment targets.
And no one is jumping in into COBOL development courses.
¹ The story is Steve Balmer was very anti-open source and forbade most interop or support for Linux, so this only could start changing when he left in 2014.
² You always had Mono with is why Unity and GNOME could also use C#, but is was very niche outside of Unity.
Which still leaves me a tad confused, is the anger because c# is a propriety windows tech(I'm guessing from the responses - which btw thank you to the threads I don't respond to).
Things aren't "changing," they've changed already. .NET Core is more than stable enough to run on any major platform and has been for quite some time now. C#--especially the upcoming C# 8.0 with the new nullable reference types feature--is an excellent language that can handle anything you want to throw at it.
The hate comes from ignorance, pure and simple.
https://github.com/dotnet/cli/issues/3093
The data is supposedly anonymized, except sometimes (according to comments on above-mentioned issue) when it accidentally isn't. You can also disable it, except when the disabling mechanism is accidentally broken.
TLDR; Price was a big factor which only large companies could afford. Not everyone can be employed by large companies. This had a lot of secondary effects.
Back when I was learning code(early high school) it was qbasic, HTML and c++, once I was able to afford a cheap pc I learnt via scripting (for Ultima online free servers).
I guess it's a big difference between learning for a job and learning for fun(pre-job that is). Which it seems I have kept on the years after haha.
Thank you again :-)
I'm thinking perhaps I should take some primers on non windows coding, and the advantages there of. Anyone have any good beginners links (note I'm fairly adept at Java, .net, vb and such, just trying to find a good place - and reason - to learn something cross platform).
Pre:edit: I don't mean this to sound argumentative about platforms, just honestly looking for some good resources (and I'm fairly time constrained)
Either way, both are quite un-windows, and un-corporate, but used all over the place. I'm suggesting them because, as someone who hasn't been part of any 'corporate' ecosystem since Delphi (to the point where even Java is 'too corporate'), I've been meaning to dip into the 'less sexy' world of Java/Delphi/C#/.Net/VB just to find out what it's like.
I'd very much like to hear your thoughts if you decide to check out this side of the fence, so by all means do so and write a blog post about it (or send me an email and perhaps we could write a dual-author post about our respective experiences someday!).
I may have some automation things I can do at my work soon, I might write up a blog about that, interesting idea! (Queue the 'if I only had more time' chant haha)
The downside is that it's not a very mainstream language. The upside is that it's arguable one of the more 'unique' languages out there (alongside Erlang), and IMO just really fun.
Complaining about it is often brutally punished by more downvotes though, so beware!
I only write C# despite having tried a few other languages (F#, Python, Java, Elixir, etc) because I'm not prepared to invest the time in languages until the tooling is as productive for me as C#. I'm more interested in what I want to do than how to write it. Both C# and Java remain big in the market here in the UK and I believe in the US; you just might not find work at the cutting edge with them.
For me, my short term memory is too bad for languages without types and autocomplete on the level of JetBrains products.
I feel like C# specifically (I don't have any real Java experience) is a lot lower on boilerplate now and I can usually get a working prototype of something together in a day or two and it allows me to target games, desktop, mobile, Web, ML, etc. But it's not to everyone's taste and that's fine.
JVM is still the best platform for any type of back-end application. It has the widest array of libraries, is proven to run on any type of hardware and comes standard on every OS and every cloud instance.
.Net is a great platform and all but it still hasn't done enough to really merit switching teams. Especially when you have Scala, Kotlin, Clojure etc to pick from.
But even if it does come “standard” on Linux. How many people actually count on the installed instances of runtimes and don’t install their own tested versions?
For instance, Python 2.7 comes on a Windows EC2 AWS instance.
I brought up Python as an example of a language that does come “standard” on “cloud instances”(and MacOS) but it’s an older version. Most people wouldn’t count on the bundled version of either.
We run nearly 2x more Windows Server instances than the next largest cloud provider, according to an IDC report.
Could you recommend good tutorials/manuals for developers with Java experience to learn C# (preferably without having to install Windows)?
On OSX, just use Visual Studio Code and .NET Core: https://weblogs.asp.net/dixin/c-8-0-in-depth-setup-c-8-0-and...
Disclosure: I work for Pivotal, we sponsor Spring.
I think the problem is Oracle's a-hole, in this situation.
Do not work for, do business with, depend on, or attempt to negotiate with the lawnmower, either!
https://www.youtube.com/watch?v=-zRN7XLCRhc
"As you know people, as you learn about things, you realize that these generalizations we have are, virtually to a generalization, false. Well, except for this one, as it turns out. What you think of Oracle, is even truer than you think it is. There has been no entity in human history with less complexity or nuance to it than Oracle. And I gotta say, as someone who has seen that complexity for my entire life, it's very hard to get used to that idea. It's like, 'surely this is more complicated!' but it's like: Wow, this is really simple! This company is very straightforward, in its defense. This company is about one man, his alter-ego, and what he wants to inflict upon humanity -- that's it! ...Ship mediocrity, inflict misery, lie our asses off, screw our customers, and make a whole shitload of money. Yeah... you talk to Oracle, it's like, 'no, we don't fucking make dreams happen -- we make money!' ...You need to think of Larry Ellison the way you think of a lawnmower. You don't anthropomorphize your lawnmower, the lawnmower just mows the lawn, you stick your hand in there and it'll chop it off, the end. You don't think 'oh, the lawnmower hates me' -- lawnmower doesn't give a shit about you, lawnmower can't hate you. Don't anthropomorphize the lawnmower. Don't fall into that trap about Oracle." -- Bryan Cantrill
There is only 1 popular language released since 2009 that targets JVM: Kotlin. All other target JS, their own bytecode or LLVM: Go, Rust, Dart, Elixer, Julia, Typescript, Swift.
This is a significant difference from 2003-2009 languages which all targeted JVM unless they were Microsofts: Groovy, Scala and Clojure.
How will these languages ever catch up with innovations like JavaBeans, Java Server Pages, and Java Server Faces?
1994? We still depend on tons of features, infrastructure, and techniques developed in the 60s and 70s.
Heck, most of what the JS world considers "state of the art" was already available in 70s languages.
As for the snark, first, the innovations the parents refers to is not "JavaBeans, Java Server Pages, and Java Server Faces", but stuff like rock-solid GCs, tooling, and so on.
And even techniques on the level of "JavaBeans, Java Server Pages, and Java Server Faces" are only going to be resold to several other languages. The JS worlds keeps on piling Java (or older) techniques and syntax.
Heck, they just re-invented the "private instance variables" (with an ugly hash syntax) on their latest efforts...
In fact, Java is so far behind C# with true Generics, LINQ - not the syntax the entire linq expressions -> expression trees -> runtime providers that can parse the trees and translate it to a destination syntax, etc. it’s laughable. Can anyone say honestly that Oracle has been a good steward over Java or that it has improved as fast as any modern popular language?
And the “tooling” around Java is the main reason that when I had a choice between C# and Java in the mid 2000s, I chose C#. Heck, the Visual Studio 97 was better than most Java tooling is today.
Yeah I played around with the early VB like Java IDEs like JBuildsr. Java’s IDE’s have never been strong points. Neither have the XML is king mindset.
All in all, The JVM is leading not only CLR on all fronts, but pretty much any other runtime. C# compilers and GCs are at least a decade behind Java's. You may argue on how important those things are compared to other tradeoffs, but those are the areas where Java was designed to compete at, and those are the areas where it is leading by a wide margin.
Edit: when Java was first introduced, its original designers stated their intention to construct a conservative, low-innovation frontend language, and a high-innovation runtime. In many respects, .NET has the opposite design. You may prefer one or the other and that's OK, but it makes comparing the two on any single aspect very problematic. Of course Java won't keep up on language innovation compared to .NET, and of course .NET won't keep up with Java on runtime innovation -- they each choose to get their competitive advantage in different aspects.
There are other languages that support CLR besides C# and they manage to “work around” generics.
All in all, The JVM is leading not only CLR on all fronts, but pretty much any other runtime. C# compilers and GCs are at least a decade behind Java's. You may argue on how important those things are compared to other tradeoffs, but those are the areas where Java was designed to compete at, and those are the areas where it is leading by a wide margin.
By what measurement? Have any specifics?
https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
https://www.degruyter.com/downloadpdf/j/acss.2018.23.issue-1...
And Java still doesn’t have anything equivalent to LINQ.
Regarding measurements: https://www.techempower.com/benchmarks/
Also, I am very interested to see new benchmark results once AOT SubstrateVM will be more widely adopted in JVM community. Demo: https://youtu.be/MN6jNIwl2FQ?t=1136
RedHat already working on a framework which takes full benefit of that: https://quarkus.io/
All in all, with upcoming value types, SubstrateVM adoption, fibers and nice languages improvements like records, future is brighter than ever for Java.
Edit. Regarding JVM vs CLR https://news.ycombinator.com/item?id=15955685
What exactly in BoyRobot777's comment (which I said I agree to) calls for benchmarks to be proved?
Nowhere are benchmark results taken for granted as faster or anything. Grandparent says: "Also, I am very interested to see new benchmark results once AOT SubstrateVM will be more widely adopted in JVM community."
I simply agree with the statement made: "All in all, with upcoming value types, SubstrateVM adoption, fibers and nice languages improvements like records, future is brighter than ever for Java." -- so, I responded to your comment which seemed to be skeptic of that (and accusing the parent of working for Oracle).
If you were referring to someone else and some other comment, why post your comment as a response directly under BoyRobot777?
https://benchmarksgame-team.pages.debian.net/benchmarksgame/...
In some cases, the faster program with OpenJDK does not seem to be the faster program with Substrate VM.
In other cases, the faster program with OpenJDK seems to fail with Substrate VM - maybe it needs something different on the command line?
Otherwise, the same program is shown for both.
VS97 better than Eclipse, without additional plugins?
Alternative universe.
And before you say there are non Linux mainframes. Yeah I know - another dead end technology along with .Net framework and C++/CLI.
And that not forgetting that VSCode doesn't do even 10% of what Eclipse or VS do.
Actually Eclipse used a native GUI toolkit (Standard Widget Toolkit), backed by native widgets plus a few custom draw ones (like 100% native apps also resort to for custom stuff).
So, if it smelled "non Native", it wasn't because of Java.
What indeed was, were some penalties of the GC kicking in (unrelated to UI widgets). Still nothing a .NET app wouldn't have (and I've used SharpDevelop as well back in the day).
You should learn the history of tools that you so agressively argue for.
It's not "true Generics" it's a different generics tradeoff (tradeoff not just for backwards compatibility sake).
And LINQ is not that important in the grand scheme of things. Are Haskell, CL, or Smalltak also "far behind" C# for not having LINQ? It's just another feature. You can most of the same things with a fluent interface, streams, and functional composition, and without straying off the regular syntax of the language into a LINQ DSL.
Besides, last time I've checked, Java still has the performance edge over C#.
A simple LINQ expression can be passed around an translated on the fly by various providers. The same expressions can be translated to Sql, Mongo, regular IL, etc.
And no LINQ isn’t just syntax.
Last time I checked neither SmallTalk or Haskell are taking the world by storm...
Haven’t Java proponents been claiming Java was going to be fast for over two decades?
The same can happen with a simple abstract expression in native syntax (in fact tons of tools in all languages that do that). LINQ just gives you a standardized built-in DSL for that -- but nothing you can't build yourself with the language's main syntax. Heck, LISPs have been able to do the same shit for half a century.
>Last time I checked neither SmallTalk or Haskell are taking the world by storm...
Yes, they only made a dent with the smarter developers.
Still, C# isn't taking the Linux world by storm either, and it's nearly irrelevant on mobile too, so there's that.
>Haven’t Java proponents been claiming Java was going to be fast for over two decades?
Java has been fast for over 15 years now, so not sure what you're getting at here. Faster than C# as well, so there's that too.
Okay so where is it? What language besides some .Net based languages allows me to take the same query expression and have it interpreted differently based on the provider and allows me to switch out an RDMS or Mongo for example without changing the calling code?half a century ago I wasn’t even born (about 5 years later). Saying Lisp did it 50 years ago is about like Mac users bragging in 2019 that they had a GUI before PCs.
As far as LISP, what are the job opportunities like in 2019?
Yes, they only made a dent with the smarter developers.
Can I make money with those languages?
Java has been fast for over 15 years now, so not sure what you're getting at here. Faster than C# as well, so there's that too.
Benchmarks?
But seeing that I like the optionality of working for any of the dozens of companies that have job openings continuously for JavaScript, C#, C, C++, and even Python, I think I’ll stick with those....
https://benchmarksgame-team.pages.debian.net/benchmarksgame/... https://www.techempower.com/benchmarks/#section=data-r17&hw=...
Disclaimers:
Microsoft employee
Nazgûl
as far as ides go, i vastly prefer intellij to visual studio.
https://docs.microsoft.com/en-us/dotnet/csharp/programming-g...
Types. Clumsy stand-ins for synchronous behavior like async/await. Transaction managers. Threads. I'd add immutability and functional programming but really that's rediscovering technology from the midcentury.
We really are doomed to repeat history.
Not to mention the fact that WP failed on the market, while Android strives.
Even Google has only made less than $30 billion in profit on Android....(https://www.theverge.com/2016/1/21/10810834/android-generate...)
But yes there are cross platform GUIs for .Net.
https://www.hanselman.com/blog/CrossplatformGUIsWithOpenSour...
https://github.com/AvaloniaUI/Avalonia/blob/master/readme.md
Yeah they probably suck and don’t look are behave like native apps - but no cross platform framework does.
Running Electron apps anywhere is like running iTunes on Windows.
Again, I am not saying that other platforms may not have advantages elsewhere (e.g. lower memory footprint, no warmup), but when it comes to compilation, GC and observability, Java is about a whole technological generation ahead.
Lots of people on HN would probably be shocked at how many Cobol apps are still up and running and actively maintained.
And i dont see a problem if ots working and there are people willing to maintain it if needed.
Swift is iOS/Apple specific, at least in usage. But mobile is dominated by Android, which is moving towards Kotlin. So Kotlin is already huge right there, much larger than Dart or Elixir and probably larger than Swift, soon if not already.
Meanwhile Go would probably benefit from targeting the JVM, or at least having the option. As is, it's stuck in its own isolated world with low quality tools, libraries and GCs.
At any rate number of languages is an odd metric. Kotlin by itself is a good enough language to probably kill off most attempts to compete with it over the next 5-10 years or so on the JVM, outside of research languages. Does the JVM really need dozens of languages?
Look at new languages of 1990-2000: Haskell, Python, VB, Lua, R, Ruby, Java, Delphi, JS, PHP, Rebol. 4/11 are mostly irrelevant now. 4/11 are important niche languages. 3/11: Python, Java, and JS are dominant players.
1990-2000 might be special because of a massive shift toward IT systems in general, but it might not be and be an indication of languages lifecycle.
"Go needs a native library for ___" is used as an opportunity for safely tedious résumé-driven development. On the JVM you'd have to look for an unsolved problem which is probably harder.
You are going to upset all the Clojure fans with that :-)
But what would be the point in more JVM languages? I feel like a big factor in that is just that every niche is well filled with mature languages now.
I guess then openj9, coretto etc would be more appealing but soon enough it feels like there will not be Java left - since those distributions don’t/can’t call themselves java unless oracle allows them to... and I’m not sure why they would - as apparent by OpenJ9 not being called java.
So is it Java EE is dead, soon followed by Java?
Am I mistaken about any of this?
You can't revoke a GPL license unless the licensee violated the GPL. Additionally, the GPL has this nifty "Automatic Licensing of Downstream Recipients" clause. In other words, if you put some code out there under the GPL, there is no way for you to un-GPL that particular code. Even if you bring out a new version of it that isn't GPL any more, the old version still is. (This is quite important to make copyleft work)
Probably true for GPLv3, because GPLv3 actually says that it is irrevocable. OpenJDK is under GPLv2, which does not say anything about revocation. It is an open question whether or not GPLv2 can be revoked.
> Additionally, the GPL has this nifty "Automatic Licensing of Downstream Recipients" clause. In other words, if you put some code out there under the GPL, there is no way for you to un-GPL that particular code
That clause actually makes it more likely that GPLv2 could be at least partly revoked, because the full text is:
> Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor [...]
It's that "original licensor" part that makes partial revocation a possibility.
What if the original licensor simply says that they are no longer granting new licenses? Everyone who already has a license can continue to use the software, but new recipients no longer can get a license? (That's what I meant by "partly revoked" earlier--existing copies remain OK, but the spread of them, or derivative works of them, is stopped).
What happens then is a mess. Even figuring out who has standing to sue to try to make license issuing continue is a mess, getting into such questions as whether the unspecified future downstream recipients of copies are intentional beneficiaries or incidental beneficiaries of the contract. (And then there is the whole "is this a license or a contract?" issue which is very murky).
BTW, even licenses that do say they are irrevocable might suffer from this partial revocation danger if downstream recipients must get their license from the original licensor.
The fix to this is to allow sublicensing in your license. Make your license irrevocable (so that once someone gets a licensed copy it cannot be taken back), and allow sublicensing so that when someone distributes a copy the license for that copy comes from them rather than you. Then if you stop issuing new licenses there is no problem, because people get their licenses from their distributor.
If you don't want distributors to be able to give their downstream less rights than you gave them by only sublicensing a subset of those rights, you can put in the license a clause that requires distributors to sublicense all the rights.
A nice side effect of the sublicensing approach is distributors have standing to sue for license violations. Under the GPL-type approach, where all licenses are directly from the original licensor, only the original licensor can sue to enforce the license. Under the sublicensing approach, both the original licensor can sue (alleging copyright infringement) and the distributor can sue (alleging violation of the license).
What enterprise customers want is certainty. Given the choice between "Java by Oracle" and "Basically still Java by Literally Every Other Enterprise Software Vendor", they will pick the latter in a heartbeat.
It would be chaotic and disruptive, but once the dust settled Oracle would (again) be holding the fizzle instead of the bang. That's how we got Jenkins out of Hudson, which has an unrivalled penetration of enterprise.
Disclosure: I work for Pivotal, we sponsor Spring and have a deep interest in the evolution of the OpenJDK. This is of course personal speculation.
If their business strategy is more nuanced than "cut your own throat in the hope someone else's is behind it", then political jiggery-pokery like Java EE is probably about as far as they would want to go.
Solaris: So bad I left the company.
I kept a couple Type 7 keyboards.
Oracle actually is what techies used to think Microsoft was. Fortunately for all of us, they never managed to escape their niche.
I'm a bit surprised by this given that IBM is a long time license holder and I can remember JavaOne keynotes where Oracle celebrated IBM "joining" OpenJDK.
> Java Compatibility Kit (JCK) / TCK Compliance
> At this stage the London Jamocha Community CIC (aka LJC) has not been able to reach an agreement with Oracle to use the Java SE Technology Compatibility Kit (TCK) under the terms of the OpenJDK Community TCK License Agreement (OCTLA).
> We will continue to work with Oracle on this matter.
> All AdoptOpenJDK binaries are tested with our suite of functional, integration, stress, and performance tests, including real workloads from popular languages and applications. We are very confident in the quality of our builds.
The Hudson/Jenkins and OpenOffice/LibreOffice fails were two of the quickest and most obvious. Java EE seems like the same sort of thing, but much bigger and in slow motion.
Eclipse will almost surely fork the namespace to something jakarta related.
What does Eclipse foundation have to do with Java EE? Does this news sabotage their use of OpenJ9 somehow?
Android may get infected one day which is worrisome.
What about MySQL.
Google should have bought Sun in the first place, unfortunately all they could see is its searching with ads.
Google better buy Canonical now before Oracle or other evils do it.
Companies that just repackage Oracle's work don't count.
Several companies outside Oracle already employ JDK folks (IBM, for example). I expect that increasingly our partners and competitors will do the same.
IBM does minor contributions to Java, and mainly follows the language specification non their own JVMs.
IBM was also the only company that bothered to make an initial proposal to acquire Sun, but withdrew it after Oracle's.
Oracle is not owed indefinite fealty by folks locked into serfdom. Everyone working on the OpenJDK is entitled to work on it with someone else paying them.
Current contributions are besides the point, when Netscape open-sourced their browser, the Mozilla Foundation didn't even exist prior to that moment. Java without Oracle is viable - I dare say a "Java Foundation" would be an improvement in terms of community involvement, and there are candidate companies with vested interests (and excellent engineers) to join one should it ever come into existence.
Oracle has a history of not being great at dealing with the wider open source community, not just related to Java: look at how it handled Open Office.
Oracle is playing this not-so-good role, that Microsoft used to play, under Steve Ballmer, monopolistic, and evil.
I found Java hideous, the gratuitous OOP taken to extremes put me off. Spring came in, and you had class names that were a hundred characters long - your actual line of code was shorter than the class name. The problem with Java (and every programming language has its own achilles heel) - is everything has be class oriented - however much you try to bolt on, on top of that , to make it seem not so. . Java kills creativity, and expressiveness in software by its bloated syntax and OOP. We took up Java because at the time alternatives were few, but now its on its way being the new Cobol - this will sound ridiculous if you still are fully or partially, inside its bubble
I ran from our Java shop. My software architect mocked me "you'll be back in 6 months" - instead, he quit the Java shop and stuck his head outside of the Java bubble and realized there was life outside.
Oracle made a clear business decision and will go forward squeeze every single dollar they possible can thru legal means, not from innovation or services.
I read the board notes. This appears to be a disagreement about trademarks and compatibility licensing. To be called "Java" you need to be compatible with the Java specs, and also have a trademark license. That's how they enforce that the platform can be reimplemented but it's seamless to users. Seems Eclipse Foundation doesn't like that.
I think Eclipse Foundation is f*cked, not by Oracle but its bureaucracy, and inability to reinvent itself.
Java has reflection, so classes can be loaded by name at runtime (and the name might have come from a XML file somewhere, or be the result of string concatenation); also, the name of a class can be easily obtained so code can depend on that (for instance, a logging configuration XML file). That's before considering that some libraries generate classes on the fly (by dynamically generating and loading bytecode, which include class names).
https://visualstudiomagazine.com/articles/2018/10/10/net-key...
The presenters said it will still be released with Windows, as it's a component of Windows itself, so it will be supported for the lifetime of Windows. Microsoft is just going to be making highly compatible targeted improvements to .NET Framework after version 4.
So you shouldn't feel pressured to move off .NET Framework, but just know that it's going to be much more highly targeted compatible fixes kind of going forward and we recommend that all new development that you start on .NET is on .NET Core if possible
That doesn't change the fact that many libs don't run on .NET Core, or outside Windows for that matter, specially the ones that depend on C++/CLI.
When Microsoft mentions thier “strategies” for various .Net languages, you notice which one is missing?
https://devblogs.microsoft.com/dotnet/the-net-language-strat...
I’m very much a .Net fan but it makes about as much since as a developer to tie your fate to .Net framework or Windows only development in general in 2019 as it did for all of the companies not to move from VB6 after .Net was the future.
Even Azure host more Linux VMs than Windows.
I even use C, if that is what customers want to have done for them.
Those Azure Linux VMs happen to run on Hyper-V hypervisors.
I would rather not end up like old VB6 developers trying to find a job in 2008.
I know a developer who worked in a company for 20 years got laid off and complained about “ageism” because no one would hire him and all of his experience in 2017 was in Windows Forms and Web Forms.
Yes, I’ve been there done that too. Mid 2008, I had been at a company doing C++/MFC and VB6 and felt stuck and unhireable. I was in my mod 30s then. I wouldn’t dare tie myself to a stack that even the vendor is saying is being deprecated in my mid 40s.
I’ve also left a job before when the .Net product I was hired for couldn’t find a market and they wanted everyone to switch and do PHP. All 14 developers left within six months. We all knew the danger of working in old tech.
Selling services is so much more than tech stacks.
Which yeah, might have been the point, but hardly a picture of the global job market.
But if the post is concerning Java wouldn’t it be kinda of silly to bring up C++, C, Python, and JavaScript/TypeScript?
What I did say that it was foolish from a long term career perspective not to see where the market is going and stick with a platform that even the vendor said is maintenance mode as far as .Net Framework and Windows Forms - or even Windows only development period. If I did that, I would still be writing C++/MFC apps and VB6.
My animus toward Java is more that Oracle is a horrible steward of the platform and before that Sun was.
It is also foolish to have senior devs focus on selling themselves as Language X dev, without any other skill to offer.
I would rather have a VB 6 guy on the team that can do proper software architecture design, speaks fluently two European languages across our customer sites and is able weight what really matters across the delivery pipeline, than someone that knows all the cool and latest of .NET Core, without anything else as added value.
Because again, that person has more than one hat to wear, instead of being stuck in coding silo.
With the few unsolicited offers I’ve gotten to work for consulting companies just through my network - the travel requirements just won’t work for me right now - I kinda of know the requirements that most consulting companies are looking for.
Few of them are looking to do desktop Windows applications. Yeah some are looking for ways to run legacy Windows applications “in the cloud”, but most are looking for a way to convert them to the web and I haven’t come across any that actually want to start new greenfield desktop applications or for that matter .Net framework applications. Sadly, most aren’t even looking at .Net Core. Hopefully that will change.
Don’t get me wrong, until I chopped everything off of my resume I did before 2008, I did get a few recruiters who were looking for those older technologies, but why would I waste my time gaining experience in older technogies when there is a ridiculous amount of money to be made as a “digital transformation consultant” or by knowing cloud infrastructure and how to architect on top of it (pretty good at it), and the entire Docker ecosystem (learning it)
C++/CLI was just one example.
ODP.NET, EF 6 UI designers, WCF, WebForms, Forms/WPF UI designers [0], and plenty of component libraries are still not .NET Core compatible.
[0] - It remains to be seen if those designers will be shown at BUILD.
The chances are that either (the hypothetical) you would either want to leave the company that is still focused on those technologies or the company would leave you long before your career is over. The last thing a person should want is to have on their resume in two years that their experience is any of those technologies.
There are still companies today using Visual Studio 2008 to support legacy ruggedized Windows CE devices. I have five years of experience with them and still get calls to develop for them today. I don’t go near those types of jobs.
The only ones onsite have more to offer than programming language knowlege, like domain business, architecture design, foreign languages.
Employees that want to stay employable should focus on being T-shaped ones.
.NET Standard is the compatibility[1] you talk about, but seem to know nothing about.
[1] https://docs.microsoft.com/en-us/dotnet/standard/net-standar...
.NET Framework is stuck at .NET Standard 2.0.
--Flannery O'Conor.
Java EE and CORBA had to go. It didn't matter who pulled the plug.
Because as a developer I am exclusively writing in a language that sits on top of the JVM. I don't ever need to write in the language that the JVM itself written in.
Additionally none of their mobile apps is written in Python.
Rather real world Fortran, C and C++ with Python glue code.
Just like Tcl, Ruby or whatever scripting language with the same glue code would get out of it.
Two languages to learn. Two languages to support. Two development environments. Two build tools. Two CI/CD pipelines. Two testing infrastructure. Two sets of code and security reviews.
Double the complexity and for what exactly ?
1) write everything in python because its easy and quick to do so.
2) its slow as.
3) abandon software and write it in something else, or, live on with slow ass software and blame python for being slow and rubbish forever more.
re-writing python in c is a hideously painful process, and its proven to be very unsuccessful practically.
Writing new code in c/c++/whatever and exposing a python api is where successful projects like numpy and tensorflow live.
python is very good at what it is, but no one is ever going to go and rewrite your python code in c to make it faster; its just going to be slow forever.
1) write everything in python
2) yeah, the performance here is good enough so ship it
3) there is no 3
There are very few situations where performance is going to be an issue for you where there is not an existing C module solution that will solve the problem for you. The tired old 'python is slow' trope is getting more and more irrelevant every day. There are other aspects of the language that may make it a mediocre solution to the problem at hand, but out in the real world most people are simply getting the job done with python.
You can ship your own clone of Reddit next week, with blazingly fast code, running on two tiny VMs and supporting more load than Reddit, but would it be successful?
It's a miracle they shipped it at all.
https://hackernoon.com/which-is-the-fastest-version-of-pytho... has a benchmark that includes 3.7.
If there are performance issues, rewriting part of a Python application in C is much less likely than refactoring it, without using other languages, to use an existing high performance library.
Application-specific Python extensions are usually intended to allow scripting of the application, with little concern for Python performance (which is the same as doing the same thing without scripting).
New foreign language Python extensions are usually found in new Python libraries, to make existing proven C or C++ libraries available to Python applications or to improve on existing Python libraries.
We certainly shipped (using django) and it was certainly slow, and remains a painfully slow very successful enterprise app.
I’m not arguing that the slowness is deal breaking, but it is slow, and it does, routinely, break the SLAs its supposed to meet.
So... unusably slow? no.
...but slow? yes, it really is.
imo. your milage may vary. /shrug
With C being an incredibly difficult language to get right.
So difficult that languages like Go and Rust were invented.
In almost 20 years, I did it once. And it wasn't really needed, but I wanted to know how much it'd be improved.
Much more likely is using a library like NumPy where someone else has done that C performance work for you.
Plus in 2019, it's much cheaper to design for horizontal scale and spin up a few more instances.
That's why Sun's "100% Pure Java TM" campaign and negligent support of integrating Java with native code was so misguided.
Software development is a process. You implement your MVP in one language, then measure its performance with real customers, then incrementally rewrite the hotspots and plug in optimized native libraries as necessary. The language ecosystem and culture should support and encourage that (like C#, Python, TCL and Lua do in spades), not fight against it and condemn you as a mongrel infidel if you dare to miscegenate with other languages.
Sun made a grave mistake with their linguistic supremacist "100% Pure Java TM" propaganda campaign: you should rewrite all of your code in Java instead of expecting Sun to provide you with easy seamless interoperability with existing languages and libraries.
So Sun's JNI and applet web browser integration languished while Microsoft integrated COM and CLR and P/Invoke for seamless interoperability with the web browser and other languages like C++ into Java and CLR. And the insipid influence of "100% Pure Java TM" persists even today (have fun using Android NDK).
Sun also had an unholy obsession with code generation, since their attitude was to breed as much "100% Pure Java TM" Code into the world as possible (see AspectJ, JAXB, etc). While C# took a much better approach of supporting code annotation and metadata and reflection and bytecode generation at runtime so you didn't actually have to generate and compile a huge pile of boilerplate source code (see P/Invoke).
https://docs.microsoft.com/en-us/cpp/dotnet/how-to-call-nati...
And of course Oracle is delighted to continue pushing "100% Pure Java TM":
https://www.oracle.com/technetwork/java/100percentpurejavaco...
>[...] 100% Pure Java, JavaStar, JavaPureCheck, [...] JavaSpin, HotJava, The Network Is The Computer, and JavaStation are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and certain other countries.
Registering purity as your trademark and insisting that all of your users rewrite every bit of their existing legacy code in your pure language, and never use or talk to any other languages ever again, always seemed like separatist linguistic supremacy to me.
Apparently, C#'s P/Invoke is an evil impure cross-language conspiracy to dilute our linguistic purity and sap our precious bodily fluids, breeding caravans of mongrel coders who will swarm across our open borders and steal our jobs. That's why JNI and NDK are only used by unpatriotic second class citizens with divided loyalties, so they don't deserve to be well supported or maintained.
https://www.zdnet.com/article/100-pure-java-initiative-wins-...
>"Keep Java pure" is the message behind Sun Microsystems' 100% Pure Java initiative which has already won support from 100 developers but will lock out programs such as Visual J++. The move is an attempt on behalf of the Californian firm to maintain integrity of Java code and build awareness.
https://www.cnet.com/news/100-pure-java-watered-down/
>Viewers of cable news network MSNBC may recently have seen a commercial for Sun Microsystems (SUNW) in which a man tells a priest that he's been thinking "pure" thoughts. When the beatific man exits the confessional, he passes a queue of anxious programmers--one wearing a Visual Basic shirt--ready to admit their sins.
>The commercial, which touts Sun's "100 percent pure Java" campaign, is not your usual television ad. But Sun has in many ways shown an almost religious determination to spread the gospel of Java to the far reaches of the globe, even sponsoring a worldwide educational tour for programmers with the support of Netscape Communications, IBM, and Novell.