IP Library › Granted Patent US 10,489,150
Granted Patent B2
US 10,489,150 · App. 15/081,667 · Granted Nov 26, 2019

Software dependency shading

Inventors: Jonathan Schneider (San Jose, CA); Daniel Thomas (Campbell, CA); Robert Spieldenner (San Jose, CA); Michael McGarr (San Jose, CA)
Assignee: NETFLIX, INC.
G06F8/75G06F8/30G06F8/54G06F8/71G06F8/72
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,489,150
App. No.
15/081,667
Granted
Nov 26, 2019
Kind
B2
Abstract

In one embodiment of the present invention, a shading engine enables multiple versions of dependencies to coexist in an executable software application. During the software build process, the shading engine dynamically renames transitive dependencies of the software application to disambiguated names. The shading engine performs this renaming at both the library and class level. Notably, the shading engine does not rename the first-order dependencies of the software application. Consequently, the code of the software application and interfaces between the software application and the first-order library dependencies of the software application are not modified. Notably, the shading engine efficiently and accurately shades the transitive dependencies without manual intervention. By contrast, primarily manually-based conventional approaches to dependency management are time consuming and susceptible to errors.

Claims (44)

1. A computer-implemented method, comprising:

determining that a first library is a dependency of a second library;

retrieving the first library from a binary software repository stored in a memory;

renaming a first set of one or more classes included in the first library to generate a first disambiguated library that includes a second set of one or more disambiguated classes;

searching the second library, via a processor, for references to the first set of one or more classes; and

replacing the references to the first set of one or more classes with references to the second set of one or more disambiguated classes to generate a second disambiguated library.

2. The method of claim 1 , wherein renaming a first class included in the first set comprises relocating a first package that includes the first class to produce a first disambiguated package.

3. The method of claim 1 , further comprising renaming the first disambiguated library and replacing a reference to the first library that is included in a dependency descriptor with a reference to the first disambiguated library, wherein the dependency descriptor is associated with the second library.

4. The method of claim 3 , further comprising:

determining that the second library comprises a transitive dependency of a software application;

renaming the second library to generate a second disambiguated library; and

renaming the dependency descriptor to generate a disambiguated dependency descriptor that is associated with the second disambiguated library.

5. The method of claim 1 , further comprising:

determining that a seam between a software application and the second library includes a reference to a first class included in the first set, wherein the first class comprises a transitive dependency of the software application; and

inserting binary code into the second library that generates a first instance of a first disambiguated class included in the second set and copies data included in a second instance of the first class to the first instance.

6. The method of claim 1 , further comprising receiving a request from a software build tool to retrieve the first library and, in response, transmitting the first disambiguated library to the software build tool.

7. The method of claim 1 , wherein the memory is included within a server machine.

8. The method of claim 1 , wherein the first library is a transitive dependency of a software application that is written in a programming language that implements a sequential dependency list.

9. The method of claim 1 , further comprising transmitting the second disambiguated library to a software build tool.

10. A non-transitory computer-readable storage medium including instructions that, when executed by a processor, cause the processor to perform the steps of:

retrieving a first library and a dependency descriptor that is associated with the first library from a binary software repository;

determining that a second library is a dependency of the first library based on the first dependency descriptor;

retrieving the second library from the binary software repository;

performing a first set of disambiguation operations on the second library to generate a second disambiguated library; and

performing a second set of disambiguation operations on the first library based on the first set of disambiguation operations to generate a first disambiguated library.

11. The non-transitory computer-readable storage medium of claim 10 , wherein the first set of disambiguation operations includes renaming a first class included in the second library to generate a first disambiguated class.

12. The non-transitory computer-readable storage medium of claim 11 , wherein the second set of disambiguation operations includes replacing a reference to the first class with a reference to the first disambiguated class.

13. The non-transitory computer-readable storage medium of claim 11 , further comprising:

determining that a seam between a software application and the first library includes a reference to the first class; and

inserting binary code into the first library that generates a first instance of the first disambiguated class and copies data included in a second instance of the first class to the first instance.

14. The non-transitory computer-readable storage medium of claim 10 , wherein the first set of disambiguation operations includes renaming the second disambiguated library and further comprising replacing a reference to the second library that is included in the dependency descriptor with a reference to the second disambiguated library.

15. The non-transitory computer-readable storage medium of claim 10 , further comprising transmitting the first disambiguated library to a software build tool.

16. The non-transitory computer-readable storage medium of claim 10 , wherein the second library is a transitive dependency of a software application that is written in a programming language that implements a sequential dependency list.

17. The non-transitory computer-readable storage medium of claim 16 wherein the programming language comprises the Java programming language.

18. A system, comprising:

a memory storing a shading engine; and

a processor that is coupled to the memory and, when executing the shading engine, is configured to:

receive a request for a first library from a software build tool,

determine that a second library is a dependency of the first library,

modify the second library to generate a second disambiguated library,

modify the first library based on the second disambiguated library to generate a first disambiguated library, and

transmit the first disambiguated library to the software build tool.

19. The system of claim 18 wherein the shading engine configures the processor to modify the second library by renaming the second library and one or more classes included in the second library.

20. The system of claim 18 , wherein the second library is a transitive dependency of a software application that is written in a programming language that implements a sequential dependency list.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Mar 25, 2016
From: SCHNEIDER, JONATHAN; THOMAS, DANIEL; SPIELDENNER, ROBERT; MCGARR, MICHAEL
To: NETFLIX, INC.
Reel/Frame 038105/0703 →
Continuity (2)
Provisional Application 62157401 · May 5, 2015
Related Publication 20160328230A1 · Nov 10, 2016