{"id":41363,"date":"2003-12-24T10:06:00","date_gmt":"2003-12-24T10:06:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/oldnewthing\/2003\/12\/24\/why-not-just-block-the-apps-that-rely-on-undocumented-behavior\/"},"modified":"2003-12-24T10:06:00","modified_gmt":"2003-12-24T10:06:00","slug":"why-not-just-block-the-apps-that-rely-on-undocumented-behavior","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/oldnewthing\/20031224-00\/?p=41363","title":{"rendered":"Why not just block the apps that rely on undocumented behavior?"},"content":{"rendered":"<p>Because every app that gets blocked is\nanother reason for people not to upgrade to the next version of Windows.\nLook at all these programs that would have stopped working\nwhen you upgraded from Windows 3.0 to Windows 3.1.<\/p>\n<pre>\nHKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Compatibility\n<\/pre>\n<p>\nActually, this list is only partial.\nMany times, the compatibility fix is made inside the core component for\nall programs rather than targetting a specific program, as this list does.\n<\/p>\n<p>\n(The Windows 2000-to-Windows XP list is stored in your\nC:\\WINDOWS\\AppPatch directory, in a binary format to permit rapid scanning.\nSorry, you won&#8217;t be able to browse it easily.\nI think the\n<a HREF=\"http:\/\/www.microsoft.com\/windowsserver2003\/compatible\/appcompat.mspx\">Application\nCompatibility Toolkit<\/a> includes a viewer, but I may be mistaken.)\n<\/p>\n<p>\nWould you have bought Windows XP if you knew that all these programs\nwere incompatible?\n<\/p>\n<p>\nIt takes only one incompatible program to sour an upgrade.\n<\/p>\n<p>\nSuppose you&#8217;re the IT manager of some company.\nYour company uses Program X for its word processor and\nyou find that Program X is incompatible with Windows XP for whatever reason.\nWould you upgrade?\n<\/p>\n<p>\nOf course not! Your business would grind to a halt.\n<\/p>\n<p>\n&#8220;Why not call Company X and ask them for an upgrade?&#8221;\n<\/p>\n<p>\nSure, you could do that, and the answer might be,\n&#8220;Oh, you&#8217;re using Version 1.0 of Program X.\nYou need to upgrade to Version 2.0 for $150 per copy.&#8221;\nCongratulations, the cost of upgrading to Windows XP just tripled.\n<\/p>\n<p>\nAnd that&#8217;s if you&#8217;re lucky and Company X is still in business.\n<\/p>\n<p>\nI recall a survey taken a few years ago by our\nSetup\/Upgrade team of corporations using\nWindows.  Pretty much every single one\nhas at least one &#8220;deal-breaker&#8221; program,\na program which Windows absolutely must support or they won&#8217;t upgrade.\nIn a high percentage of the cases,\nthe program in question was developed by their in-house programming\nstaff, and it&#8217;s written in Visual Basic (sometimes even 16-bit Visual Basic),\nand the person who wrote it doesn&#8217;t work there any more.\nIn some cases, they don&#8217;t even <i>have<\/i> the source code any more.\n<\/p>\n<p>\nAnd it&#8217;s not just corporate customers. This affects consumers too.\n<\/p>\n<p>\nFor Windows 95, my application compatibility work focused on games.\nGames are the most important factor behind consumer technology.\nThe video card that comes with a typical computer has gotten better\nover time because games demand it. (Outlook certainly doesn&#8217;t care\nthat your card can do 20 bajillion triangles a second.)\nAnd if your game doesn&#8217;t run on\nthe newest version of Windows, you aren&#8217;t going to upgrade.\n<\/p>\n<p>\nAnyway, game vendors are very much like those major corporations.\nI made phone call after phone call to the game vendors trying to\nhelp them get their game to run under Windows 95.  To a one, they\ndidn&#8217;t care.  A game has a shelf life of a few months, and then\nit&#8217;s gone.  Why would they bother to issue a patch for their program\nto run under Windows 95? They already got their money.\nThey&#8217;re not going to make any more off that game;\nits three months are over.\nThe vendors would slipstream patches and lose track of\nhow many versions of their program were out there\nand how many of them had a particular problem.\nSometimes they wouldn&#8217;t even have the source code any more.\n<\/p>\n<p>\n<i>They simply didn&#8217;t care that their program didn&#8217;t run\non Windows 95<\/i>.\n(My favorite was the one that tried\nto walk me through creating a DOS boot disk.)\n<\/p>\n<p>\nOh, and that\n<a HREF=\"http:\/\/www.microsoft.com\/windowsserver2003\/compatible\/appcompat.mspx\">Application\nCompatibility Toolkit<\/a> I mentioned above.\nIt&#8217;s a great tool for developers, too.\nOne of the components is the Verifier: If you run your program\nunder the verifier, it will monitor hundreds\nof API calls and break into the debugger when you do something wrong.\n(Like close a handle twice or allocate memory with GlobalAlloc\nbut free it with LocalAlloc.)\n<\/p>\n<p>The new application compatibility architecture in Windows XP\ncarries with it one major benefit (from an OS development perspective):\nSee all those DLLs in your C:\\WINDOWS\\AppPatch directory?\nThat&#8217;s where many of the the compatibility changes live now.\nThe compatibility workarounds no longer sully the core OS files.\n(Not all classes of compatibility workarounds can be offloaded to\na compatibility DLL, but it&#8217;s a big help.)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Because every app that gets blocked is another reason for people not to upgrade to the next version of Windows. Look at all these programs that would have stopped working when you upgraded from Windows 3.0 to Windows 3.1. HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Compatibility Actually, this list is only partial. Many times, the compatibility fix is made inside [&hellip;]<\/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":[2],"class_list":["post-41363","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oldnewthing","tag-history"],"acf":[],"blog_post_summary":"<p>Because every app that gets blocked is another reason for people not to upgrade to the next version of Windows. Look at all these programs that would have stopped working when you upgraded from Windows 3.0 to Windows 3.1. HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Compatibility Actually, this list is only partial. Many times, the compatibility fix is made inside [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/41363","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=41363"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/41363\/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=41363"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/categories?post=41363"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/tags?post=41363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}