Search This Blog

Friday, August 26, 2011

US Patent 7,178,140

From May 31, 2002 we have this patent issued in 2007: "Speeding up application downloading from a remote server."

So the idea here is pretty simply.  I have "virtual machine" which has some code on it.  In the code are references to other classes:

// Class method that takes a request and books
// me in a meeting if I am not busy today...
//
Routine Method "If I Am Available I'll Go"
  ADD
  ADD
  CALL "Today's Date"
  SUBTRACT
  SUBTRACT
  CALL "Get Today's Calendar"
  MOVE
  MOVE
  CALL "Save Today's Calendar"

And we have the CALL's referencing various external routines like "Today's Date".  Now let's further suppose that routines (methods as the patent calls them) are all part of some larger calendar system, let's call it "Calendar System." with hundreds or thousands of other routines - none of which we use save for the three mentioned above.

So let's look at the first claim in the patent:

"1. A method for transmitting methods to a client running a virtual machine, the methods contained in one or more classes, the method comprising:

    - recursively scanning through application code beginning at an application entrypoint to determine which methods may be called and the classes to which they correspond wherein, said recursively scanning includes:

    - finding all methods referenced in said application code; and

    - finding all methods referenced in said methods referenced in said application code;

    - generating a method usage map having an identifier corresponding to all said referenced methods organized under its corresponding class;


    - storing said identifiers corresponding to all said methods referenced in said application code and all said methods referenced in said methods referenced in said application code in said method usage map organized by said classes;


    - receiving a request for an application from a client;


    - processing all application and library classes for the application specified by the request, after consulting said method usage map upon execution of the virtual machine, removing unused methods that are not contained in said method usage map from it as per said method usage map; and


    - transmitting any remaining methods to the client running the virtual machine
."

So according to this patent we take the routine method "If I Am Available I'll Go" and we scan it looking for CALLs that it makes to "outside" routines.

In this case "Today's Date," "Get Today's Calendar," and "Save Today's Calendar."

So if  the "Calendar System" has other routines, like "Is Today Christmas" or "Number of Days in the Month" it seems reasonable that we don't care about them if they routines we do need do not use them.  And since there may be thousands of similar routines that take up a lot of space it would indeed be a waste to mess about with them if we don't need to.

So this patent says we basically make a list of these - something like this:

"If I Am Available I'll Go"
  - "Calendar System"
    + "Today's Date"
    +"Get Today's Calendar,"
    + "Save Today's Calendar."

So now, on some other computer a client is running that needs to make use of  "If I Am Available I'll Go."

So the patent says that, instead of say transmitting the full bulk of "Calendar System" to the client, we instead take the list above and remove all but the listed parts of "Calendar System" and transmit only those; thereby saving a lot of transmission time presumably.

Being an old geezer this sounds to me like something called "dynamic linking."

An old computer concept that's been around for some time.  So I fire up "Google" and enter "dynamic linking."

A few entries down from the top is this link.

A bit down from the top we see "Loading a Dynamically Linked Program."  Now a dynamically linked program is exactly the same thing as described above - a program that references a bunch of outside routines that are not included in the basic "package" but instead referred to and added later (linked later).

Then we see, further down in this section, "Finding the Libraries".  Well, a library is a collection of routines, er, kind of like, well, a "class".  One could even imagine that each routine is a method in some sort of logical class.  So we discover that the dynamic linking process searches for the libraries.

A bit further below that is "Lazy Procedure Linkage with the PLT " which says in part: "Programs that use shared libraries generally contain calls to a lot of functions. In a single run of the program many of the functions are never called, in error routines or other parts of the program that aren't used. Furthermore, each shared library also contains calls to functions in other libraries, even fewer of which will be executed in a given program run since many of them are in routines that the program never calls either directly or indirectly. "

The bottom line here is that on-the-fly the procedures are bound into the running program as they are called.

Of course, this doesn't quite match the patent - we need a client to do this.

However, since there are not limits on where the libraries might be they could be pulled in over a network link of some sort - a mounted remote drive or system.

Which exactly duplicates the scenario described by this patent.

At the top of the article it states: "Sun Microsystems' SunOS introduced dynamic shared libraries to UNIX in the late 1980s."  This, along with network mounts, exactly duplicates the patent.

So we have Sun Microsystems patenting what they have done for a couple of decades.

I guess they forgot what they themselves were using 15 years ago...

No comments:

Post a Comment