The release of Totara 13 brought with it a number of changes, which apply to subsequent releases.
Importantly we released the two enterprise extensions in Totara 13:
Both extensions are released under the Totara Enterprise Extensions proprietary licence.
One of the driving factors in reorganising the code base in Totara 13 (and for future versions) was to accommodate these two extensions by providing separation between the solutions that make up the Totara product.
This document looks at how these changes impact the Totara ecosystem.
All interaction between Totara Core and Totara Enterprise Extensions must occur through channels that would be usable by other means. This includes the likes of web services, executable programs, and data interchange via the import and export of data in common formats such as CSV.
The use of intimate APIs, such as having an extension script include a library file from Totara Core, is not permitted. Nor is the use of licensed resources such as images and fonts.
Tui achieves this separation by interacting with Totara Core through the Web API, GraphQL services it presently. Tui is utilised in the page by writing minimal HTML markup that signals Tui is wanted for a page, and then on the client Tui which has also been loaded picks up and replaces the minimal markup with the Tui component for the page.
The following two lists explain what is permitted with regards to licensing now when running in the client, and what is not.
Additionally the following points explain the integration between Tui and Totara Core:
Totara developers must adhere strictly to this, as must all Partner and third-party developers should they choose to use Tui within their own plugins and customisations. |
For more information on the Tui implementation please see our Tui organisation and implementation overview document.
The recommendations engine is a little more clear cut. It serves its purpose nearly entirely independent of all other code. It requires site and user data with which it calculate recommendations, which is exported by Totara Core server to CSV. Once recommendations have been made they are exported by the recommendations engine as CSV and then imported into Totara Core. The same CSV import/export functionality could be used by other recommendations engines.
As noted above all developers who work with Totara Enterprise Extension code must adhere to the same strict level of isolation noted above so as to not violate either our proprietary licence or the GPL.
When developing plugins for Totara that make use of Tui you will need need to separate your front end code from your server side code, and use WebAPI GraphQL services as we have with Totara Core.
If you are keeping your plugin in a single repository then separating the two libraries by top level directories is the path forwards. Otherwise multiple repositories can be used.
When deploying you will need to ensure the compiled Tui front end code goes into the client/component/{component_name}/build directory, the source code if provided will need to go into the client/component/{component_name}/src directory, and the server side component into the appropriate directory within the server directory.
How third parties license their plugins will also need to change. The server side code can remain with the licence you have been using previously, providing there are no existing conflicts with the GPL. Your Tui client side code however must use a licence that is compatible with our proprietary licence.
Our recommendation if you have been using GPL in the past is to switch to the MIT licence, another open source licence with less restriction.
Third-party libraries and source code can still be used within the product, however the licence of the third-party code must be compatible with the system in which you are using it.
If it is being used within Totara Core then the previous rules applied, the licence of the source code you are using must be compatible with the GPLv3 licence.
If it is being used within Totara Enterprise Extensions, then the licence must be compatible with our proprietary licence.