`Meyer
`
`111111
`
`1111111111111111111111111111111111111111111111111111111111111
`US006810389Bl
`
`(10) Patent No.:
`(45) Date of Patent:
`
`US 6,810,389 Bl
`Oct. 26, 2004
`
`(54) SYSTEM AND METHOD FOR FLEXIBLE
`PACKAGING OF SOFTWARE APPLICATION
`LICENSES
`
`(75)
`
`Inventor: Marc A. Meyer, Woodside, CA (US)
`
`(73) Assignee: Synopsys, Inc., Mountain View, CA
`(US)
`
`( *) Notice:
`
`Subject to any disclaimer, the term of this
`patent is extended or adjusted under 35
`U.S.C. 154(b) by 738 days.
`
`(21) Appl. No.: 09/710,685
`Nov. 8, 2000
`
`(22) Filed:
`
`Int. Cl? ................................................ G06F 17/60
`(51)
`(52) U.S. Cl. ............................. 705/59; 705/51; 705/57;
`713/200
`(58) Field of Search ............................... 705!59, 50-58;
`713/200
`
`(56)
`
`References Cited
`U.S. PATENT DOCUMENTS
`5,204,897 A * 4/1993 Wyman ......................... 380/4
`5,671,412 A
`9/1997 Christiano .................. 395/615
`
`Primary Examiner-James P. Trammell
`Assistant Examiner-Jalatee Worjloh
`(74) Attorney, Agent, or Firm-Bever, Hoffman & Harms,
`LLP; Jeanette S. Harms
`
`(57)
`
`ABSTRACT
`
`A method for providing licenses to client computer systems
`to allow the client computer systems to use licensed soft(cid:173)
`ware products includes receiving a request for a feature
`license for a feature included in a package, filtering the
`request based on whether the license requires the checkout
`of a parent license, granting a package license to the client
`computer system when the client computer system is
`allowed to receive the package license according to a license
`policy and denying the package license to the client com(cid:173)
`puter system when the client computer system is not allowed
`to receive the package license according to the license
`policy. The request may include checkout data that includes
`at least one desired feature attribute. A software license
`server for providing licenses to client computer systems to
`allow the client computer systems to use licensed software
`products, the software license server includes at least one
`memory having program instructions and at least one pro(cid:173)
`cessor configured to use the program instructions to receive
`a request for a feature license for a feature included in a
`package, filter the request based on whether the license
`requires the checkout of a parent license, grant a package
`license to the client computer system when the client com(cid:173)
`puter system is allowed to receive the package license
`according to a license policy and deny the package license
`to the client computer system when the client computer
`system is not allowed to receive the package license accord(cid:173)
`ing to the license policy.
`
`EP
`
`0332304
`
`............. G06F/1!00
`
`FOREIGN PATENT DOCUMENTS
`* 2/1989
`01HER PUBLICATIONS
`Chavez et al., "Software Component Licensing: A Primer",
`Sep./Oct. 1998, IEEE Software, pp. 47-53.*
`Hauser, "Does Licensing Require New Access Control
`Techniques?", 1993 ACM.*
`"FLEXlm End Users Guide", Aug. 2000, Globetrotter Soft(cid:173)
`ware, Inc., Version 7.1.
`
`* cited by examiner
`
`39 Claims, 32 Drawing Sheets
`
`760
`
`/700
`
`755
`
`705
`
`725
`
`735
`
`750
`
`710
`
`720
`
`715
`
`745
`
`ServiceNow's Exhibit No. 1003
`
`001
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 1 of 32
`
`US 6,810,389 Bl
`
`10
`············································-~---··············· ............................................................................................................................................... ,
`!
`Software Licensing System (SLS)
`!
`
`Application
`
`Client
`Licensing
`Library
`
`,...-25
`Licensing Server
`
`,.65
`License File
`License ; !'---60
`License
`
`('55
`Grant or
`Deny
`Request
`
`[
`
`I
`
`/35
`
`Client
`Licensing
`I
`Library
`L ............................................................................................................................................................................... __________________________________ ;
`
`45 '\
`Request License I
`Checkout Request
`(key, value)
`
`Application
`
`20
`'---
`
`Fig. 1 - Prior Art
`
`ServiceNow's Exhibit No. 1003
`
`002
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 2 of 32
`
`US 6,810,389 Bl
`
`License File
`
`10 (
`
`Attribute Key
`
`Attribute Value
`
`...........__.
`105
`
`Attribute Key
`
`Attribute Value
`
`Attribute Key
`
`Attribute Value
`
`r---·
`110
`
`r--
`115
`
`I
`
`I
`
`I
`
`Fig. 2 - Prior Art
`
`ServiceNow's Exhibit No. 1003
`
`003
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 3 of 32
`
`US 6,810,389 Bl
`
`License File
`
`205 ----~---
`
`License Count
`
`5
`
`215--.... 1--
`
`Feature Name
`
`Spell Checker
`
`20 0
`\_
`
`9/1/1999
`
`1.2
`
`225---~
`
`End Date
`
`235--.... 1--
`
`License Version
`.
`.
`.
`
`-1'------210
`
`-r--220
`-1'--- 230
`
`-I'- 240
`
`Fig. 3 - Prior Art
`
`ServiceNow's Exhibit No. 1003
`
`004
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 4 of 32
`
`US 6,810,389 Bl
`
`License File
`
`345
`
`License Count
`
`5
`
`Feature Name
`
`Spell Checker
`
`End Date
`
`License Version
`
`Share Mode
`
`9/1/1999
`
`1.2
`
`Feature Name,
`License Version
`
`355
`
`350
`355
`
`315
`
`300
`
`Request1
`; Feature Name = Spell Checker
`! Version= 1.1
`
`310
`
`335
`
`360
`
`325
`
`320
`
`365
`
`330
`
`340
`
`Fig. 4 - Prior Art
`
`ServiceNow's Exhibit No. 1003
`
`005
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 5 of 32
`
`US 6,810,389 Bl
`
`License File
`
`400
`\_
`
`License Count
`
`5
`
`Feature Name
`
`Spell Checker
`
`End Date
`
`9/1/1999
`
`License Version
`
`420 ""--
`
`Checkout data
`
`1.2
`
`ABC
`
`Feature Name,
`License Version,-
`Checkout_ data
`
`425
`
`Share Mode
`
`.
`.
`.
`
`405
`
`r-.410
`
`415
`
`!••••••••••••••••••••••••••••••••••••••••••••••••• •····•··•·•·•·•••••••••••••••••••••••••••••••••••••••••• ••••••••••••••••••••••••oon••••••:
`
`!
`! Request 1
`Request 2
`Feature Name = Spell Checker !
`! Feature Name = Spell Checker
`!
`! Version= 1.1
`Version= 1.1
`~~heckout~data=~B~ _ ~h:~kou~::ta=~:;2 _]
`
`Request3
`Feature Name = Spell Checker
`Version = 1.2
`Checkout_data = DEF
`
`430
`
`435
`
`Fig. 5 - Prior Art
`
`ServiceNow's Exhibit No. 1003
`
`006
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 6 of 32
`
`US 6,810,389 Bl
`
`License File
`
`505 ....__r--
`
`License Data
`
`License Count
`
`~
`
`510
`
`XYZ
`
`5
`
`500
`\___
`
`Feature Name
`
`Spell Checker
`
`End Date
`
`9/1/1999
`
`1.2
`
`ABC
`
`Feature Name,
`License Version,
`Checkout_ data
`
`License Version
`
`Checkout data
`
`Share Mode
`.
`.
`.
`
`···:~=~~iE1:·~=11~h~ck~;
`
`Version = 1.1
`Checkout data = ABC
`
`.
`
`:
`:
`I
`:
`: ................................................................................................................................................. ..
`
`:~=!~~~~f =~::~~~~=ker i r:::F-ea-tu_r_e ,-N-am-e"""=~:=-:-e~,:-IUC=eh_s;_,.c~-e--,r
`
`Version = 1.1
`Checkout data =ABC
`
`!,,, Version = 1.2
`Checkout_data = DEF
`. '-----=-----~
`
`Fig. 6 - Prior Art
`
`ServiceNow's Exhibit No. 1003
`
`007
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 7 of 32
`
`US 6,810,389 Bl
`
`( 600
`
`,630
`DISPLAY
`ADAPTER
`
`....
`
`•
`
`;,.
`
`. .....
`
`/625
`
`D_
`
`~
`
`DIS PLAY SCREEN
`
`ef..675
`
`USER POINTING
`DEVICE
`
`~635
`
`·I SERIAL
`
`PORT
`
`I·
`
`r-605
`
`...
`
`~
`
`~
`
`1'610
`CENTRAL
`PROCESSOR
`
`/615
`SYSTEM
`MEMORY
`
`/620
`1/0
`CONTROLLER
`
`~~ ~
`
`--..
`
`KEYBORD
`
`/685
`.. ~]]Til~
`
`ICJ Cl Cl Cl a!
`NETWORK INTERFACE
`'
`ADAPTER
`
`/640
`....
`SERIAL
`
`~ . PORT ~
`
`680
`• [olo(o]
`MODEM
`
`......
`
`.
`
`,650
`~0
`~0
`=
`FIXED DISK
`
`670
`
`c5
`
`1'665
`1~1· ...
`CD-ROM PLAYER
`
`/655
`.. ~,
`
`~
`
`8660
`
`FLOPPY DISK
`UNIT
`
`R EMOVABLE
`STORAGE
`
`Fig. 7
`
`ServiceNow's Exhibit No. 1003
`
`008
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 8 of 32
`
`US 6,810,389 Bl
`
`License
`Server
`
`/700
`
`755
`
`Client Computer
`
`705
`
`725
`
`Client Computer
`
`735
`
`750
`
`Client Computer
`
`710
`
`720
`
`Client Computer
`
`745
`
`715
`
`Client Computer
`
`Fig. 8
`
`ServiceNow's Exhibit No. 1003
`
`009
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 9 of 32
`
`US 6,810,389 Bl
`
`Specifies grouping
`
`I mode of features
`
`M-Package
`Definition String
`
`/805
`
`License File
`
`80
`0
`\_
`
`License Data
`
`License Count
`
`5
`
`Feature Name
`
`Spell Checker
`
`End Date
`
`License Version
`
`Share Mode
`
`9/1/1999
`
`1.2
`
`Feature Name,
`License Version,
`Checkout_ data
`
`.
`.
`.
`
`Fig. 9
`
`ServiceNow's Exhibit No. 1003
`
`010
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 10 of 32
`
`US 6,810,389 Bl
`
`Licensed
`Application
`
`900
`
`Status
`
`License Request---.....__.
`Checkout_ data
`
`905
`
`License Request
`Checkout_ data
`
`Receiver
`
`License Request
`Checkout_ data
`
`Non-M-
`Package
`Filter
`
`920
`
`M-Package
`Filter
`
`License Request
`Modified
`Checkout_ data
`
`925
`
`935
`
`License
`Verifier
`
`License
`Library
`
`Package
`Definition
`String
`
`930
`
`Fig. 10
`
`ServiceNow's Exhibit No. 1003
`
`011
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 11 of 32
`
`US 6,810,389 Bl
`
`1000
`
`Parent License
`
`• Parent may have
`multiple children
`- One parent per child
`- Requested internally to
`licensing server
`- Can obtain only via child
`license
`• Own set of attributes
`- Inherits some attributes
`from child via
`checkout_ data
`- Share mode set to
`checkout _data
`
`Child License
`
`Child License
`
`1005
`
`1010
`
`Fig. 11
`
`ServiceNow's Exhibit No. 1003
`
`012
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 12 of 32
`
`US 6,810,389 Bl
`
`Parent License:
`One_ Of (A, B, C)
`{A 8 C}
`
`-- 1100
`
`Child License: A -- 1105
`
`Fig. 12
`
`ServiceNow's Exhibit No. 1003
`
`013
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 13 of 32
`
`US 6,810,389 Bl
`
`1200
`
`Parent License:
`OneEachOf (A, 8, C)
`(ABC)
`
`Child License: A
`
`Child License: B
`
`Child License: C
`
`1205
`
`1210
`
`1215
`
`Fig. 13
`
`ServiceNow's Exhibit No. 1003
`
`014
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 14 of 32
`
`US 6,810,389 Bl
`
`1300
`
`Parent License:
`AnyOf (A, B, C)
`[ABC]
`
`Child License: A
`
`Child License: B
`
`Child License: B
`
`Child License: C
`
`1320
`
`1325
`
`1330
`
`1335
`
`Fig. 14
`
`ServiceNow's Exhibit No. 1003
`
`015
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 15 of 32
`
`US 6,810,389 Bl
`
`1400
`
`Parent License:
`UpToNOf (A, B, C)
`(N = 6)
`N <ABC>
`
`Child
`License: A
`
`Child
`License: A
`
`Child
`License: B
`
`Child
`License: B
`
`Child
`License: B
`
`Child
`License: C
`
`1425
`
`1430
`
`1435
`
`1440
`
`1445
`
`1450
`
`Fig. 15
`
`ServiceNow's Exhibit No. 1003
`
`016
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 16 of 32
`
`US 6,810,389 Bl
`
`Receive License Request
`
`1500
`
`Apply Checkout Filter
`
`1505
`
`1515
`
`No
`
`Indicate Error
`
`Yes
`
`Use Licensed Application
`
`1520
`
`No
`
`Yes
`
`Release License(s)
`
`1530
`
`Fig. 16
`
`ServiceNow's Exhibit No. 1003
`
`017
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 17 of 32
`
`US 6,810,389 Bl
`
`Apply Checkout Filter
`
`Determine Whether License
`Request is An M-Package Request
`
`1600
`
`No
`
`Modify Checkout_Data
`
`1615
`
`Find And Verify License
`
`1610
`
`Fig. 17
`
`ServiceNow's Exhibit No. 1003
`
`018
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 18 of 32
`
`US 6,810,389 Bl
`
`Determine Whether License Request
`is An M-Packege License Request
`
`No
`
`1710
`
`No
`
`Indicate License Request is Not An
`M-Package License Request
`
`Yes
`
`1715
`
`Indicate License Request is An
`M-Package License Request
`
`End
`
`Fig. 18
`
`ServiceNow's Exhibit No. 1003
`
`019
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 19 of 32
`
`US 6,810,389 Bl
`
`Modify Checkout Data
`
`r
`
`Generate Share_ Values
`
`r--- 1800
`
`~r
`
`Generate Package I D
`
`r-- 1805
`
`•r
`Set Checkout_Data To Share_ Values r--
`Concatenated With Package ID
`
`1810
`
`.,,
`
`End
`
`Fig. 19
`
`ServiceNow's Exhibit No. 1003
`
`020
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 20 of 32
`
`US 6,810,389 Bl
`
`Generate Share_ Values
`
`Initialize Share_ Values
`
`------1900
`
`1910
`
`Return Share_ Values
`
`Yes
`
`Concatenate Share_ Values With
`Attribute Value
`
`1915
`
`End
`
`Fig. 20
`
`ServiceNow's Exhibit No. 1003
`
`021
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 21 of 32
`
`US 6,810,389 Bl
`
`Generate Package ID
`
`Determine Mode Of Feature
`
`2000
`
`2020
`
`Set Package_ID To Hashed Value
`Of Share_ Values Concatenated
`With Feature
`
`Determine Node Number Of
`Feature
`
`2025
`
`2030
`
`Yes
`
`Set Package_ID To Node Number
`Of Feature
`
`2035
`
`Yes
`
`Determine Slot (Feature,
`Share_ Values)
`
`2040
`
`Set Package_ID To Node Number
`Of Feature Concatenated With Slot
`(Feature, Share_ Values)
`
`End
`
`Fig. 21
`
`ServiceNow's Exhibit No. 1003
`
`022
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 22 of 32
`
`US 6,810,389 Bl
`
`Determine Mode Of Feature
`
`F
`Find Feature In Package Definition String
`Portion Of License_Data
`
`.-......___.
`
`2100
`
`v
`Return Mode Based On Package
`Definition String Syntax
`
`1--
`
`2105
`
`,,.
`( __ E_nd_)
`
`Fig. 22
`
`ServiceNow's Exhibit No. 1003
`
`023
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 23 of 32
`
`US 6,810,389 Bl
`
`Determine Node Number Of Feature
`
`Receive Package Definition String
`
`2200
`
`Receive Feature To Locate Within
`Package Definition String
`
`Initialize Count
`
`Find Next Feature In Package Definition
`String
`
`2205
`
`2210
`
`2215
`
`Yes
`
`Yes
`
`Return Count
`
`2235
`
`Increment Count
`
`Fig. 23
`
`ServiceNow's Exhibit No. 1003
`
`024
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 24 of 32
`
`US 6,810,389 Bl
`
`Determine Slot {Feature,
`Share_ Values)
`
`Determine Whether Slot (Feature,
`Share_ Values) Currently Exists
`
`2300
`
`Determine Whether Slot ("Any",
`Share_ Values) Currently Exists
`
`2315
`
`Yes
`
`Determine Minimum Slot Index
`Without A Slot
`
`2325
`
`Return Slot Index
`
`2310
`
`End
`
`Fig. 24
`
`ServiceNow's Exhibit No. 1003
`
`025
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 25 of 32
`
`US 6,810,389 Bl
`
`Determine Whether Slot (Feature,
`Share_ Values) Currently Exists
`
`Initialize Index
`
`2400
`
`Yes
`
`Indicate No Existing Slot
`
`2410
`
`Yes
`
`Return Index
`
`2425
`
`Increment Index
`
`2430
`
`Fig. 25
`
`ServiceNow's Exhibit No. 1003
`
`026
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 26 of 32
`
`US 6,810,389 Bl
`
`Determine Whether Slot ("Any",
`Share_ Values) Currently Exists
`
`Initialize Index
`
`2500
`
`2510
`
`Indicate No Existing Slot
`
`Yes
`
`Return Index
`
`2525
`
`Increment Index
`
`2530
`
`Fig. 26
`
`ServiceNow's Exhibit No. 1003
`
`027
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 27 of 32
`
`US 6,810,389 Bl
`
`Determine Minimum Slot Index
`Without A Slot
`
`Initialize Index
`
`2600
`
`Yes
`
`Return Index
`
`2610
`
`No
`
`End
`
`Increment Index
`
`2620
`
`Fig. 27
`
`ServiceNow's Exhibit No. 1003
`
`028
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 28 of 32
`
`US 6,810,389 Bl
`
`Find And Verify License
`
`Determine Whether License Has
`A Share Mode Duplicate
`
`2700
`
`Yes
`
`Receive Next Candidate License
`For Requested Feature
`
`2720
`
`Find And Verify License For Parent
`
`No
`
`Yes
`
`Fig. 28
`
`ServiceNow's Exhibit No. 1003
`
`029
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 29 of 32
`
`US 6,810,389 Bl
`
`Determine Whether License Has
`A Share Mode Duplicate
`
`Find Next License With Requested Feature In
`Database Of Checked Out License
`
`2800
`
`2810
`
`No
`
`Indicate License Does Not Have A
`Share Mode Duplicate
`
`No
`
`2825
`
`Yes
`
`Get Next Share Mode Attribute
`From Requested License
`
`Indicate License Has A Share
`Mode Duplicate
`
`2830
`
`End
`
`Fig. 29
`
`ServiceNow's Exhibit No. 1003
`
`030
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 30 of 32
`
`US 6,810,389 Bl
`
`2900
`
`Checkout
`
`(
`~ Request
`
`f1
`
`f2
`
`f3"
`
`(
`I
`
`\2915
`
`2910
`
`Checkout
`data
`
`Share
`modes
`
`Modified
`checkout data
`
`2905
`)
`
`I( f1
`
`f2
`
`f3
`
`Total
`
`\1
`
`1
`
`1
`
`1
`
`2
`3
`I
`
`2920
`
`Fig. 30
`
`ServiceNow's Exhibit No. 1003
`
`031
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 31 of 32
`
`US 6,810,389 Bl
`
`3o~o I
`Checko~~ I/ checkout Share 1\ Modified ~ lft1
`\ Request 1
`/1
`f2 __./ J
`['- f1
`
`3000
`
`3005
`
`/3015
`
`3010
`!
`
`data
`
`modes
`
`f3/
`
`f2~
`
`f4~ 1\
`f5~ "\ \
`f4~ \1\\
`~3030 3035
`
`3040
`3045
`
`3 025
`
`f2
`
`f3
`
`f4
`
`f5
`
`Pkg
`
`1
`
`1
`
`1
`
`1
`2
`
`2
`
`3
`
`4
`4
`4
`
`1
`
`2
`
`1
`
`1
`
`checkout data
`:f1 ~ /
`NodeNu~be0f2): Slot
`J
`(f2, " ") = 2 : 0
`NodeNumber
`(f3, " ") = 2 : 0
`NodeNumber (f2) : Slot
`(f2, " '') = 2 : 1
`NodeNumber (f4) = :3
`NodeNumber (f5) = :3
`NodeNumber (f4) = :3
`
`1
`
`Fig. 31
`
`ServiceNow's Exhibit No. 1003
`
`032
`
`
`
`U.S. Patent
`
`Oct. 26, 2004
`
`Sheet 32 of 32
`
`US 6,810,389 Bl
`
`3100
`
`Checkout
`data
`AA
`'----3115
`BB
`~ 3120
`
`Share
`modes
`checkout
`data
`checkout
`data
`
`checkout
`data
`
`f2
`
`f3
`
`3130
`
`3135
`
`)
`
`11
`
`AA : NodeNumber {f2) :
`Slot (f2, II
`=AA:2:0
`BB : NodeNumber (f3) :
`Slot (f3, II ")
`= BB: 2:0
`
`3145
`
`f1
`
`f2
`
`f3
`
`Pkg
`
`1
`
`2
`
`3
`
`3105
`
`3110
`
`3160
`
`Fig. 32
`
`ServiceNow's Exhibit No. 1003
`
`033
`
`
`
`US 6,810,389 Bl
`
`1
`SYSTEM AND METHOD FOR FLEXIBLE
`PACKAGING OF SOFTWARE APPLICATION
`LICENSES
`
`BACKGROUND OF THE INVENTION
`
`1. Field of the Invention
`The present invention relates to computer science. More
`particularly, the present invention relates to a system and 10
`method for flexible packaging of software application
`licenses.
`2. Background
`A Software Licensing System (SLS) is typically used to
`restrict the operation of a software program or system of
`programs, sometimes called an application, to holders of a
`verifiable software and/or hardware license. The restrictive
`information contained within a license may specify what
`entity may execute the application, when the application
`may be executed, how many copies of the application may
`be executed, and how the application may be run. The
`FLEXlm™ product by Globetrotter Software, Inc. of
`Campbell, Calif. is an example of a commercially available
`SLS. Such systems are also discussed in U.S. Pat. No.
`5,671,412 entitled "License Management System for Soft- 25
`ware Applications" to Matt Christiano.
`An SLS typically counts the number of authorized
`licenses in use, and imposes a restriction on the number, or
`count, of licenses that may be in use contemporaneously. An
`SLS may also cause the application to wait for a license, or 30
`notify the application of the availability of the license when
`it becomes available in the future.
`An SLS may reside completely in the licensed
`application, or operate in the form of a client-server archi- 35
`tecture. Client-server architecture is typically used to keep a
`count of license uses across multiple invocations of a
`program, and possibly across multiple computers. An SLS
`operates on licenses that can only be generated by an
`authorized entity, which is typically the creator of the 40
`application being licensed.
`Turning now to FIG. 1, a block diagram that illustrates a
`typical SLS is presented. A typical SLS 10 includes at least
`one application 15, 20 and a licensing server 25. Each
`application 15, 20 includes a client licensing library 30, 35. 45
`In operation, an application 15, 20 within an SLS 10 requests
`a license 40, 45 from the licensing server 25. This request is
`referred to as a performing a "checkout" and is typically
`performed over a secure channel. The licensing server 25
`and the application 15, 20 cooperate to authenticate the 50
`license and to verify that the license is intended to allow the
`operation of the application in the current configuration,
`environment, and at the current time. The licensing server 25
`and the application 15, 20 may also verify the integrity of the
`licensing system components and verify version and plat- 55
`form compatibility. Based on the result of these checks, the
`licensing server either grants or denies (50, 55) a license
`request. If the license request is denied, the application 15,
`20 may not use the feature associated with the license
`request.
`A typical SLS maintains licenses for multiple features, or
`functional subsets, of an application. These features are also
`referred to as attributes. Attributes are key /value data pairs
`that are included in the licensing request 40, 45 and contain
`information that may originate in the environment of the 65
`applications, or be explicitly set by the application. These
`licensing request attributes are used in conjunction with
`
`2
`similar attributes found in the license 60 or in the license
`server 25 to determine whether a license 60 satisfies a
`licensing request 40, 45. A typical license file 65 is illus(cid:173)
`trated in FIG. 2. A license file 100 typically includes at least
`5 one (attribute key, attribute value) pair 105, 110, 115.
`FIG. 3 is a block diagram that illustrates examples of
`(attribute key, attribute value) pairs found in a typical license
`file. License 200 includes four attributes. The first attribute
`key 205 is the license count and its associated attribute value
`210 is the number five, indicating that five licenses may be
`checked out. The second attribute key 215 is the feature
`name, and the associated attribute value 220 is "Spell
`Checker". A license request can be met by this license only
`when the feature name in the license request exactly matches
`15 the feature name in the license. In the present example, the
`license request must include a feature name of "Spell
`Checker". The third attribute indicates an end date (225) of
`Sep. 1, 1999 (230). A license request can be met by this
`license only when the license request date is less than the
`20 end date, Sep. 1, 1999. The fourth attribute indicates a
`version number (235) of 1.2 (240). A license request can be
`met by this license only if the requested version number is
`less than or equal to 1.2.
`An SLS may use a "share modes" attribute to determine
`when multiple license requests may be satisfied using the
`same underlying license. A share modes attributre specifies
`a list of attributes that, if matched in any separate license
`requests, will be satisfied using the same license. The rules
`for matching are typically based on identity (equality) of
`both the keys and values of all the attributes in the share
`modes attribute set. In other words, two requests are satisfied
`from the same license when their share modes attribute sets
`are identical. This matching is typically attempted only
`among licensing requests for the same feature. An illustra(cid:173)
`tion of share modes is presented in FIG. 4.
`Turning now to FIG. 4, a block diagram that illustrates
`share modes is presented. Request 1 (300), Request 2 (305)
`and Request 3 (310) represent three separate license
`requests. License requests 1 (300) and 2 (305) have identical
`attribute keys (315, 320) and attribute values (325, 330).
`License request 3 (310) includes the same feature attribute
`value 335, but a different version attribute value 340.
`License 345 includes a share mode attribute value 350
`consisting of two attribute keys: feature name 355 and
`license version 355. Since both Request 1 (300) and Request
`2 (305) include all attribute keys listed in the share mode
`attribute value 355, and since the attribute values for both
`Request 1 (325) and Request 2 (330) are identical, Request
`1 (300) and Request 2 (305) are satisfied by the same license
`(345). Since Request 3 (310) includes an attribute value 340
`that is different from attribute value 360 and 365, Request 3
`(310) requires an additional license 345. Thus, two separate
`licenses are required for the three license requests.
`One type of attribute is "Checkout data". The checkout
`data attribute value is typically set in a licensed application
`and accompanies a licensing request. The checkout data may
`be part of the share modes. If the checkout data is part of the
`share modes, multiple checkouts for the same feature, with
`60 the same checkout data attribute value, are satisfied with the
`same license. The checkout data attribute is described in
`more detail with reference to FIG. 5.
`Turning now to FIG. 5, a block diagram that illustrates the
`checkout data attribute is presented. FIG. 5 is identical to
`FIG. 4, except that license 400 and license requests 1 ( 405)
`2 (410) and 3 (415) include a checkout data attribute 420,
`and the checkout data attribute 420 is included in the share
`
`ServiceNow's Exhibit No. 1003
`
`034
`
`
`
`US 6,810,389 Bl
`
`4
`computer system when the client computer system is
`allowed to receive the package license according to a license
`policy and denying the package license to the client com-
`puter system when the client computer system is not allowed
`to receive the package license according to the license
`policy. The request may include checkout data that includes
`at least one desired feature attribute. A software license
`server for providing licenses to client computer systems to
`allow the client computer systems to use licensed software
`products, the software license server includes at least one
`memory having program instructions and at least one pro-
`cessor configured to use the program instructions to receive
`a request for a feature license for a feature included in a
`package, filter the request based on whether the license
`15 requires the checkout of a parent license, grant a package
`license to the client computer system when the client com(cid:173)
`puter system is allowed to receive the package license
`according to a license policy and deny the package license
`to the client computer system when the client computer
`20 system is not allowed to receive the package license accord(cid:173)
`ing to the license policy.
`
`3
`modes attribute value 425. In the example, since the Request
`1 ( 405) and Request 2 ( 410) checkout data attribute values
`( 430, 435) are identical, both license requests are satisfied by
`the same license. License Request 3 ( 415) includes a dif(cid:173)
`ferent checkout data value. Consequently, license request 3 5
`( 415) is satisfied by a separate license 400.
`A license may also include a "license data" attribute that
`is typically initialized when the license is generated. The
`license data attribute value is typically used to influence
`operation of the SLS. FIG. 6 is a block diagram that 10
`illustrates the license data attribute. FIG. 6 is identical to
`FIG. 5, except that license 500 includes a license data
`attribute key 505 and value 510.
`A typical SLS includes support for the bundling of
`products into "packages". For the purposes of this
`disclosure, the term "package" refers to a generic grouping
`of different component products included within that pack(cid:173)
`age. The component products are typically programs,
`although in an alternate embodiment, packages can be
`components of higher-level packages. The term "software
`product" is considered to be a program, package, or other
`similar type of licensed software product. The term "pro(cid:173)
`gram" refers to any software process, such as an application
`program (word processor, spreadsheet, drawing program,
`etc.), utility program, resident or background program, etc. 25
`For example, a package can include different component
`programs that are conveniently specified within the package
`heading. A package allows a license sharing policy to be
`specified regarding how a combination of products con(cid:173)
`sumes a single package license. This allows a single license,
`for example, to enable the use of one OR another of a set of
`products at different times. However, this packaging concept
`is rarely used because it does not allow for groups of
`components in the same package to have different sharing
`policies. For example, there is no way of specifying that the 35
`same package license apply to any number of components in
`a first group of package components but only one compo(cid:173)
`nent in a second group of package components.
`Typical software licensing systems support only homog- 40
`enous groups of features that share the same behavior. They
`are too inflexible to support different sharing policies for
`groups of components within the same package. Due to the
`inflexibility of typical licensing systems, software vendors
`typically price a licensed system using a pricing model that 45
`is based upon an assumed usage. Contract provisions
`between a software vendor and a software user are relied
`upon to ensure licensed products are used according to a
`pricing model. Due to the difficulty of monitoring licensed
`component usage to ensure compliance with contract
`provisions, it would be desirable to enable enforcement of a
`relatively flexible licensing policy within a software licens(cid:173)
`ing system itself. Accordingly, a need exists in the prior art
`for a system and method for grouping licenses that supports
`different sharing policies for groups of components within 55
`the same package. Additionally, a further need exists for
`such a system and method that enables enforcement of such
`sharing policies without requiring independent monitoring
`of licensed component usage.
`
`50
`
`BRIEF DESCRIPTION OF THE DRAWINGS
`FIG. 1 is a block diagram that illustrates a typical Soft(cid:173)
`ware Licensing System (SLS).
`FIG. 2 is a block diagram that illustrates a typical license
`file.
`FIG. 3 is a block diagram that illustrates examples of
`(attribute key, attribute value) pairs found in a typical license
`30 file.
`FIG. 4 is a block diagram of a typical license file that
`features share modes.
`FIG. 5 is a block diagram of a typical license file that
`includes a checkout data attribute.
`FIG. 6 is a block diagram of a typical license file that
`includes a license data attribute.
`FIG. 7 is a block diagram of a client computer system
`suitable for implementing aspects of the present invention.
`FIG. 8 is a block diagram that illustrates a license man(cid:173)
`agement system in accordance with one embodiment of the
`present invention.
`FIG. 9 is a block diagram that illustrates a Multi-Package
`(M-Package) license in accordance with one embodiment of
`the present invention.
`FIG. 10 is a block diagram that illustrates a software
`license system in accordance with one embodiment of the
`present invention.
`FIG. 11 is a block diagram that illustrates the relationship
`between a parent license and a child license in accordance
`with one embodiment of the present invention.
`FIG. 12 is a block diagram that illustrates a "one of"
`policy in accordance with one embodiment of the present
`invention.
`FIG. 13 is a block diagram that illustrates a "OneEachOf"
`policy in accordance with one embodiment of the present
`invention.
`FIG. 14 is a block diagram that illustrates an "AnyOf"
`60 policy in accordance with one embodiment of the present
`invention.
`FIG. 15 is a block diagram that illustrates an "UpToN"
`policy in accordance with one embodiment of the present
`invention.
`FIG. 16 is a flow diagram that illustrates a method for
`requesting a license in accordance with one embodiment of
`the present invention.
`
`SUMMARY OF THE INVENTION
`
`A method for providing licenses to client computer sys(cid:173)
`tems to allow the client computer systems to use licensed
`software products includes receiving a request for a feature
`license for a feature included in a package, filtering the 65
`request based on whether the license requires the checkout
`of a parent license, granting a package license to the client
`
`ServiceNow's Exhibit No. 1003
`
`035
`
`
`
`US 6,810,389 Bl
`
`5
`FIG. 17 is a flow diagram that illustrates a method for
`applying a checkout filter in accordance with one embodi(cid:173)
`ment of the present invention.
`FIG. 18 is a flow diagram that illustrates a method for
`determining whether a license request is an M-Package
`license request in accordance with one embodiment of the
`present invention.
`FIG. 19 is a flow diagram that illustrates a method for
`modifying checkout data in accordance with one embodi(cid:173)
`ment of the present invention.
`FIG. 20 is a flow diagram that illustrates a method for
`generating share values in accordance with one embodiment
`of the present invention.
`FIG. 21 is a flow diagram that illustrates a method for 15
`generating a package identifier in accordance with one
`embodiment of the present invention.
`FIG. 22 is a flow diagram that illustrates a method for
`determining a feature mode in accordance with one embodi(cid:173)
`ment of the present invention.
`FIG. 23 is a flow diagram that illustrates a method for the
`node number of a feature in accordance with one embodi(cid:173)
`ment of the present invention.
`FIG. 24 is a flow diagram that illustrates a method for
`determining the slot indicated by the combination of a
`feature and a share value in accordance with one embodi(cid:173)
`ment of the present invention.
`FIG. 25 is a flow diagram that illustrates a method for
`determining whether a slot indicated by the combination of
`a feature and share values currently exists in accordance
`with one embodiment of the present invention.
`FIG. 26 is a flow diagram that illustrates a method for
`determining whether a slot indicated by the combination of
`any feature and share values in accordance with one embodi(cid:173)
`ment of the present invention.
`FIG. 27 is a flow diagram that illustrates a method for
`determining a minimum slot index without a slot in accor(cid:173)
`dance with one embodiment of the present invention.
`FIG. 28 is a flow diagram that illustrates a method for
`finding and ve