throbber
United States Patent r19i
`Lillich
`
`[54] METHOD AND APPARATUS FOR
`DETERMINING AT EXECUTION
`COMPATIBILITY AMONG CLIENT AND
`PROVIDER COMPONENTS WHERE
`PROVIDER VERSION LINKED WITH
`CLIENT MAY DIFFER FROM PROVIDER
`VERSION AVAILABLE AT EXECUTION
`
`[75]
`
`Inventor: Alan W. Lillich, Los Gatos, Calif.
`
`[73] Assignee: Apple Computer, Inc., Cupertino,
`Calif.
`
`[21] Appl. No.: 483,621
`
`[22] Filed:
`
`Jun. 7, 1995
`
`Related U.S. Application Data
`
`[63] Continuation of Ser. No. 58,345, May 5, 1993, abandoned.
`Int. Cl.6
`...................................................... G06F 11/00
`[51]
`[52] U.S. Cl . .............................................................. 395/500
`[58] Field of Search ...................................... 395/500, 700
`
`[56]
`
`References Cited
`
`U.S. PATENT DOCUMENTS
`
`4,558,413 12/1985 Schmidt et al ......................... 395/600
`4,788,637 11/1988 Tarnaru ................................ 395/200.1
`
`FOREIGN PATENT DOCUMENTS
`
`9/1991 European Pat. Off ..
`0479660
`0498130 12/1991 European Pat. Off ..
`
`OTHER PUBLICATIONS
`
`Letwin, G. Inside OS/2. Redmond, Washington, Microsoft
`Press, 1988. pp. 114-116.
`Kenah, L. et al. VAXNMS Internals and Data Structures
`Version 4.4. Maynard, Massachusetts, Digital Equipment
`Corporation, 1988. pp. 576-578.
`IBM AIX Version 3 for RISC Systern/6000TM XL C User's
`Guide. White Plains, N.Y., International Business Machines
`Corporation, 1990, pp. 7-9; pp. 11-39.
`
`I 1111111111111111 11111 lllll 111111111111111 1111111111 lllll 111111111111111111
`US005613101A
`[lll Patent Number:
`[45] Date of Patent:
`
`5,613,101
`Mar. 18, 1997
`
`Apple Computer, Inc. Inside Macintosh, vol. VI. Reading,
`Massachusetts, Addison-Wesley Publishing COmpany, Inc.
`1991. pp. 9-23, 9-24.
`Bradbeer, R., Series Editor. Atari-ST Series the Concise
`Atari ST 68000 Programmer's Reference Guide. Barnet,
`Herts. England, Glentop Publishers Ltd., 1986. pp.
`2-21-2-27.
`"a.out File Format, " RS6000 Infoexplorer CD Rom. White
`Plains, N.Y., IBM Corporation, 1991. pp. 1-2.
`
`(List continued on next page.)
`
`Primary Examiner-Ken S. Kim
`Attorney, Agent, or Firm-Helene Plotka Workman
`
`[57]
`
`ABSTRACT
`
`The invention is a method and apparatus for verifying
`compatibility between components of a system which share
`a client-provider relationship. Briefly, according to the
`invention, a current version of a provider and a compatibility
`range are defined for each of a version of a client and a
`version of a provider. A version of a provider specifies an
`oldest implementation provider and an oldest definition
`provider. When a client is linked with a particular version of
`a provider it stores an identification for that provider, a
`current indicator for that version of the provider, called a
`definition provider, and the oldest implementation provider.
`At runtime, compatibility checks are performed between a
`client and available versions of the provider(s), called imple(cid:173)
`mentation providers, with which it has been linked. For each
`available version of each type of provider compatibility
`exists with the client in three situations. First, if the defini(cid:173)
`tion provider and the implementation provider are the same
`version of that provider, then the client and provider are
`compatible. Second, if the definition provider, i.e. the ver(cid:173)
`sion of the provider linked with the client, is newer than the
`implementation provider, then if the version of the imple(cid:173)
`mentation provider is no older than the oldest implementa(cid:173)
`tion provider specified in the client, the two are compatible,
`otherwise they are incompatible. Third, if the definition
`provider is older than the implementation provider, then if
`the definition provider is no older than the oldest definition
`provider specified in the implementation provider, then the
`two are compatible.
`
`19 Claims, 13 Drawing Sheets
`
`34
`
`Page 1 of 31
`
`

`

