{"id":103430,"date":"2020-02-11T07:00:00","date_gmt":"2020-02-11T15:00:00","guid":{"rendered":"http:\/\/devblogs.microsoft.com\/oldnewthing\/?p=103430"},"modified":"2020-09-11T15:13:46","modified_gmt":"2020-09-11T22:13:46","slug":"20200211-00","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/oldnewthing\/20200211-00\/?p=103430","title":{"rendered":"Survey of Windows update formats: The Delta update"},"content":{"rendered":"<p>Last time, we <a title=\"Survey of Windows update formats: The Full update\" href=\"https:\/\/devblogs.microsoft.com\/oldnewthing\/20200210-00\/?p=103426\"> began our survey of Windows update formats<\/a>. We&#8217;ll continue with the Delta update.<\/p>\n<p>The <b>Delta update<\/b> is a cut-down version of the Full update by including only files that changed since the previous version. Delta updates are typically around 300<a href=\"https:\/\/devblogs.microsoft.com\/oldnewthing\/20090611-00\/?p=17933\/\">MB<\/a> to 500MB in size, which is significantly less than the typical 1GB size of a Full update.<\/p>\n<p>Delta updates send full files, not patches. The <i>Delta<\/i> is applied at the file level, not the byte level.<\/p>\n<table style=\"border-collapse: collapse; text-align: center;\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<th style=\"padding: 3px;\" rowspan=\"2\">Update<\/th>\n<th style=\"padding: 3px; width: 5em;\" rowspan=\"2\">Full file<\/th>\n<th style=\"padding: 3px;\" colspan=\"5\">Patch base<\/th>\n<\/tr>\n<tr>\n<th style=\"padding: 3px; width: 5em;\">M0<\/th>\n<th style=\"padding: 3px; width: 5em;\">M1<\/th>\n<th style=\"padding: 3px; width: 5em;\">M2<\/th>\n<th style=\"padding: 3px; width: 5em;\">M3<\/th>\n<th style=\"padding: 3px; width: 5em;\">M4<\/th>\n<\/tr>\n<tr>\n<th style=\"padding: 0;\">M1<\/th>\n<td style=\"padding: 0;\" valign=\"baseline\">\n<div style=\"border: 1px black; border-style: solid solid none; border-radius: 4px 4px 0 0; padding: 3px; margin: 3px 3px 0 3px; background-color: #ffffcf;\">M1<\/div>\n<\/td>\n<td style=\"padding: 0;\" valign=\"baseline\" nowrap=\"nowrap\"><span style=\"padding: 3px; color: #bbb; text-decoration: line-through;\">M0 to M1<\/span><\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<\/tr>\n<tr>\n<th style=\"padding: 0;\">M2<\/th>\n<td style=\"padding: 0;\" valign=\"baseline\">\n<div style=\"border: 1px black; border-style: none solid; padding: 3px; margin: 0 3px; background-color: #ffffcf;\">M2<\/div>\n<\/td>\n<td style=\"padding: 0;\" valign=\"baseline\" nowrap=\"nowrap\"><span style=\"padding: 3px; color: #bbb; text-decoration: line-through;\">M0 to M2<\/span><\/td>\n<td style=\"padding: 0;\" valign=\"baseline\" nowrap=\"nowrap\"><span style=\"padding: 3px; color: #bbb; text-decoration: line-through;\">M1 to M2<\/span><\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<\/tr>\n<tr>\n<th style=\"padding: 0;\">M3<\/th>\n<td style=\"padding: 0;\" valign=\"baseline\">\n<div style=\"border: 1px black; border-style: none solid; padding: 3px; margin: 0 3px; background-color: #ffffcf;\">\u00a0<\/div>\n<\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<\/tr>\n<tr>\n<th style=\"padding: 0;\">M4<\/th>\n<td style=\"padding: 0;\" valign=\"baseline\">\n<div style=\"border: 1px black; border-style: none solid; padding: 3px; margin: 0 3px; background-color: #ffffcf;\">M4<\/div>\n<\/td>\n<td style=\"padding: 0;\" valign=\"baseline\" nowrap=\"nowrap\"><span style=\"padding: 3px; color: #bbb; text-decoration: line-through;\">M0 to M4<\/span><\/td>\n<td style=\"padding: 0;\" valign=\"baseline\" nowrap=\"nowrap\"><span style=\"padding: 3px; color: #bbb; text-decoration: line-through;\">M1 to M4<\/span><\/td>\n<td style=\"padding: 0;\" valign=\"baseline\" nowrap=\"nowrap\"><span style=\"padding: 3px; color: #bbb; text-decoration: line-through;\">M2 to M4<\/span><\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<\/tr>\n<tr>\n<th>M5<\/th>\n<td style=\"padding: 0;\" valign=\"baseline\">\n<div style=\"border: 1px black; border-style: none solid solid; border-radius: 0 0 4px 4px; padding: 3px; margin: 0 3px 3px 3px; background-color: #ffffcf;\">M5<\/div>\n<\/td>\n<td style=\"padding: 0;\" valign=\"baseline\" nowrap=\"nowrap\"><span style=\"padding: 3px; color: #bbb; text-decoration: line-through;\">M0 to M5<\/span><\/td>\n<td style=\"padding: 0;\" valign=\"baseline\" nowrap=\"nowrap\"><span style=\"padding: 3px; color: #bbb; text-decoration: line-through;\">M1 to M5<\/span><\/td>\n<td style=\"padding: 0;\" valign=\"baseline\" nowrap=\"nowrap\"><span style=\"padding: 3px; color: #bbb; text-decoration: line-through;\">M2 to M5<\/span><\/td>\n<td style=\"padding: 0;\">\u00a0<\/td>\n<td style=\"padding: 0;\" valign=\"baseline\" nowrap=\"nowrap\"><span style=\"padding: 3px; color: #bbb; text-decoration: line-through;\">M4 to M5<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The breakdown of files for Delta updates is as follows:<\/p>\n<table style=\"border-collapse: collapse; text-align: center;\" border=\"1\" cellspacing=\"0\" cellpadding=\"3\">\n<tbody>\n<tr>\n<th>Delta update<\/th>\n<th>Contents<\/th>\n<\/tr>\n<tr>\n<th>M1<\/th>\n<td>M1<\/td>\n<\/tr>\n<tr>\n<th>M2<\/th>\n<td>M2<\/td>\n<\/tr>\n<tr>\n<th>M3<\/th>\n<td>(nothing)<\/td>\n<\/tr>\n<tr>\n<th>M4<\/th>\n<td>M4<\/td>\n<\/tr>\n<tr>\n<th>M5<\/th>\n<td>M5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Note that Delta update M3 contains nothing at all. That&#8217;s because the file <code>F<\/code> didn&#8217;t change between M2 and M3, so there was nothing to update.<\/p>\n<p>Feature summary of Delta updates:<\/p>\n<ul>\n<li>Delta updates can successfully update only customers who are running the previous monthly cumulative update (possibly with hotfixes). It cannot update customers who are more than one version behind.<\/li>\n<li>Delta updates are a third to a half the size of a Full update.<\/li>\n<li>Delta updates require a little bit of negotiation with the server to determine whether the client system is eligible, but once that&#8217;s determined, every eligible customer downloads the same update.<\/li>\n<li>Delta updates are cache-friendly, because every customer downloads the same update (if they download anything at all). Therefore, caching features like caching proxies, <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows-server\/networking\/branchcache\/branchcache\"> BranchCache<\/a>, and <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/deployment\/update\/waas-delivery-optimization\"> peer-to-peer delivery<\/a> are effective.<\/li>\n<li>Delta updates do not require significant server support. Once the package is negotiated, it is delivered in its entirety.<\/li>\n<\/ul>\n<p><a title=\"Survey of Windows update formats: The Express update\" href=\"https:\/\/devblogs.microsoft.com\/oldnewthing\/20200212-00\/?p=103434\"> Next time, we&#8217;ll look at the <b>Express update<\/b><\/a>, which despite its name is actually larger than Full updates, or at least they&#8217;re larger on the server.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trying to do some trimming.<\/p>\n","protected":false},"author":1069,"featured_media":111744,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[26],"class_list":["post-103430","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oldnewthing","tag-other"],"acf":[],"blog_post_summary":"<p>Trying to do some trimming.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/103430","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/users\/1069"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/comments?post=103430"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/103430\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media\/111744"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media?parent=103430"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/categories?post=103430"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/tags?post=103430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}