Sun's Phipps Slams App Engine's Java Support 186
narramissic writes "Sun Microsystems' chief open source officer, Simon Phipps, said in an April 11 blog post that Google committed a major transgression by only including support for a subset of Java classes in its App Engine development platform. 'Whether you agree with Sun policing it or not, Java compatibility has served us all very well for over a decade,' Phipps wrote. 'That includes being sure as a developer that all core classes are present on all platforms. Creating subsets of the core classes in the Java platform was forbidden for a really good reason, and it's wanton and irresponsible to casually flaunt the rules.' Phipps characterized his remarks as non-official, saying: 'This isn't something I could comment on on Sun's behalf. My personal comments come purely from my long association with Java topics.'"
Pot. Kettle. Black. (Score:5, Insightful)
You mean like Java ME [wikipedia.org]?
Re: (Score:2)
The real problem is that Google created their own version of Java ME. Instead of sticking with the existing standard, they came up with their own. And that's bad for everyone.
Re:Pot. Kettle. Black. (Score:5, Insightful)
Since AppEngine, Google's cloud platform is (while, like mobile devices, a different environment from the standard desktop or server environment for which the Java Standard Library is designed) not a mobile platform, and doesn't have the same constraints that shape the development of Java ME, it's not surprising that they did something different.
OTOH, the justification is the same for having Java ME when Java SE already exists: the environment in which AppEngine Java is being used is very different from that for which SE was conceived, putting unique constraints on it.
I think that Phipps is upset because Sun is in the process of gearing up their own cloud services, and the last thing they want is Google's Java support drawing enterprise interest to AppEngine while they try to get Sun's cloud service off the ground.
Re:Pot. Kettle. Black. (Score:4, Interesting)
What Google should have done was engage in the JCP to define a new profile for supported "device", along the lines of the CDC/CLDC and MIDP. At least that way it would have been within the framework of practice understood and used by Java developers. Instead, Google just said "here's what's available", without tying into any of the already available accepted ways of defining a subset of Java.
This actually looks a lot like what Microsoft got in trouble for with their MS Java.
Re:Pot. Kettle. Black. (Score:5, Insightful)
I really don't think that Java developers have much trouble understanding or using a clearly defined subset of existing functionality.
What Microsoft did was create an incompatible implementation of core Java classes, supporting similar features but requiring different behavior with the same classes. This has much more serious negative impact than implementing a well-defined subset, since the former makes it hard to move code either way between implementations, and the latter (what Google is doing) makes it very easy to move code off the non-standard implementation (AppEngine) and onto a standard implementation, but somewhat challenging to move code using the unsupported features from the standard implementation onto the non-standard one.
It's actually a really bad thing to do if you want to create lock-in to your non-standard implementation, since it does nothing to keep people from moving off your platform, but makes it harder than supporting the standard would for them to move on to your platform.
Re: (Score:3, Interesting)
Re:Pot. Kettle. Black. (Score:5, Informative)
Yes they did; Sun took them to court. Specifically, they left out JNI and RMI in favour of their own COM object APIs.
Proof? Microsoft's own document [microsoft.com] reveals this.
Re: (Score:3, Informative)
Well, that could have been inexpensively fixed.
The bigger problem with J++ was that Microsoft extended the language to provide delegates (IIRC), and that feature emitted illegal JVM opcodes. This made J++ source+binary incompatible with Sun Java in a manner that couldn't be resolved without junking all the Windows extensions. Therefore they lost the lawsuit and it ultimately cost them hundreds of millions of dollars.
Re: (Score:3, Insightful)
Free or not, at some point you MUST have a standard, or you will not have interoperability. What Google is doing here is no different than what Microsoft has done for years.
Now I'm not saying Java ME is good. In fact, it's awful. But an awful standard is still better than none.
Re:Pot. Kettle. Black. (Score:4, Informative)
No. Point blank, no.
Go to the end of the line.
Microsoft goes out and deliberately tries to subvert standards by creating implementations that are slightly off, thus preventing anything written for them from being easily portable to another implementation.
Google has gone and created an implementation that works exactly according to spec, except leaving out items which don't make sense in the app model they use. It would be extremely trivial to port something written for Google's implementation to anything else standard compliant.
This is about as similar to Microsoft as a blizzard in the Alps is to a sunny day in Cuba.
Re: (Score:2)
It would be extremely trivial to convert something written for Microsoft's broken standards too.
The point is that as a developer, that just means more wasted time on something that's out of my control.
Re: (Score:3, Insightful)
The point is actually this: If I (or someone else) write a program in GoogleJava (or whatever you want to call it) and said program runs, I can take that same source and compile it under Java standard edition, with no refactoring, and it will run exactly the same (AFAIK). Try doing that with MS Java (no refactoring allowed!).
"Flout", not "flaunt" (Score:4, Funny)
Grr.
Re: (Score:2)
Re: (Score:2)
No, you don't understand - 'flaunt' doesn't mean what you think it does. You flaunt wealth (that you have) and flout rules (that you despise/ignore).
Of course, people got this wrong enough that even the dictionary grudgingly gives flaunt the alternate meaning of 'ignore'.
Re: (Score:2)
No, you don't understand - 'flaunt' doesn't mean what you think it does. You flaunt wealth (that you have) and flout rules (that you despise/ignore).
Of course, people got this wrong enough that even the dictionary grudgingly gives flaunt the alternate meaning of 'ignore'.
No, I got it right, and you have no sense of humor.. He's flaunting his (Sun's) rules, making poor google feel bad about itself. It's an alternate explanation of the meaning of that sentence, with the assumption that the guy typed exactly what he meant.
"Wonton", not "wanton" (Score:3, Funny)
I think Sun is jealous (Score:5, Interesting)
Re: (Score:3, Interesting)
Re: (Score:2)
Mountain out of Molehill (Score:5, Interesting)
As someone who personally loves the Java platform, I honestly think he's making a mountain out of a molehill. As far as I've been able to tell so far, the Google App Engine supports the Java platform in its entirety, with a few caveats. Those caveats deal with the services Google offers (e.g. no JDBC accessible database) and the sandbox the apps run in (e.g. no network support, no filesystem).
AFAICT, there's nothing stopping me from, say, writing a JDBC access layer for their Data Store. Which means that Google is keeping with the spirit of the platform, and that this is mostly just a misunderstanding.
If you want real problems, try running Java apps on a shared hosting provider sometime. The limitations of those sites will have you shouting praise for what Google is offering.
Re:Mountain out of Molehill (Score:5, Informative)
Um... no. They're not supporting Threads for a start - which is pretty major. I had a read of the exclusions a while back and there were some significant omisions. I'd list them if I could find the page again, but no luck I'm afraid.
That said, I'm not sure if I see this as a major issue either.
Re: (Score:3, Insightful)
That would be their locked-down sandbox. You can accomplish the same thing in vanilla Java with a security manager. (Which for all we know, they did. I haven't tried yet.) If the security manager doesn't allow it, you're not using it. Period, end of story.
You may note that everything Google has locked down is either controlled by the security manager or is simply an API to access a service that they don't provide.
Generally speaking, it's a good
Re: (Score:2)
You can accomplish the same thing in vanilla Java with a security manager. (Which for all we know, they did. I haven't tried yet.) If the security manager doesn't allow it, you're not using it. Period, end of story.
I'd really like to know if this is the case. Everything I've read in the list seems to me to be something a security manager could potentially block anyways. I'd like to know if they're throwing a SecurityException in these situations or not.
Re: (Score:2)
Speaking of your sig - the collection that you link to is seriously outdated (2004? c'mon, that's even before .NET 2.0). A lot of points on it simply don't apply anymore.
Re: (Score:2)
Ummm, even Sun says you should not be launching threads inside of JEE containers. Or writing to the file system for that matter. In fact, most of Google's restrictions are identical to Sun's own restrictions for JEE, the only difference is, Sun didn't make it mandatory, and now they're complaining that Google are (because they have to actually host these things in a sane and manageable way).
The only thing that really irks me is no socket connections. Making HTTP the only avenue for network I/O, and even
Re:Mountain out of Molehill (Score:4, Insightful)
Following /. tradition, I have not looked at the details, but that won't stop me from commenting here... :)
As someone who has been writing Java since '99, I have to say if even Threads is not supported, it is a big issue.
There is a reason why the Core class are called "Core", every Java library expects the Core classes are there. If we now have a popular Java platform that only have a subset of the Core classes, it will cause a lot of headaches down the road, eventually fragmenting the "Java" platform.
Re: (Score:2)
Um... no. They're not supporting Threads for a start - which is pretty major.
A major improvement. It's now accepted on concurrency wonks (including, no especially, the ones at Sun and Google) that Threads is a disaster. Sun itself would much prefer that everybody switch to the new Concurrency classes [sun.com], which are not only much more reliable, but a lot easier to use.
... and seems to use threads.
Re: (Score:2)
It uses Thread objects. Not quite the same thing. If Thread is no longer a public class, then the various bad idioms that the Thread API. encourages are no longer possible.
Re: (Score:3, Informative)
The major problems with threads isn't the java.lang.Thread API, it's the shared-state model and the whole concept of threads in general. The new concurrent utilities are just that, utilities. You still have to be very careful about shared variables and locking. Once you have two threads running you have to be sure that every single line of code that they call is thread-safe. Good luck with that.
Yeah, it's nice to have the utility classes to help avoid a few bugs, but they aren't the panacea you're making
Re: (Score:3, Informative)
Just saying "you're wrong" wastes both our time.
That's all you've done in your replies. I said it was a minor improvement to start with, and told you the reasons why it was minor. I pointed out how your initial post gave a very wrong impression about what Google did versus the concurrent utilities. You haven't show any evidence that backed up your initial post. You sound like an inexperienced noob confusing Javascript with Java with regards to threading.
I've just realized that this whole argument is about a hypothetical. The Google white list does include Threads. Too bad.
Too bad for you a highly modded comment [slashdot.org] explains your error: "A Java application cannot create a n
Re: (Score:2)
You're confusing threads (in the generic sense) with Threads (the Java data type). You can't have multithreading without threads (duh!) but you can easily dispense with Threads as part of the official API.
I'm no expert on this technology, but I do know a lot about the motivations behind the Concurrency classes. That's because I spent 2006 helping to update the Java Tutorial, and spent a lot of time getting indoctrinated by the key people involved in this stuff, including Doug Lea.
Re: (Score:2)
Hmm, I did forget about Thread objects being part of the language. But that doesn't mean they have to be part of the public API. You just fiddle with the package declarations so that programmers can't declare or instantiate Thread objects. The Thread objects still exist, but they're only accessible via the Concurrency classes.
Except this is all getting a little weird. I suspect that the real status of Thread (and the other classes missing from the "White List") is "deprecated" rather than "deleted". So you
Re: (Score:2)
The problem you're referring to is a well-known limitation of the java platform with a planned solution. The problem is that it's been stalled and hasn't made it past the JSR stage despite being first reviewed in 2001.
See either: Project Barcelona [sun.com] or the Java Isolates [jcp.org] JSR.
That combined with the Java Resource Consumption Management [jcp.org] AP
What about changing Java's license? (Score:3, Interesting)
I realize it's now too late but if it were a few years ago, SUN should have considered changing Java's license to make sure that whoever supports Java, supports it in its entirety.
Re: (Score:2)
Re: (Score:3, Interesting)
Google isn't calling their product Java. Google's product is called AppEngine. Google is free to say that AppEngine has "Java(TM) Language Support" without getting permission from Sun or anyone else.
Trademark isn't an absolute monopoly on the mark.
Re: (Score:2)
They did that for many years.
As I understand it sun was pulled between two conflicting forces. On the one hand with MS pushing .net they wanted java to be a first class citizen on linux. Otoh they wanted to keep control over java.
Being a first class citizen on linux basically requires being FOSS. If not your package will most likely be either excluded altogether or shunted off to some "non-free" repositry which is not enabled by default and likely has lower standards of maintinance.
After much dithering a co
Like J2ME/CLDC? (Score:4, Interesting)
CLDC, the bastardized, stripped version of Java the Sun blessed and which is still the standard on many phones broke the whole "run anywhere" paradigm.
Still causes us major problems since Sun still supports and condones it despite the fact that almost all systems now could easily support a real Java version.
Re: (Score:3, Insightful)
Exactly. I can't help thinking that Java might have been a lot more pervasive and standardised by now (not to mention that the CLR probably wouldn't exist) if Sun had been more open with Java licensing years ago.
Re: (Score:3, Interesting)
Heh. I had to write an IoC container that would run on CLDC 1.1. Fun fun fun. No Serializable meant I had to re-compile all my code. Love that fragile base-class problem.
Re: (Score:2)
Was going to post about how J2ME does exactly what they complain about: "Creating subsets of the core classes in the Java platform was forbidden", well, Sun itself did it and let me tell you, it makes Java's already convoluted API a nightmare to work with, and is ridiculous when programming on a device such as a Blackberry.
RIM had to provide alternatives to some useful Java classes that are just not present in J2ME, turning Blackberry development into an incompatible and horrendous mess, negating all the be
Flout not Flaunt (Score:5, Funny)
Java compatibility has served us all very well for (Score:3, Funny)
Sauce for the goose... (Score:2)
Re: (Score:3, Interesting)
We'd be worried about Microsoft attempting to create an MS-only ghetto that they lock people into
Like .NET?
For most parts, /. seems to be pretty much ignoring what msft is doing these days, as far as server technologies are concerned.
Uh, we did scream (Score:3, Informative)
Re: (Score:2, Insightful)
How does using a subset of java 'Lock you in' to google? You can take that implementation and go anywhere that has the full version of java available and install your app there. It will work with some configuration changes.
My guess is Google doesn't allow you to play with threads for performance reasons. The file i.o. is because of the system architecture. You need to write to a filesystem, you have to write to memcache.
As someone who is looking to write an app on the engine, some of their stuff bothers me,
AP Java Subset? (Score:2, Insightful)
why didn't they complain about GWT? (Score:3, Interesting)
Hmm...I wonder why they never complained about the limited subset of classes that GWT supports [google.com] in client-side code.
Re: (Score:2, Insightful)
Hmm...I wonder why they never complained about the limited subset of classes that GWT supports [google.com] in client-side code.
Because they never said that GWT supports "Java", they said it implements some JRE classes. And like everyone says, Sun is a sore loser for failing to release a usable cloud-computing project.
Not a full java environment anyway. (Score:4, Informative)
As far as I have learnt from a few cursory glances at appengine, it does not offer a complete OS environment. It is severely sandboxed, probably as a measure of security. All classes that deal with those non-existing features can either be non-existing, or exception-generating stubs. Google choose for those classes to be non-existent. That is something different than creating this-environment-only classes and functions, like MS did with their corrupted java. But there are prominent links on the appengine homepage to submit your own featers and bugfixes, so maybe all these complainers can contribute patches instead of contributing whine?
Android derives from DavlicVM & Harmony. (!Jav (Score:2, Informative)
Technically, Google's Android is a code derivative of DavlicVM and Apache Harmony. Apache Harmony and DavlicVM can be considered as similar to Java. However, Android is Not a subset of Java.
Some links to articles discussing the topic:
http://www.javaworld.com/community/node/2683 [javaworld.com]
Some information on DavlicVM and Apache Harmony:
http://www.dalvikvm.com/ [dalvikvm.com]
http://harmony.apache.org/ [apache.org]
Each VM/platform has its strengths and purpose. There should be room in the IT industry for Java, Apache Harmony, Google App Engine,
yes well, who cares really (Score:2)
there fixed that for you.
Everything you need is there (Score:3, Insightful)
OK, no Swing, no Corba etc. But I cannot see what part is missing for cloud computing (or any other algorithm. The collections classes (even the thread safe ones), all cryptographic stuff etc. The only thing that really seems to be missing is graphics (images). But for most cloud computing needs, this should be sufficient.
Anything else you may be able to import using the classes from the open source JDK anyway. As long as you don't create files etc. of course, thanks to the sandbox. And we're not talking about a release of another JDK or anything like that, in that case it would be a problem not to include the default functionality.
This seems to be a bit of a cheap shot. He should well know that you cannot display any personal opinions that are directly in his line of work, and then claim that they are not the opinions of his employer. Not in his position.
HOWTO: Using a SUBSET to create LOCK-IN!!! (Score:4, Insightful)
Re: (Score:2, Interesting)
Your theory falls flat when you hit point #2
The following packages do not exist.
google.io.*
google.threads.*
google.db.*
google.util.*
If, in the future, google does add those libraries, I would fully expect them to be opensourced.
Re: (Score:3, Insightful)
Your theory falls flat when you hit point #2
The following packages do not exist. google.io.*
google.threads.*
google.db.*
google.util.*
If, in the future, google does add those libraries, I would fully expect them to be opensourced.
I can see how you misunderstood the posting. Please, let me help you.
I will do this in two parts:
[PART-1]
I am sure that you only missed the that I used "e.g." ( what is an e.g.? [about.com]) in the above, otherwise you would not have made the mistake of thinking that it could have been referring to anything else other than an example being posited for the discussion.
Those names were examples... hypothetical, if you will.
Now that that is all cleared up, give the post a re-read... but only after reading PART-
Sun folks often have no clue about Java (Score:2, Insightful)
Google's response... (Score:2)
Re:do their own then... (Score:4, Funny)
bahahahaha. Sun? Money?
You've not been here long, eh? :)
Re: (Score:3, Insightful)
Re:do their own then... (Score:5, Interesting)
Seems to me they should put their money where their mouth is...
Sun *DID* put their money where their mouth is. They developed java, then GPL'd it. They bought StarOffice, the GPL'd it.
Google, on the other hand, is an advertising company that is trying to get lock-in, same as Microsoft did with their proprietary java extensions long long ago ...
Re:do their own then... (Score:5, Insightful)
If you want lock-in, you create a superset of the competitor's platform, or a variant of the platform that behaves differently, then push people to use your proprietary features. Implementing a subset of the competitor's platform just raises the cost of porting to your implementation, and creates no barrier to moving from your implementation to others' implementations.
The java-subset thing seems like a bad idea; and I'd be curious to know why they did it; but I don't see how a platform subset is a good basis for a lock-in strategy.
Re:do their own then... (Score:5, Informative)
http://code.google.com/appengine/docs/java/runtime.html#The_Sandbox [google.com]
So I would say the reasons behind their decision would boil down to "cutting out the stuff that isn't compatible with the model the App Engine uses to run things".
Re: (Score:2)
Sounds like they should have specified a security model that would forbid certain classes and method rather than simply removing classes. Or was that too hard for Google's engineers? As a developer, would you rather have you application fail to run, or throw a completely bizzare ClassNotFoundException: java.lang.System, or run but throw an informative SecurityException when it tried to call System.exit()?
Re: (Score:3, Interesting)
If you are developing for the App Engine, does it matter the flavor of the error? If you aren't developing for the App Engine and you are just looking to port something you've already written over, shouldn't you be reading the documentation concerning it first?
Developer-wise, this should be a non-issue. Unless you were expecting things to just plug in directly, coding to match how the App Engine works was a given anyway.
I agree with the others who opine that this is simply sour grapes from someone too late
Re:do their own then... (Score:5, Insightful)
Well sure, If you're re-using a standard library it may have handling for the security exception chain and either fail gracefully or work with limited functionality.
If a JDK class is missing and the library class you want to use references it the code won't even run with an UnsatisfiedLinkError. That is a HUGE difference.
Another case where the library class references a missing JDK class but the use of the library class you're using never touches the forbidden code. In that case you again get a UnsatisfiedLinkError. If the use of the JDK class was just restricted by a security policy you only get the security exception if you actually call the API, a much better alternative.
Re: (Score:2)
So it seems like you're saying that what Google did is better than what the guy from Sun thinks they should have done. Because it's *always* better to get a compile-time error than a run-time error.
Re: (Score:3, Insightful)
Imagine that you use some 3rd party library that includes code for caching to disk. Since you know you can't write to disk on the AppEngine, you disable caching in the configuration. But the UnsatisfiedLinkError is still there.
Re:do their own then... (Score:5, Informative)
Except you're not going to get compile time errors from the third party library you're using since it is already compiled, you're still stuck with the ugly runtime UnsatisfiedLinkErrors. The JDK has features to support what Google wants to do built in specifically for this case and they really aren't very complicated to use.
Re: (Score:2)
Re: (Score:2)
http://code.google.com/appengine/docs/java/gettingstarted/installing.html [google.com]
And given the SDK they point you to is Sun's and this is Google, how unlikely is it that the things being complained about are actually being managed by a security manager and not actually missing. I.E. Communication error.
Re: (Score:3, Insightful)
I'm not sure what you mean. The complaints seem to indicate that you'll get things such as "NoClassDefFoundError" and the like, rather than the more appropriate "SecurityException". As to which one actually happens, I don't know. The point is that a developer, developing an application for Java, should not have to concern himself whatsoever with NoClassDefFoundErrors when interacting with standard jvm classes. He SHOULD however, be concerned with potentially encountering SecurityExceptions.
My point w
Re: (Score:2)
Agreed, And not being a Java developer I have no way of knowing the truth of whether Google did it the 'right' way or not other than asking. However, the only complainer I've actually seen is someone from Sun, a company who has a vested interest in making whatever Google did look bad and not a stellar rep with me for saying things 100% on the up and up all the time.
Additionally, I don't see anywhere in the 'official' statements indicating that Google actually removed anything in the breaking sense. Google's
Re:do their own then... (Score:5, Informative)
The Right Way:
Google's way:
Re:do their own then... (Score:5, Informative)
Citation needed, please. Here's what Google's documentation about java.lang.System [google.com] says:
What about this is unreasonable? Where does it say that apps will get ClassNotFoundExceptions? Please stop spreading unsubstantiated FUD.
Re:do their own then... (Score:4, Insightful)
I like that better than The Sun Way:
Re: (Score:2)
Yeah I'm surprised they didn't do this. Everything they describe is doable via a security policy configuration file and a single custom ClassLoader implementation.
Re: (Score:3, Informative)
I did go to Google review the App Engine Java documentation, what there is of it. It's not clear if a class like java.lang.System (which is whitelisted, btw) locked through security policy or simply re-implemented in some crippling way. A bit of a failure to provide clear guidelines on Google's part, but becomes a real development problem because they've already stated their Java doesn't conform. Programmers are left guessing or having to find out through failure what the actual behavior is.
Re: (Score:2)
Then subclass for f***'* sake
Re:do their own then... (Score:5, Insightful)
Re: (Score:2)
This article writer is a tool. Interestingly enough, most of these restrictions (no filesystem access, no sockets, no spawning threads) are EXACTLY the same restrictions as recommended by Sun for EJB: http://java.sun.com/blueprints/qanda/ejb_tier/restrictions.html [sun.com]
Re:do their own then... (Score:5, Interesting)
It's not the restrictions, it's the implementation. Normally, existing Java code could just be compiled on the embedded system, and compiler errors would specifically identify security reasons for specific classes/methods/etc being disabled. Google removed the classes entirely, so the developer will just get IDontKnowWTFThatClassIs exceptions instead, which are less informative.
It also contravenes existing standards, sort of like making "dangerous" files invisible to unprivileged users in *NIX (via some sort of arcane black magic, perhaps a modified (munged) shell or something...) instead of just setting appropriate file permissions.
Re: (Score:2)
Re:do their own then... (Score:5, Interesting)
Yeah, this is garbage. Watch the "campfire" videos, a boringly large part of the presentations is given over to how you are not locked in, because AppEngine exposes the standard Java servlet container and database access APIs even though it's based on BigTable which is not a standard database. They show how the guestbook app can be taken right across to run on WebSphere with no code changes. The design of Java on AppEngine is pretty much the opposite of lockin - they've clearly put a lot of effort into ensuring a very, very different underlying system can export the standard Java APIs.
As to why it's a subset, I guess the same logic as applied to the Python implementation which is also a subset - due to the way it works the classes need to be audited for security problems. Some of the Java APIs contain native code which probably has to be rewritten or at least very carefully audited to ensure you can't break out of the sandbox. And some I guess just aren't that useful. But I don't really know the reason.
Re:do their own then... (Score:5, Insightful)
While I agree that google is not Mr. Friendly, I'd be surprised if this particular move is about lock-in.
It never is. Whenever somebody modifies standard technology to suit themselves, they get accused of trying to create lockin. That's what happened when Phil Katz [wikipedia.org] decided he could redo the ARC format faster and smaller. That's what happened when Anders Hejlsberg [wikipedia.org] decided he couldn't live with Java's limitations [zdnet.com]. Netscape and HTML. Microsoft and HTML, CP/M, x86....
Lockin does usually occur when people do things in a different way, and the different way ends up being the de facto standard. But that's not why they do them. They do them because developers just plain like to do things their own way.
In the case of Google's "white list" this doesn't even come close to being lockin, because any application that will run on Google's classes will run on "standard Java". Sun's problem is that the reverse isn't true. And I'm not sure that really matters. Unless I've missed something, the missing classes are all legacy cruft that should have been deleted from Java long ago.
So why haven't they been? Lack of will. One Java core engineer told me that Sun got in trouble when they even deprecated an API, never mind removing a whole class. People just don't want to fix up all their legacy code, and Sun was too anxious to monetize Java to stand up to them.
Google has more flexibility, since they don't need for their version of the Java platform to make money anytime soon.
Re: (Score:3, Interesting)
Sun's problem is that they are working up to the general launch of their cloud computing services, and Google AppEngine supporting more than just Python makes it that much harder for any new launch to get traction.
Re: (Score:2)
Please. Not every shoot-from-the-lip blog entry is part of a FUD campaign.
Re: (Score:2)
I, too, eagerly await the deprecation of java.lang.Thread, and the loss of the ability to open sockets and write directly to the filesystem. Who needs that cruft?!
In all seriousness, the missing functionality isn't about trimming cruft, it's about sandboxing so that apps can readily be hosted in google's "cloud", and play nice with other apps.
Legacy code? Like FORTRAN? (Score:2)
I think I can speak a bit about legacy code. Where I work there are some old apps written in FORTRAN-77. Yes, I know the current name of that language isn't written all-caps anymore, but that's the whole point: the code is still all-caps, it was written in 1977 and never rewritten since then.
There's a bunch of old engineers who aren't old enough to retire who insist on keeping tha
Re: (Score:2)
Most of what's wrong with FORTAN got designed in 50 years ago. Plus they're mostly part of the fundamentals of the language. Maintaining compilers that handle ancient FORTRAN design mistakes (FORTRAN was the very first high-level language, and taught all subsequent language designers a lot about how not to go about it) is one thing. Removing a class from Java is quite another. It's completely different from changing a language feature, which Sun is very very conservative about doing.
(Once had a coworker wit
Re: (Score:2)
What, like Microsoft did when it reinvented Java for IE? Do you really want a 3rd version of Java that's not quite compatible with regular Java (counting gcj as the 2nd)?
I'm fine with the GOOG not offering Java support, but what's the justification for only offering half-assed support? It kills the whole point of portability.
Re: (Score:3, Insightful)
Subtle yet important difference to me, Microsoft released something that did include the 'full set' plus some but didn't work the same as the specs said it should.
Google simply didn't release a full set.
And where Microsoft pulled their stunt to kill Java, I imagine Google did it for technical reasons (i.e. trying to lock down the sandbox) since they have said they want to add more classes to the list of allowed ones.
Re:do their own then... (Score:5, Insightful)
The justification is the same as Sun has when it creates a limited profile of Java for a special environment, like Java ME: the demands of a special environment.
Re: (Score:3, Informative)
I used to hate Java (and JavaScript) because it took forever to load, turning a screaming fast Internet connection into a rush hour exercise in patience, but they improved that and I started singing the praises of Java and JavaScript. Then I found that even though JavaScript is still good, Java now drives me crazy
You know this already, but Java and Javascript are technologies that are not related to each other in any way, apart from the unfortunate naming. Javascript is as close to C as it is to Java.
Re: (Score:3)
So your blaming Sun for Ciscos ineptitude. I have code written under the 1.0.2 Java SDK that still runs under Java 1.6. There again, unlike Cisco's engineers I understood what portability was, because I was targeting SunOS as well as Windows.
Re: (Score:2)
I thougth the a key feature of java was "write once - run anywhere".
It is. Although "write properly once - run anywhere" would probably be more accurate.
Dont blame the developer if a new JVM breaks a java app.
Most issues I have seen with a new JVM breaking a java app is because the app developer was doing something they weren't supposed to. (using com.sun classes, relying on undocumented, "undefined" behavior, etc) If you code to the spec, and only expect methods to do what they say they'll do in the documentation, chances of a new JVM breaking your application are very slim.
As a disclaimer, note that I use terms like "
Re: (Score:3, Interesting)
As far as I'm concerned, Sun (or anyone complicit in their activities re: Java) lost all right to bitch about this once every new version of Java consistently broke backwards compatibility with previous versions.
In some aspects, it is the fundamental deficiency of Java the language. Because all methods are implicitly virtual and all overrides are also implicit, and because override resolution happens at class load time, not at compile time (i.e. if Derived.class derives from Base.class, and both have method void foo(), then Derived.foo will override Base.foo - even if, when Derived.class was compiled, Base.class didn't contain foo yet), you get a specific case of fragile base class problem [wikipedia.org] in Java that's effectivel
Re: (Score:2)
Sun actually is launching their own cloud computing environment this summer, and has been announcing tie-ins to a lot of their existing products for it ("Save to Cloud", "Load from Cloud" in OpenOffice.org, Cloud related functionality in Netbeans 6.7, etc.) If their attempts to market their cloud offerings fall flat (which AppEngine supporting more than just Python makes somewhat more likely, as they have more competition, though I think Amazon