decoration decoration
Stories

GROKLAW
When you want to know more...
decoration
For layout only
Home
Archives
Site Map
Search
About Groklaw
Awards
Legal Research
Timelines
ApplevSamsung
ApplevSamsung p.2
ArchiveExplorer
Autozone
Bilski
Cases
Cast: Lawyers
Comes v. MS
Contracts/Documents
Courts
DRM
Gordon v MS
GPL
Grokdoc
HTML How To
IPI v RH
IV v. Google
Legal Docs
Lodsys
MS Litigations
MSvB&N
News Picks
Novell v. MS
Novell-MS Deal
ODF/OOXML
OOXML Appeals
OraclevGoogle
Patents
ProjectMonterey
Psystar
Quote Database
Red Hat v SCO
Salus Book
SCEA v Hotz
SCO Appeals
SCO Bankruptcy
SCO Financials
SCO Overview
SCO v IBM
SCO v Novell
SCO:Soup2Nuts
SCOsource
Sean Daly
Software Patents
Switch to Linux
Transcripts
Unix Books

Gear

Groklaw Gear

Click here to send an email to the editor of this weblog.


You won't find me on Facebook


Donate

Donate Paypal


No Legal Advice

The information on Groklaw is not intended to constitute legal advice. While Mark is a lawyer and he has asked other lawyers and law students to contribute articles, all of these articles are offered to help educate, not to provide specific legal advice. They are not your lawyers.

Here's Groklaw's comments policy.


What's New

STORIES
No new stories

COMMENTS last 48 hrs
No new comments


Sponsors

Hosting:
hosted by ibiblio

On servers donated to ibiblio by AMD.

Webmaster
More truth oozing out ?? or is it gushing now ?! | 270 comments | Create New Account
Comments belong to whoever posts them. Please notify us of inappropriate comments.
The binary files aren't binary
Authored by: Anonymous on Friday, April 20 2012 @ 02:06 AM EDT
Not to nitpick, but the class files aren't binary. They are byte code
instructions
that are more similar to assembly language than to machine code or binary data.

[ Reply to This | Parent | # ]

There is only one API.
Authored by: Anonymous on Friday, April 20 2012 @ 02:11 AM EDT
I can also see why the judge was confused. As you point out an API can be as specific as a single Class, such as java.util.List or, if you go to Java 5 API Specification you will see that Oracle refers to all the packages and classes as a single API.

[ Reply to This | Parent | # ]

More truth oozing out ?? or is it gushing now ?!
Authored by: Anonymous on Friday, April 20 2012 @ 03:05 AM EDT
Google cross-exam of Joshua Bloch:
...

Q. This will seem like a silly question: is an API something
you can hold in your hand?

A. No. The API contains the rules to tell a library how to
do what you want. It's abstract. The documentation may be
concrete. The documentation should provide enough detailed
specification to allow an independent implementation.

...

hmmm abstract. Can you copyright that ?

This effort by Oracle to extend the definition of what is
copyrightable resembles the English enclosure movement of
common farmlands and common pastures supplanting the open
field system.

[ Reply to This | Parent | # ]

Reinhold is wrong, Bloch is correct
Authored by: greed on Saturday, April 21 2012 @ 03:33 PM EDT

Say, want to see API information obtained from a Java binary?

% javap java.lang.Object
Compiled from "Object.java"
public class java.lang.Object{
    public java.lang.Object();
    public final native java.lang.Class getClass();
    public native int hashCode();
    public boolean equals(java.lang.Object);
    protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException;
    public java.lang.String toString();
    public final native void notify();
    public final native void notifyAll();
    public final native void wait(long) throws java.lang.InterruptedException;
    public final void wait(long, int) throws java.lang.InterruptedException;
    public final void wait() throws java.lang.InterruptedException;
    protected void finalize() throws java.lang.Throwable;
    static {};
}

"javap" can print interface information from any class in the current classpath. (The usual flags for amending it on the commandline are present).

Just in that one class, you can see:

  • Native language methods: getClass(), clone(), notify(), notifyAll(), wait(long).
  • References to other classes: java.lang.Class, java.lang.CloneNotSupportedException, java.lang.String, java.lang.InterruptedException, and java.lang.Throwable.
  • Methods that cannot be replaced in a subclass: getClass(), notify(), and the others marked "final".

This is just the technical information needed to make sure a program is syntactically valid: basically, to make sure the "plugs" in your code fit the "sockets" in java.lang.Object. How many sockets there are, and what their names are.

The semantic meaning cannot be obtained by machine. You'd have to decompile the code and understand it.

And there's a flag for that: -c... you get back Java VM assembly instructions, so really it's disassemble, not decompile.

If you look at something more complicated, you'll be able to see the instance and class variables as well. Errr, static variables? (The overloading of the C linkage and storage scope specifier "static" gets confusing fast.)

[ Reply to This | Parent | # ]

Groklaw © Copyright 2003-2013 Pamela Jones.
All trademarks and copyrights on this page are owned by their respective owners.
Comments are owned by the individual posters.

PJ's articles are licensed under a Creative Commons License. ( Details )