Oracle Java police start knocking on Fortune 200's doors for first time
theregister.com
theregister.com
> [Oracle, as contrasted to Sun Microsystems] It's more like: "Ship mediocrity, inflict misery, lie our asses off, screw our customers, and make a whole shitload of money." [...]
> If you were to actually have a conversation with a bank--a friggin bank--[...]Whether you believe it or not, you will get a very societally-engaged answer. [...] You talk to Oracle, it's like "No, we don't fuckin' make dreams happen, we make money, that's what we do!" [...]
> Do not fall into the trap of anthropomorphizing [Oracle CEO] Larry Ellison. You need to think of Larry Ellison the way you think of a lawnmower. You don't anthropomorphize your lawnmower, the lawnmower just doesn't--like, 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.
-- Brian Cantrill: https://www.youtube.com/watch?v=-zRN7XLCRhc&t=35m32s
At least in the field of software, Oracle probably considers the proliferation of free software an enemy. But even then, Oracle mastered the art of obfuscating open interfaces and charging people money for support contracts. It's hard to choose any one thing that kills Oracle, but high-quality free software probably goes a long way towards forcing them to change.
> Or why is that a bad omen?
Oracle is a do-nothing company in the most literal sense. You can only have so many of them around before capitalism as a whole collapses under the weight of it's own incompetence.
Maybe this is true wrt their main product, I neither know nor care about it. The sooner it leaves this Earth, the better for all of us as far as I am concerned. But both OpenJDK (and Java generally) and MySQL have been on fire since they were acquired by Oracle. Compare the stagnation during the last few years under Sun with massive features that's been coming to both more recently:
https://dev.mysql.com/blog-archive/the-complete-list-of-new-...
Java got many shiny things, a few examples off the top of my head: an almost pauseless GC leagues ahead of all FOSS competition, modules, Go-style green threads, many language features like immutable records, ADTs, switch expressions, etc. Things like value types are on the horizon.
Oracle is by far the main developer of both the language and its most popular implementation. Adoptium and company mostly just take the source and repackage under their own brand.
Pretty hyperbolic. There's already a reply to your post that talks about what Oracle have done with Java, but rest assured that Oracle has and does employ armies of developers - as well as sales people and the rest of the big software ecosystem. Whether you like what they build is another thing - it's hard to get excited about boring gigantic ERP systems for example - but saying they don't do anything is absurd.
These days it's expected. Doing good isn't even in the discussion unless it's being cynically mocked. Evading taxes? That makes you smart...
Even being devoted to your work is conflated with being exploited by your employer, and with the way things are it's understandable.
I hope we see some idealism return to American industry. It'll take a reversal of the plundering of the middle class.
It seems that in the past things where somewhat different. The sole focus on maximizing shareholder value is something that happened quite recently. A lot of people trace that to Jack Welch who took over General Electric in the 80's
I highly recommend https://www.amazon.com/Man-Who-Broke-Capitalism-America_and/... if you are curious about it.The book documents well the transformation which gave us the modern version of US companies.
It kills me that Oracle killed OpenSolaris but then they saw the light with OpenJDK.
The Oracle EE JDK has some extra features which can be enabled (e.g. fancier G1 garbage collector, IIRC), and there's also GraalVM EE which provides an even faster runtime. Also worth noting GraalVM CE (Community Edition) which is pretty spectacular. Futamura Projection, anyone?
https://en.wikipedia.org/wiki/Partial_evaluation
(This is the badass future space tech part of Graal :)
That said, OpenJDK works totally fine for many cases.
My experience on lambda is with node and python, and I've always needed to pay for concurrency. Cold starts were 1-3s, which is not good enough for a web api
https://debijenkorf.tech/speed-up-application-launch-time-wi...
> The app went from starting in 463ms to a whopping 7ms, awesome!
> As you can see the memory usage went from 215.924kB to 18.104kB
Or for Lambdas (this result is reported by the GraalVM team):
> The same Lambda function with 3008 MB of memory that took 3.6 seconds to start with the JVM, started in under 100 milliseconds once compiled using GraalVM
https://aws.amazon.com/blogs/opensource/improving-developer-...
Native Image is a fully independent JVM and compiler implementation that was written from day one for startup time and memory footprint as the only goals that mattered. What it sacrifices to get that is some semantic compatibility. The big differences are:
- It compiles all code ahead of time. As machine code is much bigger than the equivalent bytecode, it uses a dead code ("tree shaking") analysis to only compile code that's statically reachable or declared via config files. It's like a mandatory WebPack or ProGuard step if you're familiar with those.
- It runs (some) class initializers at compile time, not startup time. So if you do something like "public static final Thread thread = ...." then you'll need to exclude that class from build-time init, including if it's in libraries etc.
- It snapshots the post-compile heap into the binary.
So this is changing the normal Java semantics and that means some apps won't run on native image without some up front work. It's not an entirely free capability. You have to "port" your app to it. Fortunately, because the startup and memory footprint wins are so huge and definitive the JVM ecosystem is rallying around this approach and making frameworks and such compatible with it. For instance if you use the latest versions of any of the modern Java web frameworks (Spring, Micronaut, Quarks, etc) then you can easily run a single build system target to get a Docker container with a native executable inside, that has those startup times you're seeing here.
At this point the startup time bottleneck for (compatible) Java apps has shifted to the kernel; the container infrastructure itself takes longer to start than the Java program does.
https://github.com/hydraulic-software/conveyor/discussions/6...
Gluon has a version of GraalVM that can compile JavaFX apps. They do indeed start impressively fast and use much less memory. It's still a road somewhat less travelled though. Someone also tried it with Compose but it didn't get further than a demo repo and a few comments on our Discord.
There are a few issues left to resolve:
1. General developer usability.
2. Native images aren't deterministic, which reduces the effectiveness of delta updates.
3. Native images can quickly get larger than the JVM+bytecode equivalent, as bytecode is quite compact compared to machine code. So you trade off startup time against download time.
The native code produced by native image compresses very well indeed. UPX makes the binaries much smaller. But then you're hurting startup time, so it's not a good trade.
The best way would be to heavily compress downloads, then keep the programs uncompressed on disk. Unfortunately most download / update systems don't support modern codecs, so you're very limited in how much you can reduce download times. Also codecs like LZMA often result in much slower decompression, so on fast internet connections it can actually be better to use less compression rather than more. Really modern codecs like Brotli or zstd are much better, but browsers don't have good support for downloads.
None of this is especially hard to fix but it's a quiet area of development. I think it'll need a bit of a paradigm shift to become a more popular way to do things on the desktop/cli space.
I guess the ideal solution would be if the download server offered a few compression options negotiable at download time, via Content-Transfer-Encoding or some other form of HTTP content negotiation, trading CPU time against bandwidth (the server would have to pre-compress or at least cache the compressed versions to scale), and then the download was stored as some kind of archive that could be mounted as a filesystem (this implies random access and therefore not "solid" compression). Then delta updates would be done against that filesystem image. That way, you wouldn't have the "installing" process of uncompressing and copying files. Of course, that would require platform support that we don't have on Windows and macOS. At least I can dream about desktop Linux.
The main problem with DMGs is the poor UX, and very slow mount/verification times. Users can start the app from the DMG and it will seem to work, but be unable to update. They forget to unmount the "drive" or don't know how. The format is also undocumented and a PITA to work with as it's basically a full filesystem, which also has to be signed and notarized independently and that's super slow too. So it makes the whole build process a lot slower.
There's quite some low hanging fruit here that I might experiment with soon. I have a design in mind already.
https://aws.amazon.com/blogs/opensource/improving-developer-...
> The same Lambda function with 3008 MB of memory that took 3.6 seconds to start with the JVM, started in under 100 milliseconds once compiled to a native executable using GraalVMs native-image tool. We were able to achieve sub second response times as shown in the graph below, and as an added bonus were also able to reduce the memory size and cost.
They go on to describe the main caveat - you have to predeclare what will be accessed via reflection - and how some frameworks like Micronaut do work up-front at source compile time to ensure the needed metadata is generated. So if your app is compatible with native image the benefits are really there.
There are some other caveats:
• In some cases you may need config files to make libraries compatible with the process. There's a central collection of them, and libraries are increasingly including their own metadata. The biggest app compat problems are with apps built using old versions of frameworks like Spring where you can't afford to update them to the newest versions of things.
• Out of the box the native executable runs a bit slower. To get throughput that's competitive with HotSpot you'll need to do a C++ style workflow with profile guided optimization, which is obviously more runtime efficient but less devops-time efficient than what HotSpot does.
• The actual compile process is slow, so you'll be developing on HotSpot.
Disclosure: I work part time with the GraalVM team.
It's just a lot of inertia, red-tape, legacy code and lack of understanding by the leadership.
Makes me feel ever so slightly vindicated.
Oh, and .NET comes as "full package" - you don't need to pay for extra performance features existing or future, or read through license text if you want to use AOT capability for AWS Lambdas.
VS Code is free, Intellij Rider is free for open-source projects, GitHub is free, etc...
because That's what Java reads like to me.
Even in C#, if you have a local reference to a class instance, you use a camelCase naming approach before entering the method name. So at least in Java, this scenario is more consistent (from your "sentence" argument).
It's too bad. I hear that the JVM's an engineering marvel. It may be, but Oracle darn near beat freaking Google in a lawsuit. What chance does anyone else have?
What a world we live in when there's a market for a company providing this service. Oracle is truly a disgusting company. They offer a very generous cloud computing package but you'd have to be insane to build on it.
Absolutely. I've seen companies get into major trouble building on Oracle products, then when renewal time comes the prices triple and they literally can't afford it. One company I consulted with in 2000 just shut down rather than renew with Oracle. They were a smallish startup and the Oracle costs blew the budget out of the water, they decided to just kill that idea.
And Salesforce is the same. Great product, viscous company. I had a major row with then in '21 over licensing fees during contract renewal negotiations. Details aside, the exec I dealt with made it clear they felt they had us over a barrel and had zero desire to help us. I said if we can't even get some flexibility we'll have to move to another product. He literally laughed at me and said he didn't care. So I moved the entire company to a competitor in 45 days. He sent an email a few days before the signing deadline asking when I'd sign it, I said, "we're on another product now so we won't be renewing. You're free to terminate our account at any time. We've removed all sensitive data already." He called my cell several times a day for two weeks after that. I never answered.
Isn't that exactly what this guy did? Didn't try to pretend to be a friend, told GP honestly what he was doing.
I’m just surprised there are still people willing to deal with this at all. Surely at some point you just rip off the bandaid?
Unless you’re up to your eyeballs in legacy code in which case…oracle acquisition was 15 years ago and everyone knows how they roll. If you’re still on it with no plan B…good luck with that
I mean, how can this go wrong for them?
/s