Ask Reuben

Licensing 101

Will my Genero application continue to run after the maintenance date expires?

I have not received my new maintenance keys?

What is a Temporary License?

What is a New Activation Key Request?

Do I have to use the Four Js License Manager?

With a CPU license, what quantity do I need?

With a CPU license, what happens if I put the license onto a server bigger than what the license is for?

When is a User License consumed?

When is a User License freed up?

What is the License Check process?

What Is a License Multiplier

Whenever there is a holiday period that overlaps with a month end, there is always a rise in the number of licensing related questions as key personnel go on vacation.  I thought I’d share some of the common licensing questions received.

Will my Genero application continue to run after the maintenance date expires?

Yes, you do not need to panic when you see a maintenance expiry date that is about to expire.  Your Genero application will continue to run past that date.

What you will not be able to do is if we release a new Genero FGL version (maintenance or major) after that date is use that new version where its build date is after the maintenance date.  So currently as we come upto 31 December 2020, the latest version of FGL is 3.20.11.  If you have a maintenance expiry of 31 December 2020 and we release 3.20.12 in January 2021 you will not be able to compile and run using that version until the maintenance date is updated to be after the build date of that new release.

You also need to be wary about your use of Genero Report Writer.  When Genero Report Writer was introduced in 2009, it was offered to existing Genero developers see https://4js.com/2009-innovative-report-writer-now-available/

An unlimited Genero Report Writer deployment and developer license is granted free of charge to all customers possesing a valid and current Genero maintenance license for the server on which they are destined. In the event that this Genero maintenance license lapses, the grant expires and Genero Report Writer licenses can be purchased independently.

There is a grace period but if you have not updated your maintenance expiry date for a number of months after it expired, you will find that any reports produced via Genero Report Writer will not be produced.

I have not received my new maintenance keys?

