The OpenBLT host library (LibOpenBLT), developed in 2017, adds interesting functionality to the OpenBLT bootloader project. It makes it possible for all users to quickly and easily develop their own firmware update tool, in the programming language of their liking. OpenBLT itself already ships with two firmware updates tools: MicroBoot for those that prefer a graphical user interface and BootCommander for those that prefer working from the command line.
Under the hood, BootCommander is already based on LibOpenBLT, but MicroBoot not yet. Another restriction of MicroBoot is that it’s not cross-platform and currently only runs under Windows. One of the planned efforts for this year is therefore to develop a version 2.0 of MicroBoot, such that it is cross-platform and builds upon LibOpenBLT.
A question that I mulled over for the past several months is: In what cross-platform integrated development environment (IDE) should MicroBoot 2.0 be developed? Personally, I am quite programming language and IDE agnostic; I’ll happily use whatever tools seem best for the task at hand.
While pondering the IDE selection question, I found the following potential candidates:
Eventually I settled on the Lazarus IDE. Initially, this might not strike you as the most obvious choice. However, using some tools borrowed from total quality management, it turns out this is the right IDE for the job. The goal of this article is to explain how and why I reached this conclusion.
Using a standard brainstorming session, I identified a number of cross-platform IDE selection criteria:
- Easy to install the IDE. I want it to be easy for users to install the IDE, such that they themselves can modify the MicroBoot firmware update tool, with little effort.
- Popular programming language. Picking a popular programming language that most software engineers are comfortable with, makes it easy for them to customize the MicroBoot program.
- Easy to distribute the MicroBoot binary program. If a non-technical user is tasked with performing a firmware update, it should be easy for this person to install and run the MicroBoot program on their PC.
- Ideally no virtual machine or interpreter needed. From a performance perspective, a program that does not depend on a VM (Java) or an interpreter (Python) runs better.
- Ideally uses native widget components of the underlying operating system. A GUI program that uses native widgets tends to look and perform better.
- Easy to integrate the LibOpenBLT shared library. LibOpenBLT should form the foundation of MicroBoot 2.0. Preferably, little effort is involved with integrating the OpenBLT shared library.
- Licensing allows proprietary usage. The OpenBLT bootloader is offered under a dual licensing model. Clients who purchased a commercial license, should not be restricted in how they use MicroBoot nor should it be necessary for them to purchase additional licenses elsewhere, just for MicroBoot.
Some of the cross-platform IDE selection criteria are more important than others. So after identifying these selection criteria, I had to find a way to assign a relative weight factor to each one. I decided on applying the analytical hierarchy process (AHP) for this step. The results can be found in the following matrix:
The way this works is that for each cell I asked myself how much more important the criterion in the row is, compared to the criterion in the column. The last column displays the resulting ‘relative value’, which serves as a weight factor.
The best IDE for the job
Now that the weight factors of the cross-platform IDE selection criteria are known, it is time to link them to the actual cross-platform IDE candidates, with the ultimate goal to get a ranking of which cross-platform IDE is the best for the job. I decided on applying a prioritization matrix for this step. The results are displayed in the following matrix:
For each cell I asked myself how well the cross-platform IDE in the row relates to the selection criterion in the column. Note that the weight factors from the AHP are listed in the last row and were part of the calculation to determine the numbers in the ‘weighted total’-column. As a reference, here is an example calculation of the weighted total for the first row:
Based on the numbers in the ‘weighted total’-column, the actual ranking could be determined. Basically, the higher the number in the ‘weighted total’-column, the higher the ranking.
The outcome of the prioritization matrix shows that the Lazarus IDE is the best one for developing MicroBoot 2.0. Note that when developing a GUI application in the Lazarus IDE, programming is done in the Object Pascal language.
Personally, this outcome is somewhat unexpected and quite interesting. When looking at for example the Tiobe index, programming languages such as C++, Java and Python are ranked much higher than Object Pascal. This shows that you should never just use such an index to pick the programming language for the task at hand. Always identify, prioritize and process all selection criteria when making such an important decision.
Now that the Lazarus IDE has been chosen as the development IDE for MicroBoot 2.0, development of MicroBoot 2.0 has started. It takes place in a SVN branch.
Once development is done, this branch will be merged back into the SVN trunk, such that MicroBoot 2.0 becomes part of the next OpenBLT stable release. Assuming that development goes smooth, MicroBoot 2.0 will be part of OpenBLT version 1.6.0 release, which is planned for July 2018.