Forgot your password?
typodupeerror
Google Java Oracle The Courts

Google Backs Out of JavaOne 344

Posted by timothy
from the but-java-is-delicious dept.
snydeq writes "Citing concerns about Oracle's lawsuit against it, Google has backed out of the upcoming JavaOne conference. 'Oracle's recent lawsuit against Google and open source has made it impossible for us to freely share our thoughts about the future of Java and open source generally,' Google's Joshua Bloch said in a blog post. The move may signal eventual fragmentation for Java, with Google conceivably splintering off the Java-like language it uses for Android."
This discussion has been archived. No new comments can be posted.

Google Backs Out of JavaOne

Comments Filter:
  • Re:I'm glad (Score:5, Insightful)

    by Billly Gates (198444) on Saturday August 28, 2010 @08:50AM (#33402430) Journal

    Java's death means .NET and Windows in the server arena. Do you really want that?

    Java is the defacto standard for most server apps these days as portals are replacing terminals and Java is used for industrial websites as well. This is truly horrible and no php or perl can not just replace it for mission critical servers. It is not hte language but the 200,000 methods and api's to choose from. Only .NET comes close ... not Mono.

  • by The Snowman (116231) on Saturday August 28, 2010 @08:54AM (#33402454) Homepage

    Looks like we're seeing a new loss of confidence in Java, much like the loss of confidence in mono, for which patent concerns stunted its uptake.

    No, we are seeing a loss of confidence in Oracle. Unfortunately, Oracle now owns Java. That means its future is a little foggy. Oracle has a serious hard-on for Java, which you can see because it is the only major database I know of that allows you to use Java in place of PL/SQL. Disclaimer: I haven't actually done this, but I did read about it while googling some issues I was having with an Oracle database.

    So where to next?

    I think there is room for two cross-platform environments such as .NET and Java. Right now, those are the players. I don't see the F/OSS community putting all their eggs in Microsoft's basket, even if people do use Mono to some extent. If Oracle succeeds in making Java their pool boy and effectively neutering OSS implementations of the language and JFC, another environment will need to rise to to the occasion. I think it would be a community effort to some degree, but driven largely by Google. I could see them forking Java and realizing that due to trademark and patent concerns they would need to make large changes, so they would make major changes, add a bunch of stuff, and turn it into one hell of a platform for mobile and network development. That was Java's original goal, but it has since bloated up well beyond that and I do mean bloat, not grow. Why do we need a total of three implementations of core JFC classes to do stuff like "read a JPEG," and two of them either don't work at all or only work if you drink unicorn blood while coding? Why are there two GUI implementations, and the one that makes sense is still a zombie built on top of decaying pieces of the AWT corpse?

    Sun had so many opportunities to grow the JFC, add value, etc. but due to their intense fear of breaking backwards compatibility, they just layered more and more band-aids and duct tape on top of each other. At some point you need to do it right with new implementations and say "upgrade to version X, and deprecated crap is being removed. You are now warned."

    Also, Java EE needs to be merged into Java SE. There should be two Javas. One for memory-constrained devices (embedded), and one for everywhere else. Java EE has been a pain in my ass for some time. Java doesn't need the extra complexity.

  • by Pawnn (1708484) on Saturday August 28, 2010 @09:14AM (#33402566)
    It's still huge in Big Business, where COBOL also remains alive and well.

    From what I've seen, it's still largely popular as a web application language for the server-side. Usually an alternative to .NET.
  • by slasho81 (455509) on Saturday August 28, 2010 @09:23AM (#33402612)
    This lawsuit boggles my mind. I'm sure the guys running Oracle are pretty smart. Can't they see that no matter the outcome of the lawsuit, they are losing big on reputation and client lock-in just by pursuing it? Am I missing some great strategic outcome Oracle is hoping for?
  • by Anonymous Coward on Saturday August 28, 2010 @09:35AM (#33402662)

    > In summary, open source Java is fine, open source almost-Java is not.

    Where is the difference? Isn't that legal newspeak of corporate lawyers... and why we have a free software movement? I can't see how this sentence makes any sense to an open source developer.

  • Re:!Good (Score:5, Insightful)

    by MaggieL (10193) on Saturday August 28, 2010 @09:57AM (#33402780)

    you can't even consider using some algorithms that c programmers use all the time

    Like buffer overruns.

  • Re:!Good (Score:5, Insightful)

    by Local ID10T (790134) <ID10T.L.USER@gmail.com> on Saturday August 28, 2010 @10:01AM (#33402806) Homepage

    ... anybody wanting to write truly high performance software had really better get used to writing in lower-level languages, or at the very least, understanding their stack right down to the hardware level.

    This has always been the case.

  • Re:!Good (Score:3, Insightful)

    by tomhudson (43916) <barbara.hudson@NoSPam.barbara-hudson.com> on Saturday August 28, 2010 @10:13AM (#33402862) Journal
    The problem is that the Javanistas won't admit it - that Java sometimes, beyond a certain size, introduces MORE complexity than lower-level languages that are more flexible. To them, this is "utterly impossible" - but what do you expect from someone who is afraid to even attempt memory allocation. It's not that hard - just do like your mother taught you - put things back when you're finished with them.

    In c, it means that you get in the habit of typing free() right after typing malloc(), then asking yourself, where does the free() really belong? Who is going to "own" this memory. If it doesn't fit naturally within that block, you need to make sure that it's taken care of somewhere else. Move the free() there, and paste in a comment as to who frees it.

    In c++, it means making sure that every object owns its own resources, or you enforce a contract with any object it serves as a "factory" to, that the recipient will free it, but not both.

    It is possible to write leak-resistant (even leak-free) code. It just takes some attention to detail. But at that point, you have a detrministic program, not one whose performance is dependent on when/if a garbage collector decides to do some cleanup - and you can also do away with the whole {smart|weak}_ptr garbage.

  • by jotaeleemeese (303437) on Saturday August 28, 2010 @10:14AM (#33402868) Homepage Journal

    Do you have a bank account?

    Most likely the back office operations are using Java in one way or another.

    That is just for starters.

    People saying that Java is dead and then refer to what is happening on their home computer simply show a degree og ignorance that is short of embarrasing.

  • by segin (883667) <segin2005@gmail.com> on Saturday August 28, 2010 @10:22AM (#33402912) Homepage
    So wouldn't Google's best option be for them to just implement the missing classes?
  • by tmmagee (1475877) on Saturday August 28, 2010 @10:34AM (#33402984)
    Having a good reputation among the slashdot crowd may be more important than you think. Oracle's name is quickly becoming mud in the minds of of a lot of developers, and while in the short term that may mean little to them, it will probably bite them in the ass down the road. Developers may not make purchasing decisions for the kinds of large companies that purchase Oracle's products, but they make do make technical ones, and they also advise the people who make those purchasing decisions.
  • Re:I'm glad (Score:3, Insightful)

    by rxan (1424721) on Saturday August 28, 2010 @11:07AM (#33403232)

    Same language? C# and Javascript have nearly identical syntax. I think it's completely unreasonable to expect someone to invent a brand new syntax for every programming language.

    Some of the same classes? Look at how many other languages have analogous classes in their libraries. It's irresponsible not to provide string utilities, for one.

  • Re:I'm glad (Score:3, Insightful)

    by thePowerOfGrayskull (905905) <marc.paradise@NOSpaM.gmail.com> on Saturday August 28, 2010 @11:09AM (#33403250) Homepage Journal

    The similarity of android's dev language with Java is only superficial

    You mean, aside from the fact that they are exactly the same language and both provide a large number of the same classes in the java.* namespace, they are completely different?

    Damn, I'm going to do it -- I'm going to make a car analogy. I'm sorry in advance, because I *know* someone is going to helpfully correct it and take it far beyond the point I was trying to prove.

    Let's say all cars had a single engine they used. They could manufacture this engine themselves, but it had to conform to the agreed-upon specs if they wanted to call it a "car engine". So Ford and Chevy and Toyota are all happily marketing cars with Genuine Car Engines; they have different trim and options, but they all use the same Car Engine under the hood.

    Suddenly Hyundai comes along with its new line of cars which also uses a Genuine Car Engine. Except - as it turns out - their engine is custom built from the ground up. Its interfaces conform to the Car Engine spec, but internally it functions completely differently. If you dropped a Ford card body onto a Hyundai Car Engine, it wouldn't work at all correctly. The check engine light would play the tune of Old McDonald's and the turn signals would put the car into reverse.

    Hyundai's Car Engine is superficially the same as the standard Car Engine, but it doesn't work the same way; nor does it do the same things.

    Okay, I may have gotten carried away there. So let's try without the car analogy. The language constructs are the same. Even many classes are shared with the same functionality. However, you cannot execute compiled GoogleJava code on a standard JVM; and you cannot execute standard Java binaries on a Google Car Engine... erm, JVM. This is true even if the source code uses only classes that are shared in common across both platforms.

  • by DragonWriter (970822) on Saturday August 28, 2010 @11:18AM (#33403306)

    Php became the #1 web server language in 2002 [lwn.net] - and that hasn't changed since, and isn't likely to.

    The article you link says it became the number one server side scripting language in 2002. While there isn't a really clear boundary of what is and isn't a "scripting" language, Java isn't included in any of the definitions generally used for that category, so in a discussion of Java, PHP's position among "scripting" languages -- server side or otherwise -- is pretty much irrelevant.

  • Java is an interpreted scripting language. It's also nowhere near number one - most hosting providers don't even offer it.

    And before we get into *that* argument again ... Java is no more compiled than converting a word doc to a pdf is "compiling" it. You cannot execute the resulting class files directly - they need to be interpreted by the run-time (originally, they were supposed to be interpreted by a special "Java chip" - "write once, run anywhere" was the exact opposite of the original design goals).

    If Sun had had any brains, they would have fixed the slowness of Java by including the ability to compile down to native code. Then they could have arguably had the best of both worlds.

    But what do you expect from a project that changed its goals so many times, even in the early years?

  • Re:!Good (Score:5, Insightful)

    by greenbird (859670) on Saturday August 28, 2010 @11:56AM (#33403522)

    It's not that hard - just do like your mother taught you - put things back when you're finished with them.

    Two things. First it is hard. It takes an almost anal level of attention to detail especially in a multi-threaded environment. That's something woefully missing in your run of the mill programmer. Second, the bugs introduced can be EXTREMELY subtle and VERY difficult to find especially in a multi-threaded environment.

    Anecdote: I was working on a multi-threaded realtime system that involved message queues between objects interacting with hardware. The queuing system was developed by someone else and had gone through extensive testing. I was tasked with adding network communications to the messaging system. With the network communications module added it was core dumping at random times and places generally after days of running. I spent over a month trying to find the problem in my code. All the while, the people who had developed the messaging system insisted the problem couldn't be there and showed me the months of tests result on the messaging system. After over a month, including line by line review of my code, I started looking over the messaging system code I found one place where they were releasing a mutex then freeing some memory. 2 lines of code that were reversed amongst 1000's of lines of code. Their testing didn't reveal it because on their test runs there was almost no random variance in the execution. Everything responded at fixed intervals and the pattern never including something getting a pointer to that memory after the mutex was released and before it was freed. The network communications added randomness which disrupted the pattern and this happened periodically.

  • by hedwards (940851) on Saturday August 28, 2010 @11:58AM (#33403538)
    As opposed to the guys that developed what is now known as ECMAscript and failed to demand that the various developers purporting to implement it did so in a compatible way? Trust me it's far more harmful for them to allow Google and others to claim to support the Java programming language, and then do so to the most minimalistic extent possible. You can't take class files and run them on Android devices and you can't take .dex files from Android and run them on the standard runtime environments which means that at best you're going to get confusion and splintering.

    Ultimately, one of the most damaging things that a platform can suffer is incompatibility and unnecessary complication. While more pronounced in the world of consoles where winners and losers were often times just a function of the quality and ease of access of dev tools, it applies here as well.
  • Re:I'm glad (Score:4, Insightful)

    by squiggleslash (241428) on Saturday August 28, 2010 @12:30PM (#33403742) Homepage Journal

    It would've been incredibly irresponsible of Oracle to allow Google to create a wholly incompatible "Java" under the Java name

    Yeah, but Google has no plans to do anything of the sort, and Oracle is still suing.

    Oracle's beef seems to be that Android doesn't come with Java but happens to infringe on some Java patents. Why the fuck they don't rectify the problem themselves by releasing a version of Java for Android is anyone's guess. Maybe they're just assholes.

  • by PybusJ (30549) on Saturday August 28, 2010 @12:44PM (#33403834)

    The full Java SE is not appropriate for a mobile phone, far to heavyweight and full of APIs like the AWT, SWT etc.

    Sun also produced Java ME for mobile use which they charged phone makers to license. Sun (now Oracle) only open sourced, and gave patent grants for, the desktop oriented Standard Edition where they didn't have any revenue anyway. They were careful in the licensing not to allow a free Mobile Edition which would threaten their mobile revenue.

    This was a significant problem for Apache's Harmony project. They couldn't accept Sun's restrictions on use so Sun wouldn't license them as a conforming implementation (despite them having done the work to pass the tests).

    In practice, the terms of the patent grant mean that while the Java Virtual Machine implementation is free software and can be altered (such as RedHat's work porting the OpenJDK to other architectures). Java as a whole doesn't give you the freedom to make changes to the standard libraries (even if you do call it something else); it's hard to consider it free software.

    It's all particularly annoying since, post-iPhone, Java ME has slipped into irrelevancy. There's no particularly strong reason why Google based the Android environment (dalvik) on the java language (though not on the JVM nor standard libs) rather than something else. The availability of Harmony code for reuse, existing tooling in the form of Eclipse, developer familiarity, and substantial internal use of java at Google probably played a part. Interoperability with other mobile java certainly didn't.

  • Re:!Good (Score:3, Insightful)

    by Joce640k (829181) on Saturday August 28, 2010 @12:47PM (#33403846) Homepage

    Yep, what garbage collection giveth, everything else takes away. For any resource other than RAM Java is more complex/verbose than, say, C++. eg. You want a file to close in a timely manner so the user can copy it to a USB stick without quitting the program first? Start typing another try/finally block. Same with network connections, database connections, etc., you can't rely on the garbage collector to close them for you.

    Even garbage collection of RAM is very overrated, eg. I'm working on a 200,000 line C++ program right now and there's exactly 9 'delete' statements in it. All the rest is completely automated via. smart pointers and stack unwinding. The person who adds the tenth 'delete' has to buy lunch for everybody.

    Then there's the performance. I don't mean microbenchmarks, I mean real-world performance with millions of memory allocations. Garbage collecting them will destroy any illusion of performance you might have had. Much worse is if you run out of RAM and start paging to disk. In that situation the last thing you want is something continually scanning the entire heap, but that's exactly what the garbage collector does...

    Of course C++ can be very complex in other ways and there's an awful lot of traps for beginners, but IMHO Java wasn't the answer and even the famous garbage collection is a two-edged sword.

  • Re:!Good (Score:3, Insightful)

    by dgatwood (11270) on Saturday August 28, 2010 @12:50PM (#33403868) Journal

    Two things. First it is hard. It takes an almost anal level of attention to detail especially in a multi-threaded environment. That's something woefully missing in your run of the mill programmer. Second, the bugs introduced can be EXTREMELY subtle and VERY difficult to find especially in a multi-threaded environment.

    No, and no. If you are doing multithreaded programming, you can use reference counting. It's not at all hard to do explicit retain/release unless your program is crap by design. In many cases, doing so explicitly and with careful thought can greatly improve performance.

    For example, not all garbage collectors do a great job when you have complex circular data structures. However, if you know that your complex structure is principally a tree with some links to higher nodes, you can simply not use a reference count, but rather a reverse reference list to point to the nodes that link backwards, then unlink the back-references as part of your destructor when the reference count goes to zero. Yes, you can potentially use weak references for the same thing, but that assumes that you don't need to change some other aspect of the data structure when the uplinked node becomes unavailable, e.g. caching the last value of some field in the higher node.

    And, of course, if you know that the entire data structure, regardless of complexity, comes and goes away as soon as there are no references to the root node remaining, then you can make things much, much simpler with explicit memory management. You use a reference-counted object that points to the root node instead, and in its destructor, you recursively nuke the actual data structure with abandon. Then, there's no reason to worry about whether a particular reference should be strong or weak.

    Likewise, many garbage collectors aren't good at quickly disposing of objects that are only created momentarily, used, then disposed of within a single function. For those objects, manual allocation is always a better choice in terms of performance because you can be absolutely certain that they don't linger any longer than necessary. If those data objects are large, this can have a significant impact on performance versus GC.

    And without regard to how good or bad the GC system is, you can always get a big performance win by manually managing everything. As soon as you have a thread traversing an object graph to check reachability, you've already lost the performance battle at a very fundamental level. You're either wasting CPU cycles, wasting memory, or both to determine whether an object can be freed---information that the programmer should be able to much more easily and quickly determine due to having a better understanding of which objects can realistically reference it.

    Sure, a naive multithreaded programmer who doesn't use any reference counters and tries to free things while another thread is still using them can break things, but that's also true of the naive programmer who doesn't use reader-writer locks around data structures to prevent somebody from reading them while another thread is taking nodes out of a linked data structure, etc. Your example could just as easily have occurred with somebody assigning a value to NULL outside the lock. Indeed, your example is actually trivial to detect with proper tests (particularly when compared with arbitrary data structure mutations, hence the reason that you should religiously confine code that modifies data structures to a handful of functions that do nothing but modify the data structure in a particular way). You can simply add code in the destructor (C++ example):

    #if DEBUG
    object_type *rootObject = this->getRootObject();
    for (int i=0; i<100; i++) {
    int islockedforwriting = pthread_rwlock_tryrdlock(rootObject->rdwrlock();
    assert(islockedforwriting != 0); // We should not be able to obtain a read lock right now.
    }
    #endif

  • Re:!Good (Score:3, Insightful)

    by Spewns (1599743) on Saturday August 28, 2010 @01:08PM (#33403990)

    Which "lower level languages" are you talking about? Lower level languages are platform specific, and the only one people are using is assembler. I know that you didnt mean asembler. I suppose you meant C. Its abstract machine has a generic concept of memory as a linear pool. Good enough to write operating system features that manage linear pools of memory, but decidedly not at all low level. We can't even coerce a C compiler to emit x86 instructions like BT, BTR, and BTS.. instructions which test and manipulate individual bits (in registers or in memory) and are extremely useful (efficient!) for implementing things like a Bloom Hash, or just implementing bit arrays. In C the best we can do is use clunky full-word operations that can not get optimized down to BT, BTR, or BTS for multiple technical reasons.

    Is this a joke? Anything that isn't assembly is a high level language? News to me.

    C is very obviously a low level language. It's not exactly controversial.

  • by Kensai7 (1005287) on Saturday August 28, 2010 @01:25PM (#33404092)

    Isn't this the perfect moment for Google to pass to Scala for Java-like development and Go! for the rest of it (critical native components)? To hell with Java the language. After all, what is really important is the JVM and they've already forked that with Dalvik.

  • Re:!Good (Score:1, Insightful)

    by Anonymous Coward on Saturday August 28, 2010 @01:48PM (#33404226)

    Manual memory management was a solved problem 10 years ago in C++. The people who claim "buffer overflow" in the same sentence with C++ are those who program in C-with-classes. The RAII-using scoped_ptr is as efficient as manual releasing is, and the reference-counted shared_ptr is often vastly more efficient (and flexible) than an automatic GC. The only place in C++ code that should be doing manual allocation is in custom new/delete operators.

  • stop lying (Score:4, Insightful)

    by yyxx (1812612) on Saturday August 28, 2010 @04:31PM (#33405140)

    Sun open sourced Java, and you can easily fork it. You can't call it Java unless it still implements the specification correctly, but the license that Sun released the code under means that you are safe from patent problems.

    No, you are only safe from patent problems if Oracle determines that your implementation is fully compatible.

    Google's problem is that they did not fork Java, they reimplemented it.

    Google didn't reimplement the Java platform, they implemented their own platform and used the Java language. Oracle has no patents on the Java language. And the patents they do have, they could have sued over no matter what virtual machine Google had implemented.

    In summary, open source Java is fine, open source almost-Java is not.

    There is no "open source Java"; open source principles require the ability to make incompatible forks, and as you correctly pointed out, Oracle doesn't allow that and has the patents to enforce their will.

  • Re:!Good (Score:3, Insightful)

    by Spewns (1599743) on Saturday August 28, 2010 @04:34PM (#33405154)

    C is very obviously a low level language.

    What exactly do you think is low level about C? I think that you are confusing a lack-of-features like OO, Generics, Reflection, etc.. with 'low level' ..do you think its low level because it can reference memory directly? Really? Is that your metric?

    I'm not confusing lack of features (abstractions) with low level - abstractions are exactly what makes a language high level. Yes, C making you reference memory directly makes it low level. High level languages take you far, far away from such interactions.

To thine own self be true. (If not that, at least make some money.)

Working...