February 10th, 2020

Survey of Windows update formats: The Full update

In August 2018, Microsoft announced a new design for how updates are delivered. How did they manage to get the size of the updates so much smaller while simultaneously reducing memory usage and update negotiation time?

To understand what changed, you first need to understand how things were.

Let’s focus only on changes that apply to a specific major release of Windows. (You can repeat the exercise for each major release.) Let’s call the initial release M0. And suppose there have been five monthly cumulative updates, call then M1, M2, M3, M4, and M5 (the latest version).

There are two general mechanisms that Windows Update uses to update a file: One way is to send an entire replacement file. Another is to send a patch (sometimes called a delta) that updates the file currently on the system to the latest version.

There are obvious trade-offs here. The full file works regardless of what version the customer is upgrading from, whereas the patch works only if the customer has the specific version that the patch was designed to upgrade. On the other hand, the full file is large, whereas the patch is much smaller.

  Full file Patch
Size Large Small
Applicability Can update any version Can update only one version

Suppose that the file F was updated in M1 and M2, was unchanged in M3, and was updated again in M4 and M5. Here are all the possible full files and patch combinations.

Update Full file Patch base
M0 M1 M2 M3 M4
M1 M1 M0 to M1        
M2 M2 M0 to M2 M1 to M2      
M3            
M4 M4 M0 to M4 M1 to M4 M2 to M4    
M5 M5 M0 to M5 M1 to M5 M2 to M5   M4 to M5

Note that the rows and columns for M3 are empty because there was no change to F in M3. Updating to M3 is the same as updating to M2.

The simplest kind of update is the Full update. It contains a copy of every component that has changed since the last major release. In our example, this would be the components that changed between M0 and M5. It guarantees that you can get from any version to the latest version, but it’s also very large (around 1GB).

For the file F, the corresponding Full updates would contain the files from the Full file column.

Update Full file Patch base
M0 M1 M2 M3 M4
M1
M1
M0 to M1        
M2
M2
M0 to M2 M1 to M2      
M3
 
         
M4
M4
M0 to M4 M1 to M4 M2 to M4    
M5
M5
M0 to M5 M1 to M5 M2 to M5   M4 to M5

The breakdown of files for Full updates is as follows:

Full update Contents
M1 M1
M2 M2
M3 M2
M4 M4
M5 M5

Note that Full update M3 contains a copy of F from M2. That way, if somebody currently running M1 needs to update to M3, the Full update will get them the M2 version of the file, which is the correct version for a system that has been updated to M3.

Feature summary of Full updates:

  • Full updates can successfully update all customers, even those who installed a hotfix outside of the monthly servicing cycle.¹ Since full copies of modified files are delivered, it doesn’t matter what your starting point is. You always end at the same place.
  • Full updates are very large (1GB).
  • Full updates require very little negotiation with the server. Every customer downloads the same update.
  • Full updates are cache-friendly, because every customer downloads the same update. Therefore, caching features like caching proxies, BranchCache, and peer-to-peer delivery are effective.
  • Full updates do not require significant server support. Once the package is negotiated, it is delivered in its entirety.

Next time, we’ll look at the Delta update, which despite its name doesn’t actually contain deltas.

Bonus chatter: If a week of articles about Windows update formats is too tedious, you can read this short version: Windows 10 quality updates explained and the end of delta updates.

¹ By policy, every out-of-cycle hotfix is rolled into the next cumulative update, so installing a cumulative update will never cause a hotfix to be lost.

Topics
Other

Author

Raymond has been involved in the evolution of Windows for more than 30 years. In 2003, he began a Web site known as The Old New Thing which has grown in popularity far beyond his wildest imagination, a development which still gives him the heebie-jeebies. The Web site spawned a book, coincidentally also titled The Old New Thing (Addison Wesley 2007). He occasionally appears on the Windows Dev Docs Twitter account to tell stories which convey no useful information.

5 comments

Discussion is closed. Login to edit/delete existing comments.

  • Jernej Simončič

    What I don’t understand is why the whole Windows update process is so painfully slow (especially if you’re running Server 2016, where the monthly updates take several hours to apply – assuming the update even succeeds, which it often doesn’t). I can usually patch my Gentoo box (which compiles everything on-the-fly, and updates every program installed on the system) faster than Windows updates just itself.

  • Dan Bugglin

    I've been wondering this for a while and hope you touch on this in this series:

    Let's say MS releases patch 1 for File A, then patch 2 for File A.

    If a user applies patch 2, is patch 1 automatically installed since they have the latest version of File A? Or does MS maintain two separate versions (until the next Service Pack or Cumulative Update) allowing the customer to opt out of patch 1 in the...

    Read more
    • Raymond ChenMicrosoft employee Author

      My understanding is that all patches are cumulative, so each patch includes all earlier patches. (There was a time where piecemeal patches were supported, and it was a nightmare getting all the dependencies right, not to mention exponentially exploding the number of configurations.)

  • Nikolas Gloy

    I seem to recall Xbox updates that were significantly larger than 1GB. I think they were 2GB or even 4GB.

    • Dan Bugglin

      Would Xboxes even reuse any Windows Update code? Xboxes are far more locked down than PCs so there are probably easier approaches to take. For example, it is impossible for an Xbox user to follow Raymond’s example and install a hotfix outside of the normal patching cycle.