Friday, April 17, 2015

MOSEK and platform support

At MOSEK we are occasionally asked if we can support new platforms such as
  • Dspace MicroAutoBox
  • HP UX (has been supported)
  • Various mainframe operating systems
  • QNX (did a port in 2014)
  • Solaris (has been supported)
  • VxWorks 
Although we are quite sure we can adapt MOSEK to run on almost any platform, we are reluctant to accommodate such requests. We will now explain why.

Currently MOSEK is available for the following platforms
  • Linux 32 and 64 bit on Intel X86.
  • MAC OSX  64 bit on Intel X86.
  • Windows 32 and 64 bit on Intel X86.
These are well support mainstream platforms with plenty of tools such as a good C tool chain and Python support.

In general to port MOSEK to a new platform then the platform
  • should preferably be a Linux like operating system.
  • support double precision floating point computations.
  • should have a mature C compiler tool chain with all the usual libraries 
  • dynamic memory allocation should be available.
  • provide a good optimized sequential BLAS/LAPACK library if performance is important. This is particularly important if support for semidefnite optimization is required.
In practice if it is not possible to cross compile MOSEK for the platform under Linux or Windows then we require:
  • Python 2.7 should be available so we can run our Scons based build system.
  • Perforce, our source control system, should be supported on the platform
  • Some other tools that we currently have forgotten about.
Note most of our customers of course expect us to test and support our software for long time. If that is the case we should be able to hook the platform into the Jenkins continuous integration system, so we can build and test automatically regularly. If that is not possible, then the cost of supporting the platform increases.

MOSEK is a complex piece of software i.e. it is not just a few 1000s lines of code that can be compiled with a make script. This implies that porting it to a new platform usually requires at least 1 months of work from a senior developer and in many cases more.  In particular if the platform is far from the standard Linux 64 bit x86 platform, then a port is cumbersome and time consuming.

To summarize we can without doubt adapt MOSEK to run on almost any platform. However, porting MOSEK to a new platform is a costly undertaking. Therefore, if you want us to port MOSEK to a new platform then you to present a decent business case that shows we will recover our costs with a reasonable probability.

As a postscript let us tell you about our experience with QNX which we ported MOSEK to recently. QNX is a real time OS that looks pretty much like Linux. You can get QNX to run as a virtual machine under Windows (it seems under Windows only). In theory a port should be easy. However, the keyboard and mouse support is less than optimal, not to say lousy. It is actually very hard to get the network connection working so moving files to and from the virtual machine is a pain. After quite a lot of  hassle we got a QNX build cross compiled on Linux and verified that it worked under QNX and we gave it to a potential customer. The potential customer said he did not have time to test it yet unfortunately.