I went to install Rational Application Developer (IBM’s branded version of Eclipse) on my desktop machine at work and found to my surprise that it would crash every time I tried to run it. Assuming this was something to do with the fact I was running Windows 2003 x64, I decided that this was the straw that broke the camel’s back and reinstalled Windows 2003 using the 32 bit version.
Well… on installing RAD it still crashed. This didn’t make me happy at all, especially given that reinstalling the OS and all the apps I need wasn’t really a trivial exercise and I didn’t really want to be on a 32 bit OS again. So, some quick investigation with a debugger showed it was crashing on a CPUID instruction with an “Access Denied” fault (ie a normal general protection error). Some more investigation showed that there’s no special privileges required to run the CPUID instruction, so it wasn’t immediately obvious what was going on.
5 minutes before leaving work on Friday, inspiration hit me – Data Execution Prevention is on by default on Windows 2003. Quickly going into the appropriate control panel I turned it off and rebooted and what do you know – RAD suddenly started working! Well, I wasn’t going to live in 32 bit land if DEP was the only thing holding me back, so I took my machine home for the weekend and ran it up with x64 again, turned DEP off for 32 bit apps and installed RAD (and WAS, and Portal, and all the other IBM junk) without a hitch.
Now, you’d think a company like IBM would be able to tell you somewhere in the installer that DEP needed to be off for this product, or at least the documentation, or even the online knowledge base. In fact, you’d think a company like IBM would be able to make a product that didn’t try to execute code inside non-executable memory regions. Sometimes I think I just expect a little much though.