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 :-)

--Steven

Leave a Comment
  • Please add 3 and 3 and type the answer here:
  • Post
  • That was a great post. I hope you don't invest time in those features - because (just as you wrote) aren't that important.

    But you should visit http://www.aerotaskforce.com/ regularly.

  • Hi,

    I think, that you should think about something like that:

    1. main core (Windows directory) will have kernel, some drivers, setup and win32 subsystem

    2. all other things (ms-dos subsystem, control panel, explorer, IE, wordpad, performance logs and alerts, etc. etc.) will be put in Program Files and will be optional - you will have 3 options for each (active, inactive, uninstalled). Inactive will mean - no ability of using it, no components loaded on startup. Uninstalled - removed from HDD, available on installaction CD only.

    It will be very important to have ability of separating applications from each other (separate Registry, etc. etc.) and one central place for setting, what is run (processes, services, etc.) during startup in new system. It would be good to have one system, which will allow for check for upgrades/fixes for each component.

    3. it will be possible to make file with info, what and how is installed and use during next system installation.

  • "It will be very important to have ability of separating applications from each other (separate Registry, etc. etc.) "

    And what about apps using other apps settings, like Google Chrome importing Firefox settings? Or apps looking in the registry to figure out if an other app is installed?

  • One thing to consider in posting suggested features is to start with the problem you want to solve.  I think that helps in the discussion quite a bit.  Often times there are current or potential solutions that might be on a different trajectory than the proposed solution.

    --Steven

  • Hi Steven,

    Interesting post (although a lot to take in... shorter posts might help a lot in future!)

    Something I would like to see is a desktop equivalent of server core - you make the point that desktop OSs don't lend themselves to roles and features in the way that Windows Server 2008 does, but Office has had the concept of "install on first use" for a while now.  If I knew that my dafeult WIndows installation was minimal (hence smaller attack surface) but then if I wanted to use some new functionality it was cached locally (patched by Windows update) and could be enabled on the fly, then that would be A Good Thing.

    Mark

  • >> "It will be very important to have ability

    >> of separating applications from each

    >> other (separate Registry, etc. etc.) "

    > And what about apps using other apps settings,

    > like Google Chrome importing Firefox settings?

    > Or apps looking in the registry to figure out

    > if an other app is installed?

    the best would be to have well defined interfaces for making such things (and nothing more). currently (to have compatibility) Microsoft could think about such solution: when there is run new application, system creates new physical Registry file for it - all new keys put there by this application are put in this file. We will have not big performance improvement with current applications (we will have still one big logical Registry), but uninstalling application will be much easier... When application X will try to change keys from application Y, system will ask user for agreement.

    something like that is possible (see Sandboxie).

  • I would like to know which technologies are used to implement new Windows features. How much is added as C APIs, how many new COM interfaces (only shell or also other parts of the OS?), will we see managed code in Windows?

    Can we expect a native UI framework on top of milcore? Maybe one that can be shipped like gdiplus with our apps so that it will also run on Vista? (Just a DLL please, no 30 MB installer)

    So far we only looked at Win7 from a user perspective, but what can developers expect from it? Can we expect VC10 to ship in sync with Win7 so that we have access to new features?

    There was a lot of hype about "Vista apps" in the past, now 2 years later a Yahoo! Messenger Beta is all that we got.

  • Hi,

    > One thing to consider in posting suggested

    > features is to start with the problem you

    > want to solve.  I think that helps in

    > the discussion quite a bit.  Often times

    > there are current or potential solutions

    > that might be on a different trajectory

    > than the proposed solution.

    1. I don't want to see too much DRM in my system. It doesn't work, will never work as expected and makes problems only. The same I don't want to have things hidden by system in my filesystem (alternative streams)...

    2. I want to have ability of running some applications, but I don't want to see worse performance after longer time after installation and with more applications installed.

    3. if system will separate more applications, I will need probably less "protection" applications, which cost and need my resources.

    4. I will want to remove all not required by me components. less components = less security issues.

    5. I don't want to hunt for applications, which are run on the startup.

    6. I want to send some informations from my computer, when and how I want. It means - I want to use my favourite browser for Windows update, I want to control network routing/access for all programs.

  • Hi,

    > One thing to consider in posting suggested

    > features is to start with the problem you

    > want to solve.  I think that helps in

    > the discussion quite a bit.  Often times

    > there are current or potential solutions

    > that might be on a different trajectory

    > than the proposed solution.

    1. I don't want to see too much DRM in my system. It doesn't work, will never work as expected and makes problems only. The same I don't want to have things hidden by system in my filesystem (alternative streams)...

    2. I want to have ability of running some applications, but I don't want to see worse performance after longer time after installation and with more applications installed.

    3. if system will separate more applications, I will need probably less "protection" applications, which cost and need my resources.

    4. I will want to remove all not required by me components. less components = less security issues.

    5. I don't want to hunt for applications, which are run on the startup.

    6. I want to send some informations from my computer, when and how I want. It means - I want to use my favourite browser for Windows update, I want to control network routing/access for all programs.

    In other words: I want to control my computer, not my computer will control me.

  • 7. when I will uninstall something, I don't want to see its' part in my system.

  • additional note for point 5: When I install some driver, I don't want to see, that something is run on the notification area or there are some strange processes run (in Task Manager). When I will disable device, everything related to it should be disabled too (for example services).

    8. I don't want to see many processes with the same name run in default installation - for example many svchost. It doesn't say anything.

    9. when I will buy PC with WIndows, I want to have control over creating partitions, disk and directories, where system will be put, etc. etc. No more deciding for me.

  • 10. it would be good to have one central place for updating installed apps (for ability of deciding, which one and when will be updated and what updates will be installed)

  • @marcinw: I agree. Actually Chrome shouldn't even be able to read Firefox stored passwords. Chrome could also be malware.

    As a developer I also don't use the registry anymore, I use XML files to store my settings. That also makes the app portable on USB drives etc.

    For me is the registry and all the DLLs in system32 and where not else a showstopper when it comes to upgrading Windows/moving to a new PC.  The start menu doesn't even fit on the screen at 1280x1024 anymore and there is no unnecessary app. And I can't justify several days setting up a new PC just to get everything up and running again. I have a unused new dual-core at work and a new quad processor (4 Opterons) at home because I find no motivation to set them up. I also noticed that my colleagues also keep their old PCs and use a switch. Some even have 3 under their desks. No one really moves to the new one. Microsoft really needs to fix this situation, otherwise they will find themself in a "good enough" situation where no one wants a new PC anymore.

    But Microsoft isn't the only one with such problems, just saw an ad from Gilette where they want to get people to use the Gilette Fusion rather than the Mach3. The point is that people are happy with their Mach3 and don't want to spend more for the Fusion. Why should they, the Mach3 is "good enough". Even today no one really buys Vista, they get it with their new PC. I've purposely choosen Linux for my Eee, I'm not going to pay the Windows tax because there is no compelling reason.

    Actually I think with all the unused processing power today I'll degrade Windows to a VM and use Linux as the host. Currently I use XP as the host OS and run Linux, Win2000 and Vista in a VM to compile/test my apps, but I really don't see a compelling reason anymore why Windows needs to be the host. That would solve the problem with moving to new hardware.

    I'd say virtualization will change the IT landscape.

  • @Andre,

    my PC is tool for me and is used for various tasks. I was replacing it, when I had seen profits only. Currently I'm programming and testing apps. I'm using various Linuxes, Microsoft tools and many other solutions.

    I agree, that Microsoft has got big challenge now. But the truth is, that having win32 compatibility is very important here (and that's why we will have probably still Registry).

    I will definitely not buy computer(s) for new OS/new OS version in situation, when it removes more control from me (DRM !!!!), needs more resources and doesn't make any revolution in security/stability features (like Vista). New system should be not too visible and should not annoy me with many questions (like XP). if Windows 7 will be not so good (like products from other manufacturers), there is big possibility, that I will use it much less or will not use it at all.

  • It would be nice if you could do a post on why Windows is so big. I never really understood it fully, although my basic knowledge is that Vista is a compressed image, that is expanded when copied to your hard disk and expands. But what in Vista itself makes it use up so much disk space 10 to 11 GBs. I know that disk space in this day and age of large 500 GB to 1 TB disk is not an issue for some, but it still is a big interest of mine, to know why Windows went from 1.5 GB (XP) to its current size. Is it the drivers, applications, services?

    I also would like to know how are you balancing this in Windows 7, especially with core consumer features in the OS becoming Windows Live services like Photo Gallery, Live Mail, MovieMaker. How will you make the transition from Vista which has out of the box unique consumer features now free services for XP, Vista and 7. What will be key differentiators?

Page 4 of 9 (126 items) «23456»