Having just read an interesting article by Paul Thurott, about Microsoft's Internet of Things SDK built upon 32 bit x86 Windows and using Intels Galileo device (an x86 device the size of the Raspberry PI device) which uses Intel's tiny system on a chip CPU (Quark), I found very interesting one of the core development methods which will be required. The WIN32 (or at least a subset of it) will be making a comeback. So why does this interest me ?
A Decade and a Half of WIN32 Development
Because I have spent the last decade and a half not only learning the WIN32 API, but also learning how to build tiny sized software which require minimal hardware. How many programmers today can write software which not only runs on the latest computers, but also can run on something with only the power of what we would call a legacy PC? If Windows 8 could run on a PC with only a 500 mhz CPU or less and with only 256 megabytes of RAM and only minimal disk space available for applications, say 50 megabytes or less, could your software run on that?
Well designed WIN32 software can!
No, really! Why do I say that?
The Proof Is In the Pudding!
You have to be a WIN32 programmer to appreciate this. You also have to know how to design software without all the object oriented fluff most software has today. The core WIN32 is actually very procedural in nature. It is basically a flat API and the most efficient WIN32 software is that which is written using the flat API directly, without something like MFC (Microsoft Foundation Classes). Just plain pure WIN32. Now there is no reason that well designed GUI libraries could be written to make things easier, but such would best be written using the WIN32 as a flat API. No OOP stuff to get in the way.
As a long time developer of programming tools and GUI libraries based on the WIN32, I know how “lean” WIN32 applications can be. Maybe because of my going back to the old DOS days, I can appreciate the importance of writing software which requires minimal hardware (Once I wrote a complete point of sale system for a video rental store, which ran on a CPM computer with only a 2.5 mhz CPU, 64 KB memory and two floppy disk drives). Old time programmers knew how to squeeze every byte and CPU cycle out of a computer in those days.
Would you like to see what can be done using the pure WIN32 API ?
Download this application I wrote for testing WIN32 backward compatibility on Windows 8: Win8 Test app
The app uses a GUI library which is 100% pure WIN32 based. The real test of any WIN32 app is how well it runs on minimal hardware. First, try the app on your current PC and see what it does. It demonstrates WIN32 features like Forms (Windows) and standard controls and the common controls, complex window regions, ownerdraw, customdraw, custom controls (written in pure WIN32), WYSIWYG similar to what Visual Designers do (based on low level GDI), MCI multimedia, GDI drawing, DIB based drawing, OpenGL 3D.
Now feel free to try the app on the slowest Windows PC you have. Try it even with legacy PC’s such as Windows XP (ie. with only 256 meg RAM or less), Windows ME, even Windows 95/98. Try to imagine how little hardware an Internet of Things device may have. Try it with a PC with less than a 500 mhz CPU and less than 256 meg ram.
Back when Windows XP was the current operating system, I purposely developed WIN32 software on a Windows 95 PC which I boosted to 256 meg RAM. The purpose was to see how well the software ran on minimum hardware. WIN32 software can be designed to run on very minimal hardware and you may be surprised how little you really need.
Native coding for Windows can produce high performance software. Learning how to leverage the low level WIN32 API using a native code compiler like C++ or others can produce even smaller, faster software. Is there is a need for this today? Yes there is. Watch Herb Sutters talk “Why C++?” and see why and how. Native coding produces smaller, faster, software. The WIN32 coding produces even smaller, faster software. Just what we need for the coming “Internet of Things”.
Now if Microsoft can just learn how to squeeze a complete embeded GUI version of Windows 8 (no Metro or dot.net needed) into a small enough size to run on Intels Galileo device, then we would have something worth coding for. WIN32 programmers may then be in high demand. Whether you code in C, C++ or other languages (I code in Powerbasic, which is a BASIC compiler on par with many C compilers) doesn’t matter. They key will be learning how to leverage the WIN32 API so you can write tiny, tiny, tiny software which can perform even on the most minimal hardware. Combined with embedded Windows 8 designed for such small devices, then the internet of things just could become a reality.