The PivotNine Blog

Is Microsoft About To Bring PowerShell To Linux?

sample-powershell-code.png
08 March 2016
Justin Warren

Recent moves by Microsoft came together in my head this morning as an interesting chain of events that seem to point towards a large event in my mind: PowerShell on Linux, possibly Open Sourced.

Firstly, let's outline some facts, and then I'll join some dots together using what I hope is a chain of logic.

  • Microsoft made .NET open source at the end of 2014. Note this is server .NET, not the client side.
  • Microsoft announce a cut-down version of Windows Server called Nano Server, aimed at the cloud, in April 2015.
  • Microsoft recently acquired Xamarin, which enabled cross-platform app development, which brings Miguel de Icaza into the Microsoft fold.
  • Microsoft just announced SQLServer on Linux.
  • PowerShell needs .NET core to function.
  • I'm told that PowerShell is used a lot for managing Microsoft Azure.
  • Developers of cloud-native applications have been choosing Linux over Windows, particularly for container-based development.
  • The Microsoft Build conference is just a few weeks away.

Let's join some dots.

Microsoft has long been a fan of developers, because developers are a vital part of the Microsoft ecosystem. An operating systems is pretty pointless all by itself; it’s the applications that run on that operating system that people actually use. If the applications people want most run on your platform, then you get to sell the platform.

You can't write all the most popular applications, but if you provide the tools for developers to do so—particularly enterprise developers—then you get people to buy into your platform. And buy is the most important word in that sentence.

Apple has done very, very well by making it easy for app developers to get paid if they write apps for their platform, which means they can sell people a lot of phones. Microsoft traditionally did much the same thing, only instead of selling phones, it sold Windows and Office.

However, Microsoft's old approach of “embrace, extend, extinguish” stopped working in the cloud era based on a fairly fundamental part of their platform: the GUI.

GUIs simply don't scale, or not by themselves. A graphical interface is excellent for many things, but administering thousands of nodes in a scale-out, ephemeral, cloud-native application isn't one of them. Not until you've glued all the underlying parts together in an automated way. That requires programming, or scripting.

Scripting has been the super-power of Unix admins for decades. When you want to be lazy, you automate a repetitive task with a script, and then just run the script from then on. Everything in Unix has this primitive text-based API, and the built in scripting languages (of which there are many) can glue the bits together to create something much larger than the whole. It's a core part of the Unix design philosophy.

As Windows environments started to get very large, scripting and automation started becoming more and more important, because having humans clicking “Next. Next. Next.” for days on end doesn't scale. Happily, PowerShell came along, despite its creator Jeffrey Snover having to fight Microsoft management (and take a demotion!) to make it happen. Windows admins everywhere rejoiced at the sudden ability to do what Unix people had taken for granted for decades.

Meanwhile, the cloud native people bypassed the whole Windows/GUI problem and just used Linux because a) it's free, and b) servers don't need a GUI, particularly when there are thousands of them running custom build applications that talk to each other with an API. The GUI is the browser on the customer's device, often an Apple mobile.

Microsoft, to its credit, pulled off the second biggest pivot in its history (the first being when they nearly missed the Internet being a Thing) and went hard into cloud. Azure is catching AWS very quickly, particularly when you consider they started years late from a standing start.

And once again, developers are the key. If developers choose something other than your platform to build new apps on, you have a lovely legacy cash-cow business, but no future. If enterprise applications start being built as cloud-native things using Linux and containers, and platforms that are largely Windows free, then where will Microsoft get its money from?

Automation is the key part of running things at scale. PowerShell is the way to script things in a Windows environment. There are an awful lot of Windows developers out there who are yet to move to the cloud way of doing things, despite the hype in the media. But if Linux based cloud-style development catches on too much, then Microsoft will have lost the battle for the hearts and minds of developers of the future, and with them go Microsoft's profits.

It's something Microsoft has long been keenly aware of, so moving to provide developers with the tools they want, but with a distinctly Microsoft flavor, should come as no surprise.

Microsoft needs to provide value over and above what you can get for free with Linux, and I believe they can. The .NET environment is reportedly excellent, and with Xamarin now official part of Microsoft, de Icaza and crew can finally finish what they started with Mono: bringing .NET to Linux.

And with .NET on Linux, PowerShell can happen. With the .NET object interface available on Linux, other scripting languages can start to plug in to the Microsoft object model of pipes, instead of only using text the way Unix does. In my opinion, this is the one big advantage PowerShell has over Bash, zsh, and all the other Unixy scripting languages (though I hate the PowerShell syntax). I would love to be able to talk to objects in the operating system from Python.

And for the enterprise, it would be a tremendous boon to be able to use a single glue layer–.NET–to be able to orchestrate and administer a heterogeneous fleet of Windows and Linux servers. No enterprise has a single OS for everything, after all.

Dogs and cats living together.

This article first appeared in Forbes.com here.