MinWin: Software Engineering 101

Ars Technica has a pretty interesting article about the MinWin project at Microsoft. MinWin is a software engineering project to refactor the Windows kernel into something more manageable.

But there’s always been a dirty little secret hiding underneath that iconic field of green grass. From an engineering and security standpoint, the foundation of Windows 2000 and Windows XP is absolutely horrible.

The fact that Microsoft was put into such a situation is, at the same time, surprising and understandable.  I understand how such a large software project can get out of hand quickly. When you develop software and focus on features and release dates over design and maintainability, you end up with the situation that Windows is in. Such things have been studied by software engineers for almost as long as people have been writing software.

What surprised me is that these problems did not bite them earlier and also that no one stopped to do this sort of organization work earlier. In today's market full of cell phones and other low powered portable devices, it would be huge win for Microsoft if they could reuse an existing, stable operating system kernel instead of maintaining several kernel families for different markets / use cases. I'm surprised that no one saw the benefit of such flexibility in the Windows product until now.

While reading this, I contrasted the situation of Windows to that of Linux. I find Linux (the kernel, not necessarily all the crap that runs on top of it) to be a very well engineered system. A testament to this is the extremely varied systems that Linux is able to run on (iPods, phones, PDAs, laptops, desktops, supercomputers, you name it). I'm sure this capability has been a big factor for the many companies that have built products on top of Linux. Windows probably wasn't even a consideration, since it is such an unadaptable, closed system.

The lesson-learned here: design and engineering are important and if you don't figure these things out at the start or early on, you'll spend a lot of time playing catch-up. It's really hard to change the design of a system while you add new features and capabilities. I wonder if Microsoft could have saved time and money by simply starting over, with a fresh design and system. Will Microsoft ever give up the Win32 API?