We have another mini web site with our resources on Win10 IoT Core for the Raspberry Pi which is at:
https://skanky.dev/csharp/category/windows-10-iot-core
A lot of our own use of the Raspberry Pi is for commercial projects and Windows IoT Core brings along several advantages in this area for us on some projects:
- Microsoft has made it available for free, for both personal and commercial uses..
- It’s fully supported by Visual Studio, which is also free. We love working in Visual Studio and whilst we like using NetBeans for Raspbian Linux based development work, trying to design a graphical user interface when we need to do this under Linux we’ve always found incredibly painful and slow. Whilst XAML GUI development in Visual Studio isn’t as easy as older Windows forms development, its still way above anything we’ve found in Linux and Visual Studio is just a joy to use for GUI apps.
- Microsoft forces the OS to be updated. If you want to use Win10 IoT commercially it’s a licensing requirement that you permit updates. This is a key issue and Microsoft gets this by forcing it to happen. IoT devices and all other devices running an operating system need to be constantly updated with security patches and it shouldn’t be left to developers to have to try and find complex ways of making it happen automatically. It should be baked into the OS and just work. From a commercial viewpoint, Windows IoT having this incorporated with no development effort or potential for developers to manually implement it incorrectly and end up risking bricking lots of customers devices out in the wild is really important.
- Documentation and support. It’s not perfect and there are issues we’ve come across with Windows IoT that will only be fixed when/if Microsoft get to them – that’s a downside of a non open source operating system of course. But for the stuff that works, there’s loads of it and it’s all generally very well documented. Windows IoT comes from the operating system originally created for Windows phone. That may now be dead but the operating system capabilities are powerful because that was its original intended use and it is well documented because, well, Microsoft does that. There’s also plenty of books and other resources for Microsoft Universal Apps, which is what is created to run on Windows IoT Core.
- Not changing things for no reason. This drives us mad on Linux. To be fair to Raspbian we’ve found this fairs much better than some other Linux distros, but the ability for Linux developers to just change stuff that worked perfectly well before because they fancy it now being a bit different wastes so much development time and effort for so many programmers. Often the changes made are not well documented or it’s hidden away in some horrible to read updates document you can’t find and only an uber programmer would want to have to read anyway. Microsoft has a strong history of backwards compatibility which anyone who has programmed Windows apps for years knows is a godsend that avoids them having to re-learn, re-make, re-debug things that worked just fine until some developers decided to change something just because they could.
- C# vs C++. Developing in C# makes some things quicker and easier than C++, particularly bearing in mind that the big C++ libraries like Boost that can bring lots of cool easy to use functionality to C++ can be very very slow to compile with on the Raspberry Pi (IDE’s like NetBeans do the compiling on the Raspberry Pi device even if you are using it to develop on a separate PC).
- No horrid scrolling text on powerup! Why on earth Linux still forces this we have no idea, but having Windows boot with an attractive very unobtrusive simple logo is so much nicer on users than the scrolling mess that Raspbian forces to be displayed whether you want it or not.
- Web admin panel. Windows IoT has Powershell for command like access in the same way as Linux SSH, but it also has a really useful web UI.
Notable disadvantages of Windows IoT Core
- You don’t have ultimate power over the OS. In Raspbian you can elevate yourself/your app to root user privileges and then do anything. In Windows IoT Core you are a sand boxed app running without admin rights or admin system access. The IoT version does provide some system access functions (e.g. restart, shutdown), but it still a case of what is permitted via the API’s. A good example of the problems this can cause is reading the Ethernet port MAC address to get a unique hardware ID – in Windows IoT Core you can’t! There’s no API that provides the MAC address so you simply can’t get it.
- The Windows IoT OS seems quite a bit ‘heavier’ than Raspbian. We’ve noticed this in terms of playing video which can be painfully sluggish under Windows IoT and also timers which seem much less reliable under Windows IoT (at the time of writing trying to get a timer to tick more than every around 70mS seems impossible under Windows IoT and even then is badly erratic in its exact timing). Its not that Raspbian is perfect in this regard either, but it seems much more capable of doing real time tasks fast.
We still think Raspbian and many of the other Linux distributions are also awesome operating systems with lots going for them. We here have quite a commercial bent in our view on these things, we program these devices to earn money more than for personal or non profit sideline projects and Windows IoT Core provides some benefits for that. However it isn’t right for all tasks by any means, there’s pro’s and cons to both. We also love all that Linux is about, all it lets us do when it is the right choice for one of our projects and the community around it that makes it all happen. The right OS for the project or task is our main wish and with Windows IoT Core being provided for free it brings another tempting option to the arsenal of developer environments now on offer.