Summary
- Windows 3.1 runs snappy on a Raspberry Pi, and there’s no telemetry, a tiny footprint, with a nostalgia-packed pixel-powered UI.
- Install via DOSBox on Raspberry Pi OS and set it to automatically launch with just a few commands and copy-and-paste scripts.
- There are tons of retro apps and games (and of course, DOOM!) available.
Raspberry Pis are usually associated with light-weight Linux operating systems, like Raspberry Pi OS, but they don’t have to. You can use heavy desktop variants, or, if you’re feeling especially bold, old versions of Windows. Here’s why I’ve started using Windows 3.1 on my Pi.
Seriously, Why Use Windows 3.1?
Windows 3.1 (or, if you’re feeling a bit more modern, Windows 95) comes with familiar user interfaces, lots of apps, or “programs”, and no bloat, unless you count Notepad. Even under emulation, these ancient versions of Windows fly—they’re highly responsive, and menus open instantly, probably because they aren’t rendered using inefficient HTML5 or trying to download news content and recommendations to display alongside your list of programs (looking at you, Windows 11).
You also get to keep your privacy, as there’s no telemetry, no “experience improvement,” advertising IDs, or any of that nonsense. Your operating system is just an operating system, a convenient way to manage your files and open the software you actually want to use. 90s software also predates the current trend of adding about 20 pixels of padding to every menu item and window border (ostensibly for touch users, even on operating systems that are rarely seen on touchscreen devices). Information is dense, and all the text is bold and crisp in its pixelated glory.
Many of these advantages are also shared by lightweight Linux distros for the Raspberry Pi (including Raspberry Pi OS), but in addition to being kind of kitsch and cool, legacy versions of Windows have tonnes of software and games. Abandonware abounds (depending on the legality of it in your country), and you can find early Windows and DOS versions of almost every popular productivity or office tool online (again, up for grabs if it’s legal, or you have an old license that fell behind your desk 35ish years ago). There’s also DOOM.
- Brand
-
Raspberry Pi
- Storage
-
8GB
- CPU
-
Cortex A7
- Memory
-
8GB
It’s only recommended for tech-savvy users, but the Raspberry Pi 5 is a tinkerer’s dream. Cheap, highly customizable, and with great onboard specs, it’s a solid base for your next mini PC.
I’m Sold, How’s Do You Install Windows 3.1 on a Raspberry Pi?
DOSBox is an emulator that lets you run MSDOS software on Linux, and as Windows 3.1 is a DOS application, getting it working is pretty straightforward. While there are pre-made Raspberry Pi images for this, like Dosbian, I’m always wary of just running any code pulled from the Internet and prefer to put things together myself.
So, first things first, I installed Raspberry Pi OS (with desktop) on my Raspberry Pi 4, connected to Wi-Fi and ran sudo apt upgrade && sudo apt update to get everything ready. Desktop auto-login should be enabled by default. If not, it can be enabled using the Raspberry Pi Configuration tool.
I’ve chosen to boot to the desktop before launching DOSBox mostly for simplicity, especially because I want to auto-mount USB sticks so they can be read by DOS or Windows. Raspberry Pi OS does this by default, but I don’t want it showing the auto-run popup every time a device is connected. This is disabled by opening the File Manager Preferences, and then under Volume Management unchecking “Show available options for removable media when they are inserted.”
Next, I installed DOSBox by running sudo apt install dosbox -y. I’m using the version of DosBox that’s available via the apt package manager, but if you want to use this beyond it being a bit of a novelty, you can get more accurate emulation and better performance with DOSbox-X.
I created a new directory named win311 in my Home Folder, and added the following BASH script file named launch.sh:
#!/bin/bash
# Wait 3 seconds for any connected USB drives to mount
sleep 3
exec dosbox -conf /home/pi/win311/dosbox.conf
This script waits a few seconds for any USB drives to finish mounting after the system has booted, then launches DOSbox with the configuration file dosbox.conf, created in the same directory (if you’re following along, you’ll need to update the path to reflect your own username rather than the default “pi”).
[sdl]
fullscreen=true
fullresolution=desktop
windowresolution=original
output=texture
[dosbox]
machine=svga_s3
memsize=16
[cpu]
core=auto
cputype=auto
cycles=auto
cycleup=10
cycledown=20
[render]
aspect=true
scaler=none
[mixer]
rate=44100
blocksize=1024
prebumer=20
[sblaster]
sbtype=sb16
irq=5
dma=1
hdma=5
oplmode=auto
oplrate=44100
[autoexec]
@echo om
REM --- Map USB parent directory as U: so all plugged-in USB drives appear as sub-folders.
mount U "/media/pi" -t dir
path Z:\;C:\DOS;C:\WINDOWS
REM --- Expect a Windows 3.11 install present in WINDOWS within c_drive
mount C "/home/pi/win311/c_drive"
C:
noshare /install
win
Most of this stuff is just DOSBox configuration you can ignore, except for the bit under the [autoexec] line. Here, the paths need to be updated with your username instead of “pi”. The noshare /install command fixes a little DOSBox problem discussed later, and win is the command that will launch Windows when it’s been installed.
While you’re in the win311 directory, create a new directory named c_drive. This will be the hard drive for your emulated Windows box.
To automatically launch DOSBox after your desktop has loaded, create the file ~/.config/autostart/win311.desktop and add the following to it:
[Desktop Entry]
Type=Application
Name=Windows 3.11
Exec=/home/pi/win311/launch.sh
Terminal=false
X-GNOME-Autostart-enabled=true
Installing Windows on a Raspberry Pi
Now, when your Pi has finished booting to the Desktop, the launch.sh script will run, and the DOSBox configuration will automatically launch Windows. All that’s needed now is Windows! You can either use your own Windows 3.11 install media, or find it online from somewhere that is legally providing it. I’m using Windows 3.11 for Workgroups, supplied on 8 separate 3.44MB floppy disk images. It’s also possible to just copy the files from an existing Windows installation, but I wanted a clean slate.
The easiest way to perform the installation is to create a directory named WINSETUP in the c_drive directory and extract all the installation images to it using the command 7z x-y -0″/home/pi/win311/c_drive/WINSETUP” ~/win311/setup_disks/Disk01.img and re-running the command for each disk image until they’re all extracted.
Then, run the launch script from the terminal with the command sh launch.sh. Once DOSBox has launched, install Windows by navigating to the WINSETUP directory with the commands C:followed by CD WINSETUP, and then running the SETUP command.
Then it’s just a matter of following the bouncing ball and entering the required information when prompted.
Once Windows has successfully installed, you should be able to reboot your Raspberry Pi and be taken straight to the Windows 3.11 desktop. Neat!
If you open the File Manager in Windows, you’ll even see your USB sticks under the U: drive (per the config above), so you can conveniently transfer programs and files from your other devices.
There is one little hitch with this method: DOSBox doesn’t include the share command that some software requires. If you decide that you actually want to use your retro Windows setup for more than just tinkering, you can either switch to DOSBox-X, use a real version of MSDOS in DOSBox. I chose to use noshare, a program that mocks the share command, as a workaround because I’m lazy. You can find noshare available for download on the Vogons forum, but note that I can’t vouch for it, though any damage it could do would be pretty limited in DOSBox running on a Raspberry Pi that isn’t connected to your network.
I’ve downloaded and extracted the NOSHARE.COM file to the c_drive directory so that it can be called by the noshare /install that was pointed out in the dosbox.conf file earlier. Note that while this lets programs that require the share command run, it doesn’t actually perform its purpose (locking files). This isn’t going to really present a problem for single-user systems, but may still cause some software to misbehave.
And that’s it! There’s a lot of obsolete Windows software archived online, and remember you also have the whole DOS library to explore as well (including DOOM!). All of this software works just as well as it did when it was released, and often still holds up for light duties and a bit of fun.
There’s also DOOM (pictured running on my grimy Pi test bench).
Raspberry Pis Are Still a Tinkerer’s Dream
Looking for more Raspberry Pi projects for rainy weekends? Here’s 7 of them. If those don’t suit you, here’s another 7 that you can finish in under an hour.
That should keep you busy!