Engineering Windows 7

Welcome to our blog dedicated to the engineering of Microsoft Windows 7

Reflecting on a few recent threads…

Reflecting on a few recent threads…

When we kicked off this blog, the premise was a dialog – a two-way conversation about the engineering of Windows 7.  We couldn’t be happier with the way things have been going in this short time.  As we said we intended to do, we’ve started a discussion about how we build the product and have had a chance to have some back and forth in comments and in posts about topics that are clearly important to you.  To put some numbers on things, I’ve personally received about 400 email messages (and answered quite a few) and all total we have had about 900 English language comments from about 500 different readers (with a few of you > 10 comments).  Early numbers show we have about 10x that latter number in readers+page views.

A number of folks on the blog have asked for more details about how we build Windows—what’s the feature selection process, the daily build process, globalization, and so on.  And in keeping with our new tradition of seeing the other “side” of an issue, many folks have also said they feel like they have enough of that information and want to know the features.  So in this post I want to offer a perspective on a couple of features that have been talked about a bunch, and also a perspective on talking about features and feature selection.

We love the response.  We have seen that some topics have created a forum for folks to do a lot of asking for features, and we will do our best to respond in the context of what we set out to do, which is to have a discussion about how Windows 7 is engineered, including how we make choices about what goes in the product.  I admit that it might be tempting (for me) to blog a big long list of features and then say “give us feedback“.  It is tempting because I have seen this in the past and it is a certainly an easy thing to do that might make people feel happier and more involved.  However, there are some challenges with this technique that make these sorts of forums less than satisfying for all of us.  First, it is “reactive” in that it asks you to just react to what you see.  Absent a shared context we won’t be remotely on the same page in terms of motivations, priorities, and so on.  This is especially the case when a feature is early and we aren’t really capable of “marketing” it effectively and telling the story of the feature.  Second, a broad set of anecdotal feedback (that is free text) is not really actionable data and doesn’t capture the dialog and discussion we are having.  Making decisions this way is almost certain to not go well with the “half” of the folks who don’t agree with the decision or prioritization.  And third, there's a tendency to feel that feedback given yields action in that direction.  These are some of the reasons why we have taken the approach of talking about how we are making Windows 7.

Some have suggested that we publish a list of features and then have a ranking/voting process.  In fact some have gone as far as doing that for us on their own web sites.  Thank you--these are interesting sites and we do look at them.  But I think we can all agree that there is also a challenge that many folks are familiar with which is that a self-selected group provides one type of feedback which is likely to be different than a group that is selected intentionally as being representative.  I was recalling an old episode of Saturday Night Live, “Larry the Lobster”, where for a toll call you could vote to save Larry from the stove or not.  We all know that is a non-scientific poll, but we also don’t even know if it is a non-scientific poll of views of animal rights or of food preferences.  I think the value of voting on specific features goes beyond just entertainment, but we also have to spend the energy making sure we are thinking about the issues within the same context.  We also want any sample of customers we do to be representative of either the broad base of customers or the specific target customer “segment”.

Thus a big part of this blog is about creating a forum where we hear from each other about what is important and what our relative contexts are that we bring to the discussion.  That’s why we think about this as a dialog—it is not a question and answer, request and response, point and counter-point, or announcement and comment.  Personally, I am genuinely benefiting from the dynamic nature of what we are going to blog about based on those participating in the blog.  So this is much more like a social where we all come to meet and talk, than a business meeting where we each have specific goals or a training class where one party does all the talking. 

In that spirit, it seems good to continue a conversation about a few points that have come up quite a bit and I think folks have been asking for a point of view on these.  Each is worthy of a post on its own, but I also wanted to offer a point of view about some specific feature requests.  Let’s look at some topics that have come up as we have talked about performance or the overall Windows experience.  Because this is “responding” to comments and input, there is a potential to delve into point/counter-point, I am hoping we can look back at the “context” discussions we have been having before we get too deep in debate.

Profile-based Setup

In terms of feature ideas, a number of you have suggested that we offer a way at setup time to configure Windows for a specific scenario.  Some have suggested scenarios such as gaming, casual use, business productivity, web browsing, email, "lightweight usage", and so on.  There is an implication in there that Windows could perform (speed, space, etc.) better if we tune it for a specific scenario along these lines, but in reality this assumption probably won’t pan out in a consistent or general way.  There are many ways to consider this feature—it could be one where we tweak the contents of the Start Menu (something admins do in corporations all the time), or the performance metrics for some low level components (disk block size, tcp/ip frame sizes, etc.) or the level of user interface polish (aka “eye candy” as some have called it), and so on.  We’ve seen scenario or role-based setup as a very popular feature for Windows Server 2008.  In the server environment, however, each of these roles represents a different piece of hardware (likely with different configurations) or perhaps a specific VM on a very beefy machine, and also represent very clearly understood "workloads" (file server, print server, web server). 

The desktop PC (or laptop) is different because there is only a single PC and the roles are not as well defined.  Only in the rarest cases is that PC dedicated to a single purpose.  And as Mike in product planning blogged, the reality is that we see very few PCs that run only a specific piece of software and in nearly every study we have ever done, just about every PC runs at least one piece of software that other people do not run.  So we should take away from this the difficulty in even labeling a PC as being role specific.  Now there are role-specific times when using a PC, and for that the goal of an OS is to adapt well in the face of changing workloads.  As just one example of this in Windows Vista, consider the work on making the indexer a low priority activity using the new low-priority I/O APIs.  I know some have mentioned that this is “something I always turn off” but the reality is that there is an upfront cost and then the ongoing cost of indexing is indeed very low.  And this is something we have made significant improvements in for Desktop Search 4.0 (released as a download) and in Windows 7.  The reality is that a general purpose OS should adjust to the workloads asked of it.  We know things are not perfect, and we know many of you (particularly gamers) are looking for every single potential ounce of performance.  But we also know that the complexity and fragility introduced by trying to “outsmart” core system services often overshadows the performance improvements we see across the broadest sampling of customers.  There’s a little bit of “mythbusters” we could probably embark on so -- how about sharing the systematic results you have achieved and we can address those in comments?

Another challenge would be in developing this very taxonomy.  This is something I personally tried hard to do for Office 95 and Office 97.  We thought we could have a setup “wizard” ask you how much you used Word, Excel, PowerPoint, and Access, or a taxonomy that asked you a profession (lawyer, accountant, teacher).  From that we were going to pick not just which applications but which features of the applications we would install.  We consistently ran into two problems.  First, just arriving at descriptors or questions to “categorize” people failed consistently in usability tests—the classic problem when given a spectrum of choices people would peg all of them in the middle or would just “freeze up” feeling that none fit them (people don't generally like labels).  Second, we always had the problem of either multiple users of the same PC or people who would change roles or usage patterns.  It turns out our corporate customers learned this same thing for us and it became routine to “install everything” and thus began an era of installing the full suite of products and then training was used to narrow the usage scenarios. 

The final challenge has been just how do you present this to customers and when.  This sequence of steps, the out of box experience, or OOBE, is what you go through when you unbox a PC (the overwhelming majority of Windows customers get it this way) or run setup from a DVD (the retail “packaged product” customer).  This leads to the next item which is looking to the OOBE as a place to do performance optimizations.  Trying to solve performance at this step is definitely a challenge and leads to our “context” for the out of box experience.

Out of Box Experience - “OOBE”

The OOBE is really the place that customers first experience Windows on a new PC.  As many have read in reviews of competitive (to Windows PCs) products the experience goals most people have relate to “how fast can I get from packing knife to the web”.  For Windows 7 we are working closely with our OEM partners to make sure it is possible to deliver the most streamlined experience possible.  Of course OEMs have a ton of flexibility and differentiation opportunties in what they offer as part of setting up a new PC, and what we want to do is make sure that the “core OS” portion of this is the absolute minimum required to get to the fun of using your PC. 

By itself, this goal would run counter to introducing a “profiling” or “wizard” help gauge the intended (at time of purchase) uses/usage of a PC.  That doesn’t mean that an OEM could not offer such a profiled experience that could provide a differentiated OOBE experience, but it isn’t one we would ask all customers to go through as part of the “core OS” installation. 

I recognize many of you as PC enthusiasts have gone through the experience of setting up a Linux PC using one of the varieties of package managers—probably many times just to get one installation working right.  As you’ve seen with these installs (especially as things have recently converged on one particular end-user focused disti), the number of ways you can produce a poorly running system exceeds the number of ways you can produce a fully functional (for your needs) setup  In practice, we know that many components end up depending on many others and ultimately this dependency graph is a challenge to manage and get right, even with a software dependency manager (like Windows Installer).  As a result, we generally see customers benefitting from a broad base of software on the machine so long as that does not have a high cost—developing that install is a part of developing the product, balancing footprint, architectural connections, system reliability, etc.

So our context for the out of box experience would be that we don’t want to introduce complexity there, where customers are least interested in dealing with it as they want to get to the excitement of using their new PC.  I think of it a bit like the car dealers who won’t hand you the keys to your car until you sit and watch a DVD about the car and then get a guided tour of the car—if you’re like me you’re screaming “give me the keys and let me out of here”.  We think PC buyers are pretty much like that and our research confirms that around the world.

We also recognize that there are expert users who might want to adjust the running system for any variety of reasons (performance, footprint, surface area, etc.)  We call this the “Turning Windows Features On or Off” which is the next item we’ve heard from you about.

Windows Features

If we install the typical installation of Windows as one that is basically all the features in the particular SKU a customer purchased, then what about the customer that wants to tweak what is installed and remove things?  Customers might want to remove some features because they just never use them and don’t want to accidently use them or carry with them the “code” that might run.  Customers might be defining a role for the PC (cash register) and so making sure that specific features are never there.  There are many reasons for this.  For many releases Windows has had the ability to install or uninstall various features that are part of Windows.  In Windows Vista this was made more robust as the features are removed from the running system but also remained available for reuse without the original DVD.  We also made the list of features longer in Windows Vista.

For Windows 7, many have asked for us to make this list longer and have more features in it.  This is something we are strongly considering for Windows 7 as we think it is consistent with the design goals of “choice and control” that you have seen us talk about here and quite a bit with Internet Explorer 8.0 beta 2.

Of course we have the same challenge that Linux distributions have which is you can quickly remove things could break other features by being removed, and then you have to have all the complexity of informing the customer of these “dependencies” and ultimately you end up feeling like everything is connected to everything else.  On some OS installations this packaging works reasonably well because there is duplication of features (you pick from several file browsers, several web browsers, several office suites, several GUIs even).  The core Windows OS, while not free from some duplication, does not have this type of configuration.  Rather we ship a platform where customers can add many components as they desire.

For customers that wish to remove, replace, or just prevent access to Windows components we have several available tools:

  • Set Your Default Programs (or Set Program Access and Defaults).  In Vista these features allow you to set the default programs/handlers by file type or protocol.  This was introduced in Windows XP SP1.  In Vista the SYDP was expanded and we expect all Microsoft software to properly register and employ this mechanism.  So if you want to have a default email program, default handler for GIF, or your choice of web browser this is the user interface to use.  Windows itself respects these defaults for all the file types it manages. 
  • Customizing the start menu or group policy.  For quite some time, corporate admins have been creating “role-based” PCs by customizing the start menu (or even going way back to progman) to only show a specific set of programs.  We see this a lot in internet cafes these days as well.  The SPAD functionality takes this a step further and provides an end-user tool for removing access to installed email programs, web browsers, media players, instant messengers, and virtual machine runtimes. 
  • Removing code.  Sometimes customers just want to remove code.  With small footprint disks many folks have looked to remove more and more of Windows just to fit on SSDs.   I’ve certainly seen some of the tiny Windows installations.  The supported tool for removing code from Windows is to use the “Turn Windows Features on and off” (in Vista) user interface.   There are over 80 features in this tool in premium Vista packages today.

Many folks want the list of Windows features that can be turned on / off to be longer and there have been many suggestions on the site for things to make available this way.  This is more complex because of the Windows platform—that is many developers rely on various parts of the Windows platform and just “assume” those parts are there.  Whether it is a media player that uses the windows address book, a personal finance package that uses advanced print spooling, or even a brand new browser that relies on advanced networking features.  These are real-world examples of common uses of system APIs that don’t seem readily apparent from the end-user view of the software. 

Some examples are quite easy to see and you should expect us to do more along these lines, such as the TabletPC components.  I have a PC that is a very small laptop and while it has full tablet functionality it isn’t the best size for doing good ink work for me (I prefer a 12.1” or greater and this PC is a 10” screen).  The tablet code does have a footprint in memory and on the 1GB machine if I go and remove the tablet components the machine does perform better.  This is something I can do today.  Folks have asked about Photo Gallery, Movie Maker, Windows Mail, Windows Calendar…this is good feedback and good things for us to consider for Windows 7. 

An important point is that a vast majority of things you remove this way consume little or no resources if you are not using them.  So while you can reduce the surface area of the PC you probably don’t make it perform better.  As one example, Windows Mail doesn’t slow you down at all if you don’t have any mail (or news) accounts configured.  And to be certain you could hide access with SPAD or just change the default protocol handler to your favorite mail program. Another example is you can just change the association and never see photogallery launched for images if that is your preference.  That means no memory is taken by these features.

This was a chance to continue our discussion around how we are learning from our discussion and some specifics that have come up quite a bit.  I hope we are gaining a shared view of how we look at some of the topics folks have brought up. 

So this turned into a record long post.  Please don’t expect this too often :-)


