Difference between revisions of "Oracle v. Google (2010, USA)"
(→News from 13 Aug 2010: * [http://news.cnet.com/8301-30684_3-20013546-265.html Oracle sues Google over Android and Java], CNet)
(→6,125,447 / 1997: KeyKOS/capabilites?)
|Line 57:||Line 57:|
renamed C++ in 1983.
renamed C++ in 1983.
=== 6,192,476 / 1997 ===
=== 6,192,476 / 1997 ===
Revision as of 07:38, 13 August 2010
In August 2010, Oracle filed a lawsuit (PDF) against Google for "developing Android". The suit claims infringement of software patents related to the Java programming language distributed on Google's Android software. The lawsuit was filed at the US District Court for the Northern District of California.
Oracle acquired Java when they purchased Sun.
Oracle claims that Google infringes these seven patents granted by the USPTO:
- 6,125,447 - Protection Domains To Provide Security In A Computer System
- 6,192,476 - Controlling Access To A Resource
- 5,966,702 - Method And Apparatus For Preprocessing And Packaging Class Files
- 7,426,720 - System And Method For Dynamic Preloading Of Classes Through Memory Space Cloning Of A Master Runtime System Process
- RE38,104 - Method And Apparatus For Resolving Data References In Generate Code
- (A reissued patent; the original number was 5,367,685)
- 6,910,205 - Interpreting Functions Utilizing A Hybrid Of Virtual And Native Machine Instructions
- 6,061,520 - Method And System for Performing Static Initialization
Publishing something under the GPL version 2 (yes, version two!) according to RMS implicitly allows to use possibly violated patents. Something he made explicit with the GPLv3. But doesn't this kill the whole case?
No, because Google reimplemented the JRE rather than using OpenJDK.
Searching for prior art
What follows is a short association to each patent where I already heard of it (so like 10 minutes / patent .. something the patent office obviously wasn't able to do .. )
Maybe these can be invalidated in a review.
6,125,447 / 1997
1. A method for providing security, the method comprising the steps of: establishing one or more protection domains, wherein a protection domain is associated with zero or more permissions; establishing an association between said one or more protection domains and one or more classes of one or more objects; and determining whether an action requested by a particular object is permitted based on said association between said one or more protection domains and said one or more classes.
Prior art: This is C++ private / protected.
No, those apply at the level of individual members - not classes.
C++ (pronounced see plus plus) is a statically typed, free-form, multi-paradigm, compiled, general-purpose programming language. It is regarded as a "middle-level" language, as it comprises a combination of both high-level and low-level language features. It was developed by Bjarne Stroustrup starting in 1979 at Bell Labs as an enhancement to the C programming language and originally named C with Classes. It was renamed C++ in 1983.
I would guess KeyKOS and its capability system would apply. See e.g. http://www.cis.upenn.edu/~KeyKOS/OSRpaper.html That puts prior art in 1985.
6,192,476 / 1997
1. A method for providing security, the method comprising the steps of: detecting when a request for an action is made by a principal; and in response to detecting the request, determining whether said action is authorized based on permissions associated with a plurality of routines in a calling hierarchy associated with said principal, wherein said permissions are associated with said plurality of routines based on a first association between protection domains and permissions.
Sounds like Access Control Lists (ACLs), for example documented within POSIX.1e.
This is based on the call stack, not user ID.
5,966,702 / 1997
1. A method of pre-processing class files comprising: determining plurality of duplicated elements in a plurality of class files; forming a shared table comprising said plurality of duplicated elements; removing said duplicated elements from said plurality of class files to obtain a plurality of reduced class files; and forming a multi-class file comprising said plurality of reduced class files and said shared table
This one is easy: select distinct count(*) from xyz-table;
This is very old SQL-92. (so a public standard published in 1992).
Irrelevant; this is not a database. Conventional linkers might be relevant prior art.
7,426,720 / 2003
1. A system for dynamic preloading of classes through memory space cloning of a master runtime system process, comprising: A processor; A memory a class preloader to obtain a representation of at least one class from a source definition provided as object-oriented program code; a master runtime system process to interpret and to instantiate the representation as a class definition in a memory space of the master runtime system process; a runtime environment to clone the memory space as a child runtime system process responsive to a process request and to execute the child runtime system process; and a copy-on-write process cloning mechanism to instantiate the child runtime system process by copying references to the memory space of the master runtime system process into a separate memory space for the child runtime system process, and to defer copying of the memory space of the master runtime system process until the child runtime system process needs to modify the referenced memory space of the master runtime system process.
This is simple copy-on-write memory process management, for example used and programmed already in early publicly available Linux kernels. (I remember that version 2.2 already had it, published 1999, but probably older versions also had it).
RE38,104 / 1999
1. In a computer system comprising a program in source code form, a method for generating executable code for said program and resolving data references in said generated code, said method comprising the steps of: a) generating executable code in intermediate form for said program in source code form with data references being made in said generated code on a symbolic basis, said generated code comprising a plurality of instructions of said computer system; b) interpreting said instructions, one at a time, in accordance to a program execution control; c) resolving said symbolic references to corresponding numeric references, replacing said symbolic references with their corresponding numeric references, and continuing interpretation without advancing program execution, as said symbolic references are encountered while said instructions are being interpreted; and d) obtaining data in accordance to said numeric references, and continuing interpretation after advancing program execution, as said numeric references are encountered while said instruction are being interpreted; said steps b) through d) being performed iteratively and interleaving..]. .[.
This is simply dynamic shared library loading and usage, also well known an understood in the science of informatics since the early 80s. For evidence you could also look at Linux Kernel version 2.0 published 1996.
6,910,205 / 2002
1. In a computer system, a method for increasing the execution speed of virtual machine instructions at runtime, the method comprising: receiving a first virtual machine instruction; generating, at runtime, a new virtual machine instruction that represents or references one or more native instructions that can be executed instead of said first virtual machine instruction; and executing said new virtual machine instruction instead of said first virtual machine instruction.
This are just-in-time-compilers. They do all of this and much more much better. "October 25, 1996 Sun announces first Just-In-Time (JIT) compiler for Java platform"
6,061,520 / 1998
1. A method in a data processing system for statically initializing an array, comprising the steps of: compiling source code containing the array with static values to generate a class file with a clinit method containing byte codes to statically initialize the array to the static values; receiving the class file into a preloader; simulating execution of the byte codes of the clinit method against a memory without executing the byte codes to identify the static initialization of the array by the preloader; storing into an output file an instruction requesting the static initialization of the array; and interpreting the instruction by a virtual machine to perform the static initialization of the array.
Ok, this one sounds like crap. It's so specialiced, that it probably can't at all be rebuild by anyone and google could have never used this if sun hadn't open sourced java an released under the GPL itself ..
Related pages on en.swpat.org
News from 13 Aug 2010
- Oracle sues Google, says Android infringes seven Java patents (plus unspecified copyrights), by Florian Mueller
- Oracle Sues Google For Infringing Java Patents, by Bruce Perens
- Oracle sues Google over Java in Android, The Register
- Oracle Sues Google Over Android Java Use, PC Mag
- Oracle Sues Google, Saying Android Violates Java Copyrights, Wall Street Journal
- Oracle sues Google for Java patent, copyright infringement, ZDNet
- Oracle sues Google over use of Java in Android, Ars Technica
- Oracle sues Google over Android, Venturebeat
- Oracle sues Google over Android and Java, CNet
- "Oracle Files Complaint Against Google for Patent and Copyright Infringement". http://www.marketwire.com/press-release/Oracle-Files-Complaint-Against-Google-for-Patent-and-Copyright-Infringement-NASDAQ-ORCL-1304265.htm. "In developing Android, Google knowingly, directly and repeatedly infringed Oracle's Java-related intellectual property. This lawsuit seeks appropriate remedies for their infringement"
This wiki is part of the End Software Patents (ESP) campaign (donate). For more information, see: