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?
Quite simply, I don’t think anyone at MS has cared about the mobile market until recently. They had such high marketshare just because there was no competition, and because there was no competition they didn’t have to create a quality product.
I think they are slowing moving away from direct legacy support, as they’ve come to terms with the fact that it is just too much of a burden. Rather, I see them switching more and more to virtual OS layers. Doubt they would, or even could, be as bold as Apple and just say something is deprecated.
I’m not so sure it is accurate to describe MinWin as the slimming down of the Windows kernel. As I understand it, the Windows kernel is actually quite small, stable, and effective. It is the crap that sits on top of the kernel that is in dire need of slimming down. Yeah, sure there is a pile of hacks in the kernel too in order to support some of that higher-layer cruft, but that’s true of Linux as well.
Your other points about schedule vs engineering are valid, but quite honestly I feel that the problem is more of the “doomed to re-invent” variety. I could go on for hours about COM, IPC, RPC, and other disasters of strongly typed external interfaces that are at the core of the problem. However, the real issue stems from an systematic (not just in engineering) misunderstanding of composition and evolution. Contact me off the record sometime for a more, um… “colorful”… explanation of why Microsoft platforms are the way they are.
@Tom
I agree with what you said about MS’s view of the mobile market. They’ve competed with Palm for some time, but I think Palm OS was never an overly strong competitor to WinCE/WinMo like the iPhone OS and Android now are.
I also think you are right in saying that they will move more toward a virtual OS to deal with the legacy problem. I’m really surprised that they haven’t attempted this already to a larger extent (I know Win7 has some WinXP virtualization, but I wouldn’t consider it to the same extent as, say, Mac OS X and OS 9.)
@Brandon
You are right in that I shouldn’t have made it sound like the kernel itself needs to be slimmed down. What I was trying to say, is that it seems the kernel fits into the system in such a way that it actually has dependencies on the stuff that sits on top. At least that’s the impression that I got reading about this project, mostly from the story about how deploying a system with just a kernel and minimal shell was not possible.
It’s hard to say from the outside how things are and I don’t know much about the public information published on Windows internals, so what I’ve just said might still be inaccurate. I suppose it’s possible that the kernel itself does not have dependencies on higher layers, but instead its all of the lower level shell / system api stuff with dependencies that go up the stack. Either way, it sounds like circular dependency hell.
Your point about doomed to re-invent is an interesting way to look at this. I think it’s certainly something that Microsoft has to deal with (as well as any other company/organization maintaining the same software over many years). However, the sense I get with the MinWin project is that they are not so much reinventing anything this time as simply trying to organize and understand the system that they have in a better way. Then again, maybe they have had to reinvent many of their internal structures and systems to accomplish the goals of MinWin, the extent of something like this is not clear to me.
Also, I’m curious as it seems that both of you just saw this post of the first time today, even though it was posted two months ago. Did this just pop up in your rss readers? It’s hard for me to know when that sort of thing is working well or completely broken.
Yup, just showed up in Google Reader yesterday.
Quite simply, I don’t think anyone at MS has cared about the mobile market until recently. They had such high marketshare just because there was no competition, and because there was no competition they didn’t have to create a quality product.
I think they are slowing moving away from direct legacy support, as they’ve come to terms with the fact that it is just too much of a burden. Rather, I see them switching more and more to virtual OS layers. Doubt they would, or even could, be as bold as Apple and just say something is deprecated.