At the same time, alternative languages (Python, Ruby, etc.) are becoming more and more capable, and are slowly eroding the class of problems that need "enterprise-grade" solutions. Furthermore, virtualization, as well as tools like Chef, Puppet, Capistrano, Virtualenv, and RVM are making great strides at simplifying the deployment and management of "native" solutions.
Taken together, I think you'll see huge gains by smaller languages in the areas traditionally served by Java and .Net.
But if I had to pick a dark horse or two, I'd look to LLVM and JavaScript. There's huge amount of momentum and money behind LLVM, and I could easily see it becoming the next major target platform for experimental languages. Similarly, the recent JavaScript arms race has left us with at least four extremely high-performance JavaScript runtimes, and it's quickly becoming the lingua franca of the web. There have been many attempts to harness that talent and apply it to more general application development: Apple's Dashboard, Palm's WebOS, Node.JS, Appcelerator Titanium. Others initiatives are trying to pull general application development into the web dev world: Sproutcore, 280 North's Cappuccino, etc. Eventually, someone is going to strike the right balance, and JavaScript's importance and influence will skyrocket.
Other things that may spawn something really cool: Parrot, Go.
As for LLVM, I have had the same thought and I think you are on to something, I keep thinking whatever it is, it will crop up on LLVM.
Anyone leaving Java because of Oracle is not going to .Net.
> The C# developers I know really do seem to enjoy the language and associated tooling, and it's very well established in the enterprise.
Doesn't matter. If you are leaving Java because of Oracle, then you don't care about the tooling. Moving to .Net will just move you to another vendor those guys have spendt the last years moving away from.
After all, like professor Wirth once said, P. T. Barnum was right. It's not reasonable to bet your company on the premise either Microsoft or Oracle will have a sudden change of mind and start playing by the rules.
It's not reasonable to bet a dollar on that ludicrous idea.
> Anyone leaving Java because of Oracle is not going to .Net.
I agree that folks who abandon Java because of Oracle's presence are unlikely to embrace Microsoft, but that doesn't mean that .Net won't continue to erode Java's market share.
Specifically, consider the many shops that employ both Java and .Net. In those environments, I could see .Net's adoption accelerating due to the perception of strife within the Java community: James Gosling and Tim Bray both leaving Oracle, Jonathan Schwartz pitching litigation over Java patents as a revenue stream, the subsequent lawsuit against Google, the OpenSolaris and OpenOffice.org votes of no confidence and subsequent forks, Apache attempting to throw a wrench into the JCP... that's not the picture of a healthy ecosystem.
So it's not that the enterprises will see Oracle and flee, but that they'll see the turmoil and litigation, reason that C# and Java are similar enough, and opt for the more peaceful of the two, at least for new development.
Unless you are a big enough company to be able to roll your own infrastructure tools to make use of linux's advantages or have very significant scale requirements the cost difference is unlikely to be huge (much of the cost will be operations labor anyway) and the service and support backing of MS is a significant boon in the enterprise world.
LLVM and Javascript are contenders but they aren't platforms yet, although I think they will see a ton of use in web apps and web services, especially outside the enterprise.
Java is under a two-pronged attack. LLVM is quickly becoming the preferred target platform. The harder Oracle is to work with the harder it will be for new languages to target the JVM.
Also Java's niche is getting squeezed from both ends. Python, Ruby, and Javascript can do more of what Java does with less hassle. Languages like Go and Rust are bridging the divide from C/C++ to Java also. Both languages have a nice mix of good performance, predictable performance, high-level semantics, and concurrency.
I'm curious, the JCP didn't exist until quite a while after Java got going. There are tons of documents in various states of completion and with various levels of support. To me, JCP has sort of given java a terrible look to the non-java coder. It looks fat, bloated and incredibly Byzantine. I've actually heard developers have conversations about JCP<number>, that just seems like a bad thing to me. Meanwhile SpringSource has done some great and wonderful things. Even newer JCP specs, like JPA (if that's 'newer') were sort of done outside of it all and then backported in to the JCP process.
I don't know, C has been pretty much "dead" for decades, there is very measured and limited change in that language. Putting the Java language in a similar place, adding some dynamic support to the JVM and maybe focusing on cleaning up the class libraries and interop with higher level languages might be the best thing for it.
I don't know, it all looks bad, that's for sure but i can't say the JCP was the end all be all either.
There was such a successor before Java even existed: ML. It is safer, and current free implementations are at least as fast (and they have a C FFI). The catch is, programmers need to recognize that "OO" is little more than a brand, then see that despite it's "FP" branding, ML implements the underlying principles just as well (if not better).
Yes, ML is pretty good at those underlying principles; yes, you can use it to write code that's compact, safe, and fast; but it's not going to replace Java because #1 and #2 make Java easy for "ordinary programmers" doing ordinary businessy programming in a way that ML isn't and probably never will be.
(For the avoidance of doubt, I am not arguing that anyone who is comfortable in ML should use Java instead.)
There is the industry acceptance part that java has and then the runtime has been pretty well vetted and improved. I'd bet money that ML runtimes turn up with "issues" as larger more demanding applications are built.
And what exactly is going on with SML these days?
http://caml.inria.fr/pub/docs/manual-ocaml/manual038.html
"The threads library is implemented by time-sharing on a single processor. It will not take advantage of multi-processor machines. Using this library will therefore never make programs run faster. However, many programs are easier to write when structured as several communicating processes."
Ocaml is a nice replacement for ANSI C, not for Java.
The other big problem is the underlying OS. Java lives on the JVM, Ocaml lives on Unix. Unix isn't a substitute for the JVM and vice versa.
However, F# might be an ML based competitor to java. I don't know enough about the MS stack to say.
You're strongly suggesting that a Java replacement has to compile on some standardize byte-code… Might be a prerequisite for proprietary software, but otherwise looks unnecessary. Besides, what do you mean by "lives on UNIX"? Ocaml runs on Windows too…
As far as I know, F# is currently unsuitable: that would be escaping the claws of Oracle to fall in the jaws of Microsoft. Now if Microsoft fully frees .NET, or at least abandons all patent claims regarding it, F# might do.
What I mean by "lives on UNIX/lives on JVM" is a fuzzy statement about the Right Way of Doing Things. The Java way is to build a large system, integrated with the rest of the world via one or more public interfaces, potentially accessed via RMI. You'll talk to the database via JDBC. There are highly configurable enterprise tools for almost everything. This is an ecosystem you need to replace if you want to replace java.
The Ocaml way is to write a program that takes command line input and processes a stream of text (which can come from a file or stdin). To write a daemon, you double fork. Most of your interaction with the outside world is simply via a posix interface.
That's not to say you can't write command line unix utils in Java, or gigantic enterprise daemons in Ocaml. But you'll be going against the grain.
That's pretty much how I use it. Ocaml is a great systems language.
Actually, they said Java on phones is for paying customers and Java on servers will always be free. http://www.theregister.co.uk/2010/11/06/oracle_dueling_jvms/
Great, so I'm free to take a server implementation and port it to mobile phones, right?
Free as in what?
You want to try and build a business doing that?
You can always claim it's based on OpenJDK.
> and you run the risk of unknown lawsuits on hidden grounds from a large and litigious company who you're trying to outmaneuver to avoid giving them money
I won't be the one to indulge such a paranoid delusion. Oracle won't sue you for using OpenJDK because they know it would be a lost cause.
Even if it's based on OpenJDK, you still wouldn't get any patent protection. I wouldn't put my trust in Oracle to not sue me over anything...
In many countries, distributing software under GPLv2 provides recipients with an implicit patent license to exercise their rights under the GPL.
http://www.gnu.org/licenses/gpl-faq.html#v2OrLaterPatentLice...
Many countries, but not all... and it's not clear in the case of v2.
I agree that v3 is more clear about patents than v2, but it's unfair to call a protection that was never used (possibly because it has been a successful deterrent) "weak". It can only be weak if it doesn't protect. So far, it has been effective.
I think the wording in v2 is clear enough. One cannot impose any additional restriction and cannot force fees on users and re-distributors. That protects not only against patents but from anything that looks like one.
It also had a strong community: Apache, JBoss, etc.
However WebLogic and Sun are now part of Oracle. Apple has backed off on involvement. This leaves Oracle and IBM. IBM are masters of maintaining technology, so we know Java will be maintained. But the ecosystem is being eroded.
If the community is being eroded too, Java advocates everywhere will look somewhere else. Just look at the thread here!
COBOL was too big to fail too. This will not be acceptable to many forward looking enterprise software companies. Expect to see an increasing number of "app servers" appear for Python et al.
Right, the writing is already on the wall, because guys like us have already made our mind up that it is on the wall. They have lost the mind-share. Almost every reason for Java's ascension, has been eroded away, the future of Java is exactly what everyone was running from when they found Java. That's why I asked, Oracle's refusal to work with Apache marks the beginning of the end in my mind. It pretty much states openly their plan. The plan that all the "fear mongers" where warning us about. I asked people thought on the Java replacement, because I really would love to know what people see as the successor. For me at least now with the Apache thing decided, it is not a matter of if, it is a matter of "to what".
Many years ago, this delayed me looking seriously into Python. But when its powerful data structures finally convinced me to start using it, I quickly became accustomed to significant whitespace: I always indented my code correctly anyway, whatever language I'd use. So it was just a case of dropping the { and }. After a few hours I was accustomed to it.
The funny thing is, I still program a lot in C++ and PHP (and Java sometimes). When I write these languages, I fall back on using { and } like I did before, without even noticing it.
Getting proficient in a new language doesn't make you forget your old languages.
The result was that any misspelling of variables could result in extremely difficult to find bugs. This was a final straw that pushed me over the "I don't really care for the syntax of this language much" cliff.
Not a showstopper, but combined with a number of other small complaints, Python "rubbed me the wrong way" too. Yeah, significant whitespace alone isn't a problem. Lack of variable definition by itself isn't a big deal. Explicit "Self" as a parameter is kind of annoying but makes sense. The lame anonymous functions that don't have the full power of the language are ugly. Taken together those are enough to turn me off to the language.
BUT, Python has a few killer features like great libraries, flexible built in data structures, and an excellent foreign function interface. If I needed a scripting language for a native-code app it would be one of the top choices.
By the way, my experience with Python is a few years old, I don't know if anything's changed with the new version.
Edit to add: Other dynamic languages have various solutions to the variable declaration problem, usually involving a parser or compiler warning when you use an unbound variable. Python's syntax would have to change to make that possible, I think.
Weird. Unless all you do is to attribute them values, Python will complain when you try to use a name that's not in the current namespace.
> The lame anonymous functions
I too complained a lot about them. In the end, all I had to do was to declare the function in the closest scope and pass it to whatever would use the anon function. No big deal.
> warning when you use an unbound variable
Python throws an error when you try to use an unbound name. Python is not BASIC.
Tis true, python lambdas are lame, but in practice, their use has been mostly superceded by list (and now set and dictionary) comprehensions.
Edit to add: Other dynamic languages have various solutions to the variable declaration problem, usually involving a parser or compiler warning when you use an unbound variable. Python's syntax would have to change to make that possible, I think.
I don't understand. If you mistype a name, you'll get an error when you run the code.
Depends on the context of the typo. I've had errors along the lines of
bar=False
...
bat=True
...
if bar:
print "Hi"
And wondered why "Hi" was never printed. Of course the problem is hardly unique to Python.If you're concerned about concurrency support, there are new features in .NET 4.0 that I find pretty impressive and nice to use.
That said, I don't know if the story for developing C# applications on Mono is as solid as Visual Studio.
Personally, I think Apache should fork Java and kick it off with a renaming competition, just to get us past the most traumatic part.
I thought Apache already did that, that's how the Apache Harmony project started. This was all done before Java was open source and one needed a 'free as in speech' java.
Not at all. All of them run on the OpenJDK and the GPL makes it Ellison-proof. He can scream an threaten all he wants.
OpenJDK is not as cool as all the Sun-invented niceties in their own VM implementations, but it's good.
Section 6 says "You may not impose any further restrictions on the recipients' exercise of the rights granted herein."
Section 7 says "if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program."
The scope may be different under different laws (that's one of the reasons GPLv3 makes it explicit) but it's pretty much reasonable to assume Oracle would rather not test it on court.
Can Smalltalk be the new (old) stuff?
The other problem is that Smalltalk is pretty alien to a Java programmer (image vs. text, block based control flow vs. traditional control flow). Garnett and Forester's recommendations might be key.
Although, I still would argue the premise and say most of these institutions know Oracle and understand dealing with them. I don't see people giving up their Oracle databases and having bundled, recommended Java might make Java more of a lock.
http://us.ft.com/ftgateway/superpage.ft?news_id=fto041820061...
As well as this one where they pretty much say yep we are going to monetize the JVM.
http://www.theregister.co.uk/2010/11/06/oracle_dueling_jvms/
We see in China and India, all that stuff is freely available and Red Hat is just cut completely out of the market. I'm not gong to spend $5bn, or $6bn, for something that can just be so completely wiped off the map. They take all the Red Hat code, have their own equivalent of the Red Hat network, and Red Hat gets zero.
So its all very interesting. You can build a sustainable business [in open source], you just can't charge a lot for it. There's brand value – there's real brand – there's people, and that's it.
None of this is the kind of thing most people would look for in a press release.
They killed OpenSSO, they killed Open Office, the killed Open Solaris, They where contractually bound to not kill MySQL so they just raised the price through the roof to send the message. Pretty much they killed anything that you did not have to pay for. The worst part is they did not just withdraw paid positions from working on it. They alienated the volunteer members of the community until they resigned in protest.
Sun agreed to license the TCK to Apache under non-discriminatory terms an Agreement that Oracle is not, has not and will not living up to, because they don't want JDKs to exist that did not pay Oracle or more importantly they want them to licence it under the restrictive provising that they require e.g no use on servers and no use on Mobile. How many more items do they have to destroy until people start seeing the serial and systematic behavior that is going on.
do you not find it funny that Apple gave the JVM back to Oracle and Oracle is doing everything in it's power to keep non-sanctioned VM's off of Mobile devices. That is what the Apache dispute is really about, Oracle does not want a non-oracle JVM in the mobile world and I can bet you dime to dollar that it has to do with a back room deal between Oracle and Apple. Why do they want to keep the non-sanctioned JVM's off of Mobile devices, well because a closed ecosystem is more lucrative for Apple and Oracle than one in which Apache and Google are giving stuff away for free.
There is a fundamental difference in world views between Apple / Oracle and Google / Apache. Apple and Oracle are vertical stack providers they want to provide the whole stack soup to nuts and don't want anyone playing in their ecosystem, it just so happens that Apple wants the consumer market and Oracle wants the Enterprise market so they make good bed fellows. They are about the only two tech companies left that are not at war with each other.
Google and Apache represent a threat to their world vision and they have declared war to stop them. Oracle is all about every piece of their vertical being a piece that is monetized you can rest assured that Java is no exception.
Like it or not Java and the JVM are pawns in a big game of who is going to own the mobile market. It is the future market and winner takes all, if Oracle backs Apple in wining the market, then Apple can ensure that Oracle is position to be the Enterprise infrastructure for the new Mobile market. Like it or not, Java is a sacrificial pawn in a bigger game now.
The developer in me does not care, quite honestly the return to verticals means the return to easy money for writing software for verticals but the consumer in me shudders at the though of the verticals winning. You think Apples platform is restrictive, now wait until they own 90% of the market. They will make the early 90's Microsoft look like a benevolent democracy and well Oracle will just become a technical tax to anyone wanting to do business.
Really? How, where, when?
"IBM and Apple are both supporting OpenJDK -- Oracle is not the sole custodian of Java" Whilst technically correct, they appear to be holding the TCK and patents as viable weapons in the battle for control.
If Oracle is in breach of an agreement, can Apache take them to court of force them to comply?
Alternately, are there any legal obstacles preventing Apache from writing their own TCK and saying in future they'll develop against that?
Apache doesn't have enough money to do that, and if they did their members would probably consider such a lawsuit a waste of said money.
Alternately, are there any legal obstacles preventing Apache from writing their own TCK and saying in future they'll develop against that?
Patents that are owned by Oracle.
No, but if they can convince telcos and phone manufacturers they can win, I am sure they could direct some of the money provisioned for J2ME licencing and Android-related patent-licensing into that.
And you know the beauty of it? Then can't kill neither Open Office nor MySQL. When the time comes, I just have to move to a fork. LibreOffice is on RC-stage now and I am curious about Drizzle and the other forks of MySQL.
> because they don't want JDKs to exist that did not pay Oracle
Probably. What they would really hate would be not to get some money out of every feature phone out there. Their thing is with mobile and J2ME licensing means a lot of money.
> They will make the early 90's Microsoft look like a benevolent democracy
Don't get me started on that...
But whatever, FUD away.
Not on mobile that have not, in fact they have stated quite the opposite. With mobile projected to surpass desktops in 18 months that is cause for concern. Make no mistake about it, the wranglings with Apache and the patent suit with Google are intricately related. This is all about ownership of mobile.