3:10-cv-03561
Oracle America Inc v. Google Inc
I. Executive Summary and Procedural Information
- Parties & Counsel:
- Plaintiff: Oracle America, Inc. (Delaware)
- Defendant: Google, Inc. (Delaware)
- Plaintiff’s Counsel: Morrison & Foerster LLP; Boies, Schiller & Flexner LLP
- Case Identification: 3:10-cv-03561, N.D. Cal., 08/12/2010
- Venue Allegations: Venue is alleged to be proper in the Northern District of California as Defendant Google, Inc. maintains its principal place of business in the district and conducts business there.
- Core Dispute: Plaintiff alleges that Defendant’s Android mobile operating system, including its Dalvik virtual machine and software development kit, infringes seven U.S. patents related to the Java programming platform technology.
- Technical Context: The dispute centers on the Java platform, a technology designed to allow software to run on any compatible hardware or operating system, which became critically important with the rise of the internet and mobile computing.
- Key Procedural History: Plaintiff Oracle America acquired Sun Microsystems, Inc., the original developer of the Java platform and the patents-in-suit, on January 27, 2010. The complaint alleges that Defendant had knowledge of Sun’s patent portfolio since approximately the mid-2000s, based on its hiring of former Sun Java engineers.
Case Timeline
| Date | Event |
|---|---|
| 1992-12-22 | Priority Date for RE38,104 Patent |
| 1995-01-01 | Java platform first released |
| 1997-06-30 | Priority Date for 6,910,205 Patent |
| 1997-10-31 | Priority Date for 5,966,702 Patent |
| 1997-12-11 | Priority Date for 6,125,447 Patent |
| 1997-12-11 | Priority Date for 6,192,476 Patent |
| 1998-04-07 | Priority Date for 6,061,520 Patent |
| 1999-10-12 | U.S. Patent No. 5,966,702 Issues |
| 2000-05-09 | U.S. Patent No. 6,061,520 Issues |
| 2000-09-26 | U.S. Patent No. 6,125,447 Issues |
| 2001-02-20 | U.S. Patent No. 6,192,476 Issues |
| 2003-04-29 | U.S. Patent No. RE38,104 Issues |
| 2003-12-22 | Priority Date for 7,426,720 Patent |
| 2005-06-21 | U.S. Patent No. 6,910,205 Issues |
| 2008-09-16 | U.S. Patent No. 7,426,720 Issues |
| 2010-01-27 | Oracle acquires Sun Microsystems, Inc. |
| 2010-08-12 | Complaint Filed |
II. Technology and Patent(s)-in-Suit Analysis
U.S. Patent No. 6,125,447 - "Protection Domains To Provide Security In A Computer System"
The Invention Explained
- Problem Addressed: The patent addresses the security challenges of executing software code from untrusted remote sources, such as over the internet. It notes that the conventional "sand box" method, which applies a single, restrictive security policy to all remote code, is not sufficiently granular for complex applications that might need to trust code from one remote source more than another (e.g., banking applications) (’447 Patent, col. 2:7-20).
- The Patented Solution: The invention proposes a system of "protection domains" to create a more flexible security model. A protection domain is a set of permissions (e.g., permission to write to a file) that is established based on the source of the code, identified by attributes like its URL or a cryptographic signature (’447 Patent, Abstract; col. 3:6-24). The system creates an association between the code's class and a specific protection domain, so that when an object of that class requests a restricted action, the system checks the permissions within its assigned domain to grant or deny access (’447 Patent, col. 2:60-67). Figure 2 illustrates this architecture, showing code from trusted and untrusted sources being assigned to a protection domain object based on a policy file (’447 Patent, Fig. 2).
- Technical Importance: This approach provided a more nuanced security architecture than a simple trusted-versus-untrusted model, which was essential for enabling secure and functional platform-independent applications running downloaded code.
Key Claims at a Glance
- The complaint does not identify specific asserted claims. The following is a breakdown of representative independent claim 1.
- A method for providing security, comprising the steps of:
- establishing one or more protection domains, where a protection domain is associated with zero or more permissions;
- establishing an association between the protection domains and one or more classes of objects; and
- determining whether an action requested by an object is permitted based on the association between the protection domains and the classes.
- The complaint does not explicitly reserve the right to assert dependent claims.
U.S. Patent No. 6,192,476 - "Controlling Access To A Resource"
The Invention Explained
- Problem Addressed: This patent addresses the security problem that arises when a single process or thread executes code from multiple sources with different trust levels. A principal's access privileges may need to change dynamically depending on the source of the code currently being executed. For example, trusted code might call untrusted code, and the system must ensure the untrusted code does not inherit the trusted code's higher privileges (’476 Patent, col. 2:40-58).
- The Patented Solution: The invention proposes determining access rights by inspecting the entire "calling hierarchy" (i.e., the call stack) of the thread making a resource request. Authorization is granted only if every routine in the call stack has the necessary permission associated with its protection domain (’476 Patent, Abstract). The invention also introduces the concept of a "privileged" routine, which can perform sensitive actions even if its callers lack the permission. This privilege is limited; the permission check stops at the privileged routine and does not inspect earlier routines in the call stack, preventing untrusted callers from gaining elevated permissions through the privileged routine (’476 Patent, col. 3:47-52, col. 12:65-col. 13:20).
- Technical Importance: This invention provides a robust security mechanism for environments where code modules with different levels of trust interact, ensuring that a chain of calls does not create a security vulnerability.
Key Claims at a Glance
- The complaint does not identify specific asserted claims. The following is a breakdown of representative independent claim 1.
- A method for providing security, comprising the steps of:
- detecting when a request for an action is made by a principal; and
- in response, determining whether the action is authorized based on permissions associated with a plurality of routines in a calling hierarchy associated with the principal, wherein permissions are associated with routines based on an association between protection domains and permissions.
- The complaint does not explicitly reserve the right to assert dependent claims.
U.S. Patent No. 5,966,702 - "Method And Apparatus For Preprocessing And Packaging Class Files"
- Technology Synopsis: The patent addresses inefficiencies in storing, transferring, and loading numerous individual Java class files, which often contain redundant information (e.g., duplicate constants). The invention describes a pre-processor that identifies this duplicate information across a set of class files, moves it into a single shared table, and packages the now-smaller class files with the shared table into a single "multi-class file," improving performance and reducing memory usage (’702 Patent, Abstract).
- Asserted Claims: The complaint does not identify specific asserted claims.
- Accused Features: The Android platform, including the Dalvik VM and Android software development kit, are accused of infringement (Compl. ¶¶13, 24).
U.S. Patent No. 7,426,720 - "System And Method For Dynamic Preloading Of Classes Through Memory Space Cloning Of A Master Runtime System Process"
- Technology Synopsis: The patent addresses slow application startup times, particularly in memory-constrained devices. The invention proposes creating a "master" runtime process that is "prewarmed" by loading a set of commonly used classes into memory. New application instances are then launched rapidly by "cloning" the memory space of this master process, allowing the new process to inherit the pre-loaded state and start much faster (’720 Patent, Abstract).
- Asserted Claims: The complaint does not identify specific asserted claims.
- Accused Features: The Android platform, including the Dalvik VM and Android software development kit, are accused of infringement (Compl. ¶¶13, 27).
U.S. Patent No. RE38,104 - "Method And Apparatus For Resolving Data References In Generate Code"
- Technology Synopsis: The patent describes a hybrid compiler-interpreter system to balance execution speed and flexibility. It generates code where data references are initially "symbolic." The first time an instruction with a symbolic reference is executed, the interpreter resolves it into a faster, direct "numeric" reference and rewrites the instruction in-place. Subsequent executions use the fast numeric reference, combining the flexibility of interpretation with the speed of compiled code (RE38,104 Patent, Abstract).
- Asserted Claims: The complaint does not identify specific asserted claims.
- Accused Features: The Android platform, including the Dalvik VM and Android software development kit, are accused of infringement (Compl. ¶¶13, 30).
U.S. Patent No. 6,910,205 - "Interpreting Functions Utilizing A Hybrid Of Virtual And Native Machine Instructions"
- Technology Synopsis: This patent aims to increase the execution speed of interpreted programs. It describes a method where a portion of a function's virtual machine instructions (e.g., bytecode) is compiled into faster native machine instructions. The original virtual machine instruction is then overwritten with a new instruction that redirects execution to the compiled native code "snippet," creating a hybrid function that runs more efficiently (’205 Patent, Abstract).
- Asserted Claims: The complaint does not identify specific asserted claims.
- Accused Features: The Android platform, including the Dalvik VM and Android software development kit, are accused of infringement, with the complaint specifically noting the Dalvik VM's just-in-time (JIT) compilation feature (Compl. ¶¶12-13, 33).
U.S. Patent No. 6,061,520 - "Method And System for Performing Static Initialization"
- Technology Synopsis: The patent addresses the inefficient process of static array initialization in Java, which can require executing many bytecode instructions. The invention describes a "preloader" that simulates the initialization code, determines the final values of the array, and replaces the complex bytecode sequence with a single, compact expression. A modified virtual machine can then use this expression to perform the initialization much more efficiently (’520 Patent, Abstract).
- Asserted Claims: The complaint does not identify specific asserted claims.
- Accused Features: The Android platform, including the Dalvik VM and Android software development kit, are accused of infringement (Compl. ¶¶13, 36).
III. The Accused Instrumentality
Product Identification
The accused instrumentalities are Google’s Android operating system, the Dalvik virtual machine (VM), and the Android software development kit (SDK) (Compl. ¶13).
Functionality and Market Context
The complaint describes the Android operating system software "stack" as consisting of "Java applications running on a Java-based object-oriented application framework, and core libraries running on a 'Dalvik' virtual machine (VM) that features just-in-time (JIT) compilation" (Compl. ¶12). It is positioned as a competing operating system software platform for mobile devices against Oracle America's Java platform (Compl. ¶12). Google is alleged to distribute Android and promote its use by manufacturers of products and applications (Compl. ¶12).
IV. Analysis of Infringement Allegations
No probative visual evidence provided in complaint.
The complaint makes broad allegations of infringement without providing a detailed theory or mapping specific features of the accused instrumentality to the elements of any asserted patent claims. Therefore, a claim chart summary cannot be constructed based on the provided document.
- Identified Points of Contention:
- ’447 Patent: A central point of contention may be whether Android's application security model, which uses mechanisms like Linux user IDs to sandbox applications, meets the definition of the claimed "protection domain" system. The dispute may focus on whether Android "establishes an association" between these sandboxes and the application's "classes" based on a "code identifier" as required by the patent’s claims.
- ’476 Patent: The dispute regarding this patent may center on the mechanism by which the Android runtime checks permissions. A key technical question is whether Android’s permission model performs the claimed step of inspecting a "plurality of routines in a calling hierarchy" to ensure each routine in the call stack possesses the required permission before allowing a sensitive operation to proceed.
V. Key Claim Terms for Construction
The Term: "protection domain" (’447 Patent)
Context and Importance: This term is the central concept of the ’447 Patent. The outcome of the infringement analysis for this patent will depend on whether Android's application sandboxing mechanism falls within the construed scope of this term. Practitioners may focus on this term because its definition could determine whether a security model based on operating system processes and user IDs is equivalent to the patent's described model based on code source and policy files.
Intrinsic Evidence for Interpretation:
- Evidence for a Broader Interpretation: The patent abstract describes a domain functionally as establishing "the permissions that apply to the code" based on its "source," which could support an interpretation covering any system that partitions permissions based on code origin (’447 Patent, Abstract).
- Evidence for a Narrower Interpretation: The detailed description and Figure 2 illustrate a specific embodiment involving a "policy file" (244), a "domain mapper" (248), and a "code identifier" (232) composed of a URL and cryptographic keys. This could support a narrower construction limited to systems implementing this type of architecture (’447 Patent, Fig. 2; col. 10:4-13).
The Term: "calling hierarchy" (’476 Patent)
Context and Importance: This term defines the scope of the security check required by the ’476 Patent’s claims. The dispute will likely involve whether Android's security checks, when performed, consider the full chain of callers as contemplated by the patent. Its construction is critical to determining if Android's runtime behavior infringes.
Intrinsic Evidence for Interpretation:
- Evidence for a Broader Interpretation: The patent defines the term broadly as the "routines (e.g. functions, methods) that have been invoked by or on behalf of a principal (e.g. thread, process) but have not been exited," which could encompass any representation of an active call chain (’476 Patent, col. 3:6-10).
- Evidence for a Narrower Interpretation: The specification’s primary example uses a specific "call stack" data structure (308) composed of distinct "frames" (310) to represent the hierarchy. An argument could be made that the term should be limited to this specific implementation or its direct structural equivalents (’476 Patent, Fig. 3; col. 11:4-11).
VI. Other Allegations
- Indirect Infringement: The complaint alleges that Google has induced and contributed to the infringement of the patents by "purchasers, licensees, and users of Android" (Compl. ¶¶18, 21). The factual basis alleged includes Google's promotion of Android's use by "manufacturers of products and applications" (Compl. ¶12).
- Willful Infringement: The complaint alleges that Google's infringement has been and continues to be "willful, deliberate, and in reckless disregard of Oracle America's patent rights" (Compl. ¶¶18, 21). The basis for this allegation is pre-suit knowledge, asserting that Google has been aware of Sun's patent portfolio "since the middle of this decade, when Google hired certain former Sun Java engineers" (Compl. ¶14).
VII. Analyst’s Conclusion: Key Questions for the Case
This litigation will likely involve a fundamental conflict between two distinct implementations of a similar technological paradigm. The key questions for the court appear to be:
- A core issue will be one of technical implementation: Does Google's Android platform, which was developed independently and utilizes the Dalvik VM, operate in a manner that practices the specific methods for security, performance, and code handling claimed in the patents, which were originally developed for the standard Sun Java environment?
- A central legal question will be one of claim scope: Can key patent terms that are grounded in the architecture of Sun's Java platform, such as "protection domain" and "preprocessing... class files," be construed broadly enough to encompass the different architectural choices made in the Android operating system?
- A key factual question for willfulness will be the nature of knowledge: What evidence demonstrates that Google's alleged general awareness of Sun's Java patent portfolio, based on hiring former employees, translated into pre-suit knowledge of the specific patents-in-suit and their alleged infringement by Android?