Google: We're in agreement with Mr. Jacobs, for question 2a, that work as a
whole should be the same for both code and documentation.
Oracle: Exhibits agreed to: 465, 466, 467, 468, 469, 470, 471, 472, 477, 478,
479, 480, 481, 482, 483, 484, 485, 486, 487, 488. As part of reopening our
case in chief.
Basis is that these go to ownership as part of the JCP process.
Oracle: Offer into evidence 1078. Letter to copyright office with a
received stamp on it for java 2 SE5.
Judge: Objection is what?
Google: Hearsay, lack of foundation, and incomplete. Where is this disk? [they
have it] And it needs to be authenticated.
Google: These are business records of the law firm.
Oracle: Because of conflict, the records were transferred to Oracle.
Judge: (To Google) Do you really want the jury to think that the case turns on
this?
Google: No.
Judge: Then why are you making a big case about this?
Google: We just want someone to testify that the disk has the same contents that
was submitted.
[Talking about attorney who recorded these details at Fenwick, then turned
it over to Oracle.]
Judge: I think it's better to bring in Mr. Gonsalves.
Oracle: I would offer 1078 as a self-authenticating document that has on its
face indication of authenticity.
Google: They are clearly offering this for the truth of its contents, to show
that a disk was submitted.
Judge: Was there a disk, and what was on it? And that's not something I can
take as self-authenticating from the face of the letter.
I'm not going to rule on this - but tentatively I'm going to rule no -
you have to bring this in the right way, with a witness. They (Google)
have the right to be mean and nasty - which is what I think they're
doing here. I would need some case law to overrule their objection.
[PJ: Don't rule out that Google knows something more about this than we, or the judge, yet do. Why is Oracle reluctant to bring in a witness to authenticate? That is the question. And while the judge said "mean and nasty" -- he also eventually says they're legally right -- and consider what I told you yesterday, that I thought this move was Google sending a message to Oracle, that it's tired of Oracle's trickiness and surprises, bringing in new theories and exhibits and witnesses at the 11th hour. Lawyers sometimes do that to throw the other side off, and it can. The judge might allow them, and maybe he doesn't yet even notice that it's happening, but Google, I think, is drawing a line in the sand and it would like them to cut it out. Normally, lawyers are gentlemanly, courtly you might even say, and there is rarely a situation where a lawyer will refuse a request for a favor. But there is a saying I've heard lawyers say to each other, and you may have heard it too in everyday speech, "If it's love, it's love. But if it's war, it's war." And when lawyers decide you are declaring war, they don't mind returning bullets, speaking metaphorically. Oracle now has a decision. It looks like they are backing down, but that doesn't mean they won't try again another day. But I suspect we have seen the end of courtliness. If it returns, it will have to be on both sides. It can't be one side love and the other side war. What the judge said, he said out of earshot of the jury, so Google doesn't have to care if the judge thinks they are being mean, so long as they prevail in sending the message. Oracle has to worry that their techniques have lost them any wiggle room with Google from this day forward. And they've learned that magic tricks in the courtroom only work if no one in the room knows the trick, and now they know that Mr. Van Nest is a magician too. What I'm explaining is that what I think I see is a discussion going on on more than one level, and the words match the one that isn't the core, so to speak.]
Oracle:
MRT Construction vs. Hard Drives, Inc. Business records case. Exactly
like this case. A file from an outside law firm transferred to Oracle.
Judge: You're not explaining why you can't get Mr. Gonsalves here. You're
avoiding that.
I'm not going down this path until you tell me he's unavailable, as in he
refused a subpoena.
Oracle: Offer 1076, the CD rom.
Judge: Same ruling (i.e. no, need a witness)
Judge: Those 4 docs are in limbo. I'm not ruling, but I question the
foundation. I'm not ruling it out, but I'm not ruling it in based on a
proffer.
8:07am
Jury comes in.
Bruce Baber of King & Spalding is up for Google.
Google: Does the specification say what code to write?
Owen Astrachan: No, it does not. The implementation of the method is what the programmer
implementing the API needs to think about and understand.
Google: For someone who is trying to implement that method, to write new code,
does the spec tell the programmer what to write?
Owen Astrachan: No.
Google: Does it tell the programmer what the code has to do?
Owen Astrachan: Yes.
Google: Does it tell them what code to write?
Owen Astrachan: No.
Google: Once the method has been implemented, does the spec tell a programmer
writing an app what to write?
Owen Astrachan: Yes, it tells them how to call the API.
Google: And do they have to write that code exactly?
Objection - Leading.
Judge: Sustained. Try not to lead your own witness. [judge
lecture on when it's leading, and when it's not.]
Google: For a programmer trying to use a method that's been implemented, does
the method specification say what the programmer has to write?
Owen Astrachan: Yes.
Google: Can you have more than one implementation of a spec?
Owen Astrachan: Yes.
We've seen two implementations of the math.max class. We saw Dr. Bloch implement math.max.
The implementation is between the curly braces.
Google: Did we see a second implementation?
Owen Astrachan: Yes. I don't remember who did it though. But I recognize 3525.
Implementation is between curly braces.
Google: Exhibit 62301.
Owen Astrachan: Implementation of java.math.max from java package.
Google: Where is the implementation?
Owen Astrachan: Found it. Page 15 / 24 . (Reads implementation.)
Google: Is it different?
Owen Astrachan: It's different from both of those other ones.
Google: Now the Android implementation of java.math.max
Owen Astrachan: [Reads Android implementation.]
Google: Four different implementation for the same max method?
Owen Astrachan: Yes.
Google: Do all four different sets of code perform to the spec?
Owen Astrachan: Yes. Each would provide the same output given the same input.
Google: In order to create a new implementation, what do they need?
Owen Astrachan: They need the spec. They need the ability to do it.
Google: Can you create the implementation without the spec?
Owen Astrachan: No, you need the spec.
Google: Does requiring the implementation depend on whether you're doing a
cleanroom implementation or not?
Owen Astrachan: No.
Judge: Question about specification. Your description made it sound like a black box
with something inside. You have input on that side and output on that
side, and the spec says what the inputs gotta be, and the outputs gotta be,
and the implementation is what's in the black box.
Owen Astrachan: That is a very good explanation. I like that explanation.
[Judge smiles]
Google: [Google asks professor to write some code using API. I wonder if this is a
job interview?]
[PJ: Actually, we at Groklaw were wishing Google would do this, so the judge and jury could see the simplicity.]
Google: Is there a simple program you can write?
Owen Astrachan: [Plans to show how to use the java api to go over the Internet, grab a
web page, and then print it on the screen.]
Google: How many steps?
Owen Astrachan: Those 3 steps specify where to go, make a connection, read and display.
Owen Astrachan: Package, class, and method. Writing a program, I have to write a
class. (This will be Simple.WebReader.) This will not become part of the
API. This code is *using* the API.
I'm careful, so I'll include a stylized comment that shows that I'm the
author.
[Some explanation about CS / java. How Main is required. URL. Network stuff
is in java.net.]
Owen Astrachan: 3 steps are needed.
Note that this program just prints the first character from that site, for
simplicity.
[The code he writes is something like [I can't see it, so I'm inferring
stuff. Don't know all capitalization.]:
package Simple;
// @author: aulut [or whatever his username is]
public class WebReader {
public static void Main(string [] arg) {
java.net.URL site = new java.net.URL("http://cnn.com/");
java.io.inputstream source = site.OpenStream();
system.out.print(source.read());
}
}
[End reporter explanation.]
Google: You testified that the programmer has to use the API exactly.
Owen Astrachan: Yes.
Google: Did you include any method signatures?
Owen Astrachan: Yes, I used 4 method signatures.
[Marks in red the constructor for the URL class. Also the
OpenStream() method. The read() method. And the print() method.]
Owen Astrachan: All of them are in the API packages.
Google: Are they in the same or different packages?
Owen Astrachan: Different. java.io.inputstream is the inputstream class of the
java.iopackage.
Google: How many packages?
Owen Astrachan: java.lang, java.net, java.io - so 3 packages.
Google: Are these real signatures?
Owen Astrachan: Yes.
Google: Have you memorized them?
Owen Astrachan: I know the ones I use often, they are in my head.
Google: Did you just copy them from the spec?
Owen Astrachan: No, I used them.
Google: Would this program run?
Owen Astrachan: Yes, it would show the first character from cnn.com.
Owen Astrachan: To show pictures, I would need to call a library that displays pictures.
For that, I'd need a different library.
Google: Would this run on Android?
Owen Astrachan: Yes.
Google: PC with Java?
Owen Astrachan: Yes.
Google: Do you think Android and Java are compatible with regard to these 3 methods?
Owen Astrachan: Yes.
Google: Do you think Android and Java are compatible with regard to the 37 accused packages?
Owen Astrachan: Yes.
Google: you used 3 or 4 methods. How many lines of of code writing did you
avoid by using the library?
Owen Astrachan: I've saved a thousand lines of code.
Judge: I have some questions. Terminology point. Those things in red - what
are they again?
Owen Astrachan: These are the methods that I'm using.
Judge: But then you used the word signature.
Owen Astrachan: In order to call the method, I send it something, the black box
happens, and I get the results. For this method, I need to know that
I give it a string, and I get back a URL. Signature says what to give in,
and what comes back.
Judge: OK, take print. What part is the signature.
Owen Astrachan: The name of the method, and the parameters that I pass to it.
Judge: Give us an example of a signature where you sent an input, and you got
an output.
Owen Astrachan: [Tries to explain]
Judge: So the output is URL.
Owen Astrachan: Correct, a URL object.
Judge: So is the signature the name of the method in combination with the input
and output?
Owen Astrachan: Yes, fully qualified name, java.net.URL.
Judge: Thank you, one other question.
I thought packages were preexisting things. But you just made "Simple".
Owen Astrachan: I think you do understand. Prewritten code is in packages that I get,
that I can use. The code I get is in a package. And code I write must be
in a package too.
Judge: That thing about public class public static…
Owen Astrachan: Part of the signature. [Prof is lecturing CS 101.]
Judge: Does public mean you're donating it to Java?
Owen Astrachan: No.
Judge: Then whey don't you make it private?
Owen Astrachan: I have to make Main public. It has special meanings.
Judge: Can you circle the names?
Owen Astrachan: [Circles Simple and WebReader and Main.]
[Lecture over. Proffessor Astrachan sits down.]
Google: Have you conducted any analysis of the number of lines in Android / Java?
[exh 3536 - his summary]
Owen Astrachan: Android platform has 15M lines of code. (4.7M in Java)
57,000 files in Android platform. (15,000 files in Java).
Google: How many Java packages are in Android?
Owen Astrachan: 51 - though yes, only 37 are accused.
Files in all API packages - 6,000.
Google: Have you compared Android and Java?
Are they substantially similar?
Objection - overruled.
Owen Astrachan: No, not similar.
Owen Astrachan: Platforms are designed for different things. Mobile (Android), vs.
desktop (Java SE).
Google: What part of the android platform are the 37 packages?
Owen Astrachan: A very small part.
Google: Are there any similarities or differences between the source code in
Java / Android.
Owen Astrachan: Implementation of Android is very different.
Google: (Another question - missed)
Owen Astrachan: Implementation code in Android is completely different.
Google: Why do the 37 packages have the same structure?
Owen Astrachan: Those same names are needed so the code interoperates.
Google: 3rd line of that chart.
Owen Astrachan: Those APIs are not similar at all. Completely different.
Google: Nothing at all that's the same between the implementing code?
Owen Astrachan: The code is completely different.
Google: Structure similarity?
Owen Astrachan: Class / packages of the 37 are the same.
Google: Why?
Owen Astrachan: They need to be the same.
Owen Astrachan: 2.8M lines of code in API of Java. 237,000 lines of code in Android.
Implementation of the 37 accused APIs. Completely different. Other than
the method signatures.
Google: Anything else that's the same?
Owen Astrachan: No, nothing else the same.
Google: Structure and organization of the 37?
Owen Astrachan: Yes, that's the same.
Google: Have you ever heard reference to SSO?
Owen Astrachan: Yes.
Google: Selection, structure and organization?
Owen Astrachan: Yes, they're all familiar.
[8:55am - Jury looks pretty attentive. I'm a little bored however... :-) ]
Google: When someone is designing an API (not the implementation), what do they
do to create the API?
Owen Astrachan: To create the API, I make the package, class, and method names.
Google: And what do you do?
Owen Astrachan: I write code and implement the methods.
Google: To what extent if at all are the ideas reflected in the implementation?
Owen Astrachan: Implementation is much harder.
Google: How many lines of code would it take to minimally /trivially replicate /
implement the 37 APIs?
Owen Astrachan: 7,000.
Google: Out of 237,000?
Google: What percent? [Some math mistake in discussion.]
Owen Astrachan: A very small percentage.
Judge: (Corrects the math) I'm 66 years old, but I can still do the math.
[ No one can figure out what 7 / 237 is in percent.] [PJ: Here's a tip for lawyers. If it's a technical case, have someone like Dan Bornstein sitting at your table the entire time. Serious suggestion. Software is algorithms, which is mathematics. At some point, math is going to come up.]
Google: 7,000 out of 15 million.
Owen Astrachan: Very small percent.
[Google arguing that sql packages are "needed". Their expert witness
agrees, shocking :-) ]
Google: What about 10 packages with security in their name?
Owen Astrachan: Secure connections on the internet. I rely on the security packages. I
wouldn't know how to write this code.
Google: Are they necessary?
Owen Astrachan: In today's world, yes.
Google: 3 crypto packages.
Owen Astrachan: Yes, they're required too.
Google: java.text
Owen Astrachan: This lets me do internationalization.
Google: java.awt.font
Owen Astrachan: Allows things to be on the screen. Yes, for practical use, it's
necessary.
Google: The last package is java.beans.
Owen Astrachan: Allows my classes to work together with each other. And yes, for
practical use, it's necessary.
Judge: You've said that they're necessary. But you've said the Android implementation is
different than the java implementation. Is that correct?
Owen Astrachan: Yes.
Judge: So what part is necessary?
Owen Astrachan: The functionality provided by those packages.
[PJ: Is the judge beginning to realize how stupid this API claim really is to technically aware people? The questions make me hope that the tech is now getting clearer.]
Google: Is it required to meet expectations of Java programmers?
Owen Astrachan: Yes.
Google: Required by industry?
Objection - overruled, after grilling the witness about what he knows about
the industry.
Owen Astrachan: Yes, I think they are.
Google: How similar is documentation?
Owen Astrachan: Not very similar.
Google: Is documentation virtually identical?
Owen Astrachan: No.
Google: Is an API like a file cabinet?
Owen Astrachan: Yes.
Google: Perfect [analogy]?
Owen Astrachan: No, but good.
[Google is done questioning Professor Astrachan. 15-minute break announced]
Judge: I did the math, 2.9%
It's now 9:15am.