|Astonish Results Blog|
Internet Explorer 6 in Windows Vista (IE6) - part 1
This is the first part of hopefully a multipart post that details the current progress in making Internet Explorer 6 run natively under Windows Vista.
A fundamental rule in web-development is insuring that the website/web-application you are developing renders correctly across various web browsers to cater for the largest possible range of prospective visitors. It is indeed rather frustrating and somewhat embarrassing when you present your website in its final form to your boss/customer/mom only to realize that the layout is all missed up due to browser rendering incompatibilities.
So what are my options as a Web developer using Windows Vista?
The current popular web browsers are Safari (from Apple), Firefox (from Mozilla), Opera (from Opera), Konqueror (from KDE), and Internet Explorer (from Microsoft).
- Safari and Konqueror use the same rendering engine. Apple recently released Safari for Windows which is usable under Windows Vista and can be downloaded from here
- Firefox was made available to Windows Vista since it's release and is available for download from here
- Opera can also run perfectly under Windows Vista and is available for download from here
- Internet Explorer 7 comes bundled with Windows Vista. Microsoft introduced major changes to Internet Explorer in its latest version particularly in the security model and the rendering of CSS style-sheets. A large proportion of users are still using Internet Explorer 6 and are reluctant to upgrade to Internet Explorer 7 or install Windows Vista but that does not mean that as a web developer you should ignore this (still) large usergroup in this transitional period. Microsoft offered a solution to this problem by providing a fully working VirtualPC image of Windows XP available for download here. The VirtualPC image contains Internet Explorer 6 and the Internet Explorer 7 Readiness Toolkit 2.0. Although this does solve the issue, running a VirtualPC image demands allot of resources and a 560.1 MB - 1203.5 MB download is huge even on today's standards. Since the preview releases of Windows Vista, I received hundreds of emails asking about the possibility of running Internet Explorer 6 under Windows Vista or complaining that my Multiple IE installer for the standalone versions of Internet Explorer does not work under Vista. This shows that some web developers consider Microsoft's solution unreasonable while others are still unaware of it.
One of the first things I did when I installed the release candidate for Windows Vista was to try running Internet Explorer 6 in standalone mode. I heard that it was not possible due to kernel changes in the Windows Vista code base. As expected, upon running IE6 on Vista you'll be greeted with quite an un-user-friendly error message and a crash report.
iexplore.exe and setting compatibility mode to Windows XP SP2 brings a more telling error message
This error is not actually caused by
urlmon.dll but by some code called from the MS OLE library
ole32.dll and the NT kernel library
ntdll.dll. The reference to the
SHUNIMPL.DLL library indicates that Internet Explorer 6 is using some unimplemented method in Windows Vista's core libraries.
Trying to debug a compiled binary executable is not easy. After some playing around with my debugger I came to the following conclusions:
- Internet Explorer 6 uses a method in
ntdll.dllthat has a signature different from the one in Windows XP and crashes immediately.
- The code that uses this method is related to IE6's GUI (could be something to do with the OLE implementation) and is called by
iexplore.exebinary executable. The
SHDOCVW.DLLlibrary that comes with IE6 may have also called this method.
- Directly link to the
mshtml.dlllibrary responsible for rendering HTML pages either by developing a program that directly uses this library or use a program that already directly communicates with the
mshtml.dlllibrary. In either cases, MANIFEST files will be used to enable side-by-side execution.
- Completely isolate Internet Explorer 6 from the Windows Kernel either through virtualization technology (e.g. VirtualPC, VMWare, or QEMU) or through Windows kernel emulation that actually works(!)(e.g. running IE6 using a version of Wine compiled under Cygwin or Interix). The "Windows Compatibility Mode" that comes with Windows Vista does not offer a complete emulation of previous Windows kernels.
I have actually succeeded in running an extremely crippled version of Internet Explorer 6 rendering engine under Windows Vista as shown in the picture below. IE6 on Vista does produce an exact 1:1 rendering comparable to IE6 on Windows XP. Unfortunately, this version only renders HTML and processes CSS files. Java script is buggy and the graphical user interfaces barely works. There is much work to be done, particularly in sorting out the issues with the
jscript.dll library that processes java scripts. Moreover, version vectors (an extremely important feature for a usable IE6 on Vista) do not work and the useragent is shown as IE7. The only way for me to know that the pages are actually rendered using Internet Explorer 6's rendering engine is to compare the output with a reference output produced from the Windows XP version of Internet Explorer. The pictures below show IE6 on Vista's output of the ACID2 test from Webstandards.org which is the same as the reference output from IE6 in Windows XP.
If you subscribed to the mailing list before 8th February 2008, you should have received an email with instructions on how to download the alpha version of the installer.
If you'd like to be notified by email if and when a full solution is available for download, you can sign up to the "IE6 for Vista" announcement mailing list . (maximum 2 emails; one for the alpha and the other if and when an acceptable working solution is available). The first email was already sent.