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
Your contributions keep Groklaw going.
To donate to Groklaw 2.0:

Groklaw Gear

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


To read comments to this article, go here
Day 4, Thursday, Oracle v. Google ~ pj - Updated 7Xs - Reinhold, Lindholm, Bloch
Thursday, April 19 2012 @ 10:55 PM EDT

We had a reporter in the courtroom again today, and we now have part one of his report. The rest will follow as it is transcribed. On the stand this day first was Dr. Mark Reinhold, continuing his testimony from the day before. Also taking the stand today were Tim Lindholm and Joshua Bloch.

I'll repeat something I noticed Reinhold said on Day 3. First Oracle's lawyer Michael Jacobs and then Reinhold said APIs are blueprints, and yet Reinhold said, when asked if APIs can be too big:

Yes. Humans are bad at managing long lists of uncorrelated information.
So, the truth oozed out. APIs are nothing but long lists of uncorrelated information. That's why they should not be copyrightable, any more than a phone book's white pages contents can be. They are just a list, no matter how much work you put into it or how much money you spend getting it done. That's not at all what a blueprint is, is it? Fess up, y'all. APIs, as Google told you, are not blueprints.

And the most interesting ruling of the day is this one by Judge William Alsup, when Oracle requested that it be allowed to introduce "a 1 GB source code download they did from Google's site on Mar 12th". Google raised concern about verifying exactly when it occurred and what was downloaded. Judge Alsup agreed that verification is reasonable, so Oracle will have to prove when it was they downloaded whatever it was they downloaded.

I assume this is about whether or not Google has really removed the few lines of code it said it removed. And you can understand why Google would want some proof that a download that purports to have happened on March 12 really happened on March 12, not some prior date before the date it says it removed the lines of code. I'm sure we'll hear more about that.

Jump To Comments

[Update 1, Update 2, Update 3,
Update 4, Update 5, Update 6
Update 7]

Google seems to be developing a theme, namely that Java is already fragmented. And it asks a lot of questions about others outside of Sun writing and contributing Java APIs. Oracle expresses concern that Google may be challenging ownership. The judge isn't moved to rule on it to suit them, not yet anyway, but I think at a minimum it's more evidence that Oracle hasn't been spending millions on developing APIs if lots of other companies are donating them, including Google. I mean if Google donated an API, can you now sue Google over the API, after you accepted it and incorporated it and everyone else is using it? So it could be important for the judge and jury to understand the unique way that Java is developed, unlike a more typical in-house proprietary software product. The next witness of the day is a man who wrote such donated code, and then the man who Oracle says wrote the email that it seems to be pretending is "evidence" that executives knew they needed a license. That's not what it proves at all, to me, in proper context, so it'll be interesting to read that, all the details, at last.

Here's finsko's report, part 1, the testimony of Dr. Mark Reinhold:

4/19/2012, Courtroom 8

[BTW, the 19th floor of the Federal building has lots of amazing framed historical photos of San Francisco; it would almost be worth a trip just to look at them. It certainly makes the breaks more interesting for someone who doesn't know how to deal with strangers in suits :-) ]

[In the courtroom, emails and other digital evidence are sometimes displayed on monitors; you can see them (but not really read them) from the audience, but each jury member has a monitor.]

[I have done my best to be accurate, but if something seems completely wrong, it's possible that it _is_ wrong :-). In particular, although I am a programmer, I don't know Java.]

7:30 AM: Judge Alsup enters.

Hands out draft of a "special verdict form" (instructions to jurors) to both sides for editing and revision by tomorrow morning. (Also something about "affirmative defenses".)

Reminds lawyers that it is not allowed to read from deposition text about documents which are not in evidence.

Jurors have submitted a few questions; Judge Alsup reads them aloud. Some were regarding Apache and fragmentation; judge says he will not explicitly address these in instructions, but lawyers should keep them in mind during future questioning. One question is about how the two sides know each other's internal secrets; the judge says he'll address this one.

Oracle's requests:

1) We'd like to move some exhibits into evidence; Google doesn't object.

2) Oracle wishes to use as evidence a 1 GB source code download they did from Google's site on Mar 12th. Google doesn't object to anything that was publicly available on their site, but is concerned about verifying exactly when it occurred and what was downloaded. Oracle wants any such verification to be on Google's clock. Judge Alsup agrees that verification is reasonable, refused to commit to whose clock it is, and warns Google that they may be asking for favors at some point too.

Google has no requests.

At some point, Judge Alsup explicitly makes a comment about wanting to have a record for the court of appeals.

7:55 AM, Jury is brought in.

Judge Alsup inquires about sleep, flu, recommends that they keep washing their hands to stay healthy, and commends them for being prompt. Tells them their questions have been passed to the lawyers, and that the answers should show up in the course of the trial, possibly in a few days or a few weeks. Regarding how the companies know each other's internal secrets, he goes into a few minutes of description about how discovery has occurred prior to the actual trial.

Continuation of Oracle direct questioning (from the previous day) of Dr. Mark Reinhold:

Michael Jacobs is the lawyer for Oracle asking the questions.

Q: java.nio.channels: is that something that's in the Java language specification?

A. No, it's in the Java platform API specification.

Q. Does that specification have copyright notices?

A. Yes.

Q. Was it Sun's practice to register copyrights?

A. Yes.

Q. What is the Java programming language?

A. It consists of two parts: 1) syntax, which is sort of like what you did in elementary school when you diagrammed sentences. And 2) semantics, which is what it means. E.g., there is a syntax to a conditional test, and also a meaning.

Q. [Refers to Java Language Specification (JLS), 3rd Edition, Chapter 18, which collects all the syntax rules]
Does this describe the language? What is the relation betwee classes and API's in the JLS?

A. Language does not specify the APIs, but some of the APIs are referred to in the JLS. Chapter 18 specifies all the syntax rules; these would be used by compiler writers. The JLS does not specify the API; that's in the Java Platform Sepcification. The JLS may mention API classes (e.g., error classes), but they are not specified in full detail.

[Oracle hands Judge Alsup a copy of the JLS]

Q. Does mentioning a class in the JLS mean that that class is required?

A. Yes.

[References here to (exhibits?) 1062 and 1063. 1062 is Dr. Reinhold's analysis of references to (API?) classes in the JLS. 1063 is Reinhold's analysis of references to classes in the Java compiler source.]

A. In the compiler source (analysis 1063) there are references to 39 API classes. These are mostly in java.lang, plus some in java.io and java.util. 3 classes are mentioned in the compiler source, but not actually used; that's a bug.

java.lang.object is closely tied to the Java language.

[Simplistic Venn diagram is presented: the Java language is small, the API set is large, and the overlap exists but is very small.]

Judge Alsup: Are the 37 contested APIs in the shaded overlap area?

Reinhold: No.

[I'm not sure from my notes whether it was Jacobs or Judge Alsup asking the next 2 questions.]

Q. What could you do in Java if there were no APIs available?

A. Very little.

Q. What is the minimum API set that you'd need to add to do something?

A. Input and output.

Q. Do people design their own APIs for Java?

A. Yes, they're usually built on top of existing APIs. (Makes a reference to financial trading.)

Q. Do you need the 37 APIs to do that?

A. No.

Q. Why not just put the classes and APIs into the language; why the separation?

A. Engineering considerations. It's useful to have a fixed primitive core. A programmer needs to know the language, but not every API. The Java language is interpreted by the Java virtual machine; it's best if it's small and doesn't change very often. However, APIs can change like wildfire.

Q: Have the 37 APIs at issue changed over time?

A. Yes, based on experience and learning. Improving functionality, fixing bugs. Sun had 500 programmers at one point working on Java, many were working on APIs.

Q. Is Java being actively maintained by Oracle? How many engineers?

A. Yes, about 800.

[Various exhibits entered: DVD's, books, source code on a thumb drive. Some explicit discussion of 10 or so classes, with Reinhold spelling out stuff like Java.ACL.impl for the stenographer).

Q. Here is exhibit 627, some code for a java.io buffer class.

A. [Discusses @author=Mark Reinhold text, description of the comment syntax, and how some comments are for automatic doc generation.]

Q. Is there a copyright notice in this file?

A. Yes, it says "Copyright 2004 Sun Microsystems".

Cross examination of Dr. Mark Reinhold, by Google Attorney Daniel Purcell
Q. Java is an Object-Oriented (OO) language, correct?

A. Yes.

Q. Did Sun invent OO?

A. No.

Q. Is C++ an OO language, and does it use APIs?

A. Yes.

Q. (Repeat same question and answer for Python and Objective C).

Q. Sun didn't invent the concept of APIs did it?

A. No.

Q. Are there language-independent APIs?

A. Yes, but they're not very good.

[Brief mention about the fact that apparently there are other languages which run on the Java virtual machine.]

[Purcell draws a diagram on the flip board which he describes as showing that the Java APIs come in packages; within a package are classes and interfaces; within classes there are methods; exceptions are part of the API design. Apparently Section 8.4 and chapter 9 of the JLS discuss these things. Reinhold distinguishes the API, Purcell shows a brief snippet of Reinhold's video deposition; I'm not sure what the point was.][PJ: When a lawyer asks a question, gets an answer, and then shows that person's deposition video, it means he thinks the witness contradicted himself.]

[Here Purcell messes up the tech, because he starts asking questions about accessing "source code" from an API].

Q. Without APIs, could Java do I/O? Would it be of much use?

A. No.

Q. Some of the Java APIs were done outside of Sun, correct? And Sun doesn't claim copyright on those.

A. Correct.

Q. Some of the copyrighted APIs (e.g., java.nio) were also done in collaboration with groups outside Sun/Oracle, correct?

A. Yes, sometimes there are expert working groups.

Q. Of the 37 APIs, some were done in collaboration with the Java Community Process (JCP), correct?

A. Yes.

Q. Has Google collaborated on some Sun APIs?

A. Yes.

[It's 8:55, Judge Alsup had earlier indicated that he'd need to take an early break to handle a phone call, and Google indicates that this is a good topic break point, so they break.] 9:15, Judge Alsup reenters.

[Google had been pursuing a line of questioning saying that they'd done 20% of the work on some APIs; Oracle expresses concern that Google is going to contest API ownership, and wants Alsup to instruct the jury that Google cannot contest ownership of the APIs. Google objects, and Alsup sides with Google (doesn't mean he agrees, just that he won't instruct the jury at this time).]

Google cross-exam of Dr Reinhold continues:

Q. Back to JLS, p 6. Some classes have a "special relation" to the language proper (e.g., java.lang.reflect). Exhibit 1062 describes the classes and interfaces references in the JLS. Where are the classes mentioned on p6 described in your document?

[Here, Purcell tries to refer to these classes as "fundamental", but Reinhold emphasizes that that's not correct, the term was "special relationship"].

Q. Was "Write Once, Run Anywhere" important to Sun with respect to Java?

A. Yes, it was a major motivation.

Q. There are 4 classes of Java platforms, correct? Java SE, Java EE, Java ME, and Java Card. Do these use different versions of the Java programming language, and different APIs?

A. Yes.

Q. A developer needs to know what flavor they're writing a program for, correct? A program written for one may not work for another?

A. Yes.

Q. JavaME also has different configurations, such as CLBC, correct? And some configurations also have a range of profiles? So an application written for one profile might not run on another profile?

A. It might, or it might not.

Q. How can this be "Write Once, Run Anywhere"?

A. If you have written for a specific platform, then the program should run on any vendor's version of that platform.

Q. Did Sun have a "OneJava" initiative that was supposed to unify SE and the higher levels of ME?

A. Yes?

Q. And Oracle pulled the plug on OneJava, correct?

A. Yes.

[Google is finished for now]

Redirect of Mark Reinhold, by Oracle's Lawyer Michael Jacobs:

Q. Google asked about accessing source code via APIs; you said you couldn't answer because the question was malformed. Why?

A. Discusses source code and object code (binary, zeros and ones); the API libraries are binary, not source.

Q. Back to the issue of packages and methods, and their relation to API.

A. Packages and methods are fundamental tools of the language.

[At this point, both sides are done with Reinhold for now, but Google says they may wish to call him later].

[More of the day's events to come.]

Update:

And here's his part 2, with Joshua Bloch on the stand:

Next Oracle witness: Dr. Joshua Bloch
[Dr. Bloch was fairly animated, and tended to face the jury when he spoke.]

Again, Michael Jacobs for Oracle.

Q. Describe your background.

A. Senior Staff Engineer at Sun from August 1996 to July 2004. One of the architects of Java. Hired by Google in 2004. Also a member of the Android team. Has written APIs for many class libraries. [Some discussion of "JSR's"]

Q. You're an API expert right? Here's a presentation you did entitled "How to Design a Good API" (This version from Javaopolis in Antwerp, 2005, but it has been given in many places, and is probably on the web). [PJ: It is indeed, a 2007 version of it.]

Q. Has anyone at Google objected to the ideas in this presentation?

A. No.

Q. You say "APIs can be among a company's greatest assets."

[Discussion of public versus private APIs, and Bloch's contention in his presentation that all developers need to be concerned with API design. Jacobs goes over and summarizes various slides from the presentation; no objections from Google. One issue is (overly) complex APIs].

Q: How do you know when an API is getting too complex?

A: Names are a part of it; a bad name is an indication of a bad design. In addition, good names can help drive the design: if you have a method called "Publish", it tends to make you think about possibly related method possibilities, like "Subscribe".

Q: What about API size?

A: API size may be an indication of complexity, but it's not just reckoned by number of classes, rather, "conceptual weight".

Q. You wrote "Code should read like prose", what does that mean?

[Amusing bit: I think the intent was that code be somewhat self-documenting, but the example Bloch gave was something about a variable which was "speed", and that code that described car.speed as being twice the speed of light would make you expect that you might get attention from a cop. Judge Alsup suggested that he probably meant "speed limit", not speed of light.]

Q. Can API design affect program performance?

A. Yes.

[Discussion of Bloch's Java "collections" API. More references to Bloch's presentation: "API design is a noble and rewarding craft", "API design is tough". And APIs having an aesthetic component.]

Q. There are various Android APIs that "copy" Java APIs.

Q. The rangecheck function: Did you copy the Sun code while working on Android?

A. I did that while working on Timsort, and it was during the period I was employed at Google, but not for Google. It was something I wrote on my own for OpenJDK.

[I had not heard of Timsort before; it's (apparently) a very efficient sort written by Tim Peters for Python (see Wikipedia), and ported by Bloch to Java.]

[Timsort will come up again later. I'm somewhat appalled by how much fuss is being made over the trivial "rangecheck" function.]

Q. Why did you copy the rangecheck function for Timsort?

A. It's good engineering to reuse the same function if possible [The context here was that he expected to fold Timsort into a public version of Java, and at that point it would make sense to call the existing rangecheck function from the new code rather than writing a different one.]

Q. And you included this in Android?

A. Yes, as part of the JDK.

Q. And you made the function signatures identical?

A. Yes.

Q. [Something about the Sun and Android versions of Timsort being virtually identical.]

Q. When you started working with Android, was there any discussion of it being a conflict with your previous work at Sun?

A. No.

Q. Did you know that Sun attached copyright notices?

10:10

Google cross-exam of Joshua Bloch

I didn't get the exact lawyer's name: Bruce (?). He was good.[PJ: Probably Bruce Baber.]

Q. What's your educational background.

A. PhD from Carnegie Mellon.

Q. Any other employers besides Sun and Google?

A. Transarc, a distributed systems company. Acquired by IBM in 1994; I left 2 years later to work at Sun. At Transarc I did library design, implementation, specification, and documentation.

Q. When were you first exposed to APIs?

A. 1982, during an internship at IBM, doing assembly language for a parallel 370. [Clarification of "assembly language."]

Q. Did your doctoral dissertation have to do with APIs?

A. Yes, a collections framework for a fault-tolerant distributed system. Similar to the Java API for collections.

Q. Dr. Bloch: How did you learn the Java language?

A: I read "Java in a Nutshell" on the plane on the way to my interview with Sun [your reporter stifled a guffaw here].

Q. You've written a book called "Effective Java". Does it discuss APIs?

A. Yes, how to use them, and how to avoid traps.

Q. How would you define an API?

A. The names and words and set of rules used to access a library. E.g., method names and field names. Rules: a "contract" (defining preconditions/input, and the result). What you have to say to do something, and what the result is.

Q. When you talk to an API, do you have to be precise?

A. Yes, a single letter wrong will break it.

Q. What happens if you break it?

A. If you're lucky, it won't compile [clarification of "compilation"]. Otherwise, it may give an error when you try to run it. Or it may give you a wrong result.

Q. Your presentation ["How to Design a Good API"] describes an API as a "little language"; what does that mean?

Q. You said APIs should be easy to memorize, why?

A. It makes it easier and more automatic to use it when coding; you don't have to keep looking things up.

Q. So that was a goal at Sun: to be able to use APIs without documentation?

A. Yes.

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.

Q. Is an API like a blueprint?

A. No: a blueprint tells you exactly how to build something. But an API can be built in various different ways.

Q. In the Java language, what determines the implementation/organization of a library?

A. Fully qualified names: e.g, java.lang.math.cosine(), where java.lang is the package, math is the class, and cosine in the method (goes into detail about the periods and the upper/lower case conventions for names).

Q. So 37 packages corresponds to 37 API's?

A. "Number of API's" is a weird concept. A package is part of an API, but so is a class, and so is a method.

[Judge Alsup gets involved here; he wants to understand this.]

Judge: So what is an API? Is it a package, or a class, or what?

A. You can't really answer that. It's like how "City" and "Street" are both parts of your address. The java.util package has list classes, and other classes; it's all API.

Judge: Is an API at the package level: I want an answer of yes, no, or "can't answer".

A. Well, yes...but classes and methods are also the API. [Somewhere in here the judge drops the issue, but not in a satisfied way :-) ]

[Back to Google]

Q. Does the Java language give you a choice in what a fully qualified name is?

Q. Prior to this trial, had you ever heard the phrase "Structure, organization, and sequence" in reference to APIs?

A. No.

[To be continued]

Update 5: This is the rest of Mr. Bloch's testimony, and I think you'll find it fascinating. And yes, I know it's out of order, but that's because we originally jumped ahead to Mr. Lindholm's testimony because these notes are so much longer and it took longer to transcribe them:

Dr. Joshua Bloch, continued cross-exam by Google lawyer Bruce Baber.
[Note Judge Alsup's interest in and awareness of the technical details. I think Mr. Baber is skillfully getting at some very important points].

Q. What is the relation between the Java programming language and the APIs?

A. Various APIs are mentioned directly in the Java Language Specification (JLS), in narrative text, not in examples. These are required in order to implement the Java language. It includes 3 packages, 60 classes, and around 750 methods. Includes java.lang and java.io.

Judge Alsup: How many APIs is that?

[My notes don't record the answer, but I expect it wasn't anything definitive :-) ]

Q. Are there other APIs required to implement these 60 required classes?

A. Yes, any class that is used as an argument passed to any of these classes. There may also be other forms of indirect dependencies. All together, at least 175 classes and 2000 methods are required to implement the language.

Q. What was the earliest version of the JLS you saw?

A. Gosling personally handed me a pre-release of the first one.

Q. What was in the first edition?

A. The language specification, plus documentation for the core libraries. About 4 core libraries, including net and util. They were completely specified.

Q. Could you do anything in Java without APIs?

A. You could add two numbers, but couldn't do any I/O. E.g., the simplest program, the first program you write is "Hello world". This isn't doable without an I/O API.

[Q & A about stuff in Bloch's Antwerp presentation. Programming is easier if an API gives you "good words", specifically names of classes and methods. Doing this is adding vocabulary to the language: new words in addition to existing keywords like "while" and "for".]

Q. Is the relation between Java and its APIs similar to the relationship in other object-oriented languages?

A. Yes [references C#].

[Bloch's duties at Sun included writing new APIs and reimplementing/improving existing APIs.]

Q. What is a "method declaration"?

A. What its name is, what are its input parameters (including names), and what does it return.
Example: "public static int max(int arg1, int arg2)"

Judge Alsup: Is "public" preceded by anything like "declare"?

[Did somebody get Judge Alsup a copy of "Java in a Nutshell"?!]

A. No, it's a convention based on location, where it is in the program text. Just like a dictionary doesn't write "Definition".

Judge Alsup: Do you need anything else to make it work?

A. Of course you do. An API is not the implementation; that code is not part of the API.

Judge Alsup: I think the jury would like to see what else you need. Could you tell counsel how to write it? [on the flip chart]

[Bloch tries, and it's the usual mess trying to tell how someone inexperienced to write down syntactically correct code.]

A. Can I just write it myself?

[I can't see it, but Bloch appears to be writing the Java equivalent of:


extern int max(int arg1, int arg2);

extern int max(int arg1, int arg2)
{
	if (arg1 > arg2)
		return arg1;
	else
		return arg2;
}

[He also defines "public" and "int", but says "static" is complicated and not relevant here. Also provides an example illustrating "formal parameters". The white board also apparently contains a package declaration of some sort.]

A: The initial declaration is the API. The calculation is an implementation.

Judge Alsup: [Questions about the naming of the method parameters, and the invocation; answer involves the concept of "passing by value", though that terminology isn't used.]

Q. [Google] Is there anything else in the file?

A. Yes, comments.

Judge Alsup: In what you've written, would you indicate what is the name, what is the declaration, and what is the implementation? Use different colors.

A. Declaration, vs signature. Java uses strange terminology; the signature doesn't include the return type.

[Somewhere in all this Bloch is running out of additional colors of magic markers; he's handed a highlight pen by someone, which the Judge tells him won't work.]

Q. [Google] What is an "argument"?

A. What the programmer passes to the method.

Q. What is the "return"?

A. What the method passes back.

Q. OK, back to my question about reimplementing/improving APIs (say, public APIs). Are there constraints on your creativity in reimplementing an API?

A. Yes, severe constraints.

Q. Are there parts of the API you can change? E.g., the package, methods, classes, return types?

A. No, the only thing you can change are the argument names.

Q. Do you have creativity with respect to the implementing code? Does the API limit you or tell you how?

A. There are no limits, you have much more creativity.

Judge Alsup: If you have two different implementations, will they end up with the same 0's and 1's? [object code]

A. Almost certainly not.

Q. While at Sun (before joining Google), did you have experience with independent implementations of existing Java APIs?

A. [References Sun's implementation of Perl regular expressions; this will come up later, but Google is asking a different question.]

Q. What's an example of a reimplementation of a Sun API?

A. One example is Java's BigInteger. I wrote it in 1.1 as a native method in C, because Java itself was too slow. 1.3 was faster and good enough, so Mike McCloskey and I reimplemented BigInteger in Java.

Q. Did you change elements of the declaration when you did that?

A. No, you can't, it would be incompatible.

Q. Do you know of reimplementation of APIs that originated outside of Sun?

A. Yes, regular expressions (RE). We needed RE's in Java, and the Perl RE API was dominant. We wanted to be compatible with it. So we reimplemented the Perl API in Java (java.util.regex). An additional advantage is we could then use the battery of RE tests from Perl to test our implementation.

Q. Other examples involving external work on Java APIs?

A. Sometimes people reimplementing Java APIs would find issues and corner cases that Sun hadn't considered. [He probably says something about Sun incorporating such changes]. My boss knew about it.

Something about "Classpath" reimplementing Sun's "collection".

[Oracle objects to leading. Judge Alsup instructs Google that the objection can be avoided by properly using the phrase "What, if any...".]

A. If a specification is good (precise) enough to write an alternate implementation, it's good enough for a programmer.

[Break: 11:20-11:35]

[At some point, Judge Alsup informs both Google and Oracle how much of their time they've used. I think it was something like 1000 minutes Oracle, 500 minutes Google, but so far it's been Oracle witnesses.]

The witness continues:

Q. You left Sun and joined Google in 2004. What did you do at Google?

A. I ported existing Google infrastructure that was primarily accessible from C++ so that it was accessible to Java. I joined the Android team in December 2008 or January 2009. Android had already been released, and phones were in the market.

Q. When you joined, what was the status of Android's Java run-time libraries?

A. Not as fast as they could be, and there were some bugs.

Q. Did you have any influence on the choice of APIs?

A. No.

Q. Did you ever consult Sun source code or Sun materials?

A. No.

Q. Did you change any of the APIs?

A. No, you can't. It would make it incompatible.

Q. What is Timsort?

A. A way of putting a list in order [somewhere in here there is reference to compatible Timsort (?)].

Q. How big is Timsort (referring to Bloch's Java implementation).

A. 900 lines.

[The rangecheck() function gets mentioned in here.]

Q. Was there a sort API in Java before Timsort?

A. Yes, in the arrays (class? package?).

Q. How did Timsort differ?

A. It was much faster: as much as 20 times, typically somewhere between 2 and 20.

Q. How big is the rangecheck() method? Is it a private or public method?

A. It's a private method, about the same size as max() (so: small).

Q. What does rangecheck() do?

A. It's necessary when you have a sort method and you might be sorting a partial list or a whole list. You need to check that the indices are within range. It would be an error if an index was negative, or the indices are in the wrong order, or are not within range of the list.

Q. Is rangecheck() simple or complex?

A. Very simple. Any high school programmer could write it.

Q. Do you know of the existence of other rangecheck() functions?

A. Yes, there's one in arrays.java. I wrote it. [Timsort: from Tim Peters, and originally in Python. The Java implementation was a port.]

Q. Where did you get the Python version of Timsort? Was it open source [this was 2007, pre-Android]?

A. Yes, Guido [van Rossum] pointed me to it, it's under a permissive open-source license.

Q. What did you want to do with your Java Timsort?

A. Put it into OpenJDK (an open implentation of the SE platform).

Q. Who controlled OpenJDK?

A. Sun.

Q. How does someone contribute to OpenJDK, and had you done it before?

A. Yes. [Discussion about source repositories, and Doug Lee at Oswego, NY].

Q. If you worked for Google, why would you contribute to Sun's JDK?

A. Java is important to me; it's given me a lot.

Q. Why did you use the same rangecheck() function in Timsort as was in arrays.java?

A. It's good software engineering to reuse an existing function.

Q. But why use the exact same code?

A. I copied rangecheck() as a temporary measure, assuming this would be merged into arrays.java and my version of rangecheck() would go away.

[Discussion of Timsort dates and Android work dates.]

Q. Was Timsort accepted and added into OpenJDK?

A. Yes.

[Something about Java 7.]

Q. Did Sun ever say anything about Timsort?

A. Yes, Mark Reinhold praised it for its speed on his blog.

Q. What else did you contribute to Java 7?

A. ARM Block: Automated Resource Management. Like automatically closing a file. This wasn't just an API, but a language feature. It added to the language itself and changed the grammar.

Q. Is it often that case that the language and the APIs change in tandem?

A. Yes.

Q. Are the 9 lines of rangecheck() currently in Android?

A. No, not in Ice Cream Sandwich; I checked.

Q. Are you still contributing to Java?

A. Lots. I feel a personal responsibility to give back to the Java ecosystem.

Q. Have other people at Google contributed to Java?

A. Yes.

Redirect of Joshua Bloch, by Oracle's Michael Jacobs:
[12 Noon. Jacobs seems pretty harsh, but he's also rushing because of the clock.]

Q. Can you deny that you copied rangecheck() from Sun code?

A. I can't confirm or deny. If I did, it was a mistake.

Q. Did you cast the only vote against the JCP approval of SE7?

A. [Bloch refers to 3 people resigning, Apache Harmony licensing, and TCK license. Some confusion.]

Q. [Referring to the flip chart with max() on it]. Your presentation talks about creativity and artistry in APIs. Is the creativity and artistry in a single declaration, or in the packaging?

A. [No real answer.]

Re-cross by Google:
Q. Please explain your JCP vote against SE7; Oracle didn't give you time to explain.

A. Sun and Apache had a dispute over licensing.

Q. Did you ever hear anyone at Sun say that Apache was violating the license?

A. No.

[Google wants to put the first edition of the JLS into evidence. 300 of the 750 pages were devoted to APIs.]

[Oracle is finished with the witness; Google says they may wish to call him back.]

Update 2:

We're jumping ahead to the last part of the day, Tim Lindholm on the stand, because there is so much interest in him and his email.

: )

Then, we'll come back and finish up the second part of Joshua Bloch's testimony and the discussion among the lawyers and the judge after the jury was dismissed. [Update: Done. See update 5, above, for Bloch and update 6 for the end of the day.

Here's finsko's report on Lindholm's testimony:

Timothy Lindholm
He is a former Sun employee. He seems a little nervous and unsure.

[I think it was David Boies for Oracle, and for Google a female lawyer, but I didn't hear either of their names announced.] [PJ: Perhaps Christa Anderson?]

[Often, Tim does not remember the emails in detail, and doesn't always know who the people referred to are. Given that being cc:ed on a email doesn't necessarily mean you open it, much less read it, and that some of this is 7 years ago, this doesn't surprise me, but it's what's happening in some of the unanswered questions below. Similarly, when asked about the contents of an email, Tim often pointed out that the contents under question were written by somebody else, and Tim himself has no direct knowledge of it.]

Q from Oracle. Background?

A. Bachelor's degree; have written multiple editions of a book on Java virtual machines.

Q. Does Sun hold copyright on these books?

A. [Looks at physical copies of books, and finds copyright notices]. Yes.

Q. Did you meet Andy Rubin when you were at Sun?

A. Yes.

Q. Did you have a discussion about Android using Sun's IP?

Q. When did you leave Sun?

A. Don't remember precisely.

Q. When did you join Google?

A. July, 2005.

Q. And you worked on Android at Google?

A. No.

Q. Here's a document: mail from you to Mr Rubin, Oct 2005. You and Mr Rubin were both at Google at that time.

Q. Is "Alan" someone at Sun?

A. Yes, I think so.

Q. You were aware that Sun was concerned with fragmentation, and that Sun wanted to preserve TCK revenue?

A. (Probably answers per above)

Q. Here's a 2nd email, July 26, 2005, from Andy Rubin, cc:ed to you, re a GPS meeting.

A. I don't recognize it.

Q. Here's a 3rd document, from Andy to Tim, re licensing discussions with Sun. There's a bullet point in this document saying that Google needs a TCK license.

A. I wasn't involved in Sun discussions at this point.

Q. Here's another document, an exchange between Tim and Andy Rubin, Dec, 2005. Andy: "We'll either have to partner with Sun, or take a license". Was that your understanding?

A. It appears to be Andy's understanding.

Q. Here's a 5th document.

Q. Here's another document, from Tim to Andy and others, August 2010, and it references Larry and Sergey. Subject is investigation of technical alternatives to Java for Android and Chrome. "They suck. We need to get a license for Java."

Google: Objection.

Q. Did you mean a license from Sun?

A. No, I wasn't referring to any specific license.

Google cross-exam of Tim Lindholm
Q. Where do you live?

A. I've lived in Palo Alto for 21 years.

Q. Educational background?

Q. What is your job at Google?

A. I work on infrastructure: the data centers.

Q. What did you do at Sun (1994-2005).

A. Also infrastructure: computer utilization. More efficient utilization of computers means you have to buy fewer of them.

Q. Did you have experience with Java at Sun, and do you understand the organization of APIs?

A. Yes.

[Oracle objects that the questions are going out of scope. Judge says Google can call the witness later and then Google can ask whatever they want. Google says there are only a few more (arguably) out-of-scope questions, and it will save having to call the witness back later. It's only 3 questions, so they're allowed.]

Q. Do you have an opionion about whether the organization of the Java API packages is free to use?

A. As a SW engineer, I feel that the organization of software APIs is free to use.

Q. Were you surprised when Google acquired Android?

A. Yes.

Q. Did you do any Android work at Google? Any specs or code, any architectural decisions?

A. No.

Q. Trial exhibit 17: Do you recognize this email? (Mail to Bill Cochran/Koren? re "critical license").

A. Sun and Google were discussing a co-development agreement using Sun source code.

[Sidelight: at some point in here, Oracle objects to Google asking questions about what Tim "thought" was happening back then. Judge Alsup (for a second time; he also did something similar during the Bloch testimony) tells the lawyer how to avoid the objection: use the phrase "At that time": "At that time, did you think...]

Q: Exhibit 318, email notes from Tim to himself titled "Android Notes"

A. At the time, I was surprised by this new project (Android) and was deciding whether I should get involved with it.

Q. Another email, Aug 9, 2005, (1 month after Tim joined Google), discussing possible roles for Tim within Android). Did you ever take those roles?

A. No.

Q. Another email: do you remember who Dave Suboda is?

A. No.

Q. It says something about "Java lawsuits going away", what does that mean?

A. I have/had no idea. There were no Java lawsuits.

Q. Exhibit 330: an email you wrote referring to Microsoft "stealing" Java.

A. Refers back to Sun/Microsoft litigation; concerns about Microsoft taking Java and making an incompatible version: Visual J++.

Q. Let's go to Auguest 2010. Did you ever review Android source code?

[Oracle/Boies objects, objection sustained.]

Oracle redirect of Tim Lindholm
Q: Trial exhibit 12: Did you think Google needed a license re partnership agreement?
[Lindholm is free; no need to return; he looks very relieved]
While we wait for the rest of the pieces, here's a video from Wall Street Journal with a report about the trial. One correction: if you use the Open Source Java code, you don't have to pay. Also, there is no allegation that a lot of code allegedly infringed. Here's Dan Farber's coverage of the day, with pictures of the witnesses for you and a chart showing all the 37 APIs:
Bruce Baber, representing Google, also took Bloch through the "range check" topic. Bloch said "any competent high school programmer could write it," and that he wrote Timsort.java, porting open-source code from the Python language to Java in the middle of 2007, when he was not a part of the Android team. Timsort.java was contributed to the Open JDK by Google under the GNU General Public License version 2 in 2009. "I really feel a personal responsibility to give back to the Java community It made my career," he said.

Baber walked Bloch through a lengthy definition of API. He defined an API as "names or words and a set of rules." ...He added, through Baber's prompting, that an API is not a blueprint that tells you how or to build or implement something....Bloch and Reinhold both said that the Java language is mostly useless without APIs, and other object-based languages have APIs.

Update 3: Some clear coverage of Lindholm's testimony from Chris Mayer at jaxenter in his article, "Google vs Oracle - Google engineer Lindholm says Java licensing email misinterpreted":

The focus shifted towards API copyrighting, which Oracle fervently believe that Java is indeed covered by. Lindholm had a different view saying:
As a software engineer, not a lawyer, it's always been my understanding the organisation of software APIs are free for use by other people.
Later on whilst being cross-examined by Google's counsel Christa Anderson, Lindholm added that he believed that the software Oracle believes is rightfully theirs, is in fact free to use by all. He was also asked about his role at Google, which Lindholm said was working on infrastructure and not substantially on Android itself. Which begs the question, why would he have sent the original email? Lindholm said that because of his background with Java and Sun, he was involved in Java licensing and partnership negotiations between Google and Sun, which of course broke down and never materialised to anything concrete....

Reinhold believes that around 20% of the Java API packages were written by JCP members, so neither Sun or Oracle. Ten of the 37 APIs were indeed created in this manner, free of Oracle/Sun's rule (ie. unpaid).

Update 4: He's getting the rest to us. He doesn't live in San Francisco, so he had to travel. But here's a preview of part two of Bloch's testimony:

[Bloch's duties at Sun included writing new APIs and reimplementing/improving existing APIs.]

Q. What is a "method declaration"?
A. What its name is, what are its input parameters (including names), and what does it return.
Example: "public static int max(int arg1, int arg2)"

Judge Alsup: Is "public" preceded by anything like "declare"?

A. No, it's a convention based on location, where it is in the program text. Just like a dictionary doesn't write "Definition".

Judge Alsup: Do you need anything else to make it work?

A. Of course you do. An API is not the implementation; that code is not part of the API.

Update 6: Here's the final part of the day, from finsko:

1 PM, jury is dismissed.

Oracle requests:

1. Something about wanting to relax requirements regarding expert reports; Google objects.

2. Wants to allow expert to testify about some matters that have come up during trial; Google consents.

3. Something about experts giving technical vs legal opinions.

Google: no requests.

[The next stuff, in retrospect, is probably pretty important, but my notetaking was fading.]

Judge Alsup: The copyrightability of the 37 APIs is my call. But I want more briefing on it. I want you to take a firm position. Could you get a patent on structure, sequence, and organization (SSO)? Say "yes" or "no".

Also, do you know if the copyright office investigates SSO of copyrighted source code? I would guess not.

[Google answers "no", Oracle answers "maybe yes, maybe no"; I'm not sure which question this refers to.]

[Copyright office only gets first 50 lines and final 50 lines of the source for a SW copyright registration, so of course they don't look at SSO.]

Judge Alsup: OK, what about derivative works? Does the plaintiff have to prove that the source work was actually used? What if it was accidental overlap?

Oracle: Proof requires access, plus substantial similarity.

Google: Unauthorized work has to include copyrightable material.

Judge Alsup: When Google did their clean room implementation, did they have access to the English language comments [in Java source]?

Google: Yes, they had the English language prose descriptions of the APIs.

Judge Alsup: Does that make it a derivative work?

Google: No.

Google: The fully-qualified names are the organization.

Judge Alsup. I have to decide on copyrightability, not the jury.

You don't have to do exact copies, e.g., you could use science.sqrt() as your method rather than math.sqrt()

Google: It wouldn't work; existing code wouldn't find it.

Judge Alsup: Is fair use a question for judge or jury?

[1:30 or so, Judge leaves the courtroom]

Oh, my. This is important indeed. The judge has accepted that he's the guy who has to rule on whether or not APIs can be copyrighted. The jury will not make that call.

Update 7: All the trial exhibits are now available as PDFs here. Some are also done as text. Look for the date nearest the day, as they are listed by the date they were entered, which could be a day or so after the date of their use in the courtroom.


  View Printable Version


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 )