With the need to target multiple operating systems, multiple compilers, and languages - it is important to thoughtfully consider which platforms to target, and maintain versions specifically for those platforms.

How Are We Guaranteeing Compatibility with Each Platform?

After doing the original development work on LogNut on Windows / C#. I am using VMWare Workstation to create a separate Virtual Machine (VM) for each targeted platform. This is the only way to truly isolate the testing environments and ensure they truly do build and work as specified.

This can be a little more complicated than it would seem, because the required number of distinct VMs multiples along several dimensions: 32-bit (herein-after referred to as x86) and 64-bit (x64), across all the supported operating systems, service packs, different versions of the .NET Framework and the development tools, and then different languages and types of architecture (as for example, WPF vs Silverlight vs Windows 8 vs ASP.NET and so on).

This is all useless if it cannot be done error-free, and quickly enough such that it doesn't bog one down in details. As is usually the case with software engineering, this necessitates that you work smarter, not harder.

I am developing LogNut on a fast development box running Windows 7 x64, using Visual Studio 2012 Ultimate. I am maintaining a separate code-branch for each platform-combination of LogNut plus the libraries that it depends upon. When I edit the main branch (and ensure it builds and passes all tests) I then do a filesystem-comparison against the other branches, and merge over the code changes where applicable.

So now you have multiple branches of just-edited code, that needs to be built and tested against many targeted platforms.

For this, the magical talisman comes in the form of two wonderful tools: PowerShell, and VMware.

After each change, I run a PowerShell script to copy each distinct code-branch over to it's assigned set of VMs, build it, run the automated unit-tests and system-tests, and report the result back to me in the form of a single dashboard that I can read with a single glance. I can't get bogged down with detail, so everything is automated and kept as simple as possible. For that to be possible, I am spending a lot of time creating a comprehensive suite of unit-tests, such that if all of those tests pass, then you know you have solid product. You know that it will work.

My experiences with VMWare Workstation 8, and now 9, have been very positive. It is (to me) totally solid, straightforward in use, and in fact is a pleasure. That is saying a lot, considering I cannot even use iTunes (I consider that a horrible, unfathomable user-interface!). I love a polished, professional tool that just works.

Here is the list of platforms that either are, or will definitely be targeted in the very near future. For each platform, "support" is proven by running the unit-tests and subsystem-tests on that platform using the VMs, with every new build, to ensure actual compatibility against each.

Current Platforms Supported
  • Windows 7 x64
  • Visual Studio 2012
  • Visual Studio 2010 Ultimate
  • C#

First-Priority Execution-Platforms to Support
  • Windows 8
  • Windows 7 (x86, x64)
  • Windows Vista (x86, x64)
  • Windows XP Professional SP3 (x86)
  • Windows Server 2012 (x64)
  • Windows Server 2008 (x64)
  • Windows Server 2003 (x64)
  • Linux (x86, x64)
  • MacOS (having to setup a separate box for this - an excuse to go buy a Mac!)
  • Windows Phone (7, 7.5, 8)

First-Priority Development-Platforms to Support
  • Visual Studio 2008, 2010, 2012 (all editions including Express)
  • WPF, Silverlight, ASP.NET, WinForms, Console applications
  • Xamarin MonoTouch for iOS
  • Xamarin Mono for Android
  • MonoDevelop on Linux
  • SharpDevelop on Linux and Windows
  • C#, F#, VB.Net, C++/CLI

Second-Priority Platforms to Add Support For
  • C++
  • Javascript
  • Objective-C (for iOS and MacOS)
  • Android Java

Lowest-Priority Platforms (to be considered if requested)
  • Java (they already have Log4J)
  • PHP
  • Python

Where a given Service-Pack is required for support, it is a design-criteria that the build system (or package installation facility), upon finding that the requisite Service-Pack is lacking, will alert the user in clear and simple terms. This means that to test that, I must also have a VM of that platform without that Service-Pack, just so that I can verify that it reports the deficiency in a suitable way.

If you have a particular platform that you would like to see targeted by LogNut, please drop me a line. JH

Last edited Nov 27, 2012 at 10:53 PM by JamesHurst, version 9


No comments yet.