User: Password:
|
|
Subscribe / Log in / New account

A setback for Google against Oracle

Did you know...?

LWN.net is a subscriber-supported publication; we rely on subscribers to keep the entire operation going. Please help out by buying a subscription and keeping LWN on the net.

May 14, 2014

This article was contributed by Adam Saunders

The US Court of Appeals for the Federal Circuit (CAFC) has overturned [PDF] a district court ruling on API copyrightability in Oracle v Google, which makes for a dramatic reversal in that litigation. With Oracle the victor (for now), the judgment looks, at first glance, to be troubling for the US software industry. The case is far from over, however, so there could be more sharp turns as it continues its way through the court system. For one thing, the CAFC raised the question of "fair use", which could upend things again depending on what decision is made.

Much has happened since LWN last covered the case, which all started a few months after Oracle acquired Sun (who developed Java) in 2010. That's when Oracle sued Google in the US District Court for the Northern District of California for alleged patent and copyright infringement in its implementation of Java as part of the Android operating system.

In his decision [PDF] for that court, Judge William Alsup ruled that APIs are not subject to copyright. The jury also ended up throwing out the claims of patent infringement. Oracle appealed the copyright ruling (but not the jury's decision on the patents) to the CAFC, and last week it got what it hoped for: a complete reversal of that ruling. In its 69-page ruling, the CAFC demonstrated a lot of things. It showed an excellent grasp of the technicalities of computer software, the Java programming language, and the differences between Oracle's Java and Google's Java-like system that powers its Android operating system. It showed a strong grasp of American copyright case law and legislation, tracing the history of various doctrines in copyright law and explaining much of the basics of copyright law. If I were a US law professor teaching copyright, I would definitely include this ruling in my course syllabus, if only for the sheer depth of the decision.

Most interesting (and potentially distressing) for software developers and businesses — indeed, the entire US software industry — is the actual reasons why the CAFC overturned Judge Alsup's decision. In this case, after talks for a license to Java with Sun broke down, "Google copied the declaring source code from the 37 Java API packages verbatim [...] [and] wrote its own implementing code, except with respect to: (1) the rangeCheck function, which consisted of nine lines of code; and (2) eight decompiled security files" (pages 10-11). It is important to note for the purpose of this ruling that Google has actually conceded to this verbatim copying in court. Having reviewed the facts, the CAFC goes through argument after argument on why it reversed the lower court's ruling.

As the CAFC was handling a copyright appeal from a court within the Ninth Circuit territory, it applied Ninth Circuit copyright doctrine. That includes an "abstraction-filtration-comparison" test to determine whether one program is "substantially similar" to another (the bar to meet for copyright infringement via copying): first, you abstract away the expression of the software idea from the idea itself; then, you filter out the parts of the software that aren't subject to copyright; and lastly, you compare the alleged infringing work with the plaintiff's work. The CAFC brings this test up to bat away the argument that APIs aren't copyrightable because they are functional works, as opposed to expressive forms of creativity like music: "This test rejects the notion that anything that performs a function is necessarily uncopyrightable" (page 23).

The CAFC threw out Google's "merger doctrine" defense (i.e. when an idea has only one viable form of expression, you can't distinguish between the two and therefore can't copyright either) on the grounds that Google could have rewritten the few thousand lines of Java source code and achieved the same effect: "nothing prevented Google from writing its own declaring code, along with its own implementing code, to achieve the same result" (page 32).

The CAFC also tossed out Google's "short phrases" defense regarding method declarations (basically, Google argued that you can't get a copyright on a short phrase). The court asserted that there was sufficient creative expression for them to meet the threshold of copyrightability: "Because Oracle 'exercised creativity in the selection and arrangement' of the method declarations when it created the API packages and wrote the relevant declaring code, they contain protectable expression that is entitled to copyright protection" (page 34).

The "scenes a faire" doctrine — meaning you can't get a copyright on certain expressions if they are "commonplace[,] [...] indispensable [...] and naturally associated with the treatment of a given idea," (page 35) — also doesn't help Google. That's because Google didn't demonstrate that the Java code it used was commonplace and indispensable in that fashion.

Rounding out the issue of copyrightability, the CAFC found the structure, sequence, and organization of Oracle's Java APIs to be "creative and original", as well as one of many possible ways to implement the Java programming language itself. The CAFC notes that, as this finding is consistent with the abstraction-filtration-comparison test it referred to earlier, it demonstrates the copyrightability of Oracle's Java APIs.