`5,613,101
`Page 2
`
`OTHER PUBLICATIONS
`
`"Optional Auxiliary Header for the a.out File, " RS6000
`lnfoexplorewr CD Rom. White Plains, N.Y., IBM Corpora(cid:173)
`tion, 1991, pp. 1-2.
`"Section Headers for the a.out File, " RS6000 Infoexplorer
`CD Rom. White Plains, N.Y., IBM Corporation, 1991, pp.
`1-2.
`"Raw Data Sections for the a.out File, " RS6000 Infoex(cid:173)
`plorer CD Rom. White Plains, N. Y., IBM Corporation, 1991.
`p. 1.
`"Special Data Sections for the a.out File, " RS6000 Infoe(cid:173)
`xplorer CD Rom. White Plains, N.Y., IBM COrporation,
`1991. pp. 1-6.
`"Relocation Information for the a.out File, " RS6000 Infoe(cid:173)
`xplorer CD Rom. White Plains, N.Y., IBM Corporation,
`1991, pp. 1-2.
`
`"xcoff.h, " RS6000 Infoexplorer CD Rom. White Plains,
`N.Y., IBM Corporation, 1989, pp. 1-3.
`
`"filehdr.h, " RS6000 Infoexplorer CD Rom. White Plains,
`N.Y., IBM Corportion, 1989, pp. 1-3.
`
`"reloc.h, " RS6000 Infoexplorer CD Rom. White Plains,
`N.Y., IBM Corporation, 1989. pp. 1-3.
`
`"scnhdr.h, " RS6000 Infoexplorer CD Rom, White Plains,
`N.Y., IBM Corporation, 1989. pp. 1-2.
`
`"loader.h, " RS6000 Infoexplorer CD Rom, White Plains,
`N.Y., IBM COrporation, 1989. pp. 1-2.
`
`"ld Command, " RS6000 Infoexplorer CD Rom, White
`Plains, N.Y.,
`IBM Corporation, 1991. pp.
`1-12.
`
`Page 2 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 1 of 13
`
`5,613,101
`
`30
`
`~ 32
`
`34
`
`40
`
`~ 44
`
`(
`
`FIG. 1
`
`r 46
`
`r 48
`
`~ I\Etv'ORY
`
`DISKDRIVE
`
`•
`,.
`
`--
`
`1
`
`48
`
`50
`
`52
`
`54
`
`60
`
`62
`
`,.
`
`, l
`
`.../
`42
`
`FIG. 2
`
`OPERAllNG SYSTEM
`
`C0\1Pll..ER
`
`LINKER
`
`CLIENT PROGRAM
`
`PROVIDER PROGRAM
`
`FIG. 3
`
`Page 3 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 2 of 13
`
`5,613,101
`
`•
`•
`•
`CLIENT PROGRAM OBJECT CODE
`
`PROVIDER PROORAM
`
`PROVIDER INDICATOR
`
`CURRENT INDICATOR
`
`/
`
`J
`
`60
`
`62
`
`'
`
`OLDEST IMPLEMENTATION INDICATOR
`•
`•
`•
`
`FIG. 4A
`
`--
`
`46
`
`68
`I--'
`
`70
`I---'
`
`72
`I--'
`
`._...,
`46
`
`•
`•
`•
`CLIENT EXECUTABLE OBJECT CODE
`
`64
`
`62
`
`/
`
`I
`
`'
`
`----I--'
`----
`OLDEST IMPLEMENTATION INDICATOR --
`
`PROVIDER INDICATOR
`
`CURRENT INDICATOR
`
`OLDEST IMPLEMENTATION INDICATOR
`
`PROVIDER PROORAM
`
`PROVIDER INDICATOR
`
`CURRENT INDICATOR
`
`74
`
`76
`
`78
`
`68
`
`70
`
`72
`
`•
`•
`•
`
`FIG. 48
`
`Page 4 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 3 of 13
`
`5,613,101
`
`64
`
`I
`
`,
`'
`
`80 ◄
`
`\
`
`__..,
`46
`
`68
`~
`
`76
`~
`
`78
`~
`
`__,
`
`68
`
`__,
`70
`__,
`84
`
`•
`•
`•
`
`CLIENT PROGRAM EXECUTABLE CODE
`
`PROVIDER INDICATOR
`
`CURRENT INDICATOR
`
`OLDEST IMPLEMENTATION INDICATOR
`
`PROVIDER PROGRAM EXECUTABLE CODE
`
`PROVIDER INDICATOR
`
`CURRENT INDICATOR
`
`OLDEST DEFINITION INDICATOR
`•
`•
`•
`
`FIG. 5
`
`Page 5 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 4 of 13
`
`5,613,101
`
`BEGIN
`
`100
`During development of a version of a
`provider, define a current version and
`compatibility ranges for that version
`
`102
`During linking of client with a
`provider, store in the client
`information about the identity of the
`provider, the version of the provider
`and compatibility ranges of that
`version of the provider
`
`104
`During execution of a client, determine
`for providers linked with that client
`compatibility between the client and
`available versions of those providers
`
`110
`Indicate incompatibility
`
`YES
`
`108
`Execute client or
`otherwise indicate
`compatibility
`
`END
`
`FIG. 6
`
`Page 6 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 5 of 13
`
`5,613,101
`
`FIG. 7
`
`BEGIN 100
`
`120
`Define Current
`Indicator for
`provider
`
`122
`Define Oldest
`Implementation
`Indicator for
`provider
`
`124
`Define Oldest
`Definition Indicator
`for
`
`END 100
`
`BEGIN 102
`
`138
`Store in client provider
`indicator
`
`140
`Store in client version of
`provider being linked
`with client, i.e. current
`indicator
`
`142
`Store in client 011 of
`provider being linked
`with client
`
`END 102
`
`FIG. 8
`
`Page 7 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 6 of 13
`
`5,613,101
`
`BEGIN 104
`
`158
`Determine available
`version(s) of provider
`
`160
`Connect client and
`available version(s) of
`provider
`
`162
`Determine
`compatibility between
`client and available
`version(s) of provider
`
`END 104
`
`FIG. 9
`
`BEGIN 162
`
`the same version of the
`provider which is
`vailable at execution
`
`182
`Compatibility exists
`
`END 162
`
`YES
`
`YES
`
`188
`Incompatibility
`exists
`
`FIG. 10
`
`Page 8 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 7 of 13
`
`5,613,101
`
`BEGIN 162
`
`200
`Does value or absolute
`value of current indicator
`stored in client specify
`same version as current
`indicator of provider?
`
`N)
`
`204
`Is value (or absolute
`value) of current indicator
`stored in client greater
`than value (or absolute
`alue) of current indicator
`of provider?
`
`..---------YES-------.....1
`
`YES
`
`206
`Is value ( or absolute
`value) of 011 stored in
`client less than or equal to
`value (or absolute value)
`of current indicator of
`provider?
`
`210
`Signal
`Incompatibility
`
`END 162
`
`14-----YES------'
`
`212
`Signal
`Incompatibility
`
`FIG. 11
`
`YES
`
`202
`Signal
`Compatibility
`
`END 162
`
`Page 9 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 8 of 13
`
`5,613,101
`
`(230
`
`Provider Indicator
`
`232
`
`Current Indicator
`
`011
`
`232
`
`Provider Indicator
`
`Current Indicator
`
`011
`
`234
`
`236
`
`238
`
`234
`
`236
`
`238
`
`•
`•
`•
`
`FIG. 12
`
`Page 10 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 9 of 13
`
`5,613,101
`
`BEGIN 102
`
`'I..
`
`...,
`
`_,
`
`1 r
`
`240
`Add new field to
`provider list
`
`H
`
`242
`Set provider
`identification in new
`field
`
`,r
`
`244
`Set current indicator
`in new field
`
`'Ir
`
`246
`Set 011 in new field
`
`,
`
`I
`
`'r
`
`END 102
`
`...
`
`,
`
`FIG. 13
`
`Page 11 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 10 of 13
`
`5,613,101
`
`42
`
`261
`263
`
`266
`
`268
`
`263
`
`
`
`266
`
`268
`
`- -
`
`r 260
`
`Provider Indicator
`
`,.
`
`Provider Location
`
`262
`
`Current Indicator
`
`' 001
`,
`
`Provider Location
`
`262
`
`Current Indicator
`
`\
`
`001
`
`27~
`
`•
`•
`•
`
`FIG. 14
`
`- - - - ~
`
`Page 12 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 11 of 13
`
`5,613,101
`
`BEGIN 104
`
`278
`Form implementation
`provider list
`
`280
`Initialize compatibility
`indicator
`
`284
`Select field not yet
`searched
`
`\
`
`FIG. 15
`
`290
`Update compatibility indicator
`' - - - - - - - - - - -1 to specify version indicated by
`selected field or to specify the
`field itself
`
`Page 13 of 31
`
`

`

`U.S. Patent
`U.S. Patent
`
`Mar. 18, 1997
`Mar. 18, 1997
`
`Sheet 12 of 13
`Sheet 12 of 13
`
`5,613,101
`5,613,101
`
`300
`300
`
`320
`320
`
`324
`324
`
`322
`
`322
`
`324
`
`326GE 326
`
`326t[326
`|
`|
`NZ 324
`
`326
`
`326
`
`320
`320
`
`FIG. 16
`FIG. 16
`
`Page 14 of 31
`
`Page 14 of 31
`
`

`

`U.S. Patent
`
`Mar. 18, 1997
`
`Sheet 13 of 13
`
`5,613,101
`
`BEGIN
`
`348
`Define set of version checking
`signals (current indicator,
`011, ODI) based on exchanged
`signals
`
`350
`When a device is connected to a
`system, exchange signals to
`connect the sender (client) and
`the receiver (provider)
`
`352
`Sender transmits its current
`indicator to a receiver
`
`YES
`
`356
`Receiver signals the
`sender that they are
`compatible
`
`FIG. 17
`
`358
`Is version specified by
`receiver's current
`indicator newer than the
`version specified by
`urrent indicator of the
`
`360
`
`NJ
`
`362
`Receiver signals
`sender to determine
`
`368
`Receiver sends its
`current indicator to
`sender
`
`YES
`
`NJ
`
`374
`Compatibility
`
`Signal
`
`N)
`
`364
`Signal
`Incompatibility
`
`YES
`
`Page 15 of 31
`
`

`

`5,613,101
`
`1
`METHOD AND APPARATUS FOR
`DETERMINING AT EXECUTION
`COMPATIBILITY AMONG CLIENT AND
`PROVIDER COMPONENTS WHERE
`PROVIDER VERSION LINKED WITH
`CLIENT MAY DIFFER FROM PROVIDER
`VERSION AVAILABLE AT EXECUTION
`
`This is a continuation of application Ser. No. 08/058,345
`filed May 5, 1993 now abandoned.
`
`LIMITED COPYRIGHT WAIVER
`
`A portion of the disclosure of this patent document
`contains material to which the claim of copyright protection
`is made. The copyright owner has no objection to the
`facsimile reproduction by any person of the patent document
`or the patent disclosure, as it appears in the U.S. Patent and
`Trademark Oflice file or records, but reserves all other rights
`whatsoever.
`
`FIELD OF THE INVENTION
`
`This invention relates generally to compatibility between
`various components of a computer system and, more spe(cid:173)
`cifically, to checking whether interoperating components are
`compatible within a specified compatibility range.
`
`BACKGROUND OF THE INVENTION
`
`5
`
`IO
`
`25
`
`2
`gram or is part of the compiler, combines the object code
`files into a single output file, known as an "executable"
`object code file. One or more executables are then loaded
`together into memory by a loader program, and control is
`transferred to a start address to initiate program execution.
`Typically, in a client-provider relationship between two
`software programs, it is important for compatibility to exist
`between the version of a provider such as a shared library
`linked to a client and the version of the provider (shared
`library) used during execution of the client. During linking
`in a client/provider relationship, imports (unresolved exter(cid:173)
`nal symbols in the client) are resolved to exports from the
`provider (symbols in the provider that are visible to the
`client). At link time, the provider supplies definitions of
`15 symbols (the API) but not the actual implementation of
`routines and variables (the code). Thus, the version of the
`provider used at link time is called a "definition version".
`When a client is executed, the imports in the client are
`connected to the associated exports in the provider. The
`20 connection could be in hardware such as a wire between the
`two, or in software such as an operating system, a code
`fragment manager, or other shared library or code manager.
`At runtime, the provider supplies actual implementation of
`routines and variables, i.e. code. Since the API is supplied at
`link time and the code is supplied at runtime, it is important
`that the definitions supplied by a provider at link time are
`compatible with the implementation of the provider used at
`runtime.
`In the VMS operating system by Digital Equipment
`Corp., Inc., typically a version of a provider is designed to
`be compatible with previous versions, i.e. a version of a
`provider is backwards compatible. VMS is a trademark of
`Digital Equipment Corporation. Thus, a client can be
`executed using a version of the provider which is newer than
`the version with which it was built. However, a version of
`the provider which is older than the version used to build the
`client may not support features available in newer versions
`of the provider. Therefore, a client can not be executed using
`40 a version of a provider which is older than the version used
`to build the client, because the older provider may not be
`compatible with the newer version.
`In VMS, as shown in "VAX/VMS Internals and Data
`Structures", version 4.4, Lawrence J. Kenah, Ruth E. Gold-
`45 berg, Simon F. Bate (Digital Press: 1988), section 21.1.1.2,
`a provider typically has a revision number comprising a
`major number component and a minor component, usually
`denoted as "major.minor" or "major/minor". VAX is a
`trademark of Digital Equipment Corporation. When a new
`50 revision of a provider contains substantial changes from a
`prior instance of the provider, then the major number is
`incremented. However, if the changes are only minor
`changes, then usually only the minor number is incremented.
`At link time, the revision number of the provider supplying
`the definitions is stored in the executable object code. At
`execution time, the major number of the stored revision
`number in the client is compared to the major number in the
`revision code of the provider being accessed to implement
`the client. If the major number of the revision of the
`implementation provider is less than the major number of
`the revision number stored in the client's executable object
`code, then the client and provider are considered incompat(cid:173)
`ible, regardless of whether the two are in fact incompatible.
`For example, if the client is linked with a provider having
`a revision number of 7 .1, then it would be considered
`incompatible with a provider having a major number less
`than 7 such as 6.5, 5.0, etc .... , but it would be considered
`
`30
`
`35
`
`In a computer system, compatibility between various
`components, both hardware and software, of the system may
`be important. A new component or an upgrade of an existing
`component may be incompatible with other components in
`a system, rendering the entire system inaccurate or inopera(cid:173)
`tive. Thus, it is important to have a mechanism for verifying
`compatibility between components of a system.
`Compatibility plays an important role in a client-provider
`relationship wherein a provider supplies services to a client
`because it is important that the provider be able to satisfy
`expectations of the client. A client-provider relationship may
`exist between two computer software programs, two com(cid:173)
`puter hardware components or between a software program
`and a hardware component. An example of a client-provider
`relationship is a relationship between a shared library (pro(cid:173)
`vider), that is a collection of routines which can be accessed
`by other computer programs, and a computer program
`(client) which accesses the routines in the library.
`Typically, as computer programs are modified, upgraded
`or otherwise improved, new versions of the computer pro(cid:173)
`grams are released. To differentiate between different ver(cid:173)
`sions of a computer program, a version number is typically
`assigned to each release of the computer program. Usually,
`version numbers are assigned such that a newer version of
`a computer program has a higher version number than an
`earlier version of that computer program. For example, if a
`particular version of a computer program has a version
`number of 2, then a subsequent version of that computer
`program may have a version number greater than 2.
`Computer programs are typically written originally in
`source code in a computer language such as C or Pascal, or
`in an assembly language. To prepare the program for execu(cid:173)
`tion on a computer system, a compiler (or assembler)
`converts one or more source code modules into an object
`code file. A compiler (or assembler) is specific to the 65
`language used and the computer system on which it will be
`executed. A linker routine, which is either a separate pro-
`
`55
`
`60
`
`Page 16 of 31
`
`

`

`5,613,101
`
`3
`compatible with a provider having a major number greater
`than or equal to 7 such as 7.5, 8.0, etc .....
`The backwards compatibility scheme in VMS presents
`several problems. First, it discourages a developer of a
`provider from assigning to a current version of the provider 5
`being developed a major number higher than that assigned
`to the prior version, even though that version may be
`substantially different from prior versions of the provider.
`Second, in this versioning scheme it is usually desirable
`to use the newest version of an operating system to utilize
`features or enhancements unavailable in previous versions.
`However, the newest version of an operating system is
`usually compatible with the newest version of a shared
`library and not compatible with older versions of the shared
`library. Therefore, clients which were built using newer
`versions of the shared library on a developer's system can
`not be executed using the older version of the shared library
`on an end user's system. Thus, developers are encouraged to
`maintain old system installations in order to link with the
`oldest available version of a provider, thereby increasing the
`number of versions of the provider with which it is com(cid:173)
`patible. Moreover, older versions of the shared library might
`be retained just to execute clients which were built with
`older versions of the shared library. These older versions
`occupy memory space which might otherwise be available
`for other purposes.
`For example, consider a situation where two versions of
`a provider are available at link time, an earlier version
`having a version number of 2.0 and a later version having a
`version number of 4.2. The 4.2 version has some features
`which are not present in the 2.0 version and which would be
`advantageous to the client to use. In order to utilize the
`advantageous features, it is preferable to link with the 4.2
`version. However, since it is unknown which version of a
`provider will be available at runtime, it is also preferable to
`link with the version with the most likelihood of being
`compatible with a version available at runtime. In this case,
`since version 2.0 is compatible with versions greater than or
`equal to 2.0 and 4.2 is compatible with versions greater than 40
`or equal to 4.2, version 2.0 is more likely to be compatible
`with an available version of a provider than the 4.2 version.
`Thus, in this case, a client has a choice between either
`utilizing the advantageous features of the 4.2 version or
`increasing likelihood of compatibility with 2.0. By choosing
`to increase the likelihood of compatibility at runtime and
`thus, linking with the earliest version of a provider available,
`a client foregoes the advantageous features of later versions
`of that provider which are also available and which, may, in
`fact, be compatible with those earlier versions.
`In other operating systems such as OS/2, as discussed in
`"Inside OS/2", Gordon Letwin, (Microsoft Press: 1988),
`section 7.11.3, and Windows, version numbers are not used
`for providers such as shared libraries. OS/2 is a registered
`trademark oflntemation Business Machines Corporation. In
`these systems, older versions are designed to be compatible
`with newer versions and newer versions are designed to be
`compatible with older versions. In other words, a version of
`a provider is designed to be backwards and upwards com(cid:173)
`patible with other versions of that provider. This places a
`burden on developers of the shared library to maintain
`compatibility even when the changes are extensive and even
`when the older versions may only be used infrequently.
`
`45
`
`50
`
`SUMMARY OF THE INVENTION
`
`The invention is a method and apparatus for controlling
`and verifying compatibility between modular components of
`
`10
`
`15
`
`20
`
`30
`
`35
`
`4
`a computer system wherein such components share a client(cid:173)
`provider relationship and a version of a provider used to
`build the system may be different than a version of the
`provider used to execute or run the system. Briefly, accord-
`ing to the invention, a provider indicator, a current indicator
`of a provider and a compatibility range are defined for each
`of a client and a provider. A provider indicator identifies a
`particular type of provider. A current indicator of a provider
`specifies that version of the provider. When a client is linked
`with a version of a provider the current indicator of that
`provider is stored in the executable client produced, thereby
`identifying the version of the provider, herein called a
`"definition provider", used to build the client.
`The compatibility range for the client identifies the range
`of versions of the provider which can be used to execute the
`client, i.e. which have an implementation which is compat-
`ible with the definitions supplied by the definition provider.
`Preferably, the compatibility range for the client specifies the
`oldest version of the provider which can be used to execute
`the client. The compatibility range for the provider identifies
`the range of versions of the provider which could be used to
`build a client capable of operating with the current version
`of the provider. Preferably, the compatibility range for the
`provider specifies the oldest version of the provider which
`could have been used to build a compatible client. Prefer-
`25 ably, the versions within each of the two compatibility
`ranges are older than or equal in age to the current version.
`The invention also includes a connector for connecting at
`runtime the client and the provider which will be used to
`execute the client, herein called an "implementation pro(cid:173)
`vider'' to determine compatibility between the client and the
`implementation provider. Compatibility checks are per(cid:173)
`formed between a client and available versions of the
`provider(s), implementation providers, with which it has
`been linked. For each available version of each type of
`provider compatibility with a client exists in three situations.
`First, if the definition provider specified in the client and the
`implementation provider are the same version of that pro(cid:173)
`vider, then the client and provider are compatible. Second,
`if the definition provider specified in the client is newer than
`the implementation provider, then if the version of the
`implementation provider is no older than the oldest imple(cid:173)
`mentation provider specified in the client, the two are
`compatible, otherwise they are incompatible. Third, if the
`definition provider specified in the client is older than the
`implementation provider, then if the definition provider
`specified in the client is no older than the oldest definition
`provider specified in the implementation provider, then the
`two are compatible.
`The invention can be used in systems having multiple
`clients and providers. In that case, for each client a list of
`providers is maintained. For each provider in the list, a
`current version and a compatibility range are defined. At
`runtime, the list can be searched to find a compatible
`55 provider, if any exists. Preferably, if more than one com(cid:173)
`patible provider is found, the "best" is chosen. For example,
`the best provider may be the most current version of the
`provider which is compatible or it may be the version of the
`provider which is closest to the version of the definition
`60 provider.
`By defining compatibility ranges for a client and for a
`provider, the invention provides several advantages. First,
`the invention permits a client to run with versions of a
`provider which are older than the definition version of the
`65 provider used to build the client. Thus, a client does not have
`to build only with the oldest version of the provider that it
`will ever be used with. This provides a developer of a client
`
`Page 17 of 31
`
`

`

`5,613,101
`
`6
`FIG. 17 is a flowchart generally depicting steps of the
`invention in a system of FIG. 16.
`
`DETAILED DESCRIPTION OF THE DRAWINGS
`
`5
`with flexibility in determining the version of the provider
`with which to build the client. Additionally since a client
`may be linked with a version which is newer than the oldest
`version of the provider, the client may be able to utilize
`features or enhancements, in the newer provider which may 5
`not exist in the oldest provider. Features or enhancements
`may be explicitly different from previous versions, e.g. the
`feature was not available in any form in the previous
`versions or a new mechanism is used to utilize the feature,
`or they may be implicitly different, e.g. the performance of
`an existing feature is enhanced in the newer version. Pref(cid:173)
`erably, a client verifies the availability of explicit features
`and enhancements.
`Second, the invention permits a client to be executed with
`a provider which is newer than the client, i.e. a provider
`which is newer than the version of the provider which was
`used to build the client. Thus, developers of a provider can
`freely change version numbers of the provider and not affect
`the compatibility of the client and the provider unless the
`changes to the provider render it incompatible with older 20
`versions of the client. In that case, the compatibility range of
`the provider changes to reflect the changes in compatibility.
`BRIEF DESCRIPTION OF THE DRAWINGS
`
`15
`
`10
`
`~
`
`Numeral 30 in FIG. 1 generally indicates a system incor(cid:173)
`porating the invention. System 30 may be hardware, soft(cid:173)
`ware, or a combination thereof, and includes a client 32 and
`a provider 34 connected by a connector 36 such that infor(cid:173)
`mation from the client and provider can be compared.
`FIG. 2 illustrates a computer system 40, comprised of
`hardware and software, which may be used to implement the
`invention. Computer system 40 comprises a bus 42 inter(cid:173)
`connecting a processor 44 such as a central processing unit
`("CPU"), a memory 46 and a disk drive 48. Many types of
`computer systems may be used, but in the present embodi(cid:173)
`ment, computer software is usually stored on the disk drive
`48 and brought into memory 46 over bus 42 by the processor
`44.
`As shown in FIG. 3, prior to linking a client with a
`provider, this computer software typically includes an oper(cid:173)
`ating system 50 such as, for example, Macintosh System 7
`or AIX, a compiler 52 such as an IBM xlc or x!C compiler
`and a linker 54 such as IBM Id linker. Macintosh System 7
`25 and AIX are both commercially available. Background
`information on the Macintosh System 7 operating system
`can be found in "Inside Macintosh", Vol. VI, Addison(cid:173)
`Wesley Publishing Co., Inc., 1991, and background infor(cid:173)
`mation on the AIX operating system can be found in "Calls
`30 and Subroutines, AIX Version 3 for RISC System/6000",
`Vols. I-VI, IBM, 1990, 1991. The IBM xlc compiler is
`described in "XL C User's Guide, AIX Version 3 for RISC
`System/6000", chapters 2--4, IBM Corporation, 1990, the
`disclosure of which is hereby incorporated by reference.
`35 AIX and RISC System/6000 are trademarks of International
`Business Machines Corporation. The Id linker is discussed
`in an article entitled "ld Command" published in IBM,
`"R6000 InfoExplorer", (CD-ROM 1991), the disclosure of
`which is herein incorporated by reference.
`Compiler 52 and linker 54 may also be part of the same
`computer program, rather than separate programs. More(cid:173)
`over, the compiler 52 and the linker 54 may be on a different
`computer system 40 than the client 32 and providers 34.
`The computer software also includes one or more client
`programs 60 and one or more provider programs 62. For
`example, a client program 60 may be an application program
`that accesses routines in a shared library (a provider 62).
`This software may also be located in memory 46. A client
`50 program 60 is typically in object code format produced by
`passing source code for the client through a compiler which
`generates object code as its output. A provider program 62
`may be in executable object code format or it may be a
`definition file which is specially built to provide definitions
`to use when linking. For example, object code modules of a
`shared library may be linked together to form a provider
`program 62 which is executable object code that is then
`linked with client program object code 60 to form execut(cid:173)
`able object code 64 of the client program.
`In addition, the computer software may include source
`code (not shown) for the client programs 60 and the provider
`programs 62. The source code for the client is converted into
`object code 60 by a compiler. The source code for a provider,
`if it is not a definition file, is converted into executable object
`code by a combination of a compiler 52 and linker 54.
`There are numerous formats for executable object code
`files. One format for executable object code files is known
`
`The above and further advantages of the invention may be
`better understood by referring to the following description in
`conjunction with the accompanying drawings, in which:
`FIG. 1 is a symbolic, simplified block diagram of a system
`which may incorporate the invention;
`FIG. 2 is a symbolic, simplified block diagram of a
`computer system which may incorporate the invention;
`FIG. 3 illustrates contents of a disk drive of the computer
`system of FIG. 2;
`FIGS. 4A and 4B illustrate contents at the start and end,
`respectively, of link time of a memory of the computer
`system of FIG. 2;
`FIG. 5 depicts contents at execution time of a memory of
`the computer system of FIG. 2;
`FIG. 6 is a flow chart depicting in general the steps of the 40
`invention;
`FIG. 7 is a more detailed flow chart depicting the steps of
`block 100 of FIG. 6;
`FIG. 8 is a more detailed flow chart depicting the steps of
`~dm~~~
`FIG. 9 is a more detailed flow chart depicting the steps of
`block 104 of FIG. 6;
`FIG. 10 is a detailed flow chart depicting steps of block
`162 of FIG. 9;
`FIG. 11 is a more detailed flow chart of steps performed
`at block 162 of FIG. 9;
`FIG. 12 shows a provider list which is used when a client
`is linked with multiple types of providers;
`FIG. 13 is a flowchart of steps of block 102 of FIG. 6
`when a client is linked with multiple types of providers;
`FIG. 14 shows an implem

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket