Possible to install Windows 8.1/10 32 bit while in UEFI mode?

I am currently trying to have the laptop (HP Stream 11 - 2015 model with Intel Celeron N3050 processor) detect a Windows 8.1 32 bit UEFI install on my flash drive. I used RUFUS to setup the flash drive and used the UEFI GPT partition setup. When I insert the flash drive into my laptop, it somehow does not detect the flash drive.

Now when I put a 64 bit Windows 8.1 install onto the flash drive, the laptop is able to detect it in the bootable device menu and is able to boot into the Windows installation with no issue.

The reason why I want to install Windows 32-bit is because the laptop is limited to only 2GB of RAM and cannot be upgraded as it is soldered to the motherboard.

Now when I looked at the EFI Boot folder for the 32 bit Windows installation usb that I made, I noticed it has bootia32.efi and when I experimented by putting a bootx64.efi instead, it was able to detect the USB before getting to an error screen while trying to load the 32-bit Windows installation.

I am wondering if the EFI system on this HP Stream 11 (with 2GB RAM) has a x64 bit EFI system hence why it cannot even detect a 32 bit UEFI USB or maybe I'm doing something wrong here. If that is the case, I am wondering if there are any workarounds or will I have to disable UEFI and use BIOS instead to install Windows 32 bit (unless there is a good reason to install a 64 bit Windows on a computer with 2GB of RAM?)

Thank you.


Solution 1:

An EFI can run programs, including boot loaders, only for the same architecture for which the EFI is compiled. On an x86-64/AMD64/X64 system, this means that if the EFI is 64-bit in nature, it can launch only 64-bit boot loaders, and if the EFI is 32-bit in nature, it can launch only 32-bit boot loaders. The Windows boot loader, in turn, can launch only a like-bit-depth kernel (AFAIK), and so on down the chain. Thus, if you have a 64-bit EFI, you can launch only a 64-bit Windows, AFAIK.

In theory, you could work around this limitation with an appropriate boot loader. GRUB can launch a Linux kernel across the bit-depth boundaries, for instance. So can Apple's macOS boot loader (to launch a 32-bit kernel on a 64-bit EFI; I don't think it works the other way around). In practice, AFAIK this isn't possible with Windows.

By enabling the Compatibility Support Module (CSM), you can boot either a 32-bit or 64-bit OS, but only in BIOS/CSM/legacy mode. This has some drawbacks, as outlined in my answer to this question (referenced earlier in athosbr99's comment). If you want to install your 32-bit Windows on the computer's only hard disk, you'd pretty much have to go all-in on this. (There are ways to mix boot modes on a single disk, but there are so many caveats that I don't want to confuse the issue by describing them.) If you wanted to dual-boot with another OS, particularly on another disk (say, 64-bit Windows internally and 32-bit Windows on an external disk), you could install the 64-bit OS(es) in EFI mode and the 32-bit OS(es) in BIOS mode, then use the computer's built-in boot manager or my rEFInd boot manager to manage the boot process. This would be a bit of a pain to set up, though, and you should research the issues thoroughly before attempting such a cross-mode install. Start with this page of mine, which describes the CSM and its pitfalls. (It's written for Linux users attempting a dual-boot with Windows, but the background information is relevant.) I then recommend reading the rEFInd documentation thoroughly, and paying careful attention to the description of the scanfor option in refind.conf.

Overall, then, your best bet is to either stick with a 64-bit boot in EFI mode or wipe everything, turn on the CSM and install the 32-bit Windows in BIOS mode. I don't know if Windows' 32- vs. 64-bit performance is sufficiently different on a system with 2 GiB of RAM to justify the switch. Note that most manufacturers install a bunch of bloatware, and eliminating that is likely to improve performance quite a bit, so you might want to look into that before installing a 32-bit Windows.