War is Over, or is it? A New Dawn for Microsoft

2016 March 31, 18:02 h - tags: translation microsoft off-topic

Update 04/07: the preview is already out ahead of the June release. If you're an Insider member, try it.

This is the translation of my original post in Brazilian Portuguese.

Yesterday was a pretty remarkable and historical day for Microsoft, I even think it might be an Era dividing moment, at least from my personal perspective. Since then I was trying to figure out a way to register this moment for posterity.

Prologue - 1995 to 2005, the 1st Decade

By Era dividing moment, I mean it for us, software developers. We have been through moments like this before. For example, the release of Turbo Pascal in 1983, the release of Visual Basic in 1991, the release of Java in 1995, the first Linux distros such as Slackware in 1993, the release of OS X in 2000 and its transition from PowerPC to Intel processors in 2005.

The 80's and 90's were convoluted, an era of real accelerated change and growth, everything became obsolete over night. In one single decade, from 1989 to 1999, I transitioned from Basic to dBase, to Clipper, to Fox Pro, to Visual Basic, to Delphi, to Java, to multimedia (Flash, Director/Shockwave), to the Internet (HTML, Javascript, ASP, PHP, Perl). I have never experienced so much change in such a short amount of time. I went from a 4Mhz XT PC to a Pentium III with 1Ghz in this same decade.

The new century opened with the apex of the Internet Bubble, we had 9/11 and the Bubble Crash. But the Internet came, stayed and blossomed. Personal devices were born with Palm and iPod. In 2001 Microsoft released its Windows XP and it would make it suffer the bitter sweet legacy for the next decade and half. On the opposite side, a year before, the still much smaller Apple would initiate its explosive come back with the brand new and highly desirable iMac, iBook and iPod. It would launch the BSD UNIX based OS X, creating the perfect system for both consumers and developers, the missed promise neither NEXT nor the earlier Apple never achieved.

2005 would reach its peak with the also explosive revelation of the love affair between Apple and Intel, traditionally married to Microsoft, and OS X would sing on Intel processors, allowing another giant leap for Apple marketshare growth. This revealed something else: OS X could sing on PowerPC, Intel and possibly something else, being built to be agnostic. It was a matter of time until it could run on smaller and more energy efficient ARM processors, which was what happened in 2007 with the launch of the iPhone. Arguably the most successful technology launch in history.

2005 to 2015 - 2nd Decade

On the midst of all this, Microsoft ate dust from the competitors, miserably failed the Windows Vista promise, it had a dull albeit competent Windows 7, but again failed with Windows 8. Finally, with the release of Windows 10 by the end of 2014 things started to change. The effects of Steve Jobs passing by the end of 2011 are now obvious: Apple has stopped.

Since 2011 we had nothing but small incremental improvements. Nothing of significance, nothing new at all. I believe the last big iPhone launch was iPhone 5 in 2012. The last big feline release of OS X was Mountain Lion in 2011. In the meantime Google stepped ahead in the mobile front when KitKat was released in 2013, in my personal oppinion, the first time it stood on equal footing with iOS.

In summary, from 1999 until 2005, in general, we had 2 major mainstream options for software developers: Java and .NET. Yes, PHP had respectable adoption but it was never much more than customizing Wordpress or Magento most of the time, never the same league as Java or .NET, all the rest were niche groups. But from 2006 we saw a whole new generation of developers in the so called "Web 2.0", the post-Google, SEO, UX, quick iterations, Agility with capital "A". It was the dawn for Ruby, Python, then Node.

2010 saw the mobile development world blossoming and speeding up, particularly a singular kind of application: the "Cloud" variety, where a native "app" connected to remote servers to offload data and processing, particularly to Amazon AWS services. AWS started in 2006, by the way.

Microsoft played catch up all this time and stayed out of this tidal change, suffering the hungover of Vista. It kept its purely enterprise profit centers with SQL Server, Office licences, but out of the "cutting-edge".

In fact, I'd state that the Era dividing moment came in 2013 when Ballmer stepped out, closing the "Gates Extended Era" and allowing Satya Nadella to step up as the leader of the new dawn. There are obviously smart brains in Microsoft architecting all of what we are discussing now from many years back, but I say "era dividing moment" in symbolic ways, as the end of the Highlander-"there can only be one"-Culture.

The 1995 Prophecy that the Internet would destroy the Windows hegemony actually came to be. And in the post-Moore Era computation became not only accessible but ubiquitous. Think about it: to have a cluster of "super" computers back in 1995 you needed serious investments that only universites and big corporations could afford. Today? Create your own cluster of EC2 instances right now and pay the equivalent of a popular videogame console for a month of serious computation.

I was an MS-DOS user since 1988, I changed to Windows 95 since it was launched and I spent the next following 10 years primarily developing software on Windows in the enterprise (yes, I know my ways in the undergrounds of the dared Registry and Windows debugging). I did Visual Basic, ASP, .NET, Java, PHP. But I wanted to be able to use Perl, PHP, Python, Ruby, natively in Linux. But I also still wanted and needed Office and Photoshop.

The answer was clearly OS X. With the release of Tiger it became serious. I started in a Mac Mini G4 in 2004. It had exceptional usability, far ahead of Windows XP, and access to all the UNIX I ever wanted in a single box.

The Core Duo and 64-bit Core 2 Duo was decisive for Intel and Apple. Tiger would sing on Intel in 2005, then it was a no-brainer: it was time to change. Now I would spend the following decade in OS X developing software in a different platform, with different tools and culture. It was my whole Ruby story that you know well if you have been following my blog since 2006.

2015 on forward, Epilogue

2015 arrived, almost 4 years after Jobs passing. An important gap which gave enough time for non-Mac platforms to finally catch up and surpass in many fronts. We are in the Software as Service Era. We don't "buy" software no more. We "subscribe" to services.

We are passed the Post-PC Era. We are passed the Smartphone Era. We are in the Everything as a Service Era. Our very identity is but a Facebook profile. Our voice is Whatsapp or Snapchat. Everything we go create tons of data. We are in the Big Data Era. Volumes of useless information that no SQL Server could ever dream to manage.

We need new stuff to crack into this new paradigm: Cassandra, Riak, Hadoop, HBase, Spark, Elasticsearch, Go, Rust, Elixir. They all "run" on Windows. Someone has to port them, make patches, package into installers. And most - if not all - of the developers for all these technologies are using either a Linux distro or OS X. Virtually no cutting-edge developer is willingly on Windows.

And this is the closing of my post opening: a New Dawn for Microsoft. It has suffered the last 10 years playing catch up and, for the first time since forever, it seems to have a real shot in making a real comeback, to become relevant to non-.NET developers.

2 things happened yesterday that could allow for that.

2016 - The Year for Linux on the Desktop

First up, the announcement that "Bash is coming to Windows". It's actually way more than simply Bash. It's a partnership with Canonical - which started a few months back since the announcement of SQL Server running on Linux, another shocker by the way. The reality is an entire Linux subsystem running alongside the Windows kernel, a super thin translation of Linux syscalls into Windows syscalls. The original idea came from the desire of running unmodified Android apps on Windows, this is the already deceased Project Astoria or Windows Bridge for Android. Technically, Android is a flavor of Linux, so you can see how it evolved.

Therefore, one can theoretically get an unmodified ELF binary made to run under Ubuntu and run it nativelly on Windows, no patches, no recompilation, just works! Reminds me of the Rosetta component on OS X Tiger to allow unmodified PowerPC binaries to be emulated on Intel, but much more efficient as it's not a heavyweight processor emulation, and also much less convoluted than Universal Binaries, which required recompilation back in the days of migrating OS X to Intel.

Ever since we started learning Ruby, many wanted to use their Windows machines but couldn't. There is a Windows distribution of Ruby but I can't quite recommend it despite the many efforts of highly competent developers such as Luis Lavena. Ruby, Python, PHP and everything built on Linux is meant to work just on Linux, period. To make them run elsewhere requires serious hours of testing, patching, wrapping around, adapting, cutting corners, and all this needs to be done in each new release, and they will never work quite the same. Moreover, dependencies such as rubygem libraries sometimes require a compilation step of native extensions, then you have a huge headache of trying to make a compiler such as GCC work.

It's living hell, seriously.

The recommendation is to emulate Linux itself under Virtual Box with the help of fancy tooling such as Vagrant and use native, pure Ruby under the environment where it was designed to work properly. But it's a hassle, because now you have a heavy OS on top of another heavy OS and a lot of emulation and virtualization on the way. We just got used to it.

What Microsoft is promising with its Anniversary Update for Windows 10 is not virtualization, but a very very thin layer of translation in the kernel itself. Everything in user land will "think" that its running on top of a normal Linux kernel. It's the reverse of what the Wine project has been trying to do to run unmodified Windows binaries on top of Linux distros. And it's not the same as Cygwin, which requiries modifications and recompilation of all Linux tools to run on Windows.

It will also probably not support a secondary Window manager right now, so no X, no GNOME, no KDE. And we don't need them, this is a Web world, if we can fire up a web server, we can have our GUI over any commodity web browser. And for stuff such as the native extension for Ruby gems, for example, we will have the full GCC toolchain working perfectly. And again: this does not require patches, recompilation, it's unmodified binary compatibility. Native execution with full performance.

The second big announcement is Xamarin's tools being released for free and as open source. Microsoft has acquired Xamarin recently, they spent almost a decade reimplementing all .NET as open source, pure and efficient reverse engineering of the proprietary tools and libraries, and they became a force to be reckoned with, specially in the games world with platforms as Unity built on top of Mono and the more recent set of tools for iOS and Android development using C#. So Microsoft played very smart, first by acquiring them, second by releasing their tools for free. It would be the last reason to stay on the Mac: the only platform with free tools to create native iOS apps. No more.

Therefore, the choice became much simpler now than ever before. Windows 10 is finally the first respectable Windows version if we disconsider the short life of Windows 7. Let's forget that Windows 8 ever existed the same way we already forgot the Vista fiasco. XP is finally dead. Internet Explorer 6 (and 7, and 8) are also finally as good as dead. Google made us all a favor by pushing Chrome and services such as Facebook forced users to upgrade quicker as well.

With Windows 10 Anniversary Update we will possibly be able to natively do the following in a cmd.exe console:

apt-get install build-essential
\curl -sSL https://get.rvm.io | bash
rvm install 2.3.0
bundle install

And it should just work!

In the very same environment we will be able to use Xamarin Studio and with some effort to remember C# from our muscle memory we should be able to create iOS and Android apps in no time. And we can use Office 365, alongside all the most recent versions of Adobe CS6 apps, and finally, we can play The Division over Steam, just for fun, on the very same machine!

In one single day, Microsoft has made Windows 10 the most compelling choice for developers. And with manufacturers finally nailing Macbook levels of machining and refinement with the incredible Surface Book or Razer Blade Stealth or even the Lenovo Yoga 3, the math is becoming more and more beneficial to Microsoft.

So, 2016 is finally the so ill-called "Year of Linux on the Desktop", just not as the Free Software folk idealized. But hey, we can't have everything. I think it's a good enough compromise. This is a very risky gambit, but if Microsoft actually deliver all this, I'm ready to leave OS X.

"The Times They Are a-Changin"


comentários deste blog disponibilizados por Disqus