Leave a Comment
  • Please add 8 and 8 and type the answer here:
  • Post
  • Many many many THX Mr. Steven !!!!!

  • Where is this forum to discuss windows 7 features?

  • @quillaja

    the post of MR. Steven seems fairly clear.

    expects the PDC to see something .

  • Hi, very interesting reading. I think for a readers point of view, generally, it might be more interesting to talk about "specific" or "general" features you guys are working or planning about, like you discussed in this post; rather than how "planning and decisions are made", discussed on some of the previous posts.

    I use computer a lot. I am a blogger, a web designer/developer (by default, which means I hate IE:)), gamer, programmer (rather amateurish). In my home office, I use MacOS X, Windows Vista SP1, and Ubuntu Hardy and Ibex (nightlies). The meaning of telling you these, is to let you know that I am a heavy computer user, with reasonably good understand about technologies.

    Let me admit it in advance, that I absolutely dislike window vista (or any version for that matter). The main reason I use it is not because I love it, but because of habit and some of the applications I heavily use are not available for other OS; so I really don't have a choice. However, I do want to see windows 7 as a huge improvement over windows vista (not evolutionary - but revolutionary); this is long overdue. Competition breeds innovations, and it's the customers who benefits from them, so I am happy to help criticize windows vista, to help you improve windows 7 :).I see myself reading this blog and engaging (sometimes) on discussions.

    Want to bring out 2 points.

    1) Can you work with OEM distributors (like DELL), to give us an option to use "added" application installed by default by the distributors? After I buy a computer, during the first bootup, I want to have the option to choose whether I want third party applications installed or not. I don't want to have trial versions and crapware shove down my throat by default.

    2) What is your take on file systems for windows 7? Are we going to see a new, improved file system? Something - that doesn't needs to be fragmented?

    Bonus - fun question. Do you guys use Linux (there is no shame to share, we all love technology here :)), if so which distro did you guys choose to compare/contrast to help developing windows 7?

    ps, slight typo on your article, it's "distro" not "disti", referring to Linux distributions.

  • Thank you for a very nice post.  The ability for users to opt out of undesired features is an important part of just about every OS.  For me, I actually prefer to have all the features installed "just in case", but then to later "turn off" anything with a significant performance or usability hit.  In many cases, however, it is very difficult to tell what performance or disk space costs each feature is incurring, and so there is a general frustration when we can't turn something off or delete it.

    Assuming that disk space usage for a given feature or application is not significant (and it rarely is anymore in my experience), my only other concern is the respective performance cost.  If there were some way to quantify the run-time performance costs of features and applications, it would be a great tool when OS performance does slow down.  This would help significantly reduce the frustration of trying to troubleshoot performance issues.  In the occasionally desparate attempt to improve performance, it would prevent the unnecessarily exclusion of otherwise benign features/programs.

    Again, thanks for the post.


  • I think there is always a bit of a fear that with a voting system users will come up with unreasonable, impossible or just plain stupid ideas. The concept of the 'wisdom of the crowd' has been debated forever, however I think in the right situation it really can work.

    Take Long Zhengs Aero Taskforce for example, Here are the current top suggestions:

    - Safely Remove Hardware dialog is programmer-oriented, not user-oriented

    - Performance options dialog has available space for list, doesn't use it, isn't resizable

    - Unsigned driver security warning doesn't give you any evidence to make a decision on

    It's simple constructive feedback. In contrast I've seen a number of people submit the usual whacked ideas like, "MS should rewrite Windows!!!", "MS should give up IE and use FF for default" and so on. These get rapidly voted down and removed.

    Anyway, this is interesting stuff.

  • Wow! Did you actually mention Linux and describe features? I use Linux too Steven, it's a great operating system! Ubuntu Hardy 8.04 here.

  • hey thnx for the great post.

    In Longhorn there were some features that didn't make it into the final build (winfs, 3d rotating windows, virtual folder etc), is it still on? Also It would be nice if windows are dockable on a developer i'd find it real handy. I'd also like a explorer for developer tools (like game explorer :P) and finally are there any api's for superfetch?....i'd love to prioritize my apps.

  • I uninstall some windows features mainly because of the principle: the less components system has - the more it's reliable.

  • I guess Microsoft's ultimate challenge for creating an OS is making it as easy as possible for users to control things, while remembering that users are lazy and like things to work the first time.

    The lazy bit is significant. It's a bit of a chore to dig through help files and documentation (which are often written from a developer's POV, which is often a little less decipherable for the average user), so an enhanced tool for those of us who wonder "what is this?" would be nice.

    Since everyone likes to know what they can do to improve the performance of their systems, a basic, intermediate, and advanced guide to the improving system performance, included with the OS with a simple GUI, might be fun. But on the other hand, I've never written an operating system before, so it might be less fun than I am imagining. Just my two cents. ;)

  • On a side note, what I wouldn't give for an edit button. Writing these posts at close to 3 in the morning is not conducive to good grammar.

    Tell me if I'm wrong here, but shouldn't the various APIs built into Windows be separate from the applications which depend on them? By my (albeit not necessarily informed) reasoning, troubles shouldn't arise if someone decides to remove an application which happens to be tied to a core function of the operating system.

  • I can imagine the difficulty the Windows team faces when it comes to giving the choice of uninstalling a component because some other dependency just assumes it to be to there. For existing/legacy products that are no longer maintained, this can create even more compatibility issues than Vista created, which users who are requesting this aren't realizing. To that effect, Vista does a decent job of offering control over the correct components (though MS still could've allowed uninstalling/turning off language-related components, Movie Maker/DVD Maker, *some* Administrative Tools and Media Center). Also, every component whose disk and memory footprint is relatively small (good example of Windows Mail) and which doesn't affect performance need not be added to the "Windows features" list. I'd prefer the profile-based-turn-off-things setup approach at OOBE time or whenever a new user profile is created.

    For disk space footprint, Vista has some serious design flaws IMO with the servicing stack (%Windir%\WinSxS) and the driver store (%Windir%\system32\DriverStore). And the Office team should also learn a lesson or two on performance and disk footprint from the Windows team. For example, making Local Installation Source mandatory for Office 2007 was a very bad decision.

  • Great post in this blog! I just couldn't resist to write an answer here.

    I think the Profile-Based setup combined with the Windows Features provide a great possibility to expand upon:

    For me this would mean, that once I've chosen where I want to setup Windows to I could make a few choices about what of Windows I want to be installed.

    For example:

    - I chose the drive, then press next...

    - ...and am presented with the possibility to choose between 'Install Windows completely with all features (recommended for the everday user)' or 'Make an advanced installation of Windows without every feature'.

    - If I chose the second way, I get to a screen asking me to specify what features I want. I suppose the features should be categorized within quite wide ranges like 'Multimedia' or 'Internet' or 'System Components' with subcategories like 'Windows Mail' or 'Media Centre' or even 'Superfetch'.

    The hard part here would be the categorizing I think, but the work put into it would pay off quite soon. And one more thing: write decent descriptions of every component listed, so that you don't sit there and wonder "wtf? what does this do?"

    I myself have tried Windows Vista but have found it not suitable for my use case. And that's because of the footprint of the OS and with it interconnected the speed and responsiveness. Right now I'm using Windows XP which I've edited with nLite to fit my needs (omitting Internet Explorer, Media Player and different other applications I never need nor use)... and I'm perfectly happy with it.

    I haven't even encountered any incompatibilities with programs from third parties, so I think that making a partly-installed Windows 7 compatible with programs should be less of a hassle than one might think.

    One more thing though: If Windows 7 doesn't offer me the possibility to select what I need, I'm definitely going to switch over to Linux for good. I hope you will do a great job, just as it seems until now. This post of yours made me hoping for a really good Windows version again. *thumbs up*

    Greetings Decryphe

  • Firstly, many thanks to all MS-people sharing information with us, mere bread-cumbers .It’s quite informative, yet I suppose many of us still feel kind of underfed. However those tiny pictures Jon DeVaan placed just before are so cutely teasing with us;) But let me get to the point.

    In my opinion the structure of Linux comprising of independent packets is not as hard to maintain as you present it. Hardly anybody expects of Windows to be as granular in its ability to install features but I suppose many of us would like to see “packets” Windows Movie Maker or Internet Explorer to be FULLY removed from installation. The idea of “core OS” for me is a set of APIs that everybody holds on to. So uninstall of e.g. Internet Explorer wouldn’t break anything at all. Also many people don’t like to have “code on disk” even if it’s only 50 MiB. The reason for that is security you subsequently underline you think as one of the main areas of writing an operating system. So the ability for the advanced user placed somewhere in Control Panel to INADVERTENTLY REMOVE  e.g. “iexplore.exe” file, accompanied by a clear and informative warning , should not be as hard, or is it?

    Most of the user want OOBE experience so be it. Give them “eye candies” and everything you want but allow the rest of us, be it 10% or less, to have more control over how our own (or to be precise - genuinely licensed) system works. There are numerous functions of Windows that could be safely removed without harm (or it should be as long as you understand modular construction the way I do – that is everybody, Microsoft included, has a known API and sticks to it without dirty tricks under the hood), be it IE, IIS, WMP, WMM, Solitaire (the most important application in my life), or Media Center. Am I mistaken that this kind of attitude would not lead to any breaks in the system if user is sure of what he/she is doing?

    Personally I do use Visual Studio that requires IE and IIS, and I assume I understand you can’t get rid of integrated help system, or maintenance tools even if user has its own preferences for its kind, but still there are numerous groups of program that I, and many of people here I hope, wish to get out of their disk just because it should be possible since you throw an idea of modular construction.

    I’ve never thought I’d write “IE” so many times in “against-context” since I like the browser and I’m happy with the progress in IE8 Beta 2. But still the need to restart whole system after upgrading IE-relating components, in my humble opinions, stands against modular and probably against fair competition too.

    Lastly, I’d like to post a bit off-topic question – does anybody know why Windows has to place in its winsxs folder a hundreds of MiB in size copies of WMV files instructing user during setup of Media Center and so called Public Videos brought as an example? Do I really have to have 2 (once in core files and winsxs copy in x86_microsoft-windows-ehome-disp-calibration_31bf3856ad364e35_6.0.6000.16386_none_da29c3cc6a8cb9a6)x 40MiB of my space reserved  to be taught how to setup my screen I’ll never use, unable to get rid of it? Do new WMVs have version 6.0.6001.18000?! – I assume that invasion in winsxs folder is unadvisable. DLLs, EXEs, INFs, SYSs, and so on – OK, but WMV file? I don’t remember DLL-hell with WMV files, and I thought that was one of the main reasons  when introducing that ever-growing folder.

    Keep on with the good work!

  • A million aplogies. I wrote "INADVERTENTLY REMOVE" where it should be "ABSOLUTELY REMOVE". I'll have to get myself some English lessons, I suppose...

Page 1 of 9 (126 items) 12345»