Survey of Windows update formats: The Full update

Raymond Chen

Raymond

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 filePatch
SizeLargeSmall
ApplicabilityCan update any versionCan 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.

UpdateFull filePatch base
M0M1M2M3M4
M1M1M0 to M1    
M2M2M0 to M2M1 to M2   
M3      
M4M4M0 to M4M1 to M4M2 to M4  
M5M5M0 to M5M1 to M5M2 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.

UpdateFull filePatch base
M0M1M2M3M4
M1
M1
M0 to M1    
M2
M2
M0 to M2M1 to M2   
M3
 
     
M4
M4
M0 to M4M1 to M4M2 to M4  
M5
M5
M0 to M5M1 to M5M2 to M5 M4 to M5

The breakdown of files for Full updates is as follows:

Full updateContents
M1M1
M2M2
M3M2
M4M4
M5M5

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.

5 comments

Comments are closed.

    • Avatar
      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.

  • Avatar
    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 short term?

    Now what if let’s say MS releases a patch 3 for Files A and B. Then later a patch 4 for files B and C.

    A user installs patch 4 but not patch 3. What happens here?

    If File B has code for patches 3 and 4, file A would need patch 3 code as well to avoid incompatibility problems. Would it be included in patch 4? Or would patch 4 block the install of patch 3 (never seen this happen so I assume this isn’t it)?

    Or would patches of this type simply not be allowed outside of a major OS or service pack (or whatever it’s called now) update?

    • Raymond Chen
      Raymond ChenMicrosoft logo

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

  • Avatar
    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.