We do not send out emails with your new maintenance keys.  The expectation is that you get them from this web form after your maintenance payment has been received, or you use the “-m auto” argument.  What some do is script fglWrt -m auto to run periodically so that the maintenance key gets updated automatically.  If you do do this, there should be no need to have this run more than twice in a month, and can I suggest an odd day or time (so that not everyone tries this at midnight on the 1st of the month and hits our server at the same time 🙂

It is important to remember to update the maintenance keys once a year.  The logic the checking process uses is what is entered against the license on your server, it does not make a real time check to our servers to see if maintenance has been paid and there is a new maintenance key.   If you do not update the maintenance key on the server you can end up in a situation where you have paid the maintenance but the server does not think you have.

Those using Genero Report Writer normally find out once the hard way the maintenance key has not been updated when the reports start coming out with a message printed on them indicating that the maintenance key has expired.  So please make sure your sysadmins have a regular task to check maintenance expiry dates periodically.

What is a Temporary License?

A full license installation is a two step process.  You are given a License Number and a License Key.  You install them onto your server and you are issued an Installation Number.    At this point (see note at end) you have a Temporary License where you can use the system for 30 days and in that time you are expected to give us your Installation Number to activate the license and in return we will give you an Installation Key to enter against the license to show that it has been activated on this server.

This temporary state and how to get there is very important for a system administrator to know.  If anything ever happens to your system and you need to get a Genero system up and running you should be able to use your existing license number details on a temporary basis on a new server.  You should never be in a position where your system is down waiting for the office hours of our licensing team to issue you a new license key.

Note: since the introduction of maintenance licenses, you also need to enter the Maintenance Key at this point in order to get to the Temporary License state, so make sure you record it somewhere and can enter it when prompted.

What is a New Activation Key Request?

When installing a license you may see this message …

There has been a problem during the submit process.
Please check following comment:
The number of licensing request is over.
Please send a New Activation Key Request Form to your
license provider.

… this means the license has already been installed and activated.  That is you are trying to use the same license number more than once…

There are valid reasons to reuse a license e.g .moving from one server to another, upgrading Genero etc.  Follow the instructions as noted here letting us know the reasons behind the request and we will issue you a new license key.

The message is that you should anticipate this happening.  Too often this is encountered on the day and causes some minor panic.

Do I have to use the Four Js License Manager?

The answer is No.  You can license each Genero installation directly.  I have two personal opinions in this area…

If you have one Genero license  running one Genero installation on one server then you are adding an unnecessary level of complexity by using Four Js License manager.  You might as well just license this instance directly and remove the unnecessary layer.

You should use Four Js License Manager to manage the licenses in your development environments as chances are you will have many different versions of Genero.   I expect all Genero developers to have at least 3 being their next, current, and previous releases of their product.   The License Manager simplifies the sharing of this one license across these multiple Genero installations as opposed to each version having a unique license number.

With a CPU license, what quantity do I need?

The definitive answer is to install Genero onto the server and run the script “fglWrt -a cpu” as per the important tip here.

Particularly with the advent of dual core, quad core chips, and with VM and Docker it is important to check that fglWrt -a cpu returns the number you are expecting.

With a CPU license, what happens if I put the license onto a server bigger than what the license is for?

The CPU license will enter degraded mode as noted here.  It will fallback to being a user license where the number of users is 25 times the number in the license.  So a 4 CPU license installed on a 5 CPU or more machine will fallback to being a 100 user license. (100 being 4 times 25)

When is a User License consumed?

The user license is consumed when there is the first bit of communication with the front-end.  You can see this with a program such as

MAIN
    RUN "fglWrt -a info users | grep 'Users'"
    MENU ""
        ON ACTION accept
        EXIT MENU
    END MENU
    RUN "fglWrt -a info users | grep 'Users'"
    SLEEP 5
END MAIN

… you should see output similar to …

Users : 0/10
Users : 1/10

… the interpretation being that the license is not consumed until the MENU statement which is the first bit of communication with the front-end.

Now the interesting thing is what syntax initiates communication with the front-end. Consider this …

    MAIN
    RUN "fglWrt -a info users | grep 'Users'"
    OPTIONS INPUT WRAP
    RUN "fglWrt -a info users | grep 'Users'"
    SLEEP 5
END MAIN

… and you will see that the OPTIONS INPUT WRAP is establishing a connection with the front-end.

The moral of this story is to make sure your background processes do not have any code that may attempt to establish communication with the front-end or else you may find that your background process is consuming a license when you don’t expect it to.

If you do have any UI code in your initialisation routines, it is normally a case of putting them behind some code that checks value of FGLGUI e.g.

IF nvl(FGL_GETENV("FGLGUI"),1) = 1 THEN
    -- Running in GUI so initialise the GUI parameters, options
    OPTIONS INPUT WRAP
    OPTIONS FIELD ORDER FORM
    ...
END IF

Note the use of nvl() because if FGLGUI is not explicitly defined, it defaults to 1.

Note also a web service server program will also consume a license when it starts listening for requests.

When is a User License freed up?

A user license is freed up when a program exits normally via END MAIN, or EXIT PROGRAM

If the front-end process dies or connection is lost, the fglrun process may continue to run until the gui.protocol.pingTimeout occurs.  That is the fglrun process will consume the license until this timeout occurs.

If a fglrun process terminates unexpectedly, no END MAIN or EXIT PROGRAM logic is passed through to free up the license, and the process itself is not running to trigger the gui.protocol.pingTimeout functionality.  So the license will continue to be consumed until the license check process occurs.

What is the License Check process?

When a license is consumed, the process id of the fglrun process is recorded.  What the license check process does is note the process id numbers of the licenses that are being consumed, and looks to see if that process id is still being used.  If it isn’t, it knows that the process behind that license has terminated unexpectedly and so it can free up that license.

The license check process occurs every X logins and is controlled by the flm.check parameter in your fglprofile (FLM version 5.19 or earlier) or fgllicense (from FLM version 6.00)  (Edit: 30/Sep/2021 added reference to fgllicense).  You don’t necessarily want this process to occur every login hence the use of this parameter to make it occur less often.

You can force the check to occur with the fglWrt -u command or the flmprg -u command.  The key thing to note with this check on the license manager is it does not occur straight away but on the next communication with the license server.  So don’t immediately afterwards execute flmprg -a info users and expect to see a decrease, get someone new to start a program and consume a license, and then check the user count.

What Is a License Multiplier

We recognise that occasionally technology comes up with scenarios that our licensing system cannot cater for.  In that instance where you feel that you are at a disadvantage, we may resolve that with a license multiplier, that is where you continue to pay maintenance on X licenses but instead receive a multiple of X licenses.   These scenarios include …

If you used a third party menu system, if you ran multiple programs through the same instance of Genero Desktop Client on a users PC this would recognise the same IP address + Port number combination and each user would only consume one license, no matter how many Genero programs they were running.  In transitioning to a Genero Browser Client solution, each running Genero program would goto a seperate browser tab and consume an additional license.  In such a case, a license multiplier would typically be used to give you a multiple of X licenses but leaving your maintenance payment at X licenses.

Similarly when developing, if only using Genero Desktop Client a developer would typically only require one license each as they always go through the same GDC instance.  With the advent of different front-ends, if you ran the same program through GDC, GBC, GMI, GMA front-ends simultaneously, this would require 4 user licenses.  Similarly if you were testing both ends of a web service, this might require two licenses, or you are using DELEGATE the underlying web service would also require an additional license.  Also in this scenario is you move from a model of all developers on one Linux server under one multi-user license and move to a remote build process where each user is building on their own machine with a single license each, these developers will very quickly get frustrated.  A license multiplier would typically be used to give you a multiple of X licenses but leaving your maintenance payment at X licenses.

A CPU license typically avoids the requirement for a multiplier.

Where can I find out more?

There are two documents in the documentation area of the website.

Also on our webpage there is a section About Licensing which provides this information in a different format.