Although this is indeed a dramatic reversal of a ruling which seemed to adhere to the expectations of many in the software world — that APIs aren't copyrightable because of the need for interoperability — it is important to keep the ruling in perspective. First, this ruling only applies to courts within the Ninth Circuit, which encompasses most of the western US. Second, the court has not stated that interoperability and reimplementation of APIs without authorization are banned in that region. Indeed, Oracle itself makes this clear (as cited in the ruling): "Oracle claims copyright protection only in its particular way of naming and organizing each of the 37 Java API packages" (page 43). Thus a reimplementation with new source code, names, and structures would avoid the CAFC's ire. Unfortunately, such dramatic changes would leave you with a different API, so that leeway seems somewhat useless to software developers.

Third, the CAFC didn't rule on "fair use". The fair use doctrine gives courts some discretion to find that certain unauthorized uses of copyrighted works are not infringing. The test includes the following (which are not exclusive):

(1) the purpose and character of the use, including whether such use is of a commercial nature or is for nonprofit educational purposes; (2) the nature of the copyrighted work; (3) the amount and substantiality of the portion used in relation to the copyrighted work as a whole; and (4) the effect of the use upon the potential market for or value of the copyrighted work.

The jury at the district court couldn't decide whether or not Google's use of Java was fair, and Judge Alsup didn't address the issue because he didn't think that the APIs were copyrightable at all. Since the CAFC (rightly) feels that it's more appropriate to let the lower court handle this issue, as it has much more familiarity with the whole of the case than does the CAFC, it has remanded the case back to the district court to make a fair use determination.

The CAFC did specifically note that Google may be able to persuade a jury that its use of Java was fair. Unfortunately, fair use as a defense in these situations won't prevent a significant chilling effect on independent software developers and smaller companies who may have been interested in reimplementing APIs as part of a commercial project. Indeed, this ruling may have opened the floodgates for "API trolling" within the Ninth Circuit.

It's worthwhile to note, as the FSF has, that Google could have avoided this legal mess by using a GPL-licensed version of Java, such as IcedTea. But Google chose not to. Given last week's ruling, it seems possible that there are people on Google's Android team feeling some regrets about that decision.

It's also important to realize that this case is not closed. With the fair-use issue back to the district court to make a ruling, and an appeal route on the CAFC's copyrightability ruling to the Supreme Court available to Google, this litigation isn't going to stop anytime soon. More twists and turns are possible in the coming months and years.


(Log in to post comments)

A setback for Google against Oracle

