Well, a few days ago, I was reading this article, and two things struck me. First, the following sentence:
Not only is iOS based on Unix, but Android and MeeGo and even Bada are based on Linux as are QNX and WebOS.
Right… QNX doesn’t belong there. Technically, linux is only the kernel, not the entire OS. And with QNX, exactly the kernel is the thing that is rather unique. It is a real-time microkernel, which has nothing to do with the linux kernel. Sure, from the outside the OS as a whole looks similar to linux, but then again, so do all Unix-like OSes.
I also see that with regards to MacOS a lot. People seem to think that it is based on linux. Which it isn’t. MacOS has its own kernel, called XNU. The rest of the OS is also not entirely like a linux distribution. Namely, where linux distributions generally are based on the FSF GNU software distribution for the ‘world’, MacOS stems from Darwin, which in turn is based on BSD, and only certain parts are taken from the GNU world (such as the GNU Compiler Suite).
The differences are very small, the software mostly looks the same from the outside, but the origins of Darwin and BSD are different, as is the licensing (obviously). I find it a bit strange that linux seems to have become equivalent to any Unix-like OS, in the minds of a lot of people.
As for the second thing… The argument is made that Unix/linux is very modular in nature, and that’s why it scales well from low-end/embedded hardware to high-end. Okay… I agree with that in part, but I think ‘modular’ isn’t the right word. I think it’s more a side-effect of the fact that the source code is available, so everyone can mix-and-match their own kernel and distribution, stripping it from extra overhead (pretty much the opposite of what the author claims).
Then the argument is made that this is not possible with Windows. This I do not agree with. While Microsoft does not really pursue this (although they do have embedded versions of Windows, eg for thin clients), I don’t see why you couldn’t do the same with Windows as you can do with linux, if you have access to the source code.
Namely, if we take a regular linux desktop distribution, such as Ubuntu, it’s going to take quite a powerful machine to run it properly out-of-the-box. The system requirements are pretty much identical to Windows 7. If you go back into the past, when linux still ran on 386/486 machines… then you’ll see that the UI was a lot simpler, and the functionality was a lot more limited as well. However, since the main APIs such as the POSIX system libraries and the X Window System have always been used, even such old/stripped down distributions of linux will be able to run most applications with little or no modifications.
The same also goes for Windows. Windows NT started out in the early 90s, at about the same time as the early linux kernels. Windows NT originally also ran on 386/486 machines, and system requirements were quite similar to linux at the time. And like with linux, most of the Windows API was already present in those early versions of NT (and a lot of it even before that, with the 16-bit DOS-based versions of Windows). I would say that most applications probably really don’t need any more than the original NT 3.51 or NT 4.0 API. It already contains everything you need for a UI, networking, file access, and all that.
So I think it’s very much possible to strip down Windows while still being able to run most applications… I think however that this may be more theoretical for Windows than for linux, because the Windows ecosystem is different. Many applications will be more dependent on newer OS features, although they could technically be implemented easily without them. Obvious examples would be things such as .NET, (new versions of) DirectX or Internet Explorer. These aren’t available on older versions of Windows, and will be difficult to run on low-end systems even if Microsoft would make them available. But back in the NT4.0 days we also had pretty much all the same applications as we have today, just simpler and older versions of them, and back then they ran fine on a 486 or Pentium system. So it’s not like the Windows OS and the API itself is inherently very resource-demanding.
And in a way, the embedded versions of Windows also exemplify that. They implement a large part of the Windows API, but instead of just taking the existing Windows kernel and codebase, Microsoft has made a separate lightweight implementation of the OS. I don’t think they HAD to do that (Windows NT started on machines less powerful than your average phone today, and NT was deliberately developed on non-x86 machines, to ensure portability. As such, NT was also available on a variety of architectures, including x86, Alpha, MIPS, PowerPC and Itanium), they probably just thought it was the better way.