Slashdot Mirror


James Gosling On .NET And The Anti-Trust Trial

gwernol writes: "There's a short but interesting interview with James Gosling over on ComputerWorld. He talks about the differences between J2EE and .NET and also about the Microsoft anti-trust trial. Some interesting perspectives from the founder of Java."

15 of 270 comments (clear)

  1. J2EE vs .NET by Hemos+(editor) · · Score: 5, Informative

    I read this comparison last November. The author, Dean Wampler, Ph.D., concludes the following:

    "The experimental flaws of the Microsoft tests render the performance comparisons unusable. All tests must be run on the same test bed and a more suitable application must be chosen. J2EE and .NET are most appropriate for large-scale, high availability applications. The documented tests say little about how well these frameworks support those applications.

    The .NET and Java Pet Stores support the same features, but they implement different "nonfunctional" requirements. The .NET version assumes a single hardware/OS/database combination and makes performance paramount. The Java version supports multiple hardware/OS/database combinations and ranks performance as less important. In fact, both frameworks can support either emphasis. Hence, comparing the two code bases is misleading.

    For developers who are comfortable with limited choices, .NET is a well-designed framework with good tools. J2EE provides greater freedom, but the J2EE community can't ignore the need for tools that create powerful and efficient applications in a timely manner."

    The Ultimate Linux Bookmark

    1. Re:J2EE vs .NET by md17 · · Score: 2, Informative

      This is just FUD!!! If you are a Java Developer this stuff is trivial...
      1) Use Forte / Eclipse / Netbeans to build your app.
      2) Download JBoss 2.4.4 with Tomcat.
      3) type something like tar -zxvf jboss.tar.gz
      4) type somthing like jboss/startup.sh
      5) copy your .ear to the jboss/deploy dir
      6) Browse to localhost/myapp

      It really isn't that hard. Come on people. Please quit bashing J2EE speading FUD about how difficult it is. It really isn't.

  2. Speaking of .NET... by Flarners · · Score: 5, Informative

    Microsoft released their shared-source CLI and C# implementation a couple days ago. I've been playing with it on my FreeBSD box, and while it's hardly the Java killer Microsoft's making it out to be, it's an interesting piece of work. If you've got a spare FreeBSD or Windows XP box lying around, download the source, compile it and play around with it some; it's always nice to know something about the platform before you start bashing it mercilessly :-)

    --
    "The problem with the French is that they don't have a word for 'entrepeneur'." -George W. Bush
    1. Re:Speaking of .NET... by rabtech · · Score: 5, Informative

      Well, let's look at your statements:

      "It seems worth pointing out that it is "illegal"
      (in the sense that that Microsoft owns the law)
      to do this on Linux. Really. Not kidding. Read
      the license."

      Now, let's look at Microsoft's license. (original in italics, my comments normal.)


      MICROSOFT SHARED SOURCE CLI, C#, AND JSCRIPT LICENSE

      This License governs use of the accompanying Software, and your use of the Software constitutes acceptance of this license.

      You may use this Software for any non-commercial purpose, subject to the restrictions in this license. Some purposes which can be non-commercial are teaching, academic research, and personal experimentation. You may also distribute this Software with books or other teaching materials, or publish the Software on websites, that are intended to teach the use of the Software.

      You may not use or distribute this Software or any derivative works in any form for commercial purposes. Examples of commercial purposes would be running business operations, licensing, leasing, or selling the Software, or distributing the Software for use with commercial products.


      OK, so the license covers the software only, not works which take advantage of it. You can only use it for non-commercial purposes... well, the source code anyway.


      You may modify this Software and distribute the modified Software for non-commercial purposes, however, you may not grant rights to the Software or derivative works that are broader than those provided by this License. For example, you may not distribute modifications of the Software under terms that would permit commercial use, or under terms that purport to require the Software or derivative works to be sublicensed to others.


      OK, so I can make modifications to the software AND give them away, so long as I don't try and sublicense it or make the license terms broader than they already are. Fair enough?


      You may use any information in intangible form that you remember after accessing the Software. However, this right does not grant you a license to any of Microsoft's copyrights or patents for anything you might create using such information.


      Here is a very important point: Looking at this code does NOT in any way restrict your contribution to other Open Source projects or business use. The only thing is that it doesn't grant you use of their copyrights/patents, which you don't have in the first place. you cannot restrict yourself or generate any harm by looking at this source code. I know many of you are doing a double-take, but look at the license.


      In return, we simply require that you agree:

      Not to remove any copyright or other notices from the Software.

      That if you distribute the Software in source or object form, you will include a verbatim copy of this license.

      That if you distribute derivative works of the Software in source code form you do so only under a license that includes all of the provisions of this License, and if you distribute derivative works of the Software solely in object form you do so only under a license that complies with this License.

      That if you have modified the Software or created derivative works, and distribute such modifications or derivative works, you will cause the modified files to carry prominent notices so that recipients know that they are not receiving the original Software. Such notices must state: (i) that you have changed the Software; and (ii) the date of any changes.

      THAT THE SOFTWARE COMES "AS IS", WITH NO WARRANTIES. THIS MEANS NO EXPRESS, IMPLIED OR STATUTORY WARRANTY, INCLUDING WITHOUT LIMITATION, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT. ALSO, YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS.

      THAT MICROSOFT WILL NOT BE LIABLE FOR ANY DAMAGES RELATED TO THE SOFTWARE OR THIS LICENSE, INCLUDING DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL OR INCIDENTAL DAMAGES, TO THE MAXIMUM EXTENT THE LAW PERMITS, NO MATTER WHAT LEGAL THEORY IT IS BASED ON. ALSO, YOU MUST PASS THIS LIMITATION OF LIABILITY ON WHENEVER YOU DISTRIBUTE THE SOFTWARE OR DERIVATIVE WORKS.

      That if you sue anyone over patents that you think may apply to the Software or anyone's use of the Software, your license to the Software ends automatically.

      That your rights under the License end automatically if you breach it in any way.

      Microsoft reserves all rights not expressly granted to you in this license.


      OK, to sum up:

      You agree not to remove copyright notices. You also agree to distribute the license with any derivative products, etc. You agree not to distribute the software or modifications with a license that is broader or incompatible with this one. You must include a notice that your code is not Microsoft original code, and when it was modified.

      So far, that all sounds fairly reasonable to me.

      You also have to agree that Microsoft provides no warranties on the software, and that derivative works don't have any warranty (because that would make MS liable.) This is standard in the software industry, so no surprise there.

      An odd provision comes next: if you sue anyone over patents that you think apply to the software or anyone's use of it, you lose your license automatically. Basically, you can't sue anyone for using your patents related to this software or any modifications whatsoever. This doesn't really protect Microsoft, as you can still sue them, you just can't use their code. However, it does protect consumers of your modified code, in that you cannot come along a year later and sue them all saying your derivative includes software patents that you own and would now like to collect royalties on.

      Lastly, but not least, if you violate the license you lose it, and Microsoft reserves the right to kick you to the curb if they don't like you.

      Well, honestly... I don't know where the magic "you cannot use this sourcecode on linux or on/with any GPL stuff" phrase is, but perhaps I misread the license somehow.

      --
      Natural != (nontoxic || beneficial)
  3. Re:Mac user? by blukens · · Score: 2, Informative

    If you're refering to this arcticle, it's worth noting (yet again) that 1.3.1 has been out for OS X for nearly six months now. That was just a bug fix update, and therefore it was hardly -just- released. Which isn't to say that Apple isn't at all behind the Java curve, but it's not as bad as some make out. It has also been stated that Apple will preview 1.4 in May at the WWDC, and that they hope to be in sync with Sun by the release of 1.5.

  4. Microsoft trying to lure people away from Java. by TheFlu · · Score: 5, Informative

    Here is an interesting article, describing how Microsoft is trying to get Java developers to write J# (java) code for the .NET platform. Unfortunately .NET only runs on the Windows platform, which has Sun a bit upset.

  5. Re:"Hi kettle, my name's pot!" by Anonymous Coward · · Score: 1, Informative

    you are wrong man. Emacs was made at MIT. RMS contributed some to it. Gosling then made Emacs for Unix. RMS then took that code to build GNU Emacs, so RMS in some sense did steal from Gosling, but also did work on Emacs before Gosling.

  6. Re:"relieved that it wasn't creative" by tshak · · Score: 5, Informative

    Yeah. Yeah. I mean, abused and ripped off was also in there just to some extent.

    I do find it obvious that there are some things in C# that are like Java. However, it seems to me that this is generally moot considering both languages where heavily inspired from C++. When you do your homework, you find that C# is actually quite different the Java:

    + C# is completely OO - even an Int32 is an Object. Java uses primitive types.
    + C# uses Delegates for Event Handling (think function pointers, but different).
    + C# supports the use of Properties instead of Getter and Setter methods.
    + C# supports Indexers which allow objects to be treated as Arrays.
    + C# forces explicit Method Overriding (via the virtual/override or new keywords).
    + C# supports namespaces. Unlike Java's packages, namespaces do not rely on a file/folder structure.
    + The C# Abstract or "Virtual Machine" (CLR) is not designed for C#, rather for language neutrality (to an extent). Java and the JVM, however, are closely tied.

    I could go on. Whethor or not you think that these differences are Good Things(tm), the point is, they are definitely different langauges. Although there may have been some inspiration from Java, I'd be hard pressed to call it a "Java Ripoff".

    --

    There is no longer anything that can be done with computers that is nontrivial and clearly legal. -- Paul Phillips
  7. Talking out of one's posterior by Flarners · · Score: 2, Informative
    I have read the license, and it permits any and all modified versions to be released under the exact same license, as long as the modified versions are clearly labelled as such:
    In return, we simply require that you agree:

    [snip]

    3. That if you distribute derivative works of the Software in source code form you do so only under a license that includes all of the provisions of this License, and if you distribute derivative works of the Software solely in object form you do so only under a license that complies with this License.
    4, That if you have modified the Software or created derivative works, and distribute such modifications or derivative works, you will cause the modified files to carry prominent notices so that recipients know that they are not receiving the original Software. Such notices must state: (i) that you have changed the Software; and (ii) the date of any changes.

    IANAL, but I see NOTHING in there that would prevent the creation and distribution of a Linux port. While it's certainly not the GPL, the license is more than adequate for its intended purpose: a reference implementation and educational tool. Please don't spread FUD like that.
    --
    "The problem with the French is that they don't have a word for 'entrepeneur'." -George W. Bush
  8. Re:"relieved that it wasn't creative" by the+eric+conspiracy · · Score: 2, Informative

    + C# is completely OO - even an Int32 is an Object. Java uses primitive types.

    That is flat out silly. Java provides object wrappers for it's primitive types.

    If you want to talk about non-OOP features, C# is full of them. Like structs for example. Who came up with that idea? And how about pointers? WTF? As far as Indexers go (and pretty much all the differences between Java and C#), they are just syntactic sugar that really just makes code confusing to read compared to Java.

    The C# Abstract or "Virtual Machine" (CLR) is not designed for C#, rather for language neutrality (to an extent). Java and the JVM, however, are closely tied.

    That's a hoot! The fact is that CLR doesn't support anything that can't be accessed from C#. That's why implementations of other languages have had to drop features like multiple inheritance before CLR implementations. All CLR does is provide a Procrustian cot for other languages to lie on. Head over the top? Lop it off!

    There are many programming languages available for the JavaVM, including Lisp, Scheme, JavaScript, JPython, Prolog, and Eiffel. The fact is that the JVN is very little, if at all more language centric than is the CLR.

    Although there may have been some inspiration from Java, I'd be hard pressed to call it a "Java Ripoff".

    If it isn't a Java ripoff, then why is everyone comparing it to Java?

    The fact is that Microsoft never innovated anything - and C# is just another Microsoft clone of somebody else's real innovation, plus marketing spin.

  9. Re:"relieved that it wasn't creative" by tshak · · Score: 2, Informative

    Interesting point. However, a System.Int32 does inherit from System.ValueType, which inherits from System.Object. Whethor or not this is a "good" thing or not, I think it shows the differences between (the) C#/CLR and Java/JVM, which was my main point. Maybe it's more accurate to state, "C# is more OO then Java".

    --

    There is no longer anything that can be done with computers that is nontrivial and clearly legal. -- Paul Phillips
  10. Where did you learn OO? by Carnage4Life · · Score: 5, Informative
    That is flat out silly. Java provides object wrappers for it's primitive types.

    Object wrappers for primitives is not the same as the primitives themselves being treated as objects. Anyone whose used a true OO language like Smalltalk cringes and the inconsistency in Java between primitives and objects. Even C++ tries to make them as interchangeable as possible especially with templates.

    For instance in Java there's no way to pass just a primitive like "5" or 2.6 to a method that takes an object while in C# and Smalltalk you can.

    If you want to talk about non-OOP features, C# is full of them. Like structs for example. Who came up with that idea? And how about pointers? WTF?

    The above comments how that you've somehow confused object oriented with Java which unfortunately are not the same thing. An object oriented system has 3 main qualities i) encapsulation or information hiding ii) inheritance and iii) polymporhism. All three of which can be done with C# structs (or value types). Secondl, I am immensely confused what the existence of an explicit pointer type has to do with whether a language is OO or not.

    As far as Indexers go (and pretty much all the differences between Java and C#), they are just syntactic sugar that really just makes code confusing to read compared to Java.

    Really? So
    Math.Add(myList.getObjectAtIndex(0), myList.getObjectAtIndex(1));
    is easier to read than
    Math.Add(myList[0], myList[1])
    On what planet?

    That's a hoot! The fact is that CLR doesn't support anything that can't be accessed from C#. That's why implementations of other languages have had to drop features like multiple inheritance before CLR implementations. All CLR does is provide a Procrustian cot for other languages to lie on. Head over the top? Lop it off!

    The Java VM was designed to run Java while the CLR was designed to be language agnostic. The fact that C++ can run on the CLR is a testament to this fact.
  11. Okay, I'll bite. by Stu+Charlton · · Score: 5, Informative

    - You're using J2EE. That implies you probably should be using JBuilder 6 Enterprise which has numerous J2EE features for automating configuration of EJB's. If you're not using the enterprise edition, then your comparison is lacking in credibility, as Visual Studio .NET enterprise edition is approximately the same price.
    - You have to edit four files to add a field to an EJB? Let me assume for a minute that you're using container managed persistence, which is the only scenario that would require such changes. Most tools will allow you to define the new field in your local interface, and will then propagate that field to your implementation class and your ejb-jar XML file. The second XML file, I will assume, is a custom deployment descriptor. Again, I would hope you're using a vendor's tool to manage this thing. But even if not, I find your indignaton towards all of this "work" somewhat amusing.

    To put this tremendous amount of work in context, how much work does it take to add a field to a regular database table wtih a SQL call in JDBC, or for that matter, ADO.NET? That would require:
    - doing a DML statement on the table to add the column at easiest. In some environments this may require several DML statements to create the new table, re-populate it with old data, populate it with the new column's data, then drop the old table and rename the new one.
    - changing 1-2 method call signatures to take in extra parameters for inserts and updates.
    - changing the JDBC code for reading, updating, and inserting to take the new field into account
    - possibly adding the field to a data object that holds the data in memory.

    Phew! I'm glad there's alternatives to EJB, it's so much easier without it.

    Now, on to the next cow:
    Deploying a JAR to two different places (jBoss and Tomcat). Firstly, I question what the problem is. You would deploy an EJB JAR to a jBoss instance and a WAR to tomcat, or you could just put it into one big EAR file and fo'gettaboutit. If you have two servers, then the ant optional tasks package could very easily do this work for you with approximately 3 lines of XML configuration.

    The best part about your post is that "there probably are better ways". Yes, there are. Hire a consultant for 3 or 4 hours to help you out, it will probably be worth the $1000+. If you're missing GUI tools for jBoss, that would be because it doesn't really have any. Use a commercial server if you're not willing to hand-craft your config & deployment.

    --
    -Stu
  12. Re:Gosling's and Sun's markting fluff by Stu+Charlton · · Score: 3, Informative

    C# has value classes, operators, multidimensional arrays, and easy and efficient interfaces to native code.

    JDK 1.5 is going to include autoboxing of primitives. Operators aren't going to happen, by design. Multi-dim arrays, not really important to those outside of high-performance computation. Easy trap-doors to native code is a plus for C#, yes.

    And Sun really has a double standard there: when Apple exposes all their native platform APIs to Java, that's fine. It's just not fine when Microsoft does it

    You're ignoring some proven facts here, such as smoking gun memo's from Microsoft executives ordering the "pollution of Java". Adding keywords & extensions were not violations of the contract -- breaking RMI and JNI, and not supporting JFC/Swing were violations. Apple didn't break compatibility; Microsoft did.

    What can open source developers do with Java before Sun is going to try and sue them?

    What can Slashdot readers do when someone who's on a rant starts spouting FUD? Drop the drama, please.

    Today, it's a huge system with incompletely specified APIs, lousy support for high-performance computations, and no independent third party implementations (all compliant Java2 implementations depend to a large degree on Sun's source code).

    How are the API's incompletely specified?
    How is high performance computation support "lousy" when most studies to this effect show that it's getting better every JDK release?
    And IBM's JDK is *not* dependent on any Sun code.

    If Sun doesn't clean up its act quickly, after seven years of lobbying for Java and using it for lots of software, I'm dropping it.

    It's one thing to be objectively critical of Sun's complex behavior. It's another to be venting frustration unobjectively. Guess which of the two you're doing.

    --
    -Stu
  13. Where did you learn Java or English? by Anonymous Coward · · Score: 1, Informative

    Really? So
    Math.Add(myList.getObjectAtIndex(0), myList.getObjectAtIndex(1));
    is easier to read than
    Math.Add(myList[0], myList[1])
    On what planet?

    -------
    For the record, Java has never had any method
    named getObjectAtIndex(). There are a few methods
    named getObject() in the sql package, but to perform
    the operation you're suggesting, you could do either:

    Math.add(myList.get(0), myList.get(1))

    That is assuming (incorrectly) that Java has a
    static method in Math called add();
    it does not. If you want to perform addition,
    you'd simply say:

    int val = myList.get(0) + myList.get(1);

    or if you're using arrays instead of a Collection,
    you could say:

    int val = myArray[0] + myArray[1];

    While I'm at it, on "what planet" is

    myList[0], myList[1]

    "easier to *read*" than myList.getObjectAtIndex(0)?
    My first language is English, not C syntax, so
    words written in a human language tend to come
    off as "easier to *read*".

    I'd rather read and write something like:

    myArray at: myIndex

    which is the truly "easier to *read*" syntax
    of Smalltalk which isnt based on C syntax like
    practically every major language in use today.

    (apologies if I come off as too bitter but
    it sucks that Smalltalk doesnt have the market-
    or mind-share that all these beloved C syntax
    langs do)
    -
    Max Korn