Posted May 15, 2014 3:32 UTC (Thu) by dlang (subscriber, #313) [Link]

> First, this ruling only applies to courts within the Ninth Circuit, which encompasses most of the western US

Why? This wasn't a ruling of the Ninth Circuit. this was a ruling of the Federal Circuit.

While they opted to apply the precedent of the Ninth Circuit, there's nothing in this that limits their ruling to applying there.

A setback for Google against Oracle

Posted May 15, 2014 11:41 UTC (Thu) by asaun (guest, #83917) [Link]

Article author here.

"Why? This wasn't a ruling of the Ninth Circuit. this was a ruling of the Federal Circuit."

That's true, and it's true that the Federal Circuit's patent rulings bind the entire country. In other matters though, the Federal Circuit has to make a "choice of law" decision, which can include applying the laws of a particular circuit and having the decision only apply to that circuit.

Quoting from the ruling:

"'When the questions on appeal involve law and precedent on subjects not exclusively assigned to the Federal Circuit, the court applies the law which would be applied by the regional circuit.' Atari Games Corp. v. Nintendo of Am., Inc., 897 F.2d 1572, 1575 (Fed. Cir. 1990). Copyright
issues are not exclusively assigned to the Federal Circuit. See 28 U.S.C. § 1295. The parties agree that Ninth Circuit law applies" (page 15).

verbatim copying?

Posted May 15, 2014 7:14 UTC (Thu) by mjw (subscriber, #16740) [Link]

It is important to note for the purpose of this ruling that Google has actually conceded to this verbatim copying in court.

I was actually surprised that the appeals court claims that Google conceded that. I could not find anywhere where they said that. As others, like Bradley Kuhn, have pointed out the Google didn't conceded they copied anyhting verbatim, what was said in the original trial was:

Google did not admit to copying of any of Oracle's text, documentation or code [...]. Rather, Google said two separate things: (a) they did not copy any material [...], and (b) admitted that the names and declarations are the same, not because Google copied those names and declarations from Oracle's own work, but because they perform the same functions. In other words, Google makes various arguments of why those names and declarations look the same, but for reasons other than “mundane cut-and-paste copying from Oracle's copyrighted works”..
Which seems to match what happens in reality. You don't copy anything verbatim in a reimplementation. You consult some books on the topic, run some existing programs, create some tests, mix and match your hacks till what you have is (API) compatible. It isn't strange that some of the words used or the structure might look the same, but you certainly didn't do any verbatim copying.

It would have been nice to know how the appeals court jumped from above "agrees it looks similar" to "concedes verbatim copying". There might be legal justification for it (or not). But I couldn't find any explanation in the appeals court ruling for this assertion of "Google conceded verbatim copying in court". Since the ruling only seems to make some sense if you accept that fact, it would be nice to have seen more reasoning on how they arrived at it.

verbatim copying?

Posted May 15, 2014 8:38 UTC (Thu) by tzafrir (subscriber, #11501) [Link]

Also, as he pointed out later in the oggcast, Google certainly did not copy that [directly] from Sun/Oracle. It is code that Google got from the Apache Harmony project.

verbatim copying?

Posted May 15, 2014 10:29 UTC (Thu) by Seegras (guest, #20463) [Link]

> But I couldn't find any explanation in the appeals court ruling for this
> assertion of "Google conceded verbatim copying in court".

AFAIK it was the jury that came to that conclusion; and the appeals court just went with that.

verbatim copying?

Posted May 16, 2014 11:24 UTC (Fri) by mjw (subscriber, #16740) [Link]

But if that is what the court meant, then that is a little sloppy IMHO. It seems to get to the main point of the whole case after all.

Google says they didn't copy at all, but explains why some stuff might look somewhat similar for 0.1% of the works in question. But explicitly denies doing any verbatim copying. The whole point of the case seems to be how in such a situation you still get to the fact or admission that they did create a verbatim copy.

The appeal court could have given a bit more explanation. Because I cannot follow their reasoning. It might indeed be that they took the jury conclusion as basis for their claim that there was a verbatim copy made. But that would then be despite Google denying it did any copying.

Most of the appeals court ruling is about whether someone can claim copyright on something or not. Then they overrule the lower court that some specific structure of functional elements cannot by copyrighted. But then you still get to the question of whether Oracle actually held the copyright on that structure and whether Google actually made a copy of that copyrighted work. The appeals court then just assumes both these last two facts. But I might be missing where they explain their reasoning for assuming those last two facts in the first case. It wasn't because "Google has actually conceded to this verbatim copying in court".

A setback for Google against Oracle

Posted May 15, 2014 17:56 UTC (Thu) by tjc (guest, #137) [Link]

The CAFC threw out Google's "merger doctrine" defense (i.e. when an idea has only one viable form of expression, you can't distinguish between the two and therefore can't copyright either) on the grounds that Google could have rewritten the few thousand lines of Java source code and achieved the same effect: "nothing prevented Google from writing its own declaring code, along with its own implementing code, to achieve the same result" (page 32).
So Google could have rewritten code, but isn't it up to the prosecution to prove that? If not, then isn't this some variation on "guilty until proven innocent?"

A setback for Google against Oracle

Posted May 15, 2014 18:36 UTC (Thu) by iabervon (subscriber, #722) [Link]

This is "could have" in the sense of "was able to, but didn't, and wouldn't have been guilty if they had" not "might have, and is guilty on the unproven guess that they did". The claim in question is a defence; attempting to prove it isn't the prosecution's job.

A setback for Google against Oracle

Posted May 15, 2014 18:50 UTC (Thu) by tjc (guest, #137) [Link]

Thanks for the explanation.

A setback for Google against Oracle

Posted May 17, 2014 22:04 UTC (Sat) by giraffedata (subscriber, #1954) [Link]

And by the way, there is no accusation of a crime here. There is no guilt, innocence, or prosecution. It's just a dispute over whether Google owes Oracle royalties.

A setback for Google against Oracle

Posted May 18, 2014 0:47 UTC (Sun) by dlang (subscriber, #313) [Link]

Is copyright violation a crime?

if it isn't then all the fuss about 'Internet Piracy' and getting the government involved in investigating and prosecuting pirates is wrong

A setback for Google against Oracle

Posted May 18, 2014 1:09 UTC (Sun) by giraffedata (subscriber, #1954) [Link]

Is copyright violation a crime?

Sometimes it is. I've heard it has to be fairly egregious, and I can't think of a case where someone was prosecuted for it. All the famous cases are just civil disputes between copyright holder and copier.

A setback for Google against Oracle

Posted May 18, 2014 1:13 UTC (Sun) by dlang (subscriber, #313) [Link]

well, the helicopter swat raid on Kim Dotcom was a government operation. The freezing of the megaupload finances was at the bidding of the US government.

Domain Names have been seized by the FBI for piracy.

how many examples do you need?

A setback for Google against Oracle

Posted May 18, 2014 1:58 UTC (Sun) by giraffedata (subscriber, #1954) [Link]

how many examples do you need?

Sorry, I didn't mean to imply that because I couldn't think of a case that none existed. I only meant to illustrate how common prosecutions for criminal copyright infringements are compared to civil cases like the instant one.

I maintain that the vast majority of debate over copyright concerns civil duty, not crime. The examples you gave fit my impression that criminal prosecution is reserved for egregious cases of massive copying as opposed to individual companies copying other individual companies' work.

A setback for Google against Oracle

Posted May 15, 2014 19:14 UTC (Thu) by josh (subscriber, #17465) [Link]

While I certainly agree that this is a bad ruling, it's worth pointing out that this ruling also strengthens copyleft licenses. Arguments about the scope of the GPL and "derived works" often come cloes to calling APIs copyrightable.

A setback for Google against Oracle

Posted May 15, 2014 19:15 UTC (Thu) by southey (subscriber, #9466) [Link]

The "scenes a faire" doctrine — meaning you can't get a copyright on certain expressions if they are "commonplace[,] [...] indispensable [...] and naturally associated with the treatment of a given idea," (page 35) — also doesn't help Google. That's because Google didn't demonstrate that the Java code it used was commonplace and indispensable in that fashion.
This is the problem with the decision that makes any of the good things in the decision pointless. This argument failed the compatibility fact that was brought up a few times during the trial and that Sun (the owners at the time) had endorsed at the time (court seems to have forgotten that aspect). In particular, they hold the double standard that Google is wrong for using functions but those functions are not original to Java. They also appeared to totally ignored that there was no evidence provided that Sun/Oracle ever owned copyrights on those individual APIs - in fact Google showed that they did not as the copyright of Java was actually as a compilation. It also conflicts with established copyright law on recipes by simply providing order - an action that was insufficient to be allow copyrighting.

Of course, this ruling means that whoever wrote the first function carries the copyright for all functions and APIs...

A setback for Google against Oracle

Posted May 15, 2014 21:17 UTC (Thu) by Fats (subscriber, #14882) [Link]

I do hope this ruling does mean that a compatible imnplementation is still possible if both declaring source code and implementing source code is written from scratch. Otherwise this is a very bad outcome.

A setback for Google against Oracle

Posted May 15, 2014 22:47 UTC (Thu) by dlang (subscriber, #313) [Link]

as long as you don't use the same function names or organize them into the same sets in your modules...

now, how you could do that and still remain compatible is something I haven't seen anyone explain.

A setback for Google against Oracle

Posted May 16, 2014 15:17 UTC (Fri) by dberkholz (guest, #23346) [Link]

You might like to read this post of David Pollak's on the topic. In it he points out that this decision didn't actually prohibit reverse engineering to create a compatible API. He's got a few others exploring a variety of implications of the ruling.

A setback for Google against Oracle

Posted May 18, 2014 1:03 UTC (Sun) by dlang (subscriber, #313) [Link]

I suggest you read the rest of his posts, they go on about how horrible this is.

Besides, how can you possible prove that you reverse engineered the function names and parameters of a library?

A setback for Google against Oracle

Posted May 18, 2014 2:06 UTC (Sun) by dberkholz (guest, #23346) [Link]

Presumably things like not copying comments and ordering within a header.

A setback for Google against Oracle

Posted May 18, 2014 2:27 UTC (Sun) by dlang (subscriber, #313) [Link]

from what I saw they didn't copy comments, the new comments were very similar to the old ones, but that's because they're describing the same functionality.

Google wasn't accused of literally copying the comments, but of trying to file the serial numbers off by rewriting them. (well, early on there was accusation of direct copying of comments, but that was eliminated during the trial

As for ordering within a header. My understanding is that most of them are in alphabetical order, possibly grouped by function family (although with Java's long naming schemes, the two are pretty much the same)

If simply re-ordering the functions within the header was enough to avoid it being copying, that's just a few minutes of scripting, running software won't care

But it will be much harder to be sure that you haven't missed anything if you re-order things that way.

A setback for Google against Oracle

Posted May 16, 2014 1:25 UTC (Fri) by egoshin (subscriber, #90998) [Link]

Well, the outcome is simple - don't start your project in Java.
Or any another non-GPLed language.

A setback for Google against Oracle

Posted May 16, 2014 7:41 UTC (Fri) by khim (subscriber, #9252) [Link]

But Java is GPLed.

A setback for Google against Oracle

Posted May 16, 2014 20:01 UTC (Fri) by mikov (subscriber, #33179) [Link]

I think that many of us developers are experiencing cognitive dissonance in this case. We don't want to admit even to ourselves that objectively APIs are highly creative expressions. There are many ways to define an API and most of them are bad. Arguably, Java's is pretty good.

To claim that all APIs performing the same function would end up looking the same is dishonest or best case naive and misinformed. There is a lot of effort, experience and creativity that goes into creating a good API. That is precisely what copyright is supposed to protect. Let's man up and accept it.

Now, with all that said, I am convinced that APIs absolutely SHOULD NOT be copyright-able. I am similarly convinced that software should not be patentable. Both of these are for practical as well as ideological reasons.

The only way to resolve this is for congress to act. So, probably any day now :-) I am sure they are already discussing API copyright in a committee as I am writhing this...

But no, seriously, we are screwed.

A setback for Google against Oracle

Posted May 17, 2014 1:57 UTC (Sat) by viro (subscriber, #7872) [Link]

BTW, are contracts copyrightable? For example, can a company try to use copyright law to prevent competitors offering the word-for-word identical contracts, the only differences being the name of company *and* lower price? I'm fairly sure that lawyers will claim that there's a lot of creative work going into drawing a contract...

API _is_ a contract, and AFAICS the complaint looks an awful lot like "our competitor is deliberately offering contracts that are too similar to ours; the bastards are doing that on purpose, to make it easier for customers to switch; they shouldn't be allowed to do that".

I honestly don't know if contract terms and structure are copyrightable in US, and if they are - who owns the copyright (lawyer(s) drawing that contract? The part(y|ies) of contract retaining the lawyer(s) in question?) If an agreement between X and Y is a matter of public record and A and B want to follow it as a precedent, can they take a copy of that agreement and keep the terms, replacing only the names of the parties? Can X sue A for violating their copyright on the terms of agreement? What about a case when A comes to Y and offers to match the terms, with price being 10% lower than in existing agreement with X? Can X force them to make extensive changes in the wording of the agreement?

A setback for Google against Oracle

Posted May 17, 2014 3:21 UTC (Sat) by Cyberax (✭ supporter ✭, #52523) [Link]

In Russia, Ukraine and France - they are not copyrightable, but only if they are a part of public court records. Which kinda makes sense.

A setback for Google against Oracle

Posted May 17, 2014 22:34 UTC (Sat) by giraffedata (subscriber, #1954) [Link]

The question of whether a contract is copyrightable has exactly the same terminology problem as the question of whether an API is copyrightable.

A contract, in legal discussion, is not a writing. It is a disembodied agreement. Indeed, many contracts don't involve any writing at all. By this definition, a contract is definitely not copyrightable. If John agrees to give Mary $1000 to paint John's house and Bob hears about that and agrees to give Susan $1000 to paint Bob's house, there is no copyright infringement. Bob and Susan owe John and Mary nothing.

But in informal talk, "contract" often comes to mean the memorandum of a contract - a writing that memorializes what the parties agreed to. These are quite copyrightable. In fact, because they are written by people with highly specialized skills (lawyers), they are the most valuable per-page copyrights I know. If John's attorney writes out the details of the house-painting contract between John and Mary and, rather than hire his own attorney, Bob just photocopies John's contract and modifies the parties and dates, John's attorney has a right to be paid.

Analogously, I have always been perplexed by claims that application programming interfaces are copyrightable, because I understand an API to be the method of a program communicating with another program - what bit goes where, what effect a call has on the system, etc. But it's clear from what I've read today that what many programmers call an API is a piece of code. According to this article, the court has said that piece of code, not the function it performs, is copyrightable.

That terminology confusion might be at the heart of much of the controversy over this case.

A setback for Google against Oracle

Posted May 18, 2014 1:07 UTC (Sun) by dlang (subscriber, #313) [Link]

anything that a computer does is a piece of code.

what we are talking about here is the code that declares that the function min exists and that it takes two integers as it's arguments and returns an integer (with a comment that says that it returns the smallest of it's arguments)

This isn't the function that performs this check, just the definition that this function exists and how to call it.

If you are going to write a library to replace an existing library (so that programs written in the language can still work), then the name of the function, which library the function is in, and the type and number of the parameters and return value must be the same.

The only flexibility that you have is in the names of the arguments,

the claim here is that Google copied the names and organization of the functions, and that the comments explaining what the functions do sound very similar

well, the comments had better sound pretty similar, the functions do the same thing after all.

If Google were to organize the functions differently (put them in different libraries) or name them something different (minimum instead of min for example), it would break existing programs and not be the same API

I guess they could have listed the functions in each library in a random order instead of alphabetically, but that's not a very creative choice.

In the past, the courts have ruled that you can copy the minimum that you need in order to be interoperable. There was even a case where the entire program was copied, bit for bit, and the court ruled that it was legal (the printer manufacturer checked that the entire program existed, bit for bit, in the toner cartridge, in order for aftermarket cartridges to work, they needed to have the exact same bits in the exact same place, so the entire program was copied)

The big problem here is that people are looking and saying "that was a lot of effort to do, nobody else should be able to do the same thing without paying" and this completely ignores the fact that _everything_ that we do is built on top of work that was done by other people in the past.

This post http://blog.goodstuff.im/oracle_sweet_lord by David Pollak talks about how this ruling is a disaster, especially for Oracle.

He also goes on to talk about how everyone who writes and deploys any Java program is in violation of Oracle's API copyrights if this is upheld http://blog.goodstuff.im/we_all_infringe_redux

A setback for Google against Oracle

Posted May 18, 2014 19:51 UTC (Sun) by giraffedata (subscriber, #1954) [Link]

anything that a computer does is a piece of code

This is a pretty abstract leap of metaphor. And the court in this case and every other one I know of doesn't make it. They say what you said in the rest of your post: that there is a distinction between what a computer does and any piece of code and the former is not the subject of copyright law and the latter is.

The district court said all Google copied was what the computer does, so Google was in the clear. The appeals court said Google copied a bunch of pieces of code, so is not in the clear.

I found it hard to make sense of David Pollack's essay because of the terminology confusion in the word API that I previously mentioned. I note that the court used more specific terminology than "API" in its opinion.

The court seemed to make it clear that one could implement an API with original code and thereby not infringe, but found that Google didn't do that in this case.

(And by the way, the court didn't say copying the pieces of code was an infringement in this case - only that it could be. More trial required).

A setback for Google against Oracle

Posted May 19, 2014 1:49 UTC (Mon) by dlang (subscriber, #313) [Link]

well, they also said that Google admitted to copying, which is not what the court transcripts said.

So there's a lot of ground to cover in the appeals here.

A setback for Google against Oracle

Posted May 22, 2014 5:52 UTC (Thu) by linuxrocks123 (subscriber, #34648) [Link]

Do you know what the name of that case is? The one about the aftermarket printer cartridges?

A setback for Google against Oracle

Posted May 22, 2014 6:43 UTC (Thu) by dlang (subscriber, #313) [Link]

I don't remember it now, it was several years ago.

A setback for Google against Oracle

Posted May 22, 2014 22:23 UTC (Thu) by jimparis (subscriber, #38647) [Link]

A setback for Google against Oracle

Posted May 22, 2014 22:30 UTC (Thu) by dlang (subscriber, #313) [Link]

that looks right


Copyright © 2014, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds