By continuing to use this site you are agreeing to our use of cookies, as set out in our privacy policy.

« go back Tech comment

A Microsoft chalk and cheese sandwich

Article by Chris Sawyer Ubuntu_terminal.jpg

Enterprise software development is almost always better and more productive under GNU Linux rather than Microsoft Windows. At least it is as long as you’re not extending an existing Windows application, says Chris Sawyer.

The file systems that Linux can use are case sensitive, as with most computer languages, so you have an exact match between a file name as a string and the name on disk.

This isn't the case with NTFS, so you can write, for example, Java code with unit tests that work fine on a Windows PC but fail when deployed on a Linux server. This situation can become very messy when version control is involved – especially if you commit a file that just needs a file name case change.

Another useful Linux file system feature is linking. You can have several versions of the development language or virtual machine installed and have a soft link acting as an alias to the underlying specific version you are testing with. If you then need to switch versions to test compatibility, all you need to do is point the soft link to the alternative library folder so that no changes are required in your project configuration.

Linux also has switchable command line interface shells. The BASH shell is the most powerful console available anywhere (there are several other shells that are also fantastic, e.g. FISH) – with an extraordinary range of commands and a great scripting language to boot. It's usually the default shell when Linux is installed and the one you expect to find on clients’ servers (although some tier 1 customers use KornShell). Microsoft has PowerShell, but it’s nowhere nearly as fully featured or as popular. Although it is a tremendous improvement over the plain Windows shell.

Microsoft has frequently acknowledged that it doesn't reach as much of the development community as it would like and with the rise of web-centric client applications based on JavaScript – especially for client applications though Node.js or Electron – that reach is rapidly dwindling.

A couple of years ago, Microsoft wanted to make more applications available for Windows Mobile, so they started work on a translation layer that would allow Android apps to run on it. This was so successful internally that Microsoft killed the project, reportedly as it would stop native development dead and threaten the platform.

Unfortunately for those who like their Microsoft phones, at the end of May it announced that it is pulling out of the consumer-facing mobile business, having already sold its feature phone wing. Microsoft all but acknowledged that it was far too late to the market and that iOS and Android have the market sewn up.

However, the translation technology didn't go away. At this year’s Microsoft Build 2016 Conference (March 30 to April 1) Microsoft announced that you will soon be able to run Ubuntu Linux under Windows 10 simply by downloading the special free application from the Windows store – not by downloading Ubuntu directly and hoping it'll work seamlessly.

Under the hood, Windows is using a Microsoft subsystem that translates Linux file system requests to and from Windows system requests. The Ubuntu kernel knows nothing about this and just does its thing along with all the command-line utilities.

This should be a far superior solution to Cygwin or MinGW, but personally I think running a BASH shell under Windows is like taking a bath with your socks on. It's far better than not taking a bath at all. Hopefully you'll catch case-mismatches between the language and the file system and, if nothing else, you'll get a glimpse into how painless and quick development could be if only your company would let you run Linux on your desktop natively… It'll never happen now though.