Many software providers routinely update their software, making changes that may range from relatively minor to dramatically different. In that regard,
In other words, the only difference between the updated version of the software (
Many software providers do not resend the entire new version of a program to their end users. One typical reason is that the programmers may have relatively minor changes to an otherwise large program. Accordingly, rather than sending an entirely new version to their end users, the provider may send a patch instead. A patch is typically a small program that represents the differences between the base and updated versions as well as instructions for making the changes. (A patch may also include only the changes if a program for installing the changes is already available on the end user's computer.) When executed by the end user's computer, the patch modifies the machine code of the base version so that it matches the updated version.
However,
Thus, generating a patch for creating the updated version of the software in the machine code format from the corresponding base version would result in a patch that is relatively large.
The size and efficiency of patches can be important considerations with respect to patches. For example, if a patch is sent over a network, such as the Internet or a cell phone network, the speed of the network may delay the delivery of a large patch. Moreover, some devices such as cell phones may have a relatively small amount of memory, which can also militate in favor of keeping patches small.
One aspect of the invention provides a method of generating a patch. The method includes converting a first version of a program into a first representation, the first representation distinguishing between first references and first non-references, where the first references are portions of the first version that refer to other portions of the first version and where the first non-references are portions of the first version that do not refer to other portions of the first version; converting a second version of the program into a second representation where portions of the second version are the same as the first version and where portions of the second version are the different than the first version, the second representation distinguishing between second references and second non-references, where the second references are portions of the second version that refer to other portions of the second version and where the second non-references are portions of the second version that do not refer to other portions of the second version; modifying, using a processor, a portion of the second representation based on a comparison of the second references with the first references while retaining information to convert the second representation back into the second version; and generating a patch representing the differences between the first representation and the second representation.
Another aspect of the invention provides a system including a memory storing instructions and data, where the data includes a first version of a program and a second version of the program, and a processor to execute the instructions and to process the data. The instructions include: converting the first version of the program into a first representation, the first representation distinguishing between first references and first non-references, where the first references are portions of the first version that refer to other portions of the first version and where the first non-references are portions of the first version that do not refer to other portions of the first version; converting the second version of the program into a second representation where portions of the second version are the same as the first version and where portions of the second version are the different than the first version, the second representation distinguishing between second references and second non-references, where the second references are portions of the second version that refer to other portions of the second version and where the second non-references are portions of the second version that do not refer to other portions of the second version; modifying a portion of the second representation based on a comparison of the second references with the first references while retaining information to convert the second representation back into the second version; and storing, in the memory, a patch representing the differences between the first representation and the second representation.
Yet another aspect of the invention provides a method that includes: converting a first version of a program into a first representation, the first representation distinguishing between first references and first non-references, where the first references are portions of the first version that refer to other portions of the first version and where the first non-references are portions of the first version that do not refer to other portions of the first version; receiving a patch, the patch comprising information representing the differences between the first representation and a second representation of a second version of the program, the second representation distinguishing between second references and second non-references, where the second references are portions of the second version that refer to other portions of the second version and where the second non-references are portions of the second version that do not refer to other portions of the first version; creating, with a processor and based on the information in the patch, the second representation from the first representation; and converting the second representation into the second version of the program.
Another aspect of the invention provides a system that includes a first computer at a first node of a network, the first computer comprising a first memory storing a first set of instructions and a first processor that processes data in accordance with the first set of instructions; the first computer having access to a first version of a program. The system further includes a second computer at a second node of a network, the second computer comprising a second memory storing a second set of instructions and a second processor that processes data in accordance with the second set of instructions; the second computer having access to the first version of the program and having access to a second version of the program. The second set of instructions comprise: converting the first version of the program into a first representation, the first representation distinguishing between first references and first non-references, where the first references are portions of the first version that refer to other portions of the first version and where the first non-references are portions of the first version that do not refer to other portions of the first version; converting the second version of the program into a second representation where portions of the second version are the same as the first version and where portions of the second version are the different than the first version, the second representation distinguishing between second references and second non-references, where the second references are portions of the second version that refer to other portions of the second version and where the second non-references are portions of the second version that do not refer to other portions of the second version; modifying a portion of the second representation based on a comparison of the second references with the first references while retaining information to convert the second representation back into the second version; generating a patch representing the differences between the first representation and the second representation, and transmitting the patch to the first computer. The first set of instructions comprise: converting the first version of the program into the first representation; receiving the patch representing the differences between the first representation and the second representation; creating, based on the patch, the second representation from the first representation; and converting the second representation into the second version of the program.
As shown in
Memory 220 stores information accessible by processor 210, including instructions 240 that may be executed by the processor 210. It also includes data 230 that may be retrieved, manipulated or stored by the processor. The memory may be of any type capable of storing information accessible by the processor, such as a hard-drive, memory card, ROM, RAM, DVD, CD-ROM, write-capable, and read-only memories. The processor 210 may be any well-known processor, such as processors from Intel Corporation. Alternatively, the processor may be a dedicated controller such as an ASIC.
The instructions 240 may be any set of instructions to be executed directly (such as machine code) or indirectly (such as scripts) by the processor. In that regard, the terms “instructions,” “steps” and “programs” may be used interchangeably herein. The instructions may be stored in object code form for direct processing by the processor, or in any other computer language including scripts or collections of independent source code modules that are interpreted on demand or compiled in advance. Functions, methods and routines of the instructions are explained in more detail below.
Data 230 may be retrieved, stored or modified by processor 210 in accordance with the instructions 240. For instance, although the system and method is not limited by any particular data structure, the data may be stored in computer registers, in a relational database as a table having a plurality of different fields and records, XML documents, or flat files. The data may also be formatted in any computer readable format such as, but not limited to, binary values, ASCII or Unicode. Moreover, the data may comprise any information sufficient to identify the relevant information, such as numbers, descriptive text, proprietary codes, pointers, references to data stored in other memories (including other network locations) or information which is used by a function to calculate the relevant data.
Although the processor and memory are functionally illustrated in
In one aspect, computer 110 is a server communicating with one or more client computers 120, 150. Each client computer may be configured similarly to the server 110, with a processor, memory, and instructions. Each client computer 120, 150 may be a personal computer, intended for use by a person 190191, having all the internal components normally found in a personal computer such as a central processing unit (CPU), display 160 (for example, a monitor having a screen, a projector, a touch-screen, a small LCD screen, a television, or another device such as an electrical device that is operable to display information processed by the processor), CD ROM, hard drive, user input device (for example, a mouse, keyboard, touch screen or microphone), speakers, modem and/or network interface device (telephone, cable or otherwise) and all of the components used for connecting these elements to one another and permitting them to communicate (directly or indirectly) with one another. Moreover, computers in accordance with the systems and methods described herein may comprise any device capable of processing instructions and transmitting data to and from humans and other computers including network computers lacking local storage capability.
Although the client computers 120 and 150 may comprise a full-sized personal computer, many aspects of the system and method are particularly advantageous when used in connection with mobile devices capable of wirelessly exchanging data with a server over a network such as the Internet. For example, client computer 120 may be a wireless enabled PDA such as a Blackberry phone or an Internet-capable cellular phone. In such regard, the user may input information using a small keyboard (in the case of a Blackberry phone), a keypad (in the case of a typical cell phone), a touch screen (in the case of a PDA) or any other means of user input.
The server 110 and client computers 120, 150 are capable of direct and indirect communication, such as over a network 295. Although only a few computers are depicted in
Although certain advantages are obtained when information is transmitted or received as noted above, other aspects of the system and method are not limited to any particular manner of transmission of information. For example, in some aspects, information may be sent via a medium such as a disk, tape or CD ROM. In other aspects, the information may be transmitted in a non-electronic format and manually entered into the system. Yet further, although some functions are indicated as taking place on a server and others on a client, various aspects of the system and method may be implemented by a single computer having a single processor.
In one aspect, data 230 of server 110 stores different versions of software. For example, data 230 may store software 272 that is an older or base version, and software 274 that is a newer, updated version of software 272. It will be understood that portions of the older version of the software 272 and the updated version 274 each may contain instructions, operands, and data necessary for the software to function as intended. While the updated version 274 may include additional portions providing more functionality than base version 272, this is not a requirement. For example, another difference may be that portions of the updated version 274 may improve upon or correct the functionality provided by portions of the base version 272, or, in certain cases, the updated version 274 may even contain less functionality by not having certain portions of base version 272. It will also be understood that software versions 272 and 274 are not limited to any particular format, and may be developed using any programming language. For example, software versions 272 and 274 may be developed using a high-level processor independent programming language like C, C++, HTML, Perl, or Java, a low-level processor-dependent programming language such as assembly or machine language, or any combination thereof.
Memory 220 may also store a patch generator 300 that is executable by processor 210. Patch generator 300 may perform one or more of the following functions: create an alternate representation 276 of the base version 272; create an alternate representation 278 of the updated version 274; compare and modify portions of the alternate representation 278 of the updated version of the software to more closely match the alternate version 276 of the base version of the software; and create a patch 280. In one aspect, the patch 280, in turn, may be executed by a processor to create the alternate representation 278 of the updated version 274 from the alternate representation 276 of the base version 272.
Additionally, memory 220 may contain a patch transmitter 310. For example, patch transmitter 310 may be operable to transmit or send the patch 280 to the client devices 120, 150 over the network 295.
An exemplary operation in accordance with various aspects of the invention follows below. It should be understood that the following operations do not have to be performed in the precise order described below. Rather, various steps can be handled in reverse order or simultaneously.
In one aspect of the system and method, the patch generator 300 distinguishes between two different types of changes found in the updated version 274 of the software over the base version 272. One type of change relates to changes in references to locations, i.e., where one portion of the software references another portion of the software. The other type relates to all other changes. Yet another aspect of the system and method makes such distinctions by creating alternative representations of the base and updated versions of the software in accordance with, but not limited to, the following method.
As shown in
Operations 602 control the operation of a processor. For example, each particular type of operation in the series of operations 602 may be represented by one or more unique bytes. In that regard, when the processor receives the operation having the hexadecimal byte “8e” 720, the processor recognizes this as the “LDX” operation 620, i.e., an instruction to load data into the X register. Similarly, each “JSR” operation 622 may be uniquely represented by a hexadecimal byte “bd” 722.
Some operations act upon operands 604, and some operands 604 may be references to other locations in the software, such as locations storing other instructions or data. For example, “LDX #world” 632 instructs the processor to load the data stored at the address “07f9” (referenced by label 607) into a register X of the processor. Similarly, “JSR print” 634 instructs the processor to jump to the address “0801” (referenced by label 611) and to begin executing the instructions 616 at that address.
Not all operands are references to other locations. For example, an operand may comprise a specific number that will be added to another specific number.
Other operations 602 such as “RTS” 624, for example, may not operate on any operands and may be a complete instruction by itself.
Like the operations, the operands 604 may be represented by one or more bytes. This is so regardless of whether the operand refers to another location of the program or not. For example, the “LDX #world” 632 command instructs the processor to load two hexadecimal bytes “07 f9” 730 into the X register of the processor. Similarly, the data “world” 614 may be stored in the program as a series of hexadecimal bytes “77 6f 72 6c 64” 714.
As seen in
In one aspect of the system and method, a processor analyzes the program to identify referenced locations. By way of example, the processor determines those portions of the program that are the targets of other portions of the program. These targets, in turn, may be assigned unique identifiers that are independent of their actual address location. For example, as shown in
The collection of referenced locations may be stored as a set or collection of characters. For example, entry “1:07f9” 871 in table list 870 may represent the assignment of index “1” to address “07f9” and entry “2:07ff” may represent the assignment of index “2” to absolute address “07ff”.
In addition to identifying the target locations of the program, the processor may also identify the portions that point at those targets. These references to other portions are, in turn, associated with the unique identifiers that were associated with the targets. For example, the instruction “LDX #world” points to the data at address “07f9”. The address “07f9” has, in turn, has already been associated with index value “1” in table 850. Accordingly, this and other references to “07f9” may be associated with the value of “1”. Similarly, the instruction “JSR print” points to the data at address “0801”, which has already been associated with index value “3” in table 850. Accordingly, this and other references to “0801” may be associated with the value of “3”.
The collection of referenced locations may be stored as a collection of characters. In one aspect, the collection is stored as an ordered list which corresponds with the order in which the references arose. For example, in addition to creating table list 870, an index list 970 (
Thus, bytes “07 f9” 951 may be understood as the very first reference to another address or location in the software, and further may be understood to reference address “07f9”. Accordingly, the first entry in the index list 970 may be determined to be the index “1” 971, based on its assignment to address “07f9” in table 850. Similarly, bytes “08 01” 952 may be understood as the next and second reference to another address or location in the software, and further may be understood to reference address “0801”. Thus, the second entry in the index list 970 may be determined to be the index “3” 972, based on its assignment to address “0801” in table 850. A similar approach may be taken for each of the subsequent bytes understood to be references to other locations or addresses in the software (i.e., 953-958 in
The processor may also store information that identifies the values of the program that do not correspond with references. For example and as shown in
The processor may also store information that identifies the order and quantity of references relative to non-references. For example and as shown in
A final ordered list 1170 (a “control list”) is shown in
The aforementioned analysis results in an alternative representation of the program. For example, as shown in
An alternate representation 278 of the updated version 274 may be similarly created. As shown in
In one aspect, the system and method may compare the differences between the alternate representation 276 of the base version and the alternate representation 278 of the updated version. As shown in
Accordingly, control list 1350 of the alternate representation of the updated version may be compared with control list 1170 of the alternate representation of the base version. As can be seen, the control list 1350 of the alternate representation of the updated version is identical to the control list 1170 of the alternate representation of the base version, with the exception of three additional entries at the end (highlighted by box 1402) that are not in control list 1170 of the alternate representation of the base version.
Similarly, byte list 1360 of the alternate representation of the updated version may be compared with byte list 1070 of the alternate representation of the base version. As can be seen, the byte list 1360 of the alternate representation of the updated version is identical to the byte list 1070 of the alternate representation of the base version, with the exception of three additional entries “68”, “69”, and “00” (highlighted by box 1403) in the middle of byte list 1360 that are not found in the byte list 1070 of the alternate representation of the base version.
Likewise, table list 1370 of the alternate representation of the updated version may be compared with table list 870 of the alternate representation of the base version. As can be seen, the table list 1370 of the alternate representation of the updated version differs from the table list 870 of the alternate representation of the base version in two respects. First, table list 1370 has an additional fourth entry, highlighted by box 1406, whereas table list 870 only has three entries. Second, the respective second and third entries in the two table lists, highlighted by boxes 1404 and 1405 respectively, have different values and are thus different.
Lastly, index list 1380 of the alternate representation of the updated version may be compared with index list 970 of the alternate representation of the base version. As can be seen, the index list 1380 of the alternate representation of the updated version has the same number of entries as in index list 970, but the values of many of the entries are different between the index list 1380 and index list 970. In particular, with the exception of the first and last respective entries in index list 1380 and index list 970, all of the remaining entries highlighted by boxes 1407-1412, are different between the two index lists.
In one aspect, the system and method may modify certain portions of the alternate representation 278 of the updated version, without changing its accurate representation of the original updated version, in order to reduce the number of differences between it and the alternate representation 276 of the base version as described below.
In accordance with the specific aspects described above, a table list may represent the assignment of a particular index to a unique referenced address found in the software. As also described earlier, an index list may represent an ordered list of indexes, where the values of the indexes identify particular references found in one or more portions of the software, and where the order of the indexes (when read left-to-right) represents the relative order in which the referenced addresses are found in the software. The assignment of indexes to unique reference addresses, and the creation of an ordered index list representing the relative location and the identity of references in the software, together provide a degree of freedom in the values used in the alternate representations.
Specifically, the table list may be modified by changing the index numbers that are assigned to the unique reference addresses determined from the software. Concomitant changes may also be made in the index list to reflect these changes. Such modifications may be performed for the purpose of reducing the number of differences between the alternate representation of the updated version and the alternate representation of the base version.
For example, table list 1370 in
The processor may change the indexes that are assigned to the addresses. As can be seen in modified table list 1371 and represented by arrows 1504, 1506 and 1508, index “2” may be reassigned to address “0802”, index “3” may be reassigned to address “0804”, and index “4” may be reassigned to address “07fc”. Index “1” may remain as is.
The alternate representation of the updated version may be converted back into the updated version. For example, the alternate representation 278 in
Thus, each of the successive entries in the control list that are a “b” may be successively replaced with the corresponding entry from the byte list. For example, the first entry (reading from left-to-right) in control list 1350 is a “b”, which may be replaced with the first entry in byte list 1360, which is “8e”. Similarly, the second “b” in the control list, which is the third entry, may be replaced with the second byte in the byte list, which is “bd”.
In addition, each of the successive entries in the control list that are an “r” may also be successively'replaced with an address from the table list 1370, where the address is identified by the appropriate successive index value in the index list. For example, the first “r” in the control list (second entry) may be replaced by the address indicated by the first entry of the index list 1380, which is a “1”, and which, as seen from table list 1370, is assigned to address “07f9”. Thus, the first “r” may be replaced by address “07f9”. Similarly, the second “r” in the control list (fourth entry) may be replaced by the address indicated by the second entry into the index list “4”, which is assigned to address “0804”. Thus, the second “r” may be replaced by address “0804”.
Thus, by replacing each entry of “b” and “r” in the control list as described above, the updated version may be reconstructed from its alternate representation.
In one aspect, the system and method creates a patch 280. The patch may include (1) instructions for creating an alternate of the base version, (2) the differences between the alternate base version and alternate updated version, (3) instructions for applying those differences to the alternate base version—so as to create an alternate updated version, and (4) and instructions for creating the updated version from the alternate.
For example, and as shown in
In like manner, patch 280 may also include directives for generating the byte list, table list, and the index list of the alternate representation of the updated version from the corresponding lists of the alternate representation of the base version.
In addition, each set of directives for generating a respective list may be separated by a delimiter that may indicate the end of one set of directives and the beginning of the next. In addition, the delimiter may also identify the list associated with a set of directives. For example, delimiter 1752 indicates that the following set of directives applies to the control list. Similarly, delimiter 1754 indicates the beginning of directives for the byte list.
Moreover, a patch representing the differences between the alternate versions may be generated using conventional patch creation programs, such as by applying bsdiff or xdelta to the alternative base and alternative updated versions.
Patch 280 may be transmitted from server 110 to one or more clients 120, 150, which may use the information in the patch 280 to generate an updated version of the software 174 from the base version of the software 172.
As shown in
As shown in
Memory 164 may store a patch 180, that is executable by processor 162 and is identical to the patch 280 stored on server 110. In one aspect, patch 180 is transmitted from server 110 to clients 120, 150. Patch 180 may include (1) instructions for creating an alternate representation 176 of the base version 172 (2) the differences between the alternate base version 176 and alternate updated version 178 (3) instructions for applying those differences to the alternate base version 176 so as to create an alternate updated version 178, and (4) and instructions for creating the updated version 174 from the alternate updated version 178.
Thus, processor 162 in the client device may execute patch 180 to create the updated version 174 of the software from base version 172 of the software.
While certain advantages are derived from the aspects described above, it will be readily appreciated that numerous modifications are possible.
It will be understood that the system and method is not limited to any specific type of program. For example, it may be used to create alternate versions of, and patches for, web-browsers such as Google Chrome or operating systems like Microsoft Vista or Linux. Because a patch in accordance with the system and method will be substantially smaller than conventional patches in many circumstances, it may be particularly advantageous when sent to devices—such as cell phones and wireless PDAs—that are limited in their ability to promptly receive or adequately store larger patches.
It should also be understood that while the base and updated versions are described as software, the system and method may be applied to other types of information comprised of references and non-references such as documents and data structures.
The modification of the alternate representation of the updated version to reduce the differences between it and the alternate representation of the base version may be implemented in various ways. In one aspect, the respective lists of the alternate representation of the updated and base versions may be compared using a simple algorithm that goes through and checks every permutation and combination of assigning indexes to addresses in order to determine the combination that may result in a desired reduction of differences between the two versions. For increased efficiency, more sophisticated algorithms may be used, such as those employed for simulated annealing, genetic programming, depth-first search, and sub-graph isomorphism.
While absolute addresses have been used to describe various aspects, it is to be understood that the references are not limited to absolute addresses, and may be relative addresses as typically used with re-locatable code. In addition, the inventive aspects described herein are not limited to machine code format of a base and updated version of software, and may be readily applied to any format such as source code or assembly language format.
Furthermore, the references may include direct references, indirect references, or employ other relative addressing modes for referring to particular addresses. For example, the references may include displacement values, which may reference a location in the software based on a distance between a base address and the address of the location being referenced. In addition, the references may reference a location in the software that itself contains another reference to a location in the software.
Further still, the references may be determined from any portion of the software. For example, portions of the software may include data that are understood as references to other portions of the software.
Additionally, while the references have been exemplarily described as a series of bytes, this is not a requirement. Thus, a reference may be any number of contiguous or non-contiguous bits of the software that are together understood to be a reference to a location in the software. For example, for machine architectures such as those for the ARM or HPPA processors, certain operations contain one or more fields of bits that may together be understood as referencing another portion of the software.
Although patch generator 300 and patch transmitter 310 have been described as above, it will be readily understood that the numerous modifications are possible in various aspects. For example, patch generator 300 may also include functionality of the patch transmitter 310. Alternatively, the functionality of patch generator 300 may be implemented using separate components, where the components together operate to create the alternate representations 276, 278, and the patch 280 as described above.
Although the invention herein has been described with reference to particular embodiments, it is to be understood that these embodiments are merely illustrative of the principles and applications of the present invention. It is therefore to be understood that numerous modifications may be made to the illustrative embodiments and that other arrangements may be devised without departing from the spirit and scope of the present invention as defined by the appended claims.
Number | Name | Date | Kind |
---|---|---|---|
3969723 | Kennicott | Jul 1976 | A |
4115853 | Dummermuth | Sep 1978 | A |
4278837 | Best | Jul 1981 | A |
4319079 | Best | Mar 1982 | A |
4425618 | Bishop et al. | Jan 1984 | A |
4464650 | Eastman et al. | Aug 1984 | A |
4465901 | Best | Aug 1984 | A |
4542453 | Patrick et al. | Sep 1985 | A |
4683549 | Takaki | Jul 1987 | A |
4807182 | Queen | Feb 1989 | A |
4831517 | Crouse et al. | May 1989 | A |
4972504 | Daniel, Jr. et al. | Nov 1990 | A |
4987550 | Leonard et al. | Jan 1991 | A |
5043871 | Nishigaki et al. | Aug 1991 | A |
5051745 | Katz | Sep 1991 | A |
5146221 | Whiting et al. | Sep 1992 | A |
5155847 | Kirouac et al. | Oct 1992 | A |
5170465 | McKeeman et al. | Dec 1992 | A |
5193180 | Hastings | Mar 1993 | A |
5204960 | Smith et al. | Apr 1993 | A |
5210854 | Beaverton et al. | May 1993 | A |
5247660 | Ashcraft et al. | Sep 1993 | A |
5260693 | Horsley | Nov 1993 | A |
5307492 | Benson | Apr 1994 | A |
5319645 | Bassi et al. | Jun 1994 | A |
5335344 | Hastings | Aug 1994 | A |
5347653 | Flynn et al. | Sep 1994 | A |
5357629 | Dinnis et al. | Oct 1994 | A |
5359730 | Marron | Oct 1994 | A |
5392390 | Crozier | Feb 1995 | A |
5410703 | Nilsson et al. | Apr 1995 | A |
5450589 | Maebayashi et al. | Sep 1995 | A |
5465258 | Adams | Nov 1995 | A |
5473772 | Halliwell et al. | Dec 1995 | A |
5479654 | Squibb | Dec 1995 | A |
5481713 | Wetmore et al. | Jan 1996 | A |
5491821 | Kilis | Feb 1996 | A |
5493674 | Mizutani et al. | Feb 1996 | A |
5502439 | Berlin | Mar 1996 | A |
5535329 | Hastings | Jul 1996 | A |
5546586 | Wetmore et al. | Aug 1996 | A |
5574573 | Ray et al. | Nov 1996 | A |
5574898 | Leblang et al. | Nov 1996 | A |
5574906 | Morris | Nov 1996 | A |
5581697 | Gramlich et al. | Dec 1996 | A |
5581768 | Garney et al. | Dec 1996 | A |
5588143 | Stupek, Jr. et al. | Dec 1996 | A |
5600834 | Howard | Feb 1997 | A |
5619698 | Lillich et al. | Apr 1997 | A |
5630072 | Dobbins | May 1997 | A |
5634052 | Morris | May 1997 | A |
5636366 | Robinson et al. | Jun 1997 | A |
5659755 | Strohacker | Aug 1997 | A |
5675802 | Allen et al. | Oct 1997 | A |
5675803 | Preisler et al. | Oct 1997 | A |
5694566 | Nagae | Dec 1997 | A |
5699275 | Beasley et al. | Dec 1997 | A |
5732275 | Kullick et al. | Mar 1998 | A |
5745058 | Auerbach et al. | Apr 1998 | A |
5745906 | Squibb | Apr 1998 | A |
5752039 | Tanimura | May 1998 | A |
5757690 | McMahon | May 1998 | A |
5761649 | Hill | Jun 1998 | A |
5764987 | Eidt et al. | Jun 1998 | A |
5764994 | Craft | Jun 1998 | A |
5790760 | Arima et al. | Aug 1998 | A |
5790796 | Sadowsky | Aug 1998 | A |
5790856 | Lillich | Aug 1998 | A |
5790860 | Wetmore et al. | Aug 1998 | A |
5794254 | McClain | Aug 1998 | A |
5799144 | Mio | Aug 1998 | A |
5802549 | Goyal et al. | Sep 1998 | A |
5805899 | Evans et al. | Sep 1998 | A |
5813017 | Morris | Sep 1998 | A |
5815704 | Shimotsuji et al. | Sep 1998 | A |
5815714 | Shridhar et al. | Sep 1998 | A |
5829001 | Li et al. | Oct 1998 | A |
5832520 | Miller | Nov 1998 | A |
5835701 | Hastings | Nov 1998 | A |
5837986 | Barile et al. | Nov 1998 | A |
5838264 | Cooper | Nov 1998 | A |
5844508 | Murashita et al. | Dec 1998 | A |
5848274 | Hamby et al. | Dec 1998 | A |
5873097 | Harris et al. | Feb 1999 | A |
5884094 | Begun et al. | Mar 1999 | A |
5886991 | Guarneri et al. | Mar 1999 | A |
5889995 | Segnan | Mar 1999 | A |
5893113 | McGrath et al. | Apr 1999 | A |
5897633 | Nolan | Apr 1999 | A |
5901225 | Ireton et al. | May 1999 | A |
5909581 | Park | Jun 1999 | A |
5938766 | Anderson et al. | Aug 1999 | A |
5953534 | Romer et al. | Sep 1999 | A |
5956479 | McInerney et al. | Sep 1999 | A |
5958048 | Babaian et al. | Sep 1999 | A |
5960189 | Stupek, Jr. et al. | Sep 1999 | A |
5964873 | Choi | Oct 1999 | A |
5966541 | Agarwal | Oct 1999 | A |
5974254 | Hsu | Oct 1999 | A |
5978791 | Farber et al. | Nov 1999 | A |
5982937 | Accad | Nov 1999 | A |
5983000 | Perron | Nov 1999 | A |
5990810 | Williams | Nov 1999 | A |
5995754 | Holzle et al. | Nov 1999 | A |
6006328 | Drake | Dec 1999 | A |
6009261 | Scalzi et al. | Dec 1999 | A |
6018349 | Szeliski et al. | Jan 2000 | A |
6018747 | Burns et al. | Jan 2000 | A |
6021272 | Cahill et al. | Feb 2000 | A |
6026235 | Shaughnessy | Feb 2000 | A |
6052531 | Waldin, Jr. et al. | Apr 2000 | A |
6071004 | Le Gall et al. | Jun 2000 | A |
6071317 | Nagel | Jun 2000 | A |
6076134 | Nagae | Jun 2000 | A |
6077311 | Lichtenstein et al. | Jun 2000 | A |
6078931 | Motoyama | Jun 2000 | A |
6112025 | Mulchandani et al. | Aug 2000 | A |
6115550 | Hunter et al. | Sep 2000 | A |
6122731 | Son | Sep 2000 | A |
6141698 | Krishnan et al. | Oct 2000 | A |
6163780 | Ross | Dec 2000 | A |
6163811 | Porter | Dec 2000 | A |
6167407 | Nachenberg et al. | Dec 2000 | A |
6175663 | Huang | Jan 2001 | B1 |
6189145 | Bellin, Jr. et al. | Feb 2001 | B1 |
6192157 | Prebble | Feb 2001 | B1 |
6192475 | Wallace | Feb 2001 | B1 |
6202208 | Holiday, Jr. | Mar 2001 | B1 |
6216140 | Kramer | Apr 2001 | B1 |
6216175 | Sliger et al. | Apr 2001 | B1 |
6216213 | Breternitz, Jr. et al. | Apr 2001 | B1 |
6230316 | Nachenberg | May 2001 | B1 |
6240550 | Nathan et al. | May 2001 | B1 |
6243766 | Sliger et al. | Jun 2001 | B1 |
6253317 | Knapp, III et al. | Jun 2001 | B1 |
6260157 | Schurecht et al. | Jul 2001 | B1 |
6263497 | Maeda et al. | Jul 2001 | B1 |
6282698 | Baker et al. | Aug 2001 | B1 |
6282709 | Reha et al. | Aug 2001 | B1 |
6289358 | Mattis et al. | Sep 2001 | B1 |
6289509 | Kryloff | Sep 2001 | B1 |
6292880 | Mattis et al. | Sep 2001 | B1 |
6295644 | Hsu et al. | Sep 2001 | B1 |
6298481 | Kosaka et al. | Oct 2001 | B1 |
6305010 | Agarwal | Oct 2001 | B2 |
6317754 | Peng | Nov 2001 | B1 |
6330574 | Murashita | Dec 2001 | B1 |
6330712 | Iwaya | Dec 2001 | B1 |
6334213 | Li | Dec 2001 | B1 |
6349407 | Towfiq | Feb 2002 | B1 |
6367075 | Kruger et al. | Apr 2002 | B1 |
6374250 | Ajtai et al. | Apr 2002 | B2 |
6389592 | Ayres et al. | May 2002 | B1 |
6397385 | Kravitz | May 2002 | B1 |
6404923 | Chaddha | Jun 2002 | B1 |
6421679 | Chang et al. | Jul 2002 | B1 |
6425125 | Fries et al. | Jul 2002 | B1 |
6430685 | Yu et al. | Aug 2002 | B1 |
6434695 | Esfahani et al. | Aug 2002 | B1 |
6438621 | Kanamori et al. | Aug 2002 | B1 |
6438748 | Gard et al. | Aug 2002 | B1 |
6463582 | Lethin et al. | Oct 2002 | B1 |
6466999 | Sliger et al. | Oct 2002 | B1 |
6496974 | Sliger et al. | Dec 2002 | B1 |
6510552 | Benayoun et al. | Jan 2003 | B1 |
6526574 | Jones | Feb 2003 | B1 |
6532588 | Porter | Mar 2003 | B1 |
6546552 | Peleg | Apr 2003 | B1 |
6594822 | Schweitz et al. | Jul 2003 | B1 |
6610103 | Ehrman et al. | Aug 2003 | B2 |
6618747 | Flynn et al. | Sep 2003 | B1 |
6629123 | Hunt | Sep 2003 | B1 |
6643506 | Criss et al. | Nov 2003 | B1 |
6643775 | Granger et al. | Nov 2003 | B1 |
6651249 | Waldin et al. | Nov 2003 | B2 |
6691305 | Henkel et al. | Feb 2004 | B1 |
6738799 | Dickenson | May 2004 | B2 |
6754848 | Froehlich et al. | Jun 2004 | B1 |
6757893 | Haikin | Jun 2004 | B1 |
6760907 | Shaylor | Jul 2004 | B2 |
6804663 | Delo | Oct 2004 | B1 |
6952823 | Kryloff et al. | Oct 2005 | B2 |
7131112 | Bartz et al. | Oct 2006 | B1 |
7203708 | Liu et al. | Apr 2007 | B2 |
7542758 | Rajaram et al. | Jun 2009 | B2 |
7587433 | Peleg et al. | Sep 2009 | B2 |
7665081 | Pavlyushchik | Feb 2010 | B1 |
20020087500 | Berkowitz et al. | Jul 2002 | A1 |
20020100036 | Moshir et al. | Jul 2002 | A1 |
20030028867 | Kryloff et al. | Feb 2003 | A1 |
20030163508 | Goodman | Aug 2003 | A1 |
20030163805 | Hata et al. | Aug 2003 | A1 |
20030217257 | Ebsen et al. | Nov 2003 | A1 |
20040063899 | Kobayashi et al. | Apr 2004 | A1 |
20040078793 | Bragulla et al. | Apr 2004 | A1 |
20040088694 | Ho | May 2004 | A1 |
20040107416 | Buban et al. | Jun 2004 | A1 |
20050132349 | Roberts et al. | Jun 2005 | A1 |
20050132359 | McGuire et al. | Jun 2005 | A1 |
20050257206 | Semerdzhiev | Nov 2005 | A1 |
20060004756 | Peleg et al. | Jan 2006 | A1 |
20070169082 | Lam et al. | Jul 2007 | A1 |
20070255764 | Sonnier et al. | Nov 2007 | A1 |
Number | Date | Country |
---|---|---|
2111958 | Jan 1993 | CA |
69232761 | Apr 2003 | DE |
0411232 | Feb 1991 | EP |
0472812 | Mar 1992 | EP |
0546684 | Jun 1993 | EP |
0591360 | Apr 1994 | EP |
0665496 | Aug 1995 | EP |
0695040 | Jan 1996 | EP |
0702299 | Mar 1996 | EP |
0723226 | Jul 1996 | EP |
0752794 | Jan 1997 | EP |
0813167 | Dec 1997 | EP |
1014263 | Jun 2000 | EP |
1087533 | Mar 2001 | EP |
2330428 | Apr 1999 | GB |
59201150 | Nov 1984 | JP |
63208941 | Aug 1988 | JP |
04092924 | Mar 1992 | JP |
4242829 | Aug 1992 | JP |
5091550 | Apr 1993 | JP |
05120067 | May 1993 | JP |
06314194 | Nov 1994 | JP |
08101770 | Apr 1996 | JP |
09069042 | Mar 1997 | JP |
10003383 | Jan 1998 | JP |
11126161 | May 1999 | JP |
9300633 | Jan 1993 | WO |
9632679 | Oct 1996 | WO |
9712508 | Apr 1997 | WO |
9743711 | Nov 1997 | WO |
9904336 | Jan 1999 | WO |
9954816 | Oct 1999 | WO |
0034861 | Jun 2000 | WO |
2004063899 | Jul 2004 | WO |
2005024628 | Mar 2005 | WO |
Entry |
---|
Ajmani, Sameer, “A Review of Software Upgrade TeChniques for Distributed Systems”, MIT Computer Science and Artificial IntelliQence Laboratory, Aug. 7, 2002, pp. 1-19, Cambridge, MA. |
Baker, Brenda, “A Program for Identifying Duplicated Code”, Computing Science and Statistics, 24th Symposium, Mar. 18-21, 1992, vol. 24, 9 paQes, College Station, TX. |
Baker et al., “Compressing Differences of Executable Code”, ACM Slc;3PLAN Workshop on Compiler Support for System Software (WCSSS), Apr. 22, 1999, pp. 1-10, Atlanta, GA. |
Bartoletti et al., “Secure Software Distribution System”, Proceedings of the 20th National Information Systems Security Conference, Jun. 18, 1997, 11 pages, Baltimore, MD. |
Bashar et ai, “Low-Threat Security Patches and Tools”, Proceedings of the International Conference on Software Maintenance, Nov. 30, 1996,23 paQes, IEEE Computer Society, WashinQton, DC. |
Chambers et al., “A User Designed Software System for Electron Microprobes—Basic Premises and the Control Program”, Journal de Physique, Feb. 1984, pp. 223-226, vol. 45, No. 2, Les Editions de Physique, Les Ulis, France. |
Cheung et al., “Optimal Routing Table Design for IP Address Lookups Under Memory Constraints”, IEEE Proceedings of INFOCOM, Mar. 1999,8 pages, New York, NY. |
Church et al., “Dotplot: a Program for Exploring Self-Similarity in Millions of Lines of Text and Code”, Jun. 1993), Journal of Computational and Graphical Statistics, vol. 2, No. 2, 12 pages, American Statistical Association, Alexandria, VA. |
Cifuentes et al., “Decompilation of Binary Programs”, Software Practice and Experience, Jul. 1995, vol. 25 (7), pp. 811-829, John Wiley & Sons, Ltd., United KinQdom. |
Cifuentes, Cristina, “Reverse Compilation Techniques”, Queensland University of Technology, Jul. 1994, pp. 1-342. |
Clodfelter et al., “Technological Profile of Shopping Centers: Present and Future Use”, Journal of Shopping Center Research, Spring/Summer 1996, pp. 59-93, International Council of Shopping Centers Educational Foundation, New York, NY. |
Cook et al., “A Methodology for Cost-Effective Analysis of In-Place Software Processes”, IEEE Transaction on Software Engineering, Jan. 1997, pp. 1-25. |
Duntemann, Jeff, Assembly Language: Step-by-Step, pp. 1-469,1992, John Wiley & Sons, Inc., New York, NY. |
Eastwood, David B., “Information TeChnology and Fresh PrOduce: A Case Study Using Store Level Scan Data to Analyze Sales”, Jul. 1997, 20 pages, University of Minnesota, St. Paul, MN. |
Engler, Dawson R., “VCODE: A Retargetable, ExtenSible, Very Fast Dynamic Code Generation System”, May, 1996, SIGPLAM Conference on Programming Language Design and Implementation, 11 pages, ACM Press, Philadelphia, PA. |
Flake, Halvar, “Structural Comparison of Executable Objects”, Proceedings of the IEEE Conference on Detection of Intrusions and Malware & Vulnerability Assessment, 2004, pp. 161-173, Dartmund, Germany. |
Fraser et al., “A Machine-Independent Linker”, Software Practice and Experience, Department of Computer Science, The University of Arizona, 1982, vol. 12, pp. 351-366, United Kingdom. |
Gosling et ai, “The Java Language Environment”, May 1996, pp. 1-98, Sun Microsystems, Mountain View, CA. |
Gray, Robert M., “Fundamentals of Data Compression”, IEEE Proceedings of International Conference on Information, Communications, and Signal ProcessinQ, Sep. 9, 1997, pp. 1-186, SinQapore International Search Report mailed Mar. 25, 2010, International Application No. PCT/IL2009/000762. |
International Search Report mailed Feb. 15, 2010, International Application No. PCT/IL2009/000754. |
International Search Report mailed Feb. 15, 2010, International Application No. PCT/IL2009/000755. |
International Business Machines Corporation, “Method for permitting several versions of a module to coexist within a virtual machine”, Mar. 1,2001,8 pages, vol. 443, No. 177, Mason Publications, Hampshire, Great Britain. |
Mogul et al., “Potential benefit of delta encoding and data compression for HTTP”, Proceedings of SIGCOMM '97, Sep. 1997, pp. 14 pages, ACM, New York, NY. |
Munch, Bjorn, “Versioning in a Software Engineering Database—the Change Oriented Way”, Division of Computer Systems and Telematics, The Norwegian Institute of Technology, Sep. 17, 1993, pp. 1-284, Germany. |
Mycroft et al., “Optimising compilation, Part I: classical imperative languages”, Proceedings of SOFSEM, 1992, pp. 1-17, Czechoslovakia. |
Nilsen, Kelvin, “Issues in the Design and Implementation of Real-Time Java”, Jul. 19, 1996, pp. 1-28, SYSCON Media, Montvale, NJ. |
Oplinger et al., “Software and Hardware for Exploiting Speculative Parallelism with a Multiprocessor”, Stanford University Computer Systems Laboratory, Feb. 1997, pp. 1-23, Stanford, CA. |
Oreizy, Peyman, “Decentralized Software Evolution”, Proceedings of the International Conference on the Principles of Software Evolution, Apr. 20-21, 1998, pp. 1-5, ACM, New York, NY. |
“PKZIP 6.0 for Windows Getting Started Manual”, Copyright 2002 PKWARE, Inc., 13 pages, Milwaukee, WI. |
Pellegrini et al., “Efficient IP Table Lookup via Adaptive Stratified Trees with Selective Reconstruction”, Lecture Notes in Computer Science Sep. 2004, pp. 1-26, Springer Berlin, Germany. |
Roth etal., “Database Compression”, Sigmod Record, Sep. 1993, vol. 22, No. 3, pp. 31-39, ACM, New York, NY. |
Saha et al., “Symbolic Support Graph: A Space Efficient Data Structure for Incremental Tabled Evaluation”, Department of Computer SCience, Lectures Notes in Computer Science, Oct. 10, 2005, vol. 3668, pp. 1-15, Springer, Germany. |
Stevens, Curt, “Knowledge-Based Assistant for Accessing Large, Poorly Structured Information Spaces”, Thesis Submitted to the Faculty of the Graduate School of the University of Colorado, 1993, 125 pages, Boulder, CO. |
Tichy, Walter F., “RCS—A System for Version Control”, Department of Computer Sciences, Purdue UniverSity, 1985, vol. 15, pp. 1-19, Wiley, United Kinqdom. |
Tichy, Walter F., “The String-to-String Correction Problem with Block Moves”, Purdue University, Oct. 26, 1983, 16 pages, ACM, New York, NY. |
Tsou et al., “Client-Server Components and Metadata Objects for Distributed Geographic Information Services”, Proceedings of the GIS/LIS, 1998, pp. 590-599, Association of American Geography, Washington, DC. |
Wolfe et al., “Executing Compressed Programs on an Embedded RISC Architecture”, 1992, pp. 81-91, IEEE Computer Society Press Los Alamitos, CA. |
Zeller, Andreas, “Configuration Management with Version Sets”, A Unified Software Versioning Model and its Applications, Apr. 1, 1997, pp. 1-320, Technische Universitat Braunschweig, Germany. |
Gryder et al., “Survey of Data Compression Techniques”, Martin Marietta Energy Systems, Inc. for the United States of Energy, Sep. 1991, 45 pages, Oak Ridge, TN. |
Hardy et al., “Essence: A Resource Discovery System Based on Semantic File Indexing”, Proceedings of the USENIX Winter Conference, Jan. 25-29, 1993, pp. 361-374. |
Hirschberg, Daniel S., “Algorithms for the Longest Common Subsequence Problem”, Journal of.the ACM, Oct. 1977, vol. 24, No. 4, pp. 664-675, ACM, New York, NY. |
Hoshi et al., “Software Updated System Using Wireless Communication”, NTT DoCoMo Technical Journal, 2004, vol. 5, No. 4, pp. 36-43, Japan. |
Hung et al., “UNIX Code Management and Distribution”, Sep. 1992, pp. 1 A, Stanford Linear Accelerator Center, Stanford, CA. |
Keller et al., “Binary Component Adaptation”, Computing Sciences Technology Report No. ECOOP '98 Proceedings, Lecture Notes on Computer Science, Proceedings of the 12th European Conference on Object-Oriented Programming, 1998, vol. 1445, pp. 1-17. |
Kifer, Michael, “Ediff User's Manual”, Version 2.70, Mar. 1998, pp. 1-44. |
Kishan et al., “Dynamic Kernel Modification and Extensibility”, Technical Report of the SU IF Group, Department of Computer SCience, 2002, 26 pages, Stanford University, Stanford, CA. |
Larus et al., “Rewriting Executable Files to Measure Program BehaviOr”, Software, University of Wisconsin—Madison, Mar. 25, 1992, vol. 24, pp. 1-17, Wiley Interscience, United Kingdom. |
Lefurgy, Charles Robert, “Efficient Execution of Compressed Programs”, Dissertation, 2000, pp. 1-212, University of Michigan, Ann Arbor, MI. |
Request for EX Parte Reexamination filed Jan. 22, 2010 for Patent No. 6,546,552. |
Decision Granting EX Parte Reexamination for Patent No. 5,546,552 mailed Mar. 16, 2010. |
Percival, Wadham College University of Oxford, Thesis submitted for the degree of Doctor of Philosophy, Hilary 2006. |
Hunt et al., “Delta Algorithms: An Empirical Analysis”, ACM Transactions on Softward Engineering and Methodology, 7 (2); 192-214 (1998). |
Wang et al., Microsoft Research Technical Report: MSR-TR-99-83, Accepted to 2nd Annual Workshop on Feedback-Directed Optimization (FDO), Haifa, Israel, Nov. 15, 1999, 11 pages. |
http://www.ddj.com/article/printableArticle.jhtml?articleID=184409550&dept—url=/architect, Dr. Dobb's, A Cross-Platform Binary Diff (1995). |
Burns, “Differential Compression: A Generalized Solution for Binary Files”, Dec. 1996, 69 pages. |
Horwitz, “Identifying the Semantic and Textual Differences Between Two Versions of a Program”, University of Wisconsin-Madison, 13 pages,1990. |
Gregg et al., IBM Techical Disclosure Bulletin, 32(9A); 273-276, (1990). |
Coppieters, “A Cross-Platform Binary Diff”, Dr. Dobb's Journal, 34-36, May 1995. |
Lekatsas et al., “Code Compression for Embedded Systems”, Proceedings fo the 35th Design Automation Conference, 1998, Jun. 1998, 6 pages, San Francisco, CA. |
Lynch et al., “Patch Graphs: an Efficient Data Structure for Completion of Finitely Presented Groups”, Proceedings of the 3rd International AISMC Conference, lecture Notes in Computer Science, 1996, vol. 1138, 15 paqes, Sprinqer Verlaq, United Kinqdom. |
MacDonald et al., “PRCS: The Project Revision Control System”, lecture Notes in Computer Science, 1998, vol. 1439,14 pages, University of California at Berkeley, National Energy Research Scientific Computing Center, Springer Verlag, United Kingdom. |
Microsoft PressPass, News Press Release, May 14, 1997,2 pages, Microsoft Corp., Redmond, WA2 pages. |
Miller et al., “A File Comparison Program”, Software—Practice and Experience, Nov. 1985, vol. 1'5 (11), pp. 1025-1040, Wiley Interscience, United Kingdom. |
Batalden et al., IBM Technical Disclosure Bulletin, “Maintainable ROS Code Through the Combination of ROM and EEPROM,” 32(9A); 273-276, (1990). |
Percival, Wadham College University of Oxford, Thesis submitted for the degree of Doctor of Philosophy, Hilary-2006. |
Baker et al., “Compressing Differences of Executable Code”, 10 pages, Apr. 22, 1999. |
http://msdn.microsoft.com/en-us/library//bb267312(VS.85,printer).aspx., dated Jan. 2006. |
Lefurgy et al., “Improving Code Density Using Compression Techniques”, 10 pages, 1997. |
Hunt et al., “Delta Algorithms: An Empirical Analysis”, ACM Transactions on Softward Engineering and Methodology, 7(2); 192-214 (1998). |
Wang et al., Microsoft Research Technical Report: MSR-TR-99-83, Accepted to 2nd Annual Workshop on Feedback—Directed Optimization (FDO), Haifa, Israel, Nov. 15, 1999, 11 pages. |
Burns et al., “In-Place Reconstruction of Delta Compressed Files” pp. 267-275 (1998). |
http://www.ddj.com/article/printableArticle.jhtml?articleID=1844095508&dept—url=/architect, Dr. Dobb's, A Cross-Platform Binary Diff (1995). |
Hunt et al., “An Algorithm for Diffemetial File Comparison”, Bell Laboratories, 9 pages, Jul. 1976. |
Bums, “Differential Compression: A Generalized Solution for Binary Files”, Dec. 1996, 69 pages. |
Horwitz, “Identifying the Semantic and Textual Differences Between Two Versions of a Program”, University of Wisconsin-Madison, 13 pages, 1990. |
www.microsoft.com/presspass/press/1997/May97/ie4macpr.mspx. |
Tichy, “The String-to-String Correction Problem with Block Moves”, Purdue University, 17 pages, 1983. |
Gregg et al., IBM Techical Disdosure Bulletin, 32(9A): 273-276, (1990). |
Coppieters, “A Cross-Platform Binary Duff”, Dr. Dobb's Journal, 34-36, May 1995. |
http://code.google.com/p/xdelta/wiki/ExtemalCompression (earliest date Feb. 18. 2007). |
http://code.google.com/p/xdelta/wiki/LanguageInerface (earliest date Feb. 8, 2007). |
http://code.google.com/p/xdelta/wiki/LicensingXdelta (earliest date Mar. 24, 2007). |
http://code.google.com/p/xdelta/wiki/ProgrammingGuide (earliest date Jan. 21, 2007). |
http://code.google.com/p/xdelta/wiki/ProjectsUsingXdelta (earliest date Mar. 18, 2007). |
http://code.google.com/p/xdelta/wiki/TumingMemoryBudget (earliest date Dec. 12, 2007). |
http://code.google.com/p/xdelta, printed Dec. 18, 2009. |
http://sourceforge.net/projects/xdelta, printed Dec. 18, 2009. |
http://xdelta.org (earliest date Mar. 2, 2004). |
http://msdn.microsoft.com/en-us/library//bb4173345(printer).aspx. (dated Oct. 2009). |
International Search Report for PCT/IL99/00446, dated Dec. 12, 1999 (3 pages). |
Lefurgy, Charles Robert, “Space-efficient Executable Program Representations for Embedded Microprocessors”, Thesis, 1998, pp. 1-48, Ann Arbor, MI. |
Lekatsas et al., “Code Compression for Embedded Systems”, Proceedings to the 35th Design Automation Conference, 1998, Jun. 1998, 6 pages, San Francisco, CA. |
Lynch et al., “Patch Graphs: an Efficient Data Structure for Completion of Finitely Presented Groups”, Proceedings of the 3rd International AISMC Conference, lecture Notes in Computer Science, 1996, vol. 1138, 15 pages, Springer Verlaq, United Kingdom. |
MacDonald et al., “PRCS: The Project Revision Control System”, lecture Notes in Computer Science, 1998, vol. 1439, 14 pages, University of California at Berkeley, National Energy Research Scientific Computing Center, Springer Verlag, United Kingdom. |
MacKenzie et al., “Comparing and Merging Files”, ditt, diff3, sdiff, cmp, and patch, Edition 2.8, for diffutils 2.8 and patch 2.5.4, Mar. 23, 2002, pp. 1-100, Free Software foundation Ltd., Boston, MA. |
Microsoft PressPass, News Press Release, May 14, 1997, 2 pages, Microsoft Corp., Redmond, WA2 pages. |
Miller et al., “A File Comparison Program”, Software—Practice and Experience, Nov. 1985, vol. 1'5 (11), pp. 1025-1040. Wiley Interscience, United Kingdom. |
Japanese Office Action dated Nov. 28, 2006, with translation. |
Hunt at al., “An Empirical Study of Delta Algorithms”, University of Karlsruhe and AT&T Research, pp. 49-65, 1996. |
IBM Corp., “Logging Status Information While Installing New Software”, Jun. 1991, vol. 34, No. 1, one page. |
James J. Hunt et al., “Distributed Configuration Management via Java and the World Wide Web”, University of Karlsruhe, Germany, 1997. |
Ajila, Samuel, “Software Maintenance: An Approach to Impact Analysis of Objects Change”, Software Practice and Experience, Oct. 1995, vol. 25, pp. 1155-1181, John Wiley & Sons, Ltd., United KinQdom. |
Ajmani, Sameer, “A Review of Software Upgrade TeChniques for Distributed Systems”, MIT Computer Science and Artificial Intelligence Laboratory, Aug. 7, 2002, pp. 1-19, Cambridge, MA. |
Baker, Brenda, “A Program for Identifying Duplicated Code”, Computing Science and Statistics, 24th Symposium, Mar. 18-21, 1992, vol. 24, 9 pages, College Station, TX. |
www.daemonology.net/bsdiff, (Jul. 6, 2006 (based on web.archive.org/web/20060706151336/http://www.daemonology.net/bsdiff/)). |
Percival, “Naive Differences of Executable Code”, 3 pages (dated 2003 (based on www.daemonology.net/papers)). |
http://msdn.microsoft.com/en-us/library//bb267312(VS.85,printer).aspx, dated Jan. 2006. |
Hunt et al., “An Algorithm for Differnetial File Comparison”, Bell Laboratories, 9 pages, Jul. 1976. |
Pandey et al., “Providing Fine-Grained Access Control for Mobile Programs Through Binary Editing”, University of California, Technical Report TR-98-08, 22 pages, Form OMB No. 0704-0188 report date 1998. |
http://code.google.com/p/xdelta/WIKI/BetterCompression, (earliest date Jan. 28, 2007). |
http://code.google.com/p/xdelta/wiki/CommandLineSyntax, (earliest date Jan. 21, 2007). |
http://code.google.com/p/xdelta/downloads/list?can=1&q=&colspec=Filename+Summary+Upload, (earliest date Dec. 2006). |
http://code.google.com/p/xdelta/wiki/ExternalCompression (earliest date Feb. 18, 2007). |
http://code.google.com/p/xdelta/wiki/LanguageInerface, earliest date Feb. 8, 2007. |
http://code.google.com/p/xdelta/wiki/LicensingXdelta, (earliest date Mar. 24, 2007). |
Prosecution History of U.S. Patent No. 6,546,552, filed Aug. 18, 1999, issued Apr. 8, 2003. |
James J. Hunt et al., “Distributed Configuration Management via Java and the World Wide Web” , University of Karlsruhe, Germany, 1997. |
Houlder et al., “XOR Commands on SCSI Disk Drives”, Seagate Technology, pp. 1-30, 1995. |
Hunt et al., “An Empirical Study of Delta Algorithms”, University of Karlsruhe and AT&T Research, pp. 49-65, 1996. |