Had to smile when I read the epilogue:<p>> Sometime after Windows 95 shipped and became a smash hit, a group of prominent game developers visited Microsoft as guests of the DirectX team. At some point, they learned of “this guy” on the Windows 95 team who worked so hard at getting all their games to work that he “officially went insane.” Thus intrigued, they asked to be introduced to this insane guy, and they presented me with a letter, signed by all of them, with the message, “Thanks for going insane.”<p>> I still have that letter.
I felt the same in reverse trying to make a game (Creatures 3) work well on Windows 95/98 in late 1999. We did quite a few patches after release to fix odd compatibility bugs that came in via customer support.<p>Some weren't <i>directly</i> Microsoft's fault. I remember there was a printer driver that would change the current directory of processes that it wasn't even being used in. I had to update the media code in the game to use absolute paths.<p>It often felt like I was being paid by my company to work for Microsoft, which felt very clever of Microsoft at the time!<p>Windows works because everyone, at Microsoft and outside, put in a lot of work to make it work.
It seems this was one of two appendices to Raymond Chen's book "Old New Thing". The appendix doesn't exist in printed form for some reason though. It's a great book and definitely worth reading.<p>The second appendix is titled "Tales of Application Compatibility" <a href="http://ptgmedia.pearsoncmg.com/images/9780321440303/samplechapter/Chen_bonus_ch01.pdf" rel="nofollow">http://ptgmedia.pearsoncmg.com/images/9780321440303/samplech...</a>
I remember terrible times trying to get some Lucasarts and Origin games going in that era. You want a cdrom -and- a sound card? That’s crazy talk. No no don’t use sound blaster’s driver use ours and our crazy ass memory manager too. Oops no sound for you! You’re in Windows! Etc etc. Thank goodness for autoexec.bat and config.sys.
Summary of maxims: You can print out these two pages, fold than up, and keep then in your pocket. Well, maybe not, since nobody is really interested in writing MS-DOS-based games, anymore. But if you did, this would have been a handy guide to ensuring that your game doesn’t run on Windows 95.<p>1. The more confusing the error message, the better.<p>2. If it doesn’t run under Windows, then it’s Windows’fault.<p>3. Detect Windows, and crash.<p>4. Manuals are a waste of time.<p>5. Words in boldface don’t count.<p>6. Just because you’re a Windows application doesn’t mean that you have to be compatible with Windows.<p>7. Performance degradation is acceptable in the greater interest of not running on Windows 95.<p>8. If you’re going to do something wrong, do it wrong in as many different ways as possible.<p>9. Find a rule and break it as blatantly as possible.<p>10. The weirder your code, the harder it will be for the operating system to detect that you are about to do something stupid and rescue you.<p>11. Always look for the weirdest, most convoluted way of doing something. That way, you stand a good chance of doing it wrong.<p>12. It is better to be lucky than good.<p>13. Multitasking is for wimps.<p>14. Persistence may not help, but it’s fun.<p>15. Thrashing is good. It reminds the user that the computer is on.<p>16. Random addresses are harmless.<p>17. If you’re going to fail, do so as subtly as possible.<p>18. Do something that is supported only under Windows, and do it wrong.<p>19. Second-guess the specification whenever possible.<p>20. Knowledge of the English language is optional.<p>21. Well-behaved programs are for wimps.<p>22. Bite the hand that feeds you.<p>23. Words in italics don’t count.<p>24. If you can’t be subtle, then be blatant.<p>25. Intel will never release a new CPU.<p>26. Slower is better.<p>27. If you can’t convince the operating system to screw you up, take matters into your own hands.<p>28. Microsoft will never release a new version of the operating system.<p>29. The high words of 32-bit registers are always zero.<p>30. Even business applications can benefit from a boot disk.<p>31. Error checking is for wimps.<p>32. Don’t bother testing the error paths. The game is already over.<p>33. When faced with the unusual, self-destruct.
I remember using custom boot disks for some games...<p>Makes me wonder if Windows 95 should have just rebooted into DOS for older games. Alt-tab was always sketchy anyway when a have was running.
> Maxim 2: If it doesn’t run under Windows, then it’s Windows’ fault.<p>And the preceding example is just hilarious. But hey "it works on my machine! it must be your fault!!11"<p>It was similar shenanigans when a lot of Windows 95/98 "stopped working" when Windows 2000/XP worked. "What do you mean I can't write to C:/Windows whenever I want? What do you mean I can't put my config option in some hidden corner of the system registry?"<p><i>sigh</i>
I thought example 50 and 51 are pretty reasonable. Pointer tagging is a valid technique; it's a pity they chose to tag using the high bit instead of the low bit. But then 2GB of memory was humongous in the age of Windows 95. Also, didn't some 32-bit operating systems use to reserve the upper 2GB of the address space for the kernel?
Wow, there's _pages_ and _pages_ of programs which would have been seemingly broken because they forget to "sti" after having "cli". It was one of those things we were taught to always, no matter what, do in high school -- one of those "do one thing, and always the inverse" - like push to stack, pop back from stack kind of thing.<p>Really odd to see those things "out there"!
I briefly imagined this was going to be a treatise based on some reality where all windows programs could be trivially made to run on windows 95. Even 25 years later.<p>It would be amusing to think that developers would have to take extra steps to ensure their program does not in fact run on older windows versions.