`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
`US. 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 J
`
`324
`
` 326g; {1:326
`
`322
`
`324
`
`326
`
`326
`326
`
`320
`320
`
`FIG. 16
`FIG. 16
`
`Page 14 of31
`
`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 implementation provider list