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
Rachel King JZNet article + stipulation document | 151 comments | Create New Account
Comments belong to whoever posts them. Please notify us of inappropriate comments.
Corrections Thread
Authored by: al_dunsmuir on Wednesday, May 16 2012 @ 11:26 AM EDT
Please identify the error in the title of your post.

[ Reply to This | # ]

Off Topic
Authored by: al_dunsmuir on Wednesday, May 16 2012 @ 11:28 AM EDT
Please avoid staying on topic in this section.

[ Reply to This | # ]

Newspicks
Authored by: al_dunsmuir on Wednesday, May 16 2012 @ 11:29 AM EDT
Please mention the news story's name in the title of the top
post.

[ Reply to This | # ]

Oracle stretching to find causal nexus on rangecheck
Authored by: Anonymous on Wednesday, May 16 2012 @ 11:29 AM EDT
It is quite obvious that Oracle is struggling to make a causal nexus in relation
to the rangecheck code. They keep bringing up TimSort and how it is 20x faster
and key to Android speeds.

1 - TimSort is not the infringing code, rangecheck is.
2 - Bloch testified that the 20x speedup in TimSort is not attributable to the
rangecheck code, but unrelated code in TimSort. This was never rebutted or
contested in testimony by Oracle.

[ Reply to This | # ]

COMES
Authored by: al_dunsmuir on Wednesday, May 16 2012 @ 11:30 AM EDT
Please post all transcriptions of Comes exhibits here for PJ.
Please post the HTML as plain text for easy copying.

[ Reply to This | # ]

Tweets from the courtroom
Authored by: Anonymous on Wednesday, May 16 2012 @ 11:32 AM EDT

With many thanks to feldegast and reporters

Raw tweets

Feldegast tweets

[ Reply to This | # ]

Signs of desperation in the Oracle camp?
Authored by: al_dunsmuir on Wednesday, May 16 2012 @ 11:34 AM EDT
On twitter, Rachel King is describing "massive huddles" between the
lawyers. Judge Alsup has delayed his entry until 08:30 PDT.

Signs of desperation in the Oracle camp? Perhaps the realization that that damp
feeling is from the water lapping their ankles on the sinking case?

[ Reply to This | # ]

I finally get it - I know why Oracle wants to go after infringers profits.....
Authored by: Anonymous on Wednesday, May 16 2012 @ 11:39 AM EDT

It's all in 1 word:

some causal link
Now... if one is afflicted a little bit with dislexia... one could be reading:
    some casual link
And the word "casual" certainly takes on a far more generic meaning than "causal".

I wonder if such a tiny mis-read in Legal Terminology can explain much of BSF's apparent behaviors.

RAS

[ Reply to This | # ]

Unjustifiably high risk
Authored by: Anonymous on Wednesday, May 16 2012 @ 11:58 AM EDT
"that Google actually knew or should have known that its actions
constituted an unjustifiably high risk of infringement of a patent."

Nowadays, Sitting down at your keyboard, opening a file and
typing in more than 8 lines of code is an action which constitutes "an
unjustifiably high risk of infringement of a patent".

[ Reply to This | # ]

Oracle v. Google - Patent Infringement Instructions, Damage Phase Witnesses, and the Continuing Saga of Infringer's Profits
Authored by: Anonymous on Wednesday, May 16 2012 @ 12:03 PM EDT
What about the Constitutional language, itself, "to promote the useful
arts" in this context. Details of arcane case law obscure that the patent
monopoly is granted to promote, not inhibit the useful arts. Sun developed Java,
but sat still about extending it in any real measure to mobile devices. Is the
purpose of the monopoly, the policy basis of it, to permit firms' restraining or
impeding the useful arts? The Lead, Follow, or Get out of the way saying comes
to mind. It would make good patent law - especially if the tire companies
suppress elastomer technology that would yield 300,000 mile tire life, or the
oil companies suppress extended gas mileage technology. The point is Sun
declined to want to be a player in the mobile device market, they had no
business plan to leverage Java there, but wanted to retain control over those
willing to test the market. Impeding the useful arts is NOT what the
Constitution says.

[ Reply to This | # ]

Noser - contractor?
Authored by: Anonymous on Wednesday, May 16 2012 @ 12:10 PM EDT
Does anyone know more about Noser and its involvement in the eight test files? I
did a search and this is what I found:
http://www.noser.com/en/oha

If Noser was part of the copyright violation - how would this affect Google?
Wouldn't Oracle have to go after Noser?

[ Reply to This | # ]

9 lines of code = 3 statements + header
Authored by: Anonymous on Wednesday, May 16 2012 @ 12:20 PM EDT

One thing that I wish the media would pick up on more is the reality behind these "9 lines of code".

When you look at the infringing code as a programmer it is even more ridiculous when you think of the following:

  • The 9 lines are really 3 if statements and a header
  • The form of the if clause is mandated by mathematics... i.e. checking if a parameter is less than 0, etc.
  • The error classes thrown are standard Java classes for the conditions found. There is no discretion on the part of the programmer.
  • The parameters to the out-of-bounds error class are not discretionary.
  • The only discretionary portion of the code is the parameter to the illegal argument error.

To illustrate the simplicity of what Oracle is claiming as infringed, the following is the pseudocode. The bold-italics parameter description is the only discretionary part of the code.

void range_check(int array_len, int from_index, int to_index) {

   if (from_index > to_index) throw illegal_argument_error(description);

   if (from_index < 0) throw out_of_bounds_error(from_index);

   if (to_index > array_len) throw out_of_bounds_error(to_index);

}

So Oracle is really claiming infringement of a single parameter, which in the infringed code assembles an error string indicating that the from_index is greater than the to_index.

-- nyarlathotep

[ Reply to This | # ]

Oracle v. Google - Patent Infringement Instructions, Damage Phase Witnesses, and the Continuing Saga of Infringer's Profits
Authored by: Anonymous on Wednesday, May 16 2012 @ 12:37 PM EDT
What puzzles me, the doctrine behind recovering infringers' profits is that
competition with the copyright or patent holder causes lost profits to the IP
owner. If I own a valuable property, such as copyright to Michele Bachmann's
autobiography [this is a hypothetical] and some corner press in East St. Louis
publishes a knock-off paperback pulp version of the identical text, then every
dollar that competitor earns as a profit is money I might have earned from my
use of my IP in publishing the book based on business risk and reward balancing
in press run size, promotional spending, etc. But Sun was not using Java,
actively, at all, in the mobile device market. They were not deprived of lost
profits by an infringer. They did not have any of their own potential profits
siphoned away. They owned but did not use, so there was no impeded profit
stream. They suffered no lost profit, and should be awarded nothing unless they
pursue an equitable royalty charge theory. So, what's an equitable royalty in
this situation? It seems the infringers' profit theory arose in equity, and was
codified. Equity is for the court and the court has wide discretion in fixing a
suitable equitable remedy. But the codification step suggests it goes to the
jury. Or is the doctrine entirely a judicially fashioned remedy, not within the
federal code?

In any event, instructions and closing argument on "infringers profit"
damages theory should be a soap opera within a soap opera. Lawyers on both sides
doing a lot of hand waving while making practical and impractical suggestions.
Give the jurors popcorn and cotton candy?

[ Reply to This | # ]

Oracle and Google take copyright damages out of the jury's hands
Authored by: Anonymous on Wednesday, May 16 2012 @ 01:41 PM EDT
From the Verge:
Oracle and Google take copyright damages out of the jury's hands

[ Reply to This | # ]

Rachel King JZNet article + stipulation document
Authored by: Anonymous on Wednesday, May 16 2012 @ 01:46 PM EDT
Here is Rachel King's latest article about what happened in court this morning:
http://www.zdnet.com/b log/btl/oracle-google-hammer-out-potential-trial-roadmap/77162?utm_medium=twitte r&utm_source=twitterfeed

She has also uploaded the stipulation to Scribd:
http://www.scribd.com/zdnetrac hel/d/93799869-Oracle- v-Google-Stipulation-Regarding-Copyright-Damages

[ Reply to This | # ]

Oracle v. Google - Patent Infringement Instructions, Damage Phase Witnesses, and the Continuing Saga of Infringer's Profits
Authored by: Anonymous on Wednesday, May 16 2012 @ 02:01 PM EDT
It is really amusing how they claim that the performance of
the rangeCheck method uber important, because it is called
2600 times...

To put this into perspective: I'd assume that on a current
Intel desktop cpu, the function body can be executed in
pretty much 2 (amortized) clock cycles, if none of the
conditions is true (this should be the case most of the
time, everything else would indicate bad programming in the
app). So the mighty 2600 calls could be executed about
500000 times per second (if inlined).

Let's assume that the java/dalvik/arm stack is 100 times
slower. It could still execute the 2600 mighty rangeChecks
during boot in half a millisecond. Hardly anything I would
notice when I go shopping for a new phone...

[ Reply to This | # ]

I imagine the judge regrets throwing Oracle that bone with overruling the jury
Authored by: Anonymous on Wednesday, May 16 2012 @ 02:16 PM EDT
With all this infringer's profits nonsense.

He obviously knew they were desperate, but maybe he didn't
think they were *that* desperate.

[ Reply to This | # ]

Belt And Suspenders: What is a range check for
Authored by: BitOBear on Wednesday, May 16 2012 @ 08:46 PM EDT
Some (non-software) people may be wondering what rangeCheck() is for an how
significant its use actually is to a running applicaton, Android, or the phone
itself. This is a BitOBear grade answer to that question.

It isn't significant to a "finished" program of "normal
construction".

A range check on an array bounds ony "fails" (e.g. "means
something") if the program itself is caused to ask for something that it
"knows, or should have known" does not exist. The ever elusive
"properly written code" is supposed to "scrub it's input" at
run time to make sure that it never asks for this out-of-range data. Good coding
is the belt that holds up the pants of a running application. functions like
rangeCheck() are the suspenders that catch said pants when the programmer
doesn't know how to, or didn't take the time to, buckle his belt properly.

In a language like "C", the programmer is -never- given such a
function automatically by the language. Instead the programmer places a check on
the "gateway point" between what the programmer can control (e.g. his
own code) and what he cannot (e.g. what the user types, or what he might get
from some other program). If the programmer has done his job then once he knows
the input is valid, the program needs never check the input again.

Languages like Java (and effectively all interpreted languages as well) have the
check "built in" to the act of looking at some structures (such as
"arrays") and they perform the check -every- -time- something tries to
get or put something from or into an array. In short the language says "I
don't care if you want a belt or not, you are going to wear these suspenders
young man" like a very patrician guardian.

Doing this range check is not very expensive.

Doing this "inexpensive" range check -every- -time- can add up to a
huge run-time tax (computing expense) on a program.

The reason that every programmer has written rangeChec() "hundreds of
times" is that normally you -want- to put on your belt in some situations
(e.g. do a manual range check at the gateway points in your code).

Further, building wholly new code is a bit like having to "tailor and fit
your pants" in public. You want to find out if the pants fit well, but you
don't want to be walking about pants-less while you do it.

To this end, most languages have something called "conditionally compiled
code". This is code that you can include or exclude from any given
compilation run, and so any given copy of the executable by "setting a
switch" of some sort when you build the program or part thereof. In the C
language this is usually done by "defining, or not" the symbol
"DEBUG". When the symbol is defined the suspenders code is included.

This, in C++ here, looks something like:

template <class Value>
class Array {
...
Value getValueAt(int Index) {
#if defined(DEBUG)
rangeCheck(Index);
#endif
...
return ValueDiscovered;
}
...
};

The programmer does this so that during development he can pay the expense to
have his suspenders slow down everything so that he can find out if -his- code
does a bad thing internally. Once he knows his code -doesn't- do a bad thing he
can deliver it for "production release" where the DEBUG switch value
is -not- DEFINED.

In his code he might still have a range check at his gateway points that -isn't-
conditional on the DEBUG switch, if he is getting input from an untrusted
source.

-That- range check usually looks different than the rangeCheck() we are talking
about here because rather than throwing an error exception it would likely do
things like tell the user that we don't believe s/he was born in 2150 C.E. nor
1972 B.C.E. since those dates of birth are unreasonable on a drivers license
here at the DMV.

So range check "belt" code is code that is -expected- to fail for
normal (non exceptional) reasons like, well, the existence of unreasonable
users.

While rangeCheck() "suspenders" code is about unexpected and therefor
exceptional (throws exceptions typically) reasons like previously unidentified
bugs in the code (like a Y2k style error turning the birth year 1920 into 2020
on a census form after some database searched upchucked the year "20"
for a two digit year). [gateway "belt" code -should- have caught this
since a database is an "untrusted" source.]

Java is "belt and suspenders" or at least "you will wear your
suspenders young man" patrician because it was build with the web in mind,
and the web is full of unreasonable users trying to do things harm for sport.

In terms of applicability to the case at hand. Google has no reason to put
"spoliation" values in GooglePlay or the Google Ad Service. If we
presume they "belt test" their ads and application delivery code
before releasing it, we know that -by- -design- those ads avoid any condition
where the phone operates with rangeCheck() actually throwing an exception.

So we know that the execution tax of calling rangeCheck() -must- be paid because
the Java spec says it -shall- be paid, but the contribution of rangeCheck() to
the presentation of an ad or the installation of a program via GooglePlay is
-nill-.

In fact if rangeCheck() -ever- -did- step in to the process, the process would
fail. The ad would not be displayed or the application would not be bought, so
by definition if rangeCheck() -acts- -at- -all- within any Google revenue
generation attempt, Google -loses- money.

The only -nexus- that can therefore be proved, is that -every- -time-
rangeCheck() is a cost event, not a profit event, for Google. It can prevent a
sale. It can prevent an ad view. It -always- and -constantly- slows the
operation of the phone. The function rangeCheck() is pure entropy.

We do not charge the family of the accused the cost of the bullet used in their
execution here.

[ Reply to This | # ]

Oracle's argument
Authored by: ais523 on Wednesday, May 16 2012 @ 09:21 PM EDT
"5. Google would not risk its brand and reputation by engaging in
infringement unless the benefits of doing so were substantial."

Wow, this is an angle I hadn't thought of at all, and is possibly the
cornerstone of Oracle's case here. Obviously all the copying Google did was
massively important to Android, because if it wasn't, they wouldn't have taken
the risk of being caught!

I think the problem here is that that only applies if the copyright infringement
was wilful by the company (as in, a deliberate decision to steal code rather
than having a contractor cut a few corners or an employee reuse code in one
context that they'd intended for another). And Oracle don't seem to have been
trying to prove that.

[ Reply to This | # ]

Oracle's claims about PolicyNodeImpl
Authored by: bugstomper on Thursday, May 17 2012 @ 12:13 AM EDT
In Oracle's brief they said
For example, the PolicyNodeImpl class alone is intricate and would likely take days if not weeks to write from scratch because it requires substantial understanding of security certificates and all the surrounding code just to get started.
It just so happens that PolicyNodeImpl was the only one of the eight files that I looked at in depth to see what role the testing actually had in Android.

  1. PolicyNodeImpl in the JDK is the default implementation of the interface PolicyNode. As far as I can tell it contains the bare minimum implementation of the required methods of the interface, to provide skeleton implementation that can be used by some internal functions of the JDK to build default Policy trees. It isn't used even for that in Android.

  2. The only use I can see for PolicyNodeImpl in Android was as an example implementation of the PolicyNode interface used by the PolicyNodeTest class to test that it works. I couldn't see that the test actually tested anything other than that PolicyNodeImpl itself worked, and PolicyNodeImpl was not used anywhere else in Android.

  3. Android does contain a class that it actually uses which implements the PolicyNode interface, PKIXPolicyNode, which comes from the FOSS security library BouncyCastle.
    See Android 0.9 beta Javadoc for PKIXPolicyNode
    This did not "take days if not weeks to write from scratch" at least it did not take Google that long because it was already available from the BouncyCastle library which Google had already identified to Noser in their contract as being a good source to use for files for Android.

So much for Oracle's argument.

[ Reply to This | # ]

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 )