{"id":201,"date":"2026-07-07T09:00:09","date_gmt":"2026-07-07T16:00:09","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/insidemsix\/?p=201"},"modified":"2026-07-02T22:40:31","modified_gmt":"2026-07-03T05:40:31","slug":"applications-are-not-packages","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/insidemsix\/applications-are-not-packages\/","title":{"rendered":"Applications Are Not Packages"},"content":{"rendered":"<p>Applications are not packages.<\/p>\n<p>Let me repeat.<\/p>\n<p>Applications are not packages.<\/p>\n<p>This is a common misconception due to the (too) often blurring of concepts and terminology. Packages and applications are different and distinct things, so it&#8217;s important to understand what those words mean (to MSIX).<\/p>\n<h2>Packages and Applications Are Different Things<\/h2>\n<p>An application is distributed <strong>via<\/strong> a package. That&#8217;s not the same as <strong>being<\/strong> the package.<\/p>\n<p>A <strong>package<\/strong> is a unit of distribution and deployment. You can install a package, or update a package, or remove a package. You can&#8217;t install <em>half<\/em> a package, or remove <em>part<\/em> of a package. A package that&#8217;s broken or corrupted is said to &#8216;lack package integrity&#8217; and cannot be installed or used until repaired (though it can be removed).<\/p>\n<h2>What Is an Application?<\/h2>\n<p>An <strong>application<\/strong> is more abstract.<\/p>\n<p>Windows knows about processes, threads, windows, files and other types of resources. But before MSIX, there was no &#8216;application&#8217; construct that Windows could reason about.<\/p>\n<p>You may look at a system and see applications everywhere, but to the operating system there were simply collections of resources that may or may not be related.<\/p>\n<p>This is the classic <em>&#8220;I know it when I see it&#8221;<\/em> problem.<\/p>\n<p>So we solved it by creating a definition: concrete enough for the OS to understand and manage, yet flexible enough to encompass the wide variety of application architectures Windows developers have created over the years.<\/p>\n<p>In the simplest case, an application runs as 1 process. Thus, a process with process ID 123 <em>is<\/em> the application. The install-time definition and runtime manifestation are essentially in a 1:1 relationship.<\/p>\n<p>Another design uses multiple processes to implement a single application. If an application needs an out-of-process (OOP) WinRT server, there might be two processes at runtime: <em>app.exe<\/em> and <em>winrtserver.exe<\/em>.<\/p>\n<p>This model can scale to many processes. For example, modern web browsers typically have one process responsible for the UI and and a forest of additional processes handling rendering, networking and other work.<\/p>\n<p>Regardless of the number of processes involved, they have a common characteristic: a 1:N relationship between the application and its runtime processes.<\/p>\n<p>There&#8217;s also the opposite design, where multiple applications run in a shared process<sup>1<\/sup> &#8211; an N:1 application-to-process relationship.<\/p>\n<p>Windows never had a strict definition of what an application is, so the OS had no way to determine which resources belonged to an application or how they should be managed as a single unit.<\/p>\n<p>So we taught it.<\/p>\n<h2>Application Identity<\/h2>\n<p>A packaged application has an identity: a logical construct that uniquely identifies a user-facing application regardless of its implementation details.<\/p>\n<p>Or if you prefer:<\/p>\n<blockquote>\n<p>Application identity uniquely identifies the collection of windows, processes, resources, and functionality that form a single user-facing program, regardless of how that program is implemented.<\/p>\n<\/blockquote>\n<p>For packaged applications, this identity is represented by <a href=\"https:\/\/learn.microsoft.com\/windows\/win32\/appxpkg\/appx-packaging-glossary\">ApplicationUserModelID<\/a> (also known as &#8216;AppUserModelId&#8217; or &#8216;AUMID&#8217;). This string allows Windows to associate resources with a particular application.<\/p>\n<p>So how does Windows understand what an application is?<\/p>\n<blockquote>\n<p>An application is a collection of windows, processes and other resources tagged with the same ApplicationUserModelID.<\/p>\n<\/blockquote>\n<p>So what is an &#8216;ApplicationUserModelID&#8217;?<\/p>\n<blockquote>\n<p>An &#8216;ApplicationUserModelID&#8217; is an identifier used to tag the collection of windows, processes and other resources that make up an application.<\/p>\n<\/blockquote>\n<p>An application is a collection of resources with the same AUMID. Why are those resources part of an application? Because they share the same AUMID.<\/p>\n<p>A circular definition.<\/p>\n<p>But it did solve the &#8220;I know it when I see it&#8221; problem. Now we have a concrete definition software can understand and reason over.<\/p>\n<p>Which brings us back to the original point: packages and applications are different concepts.<\/p>\n<p>A package is a deployment artifact.<\/p>\n<p>An application is a user-facing construct identified by its AUMID.<\/p>\n<p>Packages distribute applications.<sup>2<\/sup><\/p>\n<p>Applications are not packages.<\/p>\n<hr \/>\n<p><sup>1<\/sup> Adobe Flash games could run multiple applications in the same process. .NET <a href=\"https:\/\/learn.microsoft.com\/dotnet\/framework\/app-domains\/application-domains\">Application domains<\/a> were a similar concept: multiple applications sharing a single process.<\/p>\n<p><sup>2<\/sup> Packages don&#8217;t necessarily contain applications. <a href=\"https:\/\/learn.microsoft.com\/windows\/msix\/package\/fx-packages\">Framework<\/a> and <a href=\"https:\/\/learn.microsoft.com\/windows\/msix\/package\/resource-package\">Resource<\/a> packages cannot declare applications. Main and <a href=\"https:\/\/learn.microsoft.com\/windows\/msix\/package\/optional-packages\">Optional<\/a> packages can declare anywhere from zero to one hundred applications. But if you have a packaged application, it is defined and distributed by a package.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Applications are not packages. Let me repeat. Applications are not packages. This is a common misconception due to the (too) often blurring of concepts and terminology. Packages and applications are different and distinct things, so it&#8217;s important to understand what those words mean (to MSIX). Packages and Applications Are Different Things An application is distributed [&hellip;]<\/p>\n","protected":false},"author":911,"featured_media":81,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[17,8,11,2,10],"class_list":["post-201","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-msix","tag-application","tag-architecture","tag-identity","tag-msix","tag-terminology"],"acf":[],"blog_post_summary":"<p>Applications are not packages. Let me repeat. Applications are not packages. This is a common misconception due to the (too) often blurring of concepts and terminology. Packages and applications are different and distinct things, so it&#8217;s important to understand what those words mean (to MSIX). Packages and Applications Are Different Things An application is distributed [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/posts\/201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/users\/911"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/comments?post=201"}],"version-history":[{"count":2,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/posts\/201\/revisions"}],"predecessor-version":[{"id":206,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/posts\/201\/revisions\/206"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/media\/81"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/media?parent=201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/categories?post=201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/insidemsix\/wp-json\/wp\/v2\/tags?post=201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}