With Windows 10, some of the biggest changes coming to Windows don’t even have to do with its features and functionality, but on how those are delivered. Windows is moving towards Windows-as-a-Service, and this might just have a huge impact on how software targeting Windows is developed and delivered in the future.
The first impact is that Windows once installed on a device will continue to update to the latest version of Windows for the rest of the life of that device. For those running Home versions of Windows 10, these updates are even automatic and mandatory. Even for ‘Pro’ users the only control they have is to switch to a slower release cycle and even that should update every 8 months or so.
Combine that with a free upgrade to Windows 10 for any computer running Windows 7 and above – which is any computer from the past five years. For a software developer this means that targeting the latest version of Windows (and only the latest version of Windows) is now a whole lot more feasible. Currently targeting Windows can be somewhat of a mess. If you want to reach all Windows users, you need to target Windows XP, Windows 7 and Windows 8.1. However, these three operating systems couldn’t differ more in their design sensibilities. Windows XP with its blue bubbly UI, Windows 7 and its glassy aero look and Windows 8.x’s ‘Modern’ UI.
With Windows constantly updated with new features, and no major releases every few years for users to pay for and install, developers can more reasonably expect the majority market share to be at the release. Will things really work out as well? Only time will tell, but there is more reason to expect this then there was before.
The changes under the hood are as no less massive. There are sweeping changes to Windows as a platform that can really simplify developing Windows apps and that is the new Windows Core.
Windows Core is Microsoft essentially realising that they own the most popular operating system in the world, and that they should probably use it in more places. In the past Microsoft’s different platforms have had rather different APIs and even different kernels.
Before Windows 8, the mobile, desktop and the Xbox’s OS stacks were very different. Windows for desktops used the Windows NT kernel, phones used the CE kernel and the Xbox used its own special kernel. Windows Phone 8 finally switched to the NT kernel making it a lot similar to Windows for desktops. Xbox One further converged these platforms by switching to the same kernel as Windows 8
The application platforms and APIs above the kernel level were of course still quite different across platforms. While converging these kernels might have made things easier for Microsoft, it didn’t benefit other developers as much.
With Windows 10 comes a true convergence of all devices to the same Windows kernel, ‘universal hardware drivers’, and ‘standard network and I/O’. This in essence is what Windows Core is.
Not only has Windows Core expanded to all devices that already supported Windows, but the breadth of devices that support Windows has also expanded. For instance, other than PCs, tablets, and phones, the Xbox One will also soon update to use the Window 10 core, it is already available for the Raspberry Pi 2, and of course Microsoft’s new HoloLens also runs Windows 10 core.
Consolidation and convergence are huge themes with Windows 10. After unifying the Windows core across platforms Microsoft has also unified the development SDKs across platforms into what they call the Universal Windows Platform (UWP).
Universal Windows Platform
UWP is a layer of APIs that are guaranteed by Microsoft to be available on any device that is running Windows, whether it be a mobile phone, a PC, the Xbox, an embedded device like the Raspberry Pi or even a device that hasn’t been released yet.
There are still platform-specific features, that can be layered on top of the UWP via extension SDKs. These SDKs extend the feature set of Windows for a particular family of devices. For example, the mobile family of Windows might power phones and phablets, while the desktop family on Windows will power tablets, laptops and desktops. They both have their own extension SDKs that can be used to implement platform-specific features. Microsoft estimates though that over 85% of Windows APIs are available universally.
The same application can now support multiple device families more easily, not just by using only the common UWP APIs, but by detecting and using only the features available on that platform. There is now an API to check for the presence / absence of platform-specific features and APIs.
This is different from earlier versions when such checks could only be performed at compile time in order to build different binaries for different platforms. Now runtime checks allow developers to have the same application code adapt to mobile or desktop.
Consider that Windows 10 now makes it possible to have a phone power a full desktop experience if docked to a station that has a larger screen, a keyboard and mouse. Of course this will need a very powerful phone, and might not be feasible today, but the possibility of such a thing is eminent. Microsoft’s new modular approach means that the OS for such a phone could simply be a composition of the Universal Windows Platform with Mobile and Desktop extensions.
With such future devices it will be important for applications to adapt at runtime from a mobile form factor, to a desktop form factor, to even a television form factor. For this Microsoft has provided new adaptive UI elements that can work across form factors. Developers can also embrace the principles of responsive design for desktop applications – already a popular approach for web apps.
Universal Windows Platform Bridges
It’s quite a mouthful, but these bridges – as we will refer to them as for brevity – are toolkits designed to make it easier for developers to bring their existing Android, iOS, Web, and even old Windows apps and development experience to Windows 10 and to sell such apps on the Windows store.
These bridging technologies are: Project Astoria for Android, Project Islandwood for iOS, Project Westminster for web applications, and Project Centennial for ‘Classic Windows apps’.
Microsoft has yet to fully explain how these work, however they claim at least for Android that existing applications will need few code changes. For cases where your application uses Google services Microsoft has an interoperability layer that can map those functions to Microsoft’s technologies. For instance, it has API mappings for Ads, Analytics, In-app purchases and Notifications. With minimal code changes it can make your code automatically use Bing Maps on Windows while using Google Maps on Android.
These bridges also give developers access to Windows features such as Live tiles while still being able to target competing platforms. In fact, you can even target Windows Phone using your IDE on an OS X system.
Essentially this means Android developers can continue to code in Java, iOS developers can continue to code in Objective-C (they plan to support Swift as well), web developers can continue to code in web technologies and Windows developers used to older technologies can still continue to use them. And they can still have their application running on Windows platforms and sold on the Windows store.
It’s already possible to start using their compatibility layer for web applications, which allows you to have websites present as native apps in native windows. Developers can sign up for access to the other compatibility layers while they are still in development.
A Consolidated and Enriched Store
Gone are the platform-specific stores, with Windows 10 there is a single store for all platforms running Windows, from the Raspberry Pi to the Xbox. The same store now also offers other kinds of media such as music, and videos. For developers this also means there is now a single place to submit apps to, and the possibility of submitting a single package that can run on all platforms. The Windows store is also no longer restricted in the way it was in Windows 8. It can now support traditional Win32 applications through the compatibility layer mentioned above.
To keep users secure, apps installed from the Windows store, are sandboxed from each other and can only talk to each other though APIs designed for the purpose. One app cannot interact with other apps’ settings or private data, and in fact gets its own private virtual registry. This makes it harder for malware to do anything too damaging while also making it possible to quickly and consistently uninstall apps in a way that gets rid of all their data.
The features of this unified app store have also been enhanced with the ability to offer apps on a subscription model, and to have per-market pricing. The platform is now smart enough to share libraries between different applications if they use the same version, thus reducing disk space and download sizes.
There are also interesting implications of the new constantly updating model of Windows. New updates to Windows 10 can bring new platform features and APIs, however any updates to these APIs are versioned. So when developing an application, you can specify the range of versions of Windows that your application supports and the device families it supports (desktop, mobile, holographic, IoT etc.). If your app runs on the oldest version of the API and uses only UWP it should run on all platforms and devices; although in practicality such apps will be few.
This is quite similar to Android’s way of doing things where you can select the oldest version of Android you want to target, and that will lock you to the subset of APIs that that device supports. Another similarity with Android is the support for universal binaries. Just like it’s possible to have a single Android apk that runs on any Android device be it a mobile, tablet or TV, it is now possible to have single Windows binary that that can run on any platform that supports Windows, even if that platform didn’t even exist when you compiled it!
Another treat for those developing for the Windows store is the ability to hide apps pushed to the store so they can only be accessed if you know the URL. Windows Store will also soon be available as a website that people can browse and buy apps from.
Other Bits and Bobs
.NET Native: For performance conscious .NET application developers, there is some good news, now .NET applications can be compiled to native machine code. Performance isn’t even the only advantage of .NET Native, unlike previous .NET applications that needed to have the .NET Framework used by the app installed on the end-user’s machine, compiled applications are self-contained and can ship with the bits of .NET that they need to run. This means you can use the latest version of .NET without worrying about packaging the huge .NET installer with your app.
OneGet: If you’ve used Linux you’ll notice that the ease of getting and installing applications on it is unparalleled. If you want a package available for your OS, installing it is just an ‘apt-get’, ‘zypper’, ‘yum’, or ‘pacman’ command away. Windows 10 ships with a similar tool called OneGet (which can be installed on previous Windows versions as well). With OneGet you get PowerShell commands such as ‘Find-Package’ for searching for packages to install, and ‘Install-Package’ to install them. It automatically downloads the package and extracts / installs it while creating a convenient launch script. It uses the popular community-run Chocolatey service and package in for most of the work and acts as a sort for meta-package-manager that can be extended with support for other installers / package managers.
Console Improvements: Microsoft’s cmd.exe command shell is quite, quite bad, and hasn’t improved much in a long time.
Finally, with Windows 10 Microsoft has put in some work to make the experience of using ‘cmd.exe’ better.
First of all, finally you can resize the console window just like any other window by dragging the edges. What’s more this will automatically cause text to wrap if possible. Another great addition is the ability to easily select text in a console window without needing to access a submenu of the window menu to go into mark mode. Selecting text in the console window now works like every other window that lists text, i.e. text is selected line-by-line rather that whatever comes inside the rectangle you draw on screen. You can also do this with usual keyboard shortcuts, just press the shift and cursor keys to extend your selection and use Ctrl-C to copy and Ctrl-V to paste.
The console is now also HiDPI aware and as such won’t need a magnifying glass to view on such screens. Also, you can now make the console window semi-transparent just like them people do on their Linuxes!
The road to a converged Windows hasn’t been without its bumps – with one of those major bumps being the massively ill-thought Windows 8 – and Windows 10 is still fresh. There are surely bumps yet to come as Microsoft seems to be trying everything new all at once. It is unlikely that the Windows 10 launch will be without niggles, but Microsoft does seem to have at least some measures in place to alleviate those issues.
We have peer-to-peer downloading of updates to reduce the burden and increase performance of frequent update downloads; the promise of frequent updates in the first place to get not only fixes, but also new features out quicker. Of course there is Windows Insider, Microsoft’s constant pool of beta-testers using the future versions of their OS and giving feedback. With such massive changes to the Windows ecosystem, how the chips fall will only become clear perhaps a decade from now when we can compare where Windows 10 is (or whatever it’s called by then) compared to now, and compared to 10 years ago when Windows XP was still the latest Microsoft OS.