Caveat: I don’t use Windows on my desktop machines, and haven’t since 2003, and I work mostly with Linux and NetWare on the server side, with some Solaris and Windows servers thrown into the mix.
I am constantly perplexed with people who love Windows. It costs a lot of money. It is riddled with viruses and spyware. Normal people can’t maintain it and to keep it stable you have to reinstall it every six months. It doesn’t come with anything useful out of the box, and by the time you have everything you need (an office suite, photo manager, PDF reader and writer, proper web browser (with plugins), mp3 player, CD burner, personal organizer, email program, flash player, quicktime player, proper text editor, C compiler and other developer tools, etc. etc., you’ve spent another $1,000, and downloaded a gigabyte or two of stuff (plus wasted hours of time). Don’t forget that you need to install 500 patches and reboot after each one. Also, don’t forget about the constant virus scanner updates, disk defragging, adware scanning, and all that nonsense. But, I digress (I guess I’d better assign this post to the “Rant” category).
Anyways, one of the big problems with Windows is that it is so insecure and vulnerable to security exploits. Many people think that this is because it is developed in a closed source model. While I think that closed development prevents a lot of opportunity for bug-finding and security-hole fixing, I think one of the other major reasons Windows is so vulnerable is that Microsoft is forced by the market to maintain backwards compatibility with ancient software. If Microsoft does something that breaks compatibility of existing applications, but increases the security of the platform, they get raked over the coals. They walk a fine line between keeping everything as secure as they can (which isn’t very) and preventing the applications of thier customers from breaking. For example, the new Vista feature of using less privileged users without administrator privileges will fail, because many applications don’t work properly unless the users running them have administrator privileges, and users will rebel if they are continuously asked for permission by an application that needs administrator privileges. This causes all kinds of security issues. I won’t talk about how Microsoft got into that conundrum, as that isn’t the point of this post.
The point of this post is that I think that the commoditization of virtualization in modern hardware and software is an opportunity for Microsoft to drastically improve security in Windows version Vista + 1, without breaking compatibility with older applications that require older insecure APIs and features in the operating system. After the prolonged ranting above, the conclusion is fairly short. Microsoft could re-architect the version of Windows that comes after Vista to have a hardened secure core, with tightly secured APIs, with concepts like Least User Privilege, and all the modern thinking that has been done about secure operating systems. This core could drop all legacy compatibility completely. New Windows applications could be written around this new secure core, and Windows would be much better off going forward. At the same time, Microsoft could implement a sort-of sandboxed compatibility layer (or layers) for applications that were written for older versions of Windows, using virtualization. A Windows desktop could have it’s secure core running with non-legacy applications, and one or more virtual machines, that were logically isolated from the core, running the old less-secure Win32 APIs that would allow older applications to run. The applications could be isolated from the core and from each other, preventing a security compromise in an old application from compromising the whole system. This approach would give Microsoft’s customers time to migrate to the new more secure Windows architecture at their own pace, while still being able to maintain legacy applications, and have the benefits of a more secure environment.
Most of this isn’t a new idea. Apple produced a compatibility layer called Rosetta when they came out with OSX, to allow older Macintosh applications to work. Unfortunately from everything I’ve read, that compatibility layer was very slow. The new part of this idea is to use virtualization to provide a fully functional virtual machine to run the compatibility layer in. This would have the effect of drastically improving the performance of the compatibility layer, as opposed to writing it as a dynamic old-API-to-new-API translator, like Apple’s Rosetta. It would also simplify the isolation of the compatibility layer from the secure core. Also, if Microsoft uses virtual machines to host the compatibility layer, then the compatibility layer is already written. It’s called Windows Vista. They would just have to strip out unneeded parts, so that it just provided the facilities necessary to run legacy apps, and away they could go.
This is my million dollar idea of the day.