Slashdot Mirror


Sun's Phipps Slams App Engine's Java Support

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.'"

9 of 186 comments (clear)

  1. Pot. Kettle. Black. by TheRealMindChild · · Score: 4, Insightful

    '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.'

    You mean like Java ME?

    --

    "When life gives you lemons, don't make lemonade. Make life take the lemons back!" -- Cave Johnson
    1. Re:Pot. Kettle. Black. by DragonWriter · · Score: 4, Insightful

      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.

      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.

    2. Re:Pot. Kettle. Black. by DragonWriter · · Score: 4, Insightful

      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.

      I really don't think that Java developers have much trouble understanding or using a clearly defined subset of existing functionality.

      This actually looks a lot like what Microsoft got in trouble for with their MS Java.

      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.

  2. Re:do their own then... by fuzzyfuzzyfungus · · Score: 5, Insightful

    While I agree that google is not Mr. Friendly, I'd be surprised if this particular move is about lock-in. Not because of any belief in google's virtue; but for basic technical reasons.

    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.

  3. Re:do their own then... by DragonWriter · · Score: 4, Insightful

    IrI'm fine with the GOOG not offering Java support, but what's the justification for only offering half-assed support?

    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.

  4. Re:do their own then... by fm6 · · Score: 4, 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 decided he could redo the ARC format faster and smaller. That's what happened when Anders Hejlsberg decided he couldn't live with Java's limitations. 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.

  5. Re:do their own then... by goofy183 · · Score: 4, 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.

  6. HOWTO: Using a SUBSET to create LOCK-IN!!! by onitzuka · · Score: 4, Insightful
    1. Remove APIs for Threads, File Access, ThreadGroups, or whatever you feel you want removed (eg. java.io.*, java.lang.*, java.util.*, etc...)
    2. Replace those features with APIs that offer features only available on the Google's application server. (eg. google.io.*, google.threads.*, google.db.*, google.util.*, etc...)
    3. Have developers write their code for your Google application server.
    4. Snicker knowingly because you know that Java Servlet/JSP developers can and do use Threads and file systems and network access in their applications. In fact PHP developers use file systems all the time along with network access. Why do you snicker? Because you know they cannot simply copy their applications to Google App Engine without reimplementing it and creating a version JUST for Google App Engine. As the implementations are different and we know that developers time costs money($$$), managers will eventually have to decided whether to continue to support the open Servlets/JSP implementation (which could be ported to Tomcat, Resin, JBoss, or any others) or if they will just go with the Google App Engine version.
    5. Laugh when they cannot port their applications out WITHOUT reimplementing all of the private APIs.
    6. Profit
  7. Re:do their own then... by lamber45 · · Score: 4, Insightful
    Those restrictions are very siliar to the ones imposed upon Enterprise Java Beans. Quoting from the Sun documentation:

    Specifically, enterprise beans should not:

    • use the java.lang.reflect Java Reflection API to access information unavailable by way of the security rules of the Java runtime environment
    • read or write nonfinal static fields
    • use this to refer to the instance in a method parameter or result
    • access packages (and classes) that are otherwise made unavailable by the rules of Java programming language
    • define a class in a package
    • use the java.awt package to create a user interface
    • create or modify class loaders and security managers
    • redirect input, output, and error streams
    • obtain security policy information for a code source
    • access or modify the security configuration objects
    • create or manage threads
    • use thread synchronization primitives to synchronize access with other enterprise bean instances
    • stop the Java virtual machine
    • load a native library
    • listen on, accept connections on, or multicast from a network socket
    • change socket factories in java.net.Socket or java.net.ServerSocket, or change the stream handler factory of java.net.URL.
    • directly read or write a file descriptor
    • create, modify, or delete files in the filesystem
    • use the subclass and object substitution features of the Java serialization protocol