NOTE: I've tested it only on the PC XT with an hercules card.. higher CPUs or different environments are totally untested
Windows 3.0 was still designed with the old computer models in mind; this means that you can run it on an 8086/8088 CPU, the old video cards are still supported and the code size is still quite small.
Normally quite a lot of disk and memory space are required, but if you keep only the core files, it will fit in a 720K floppy.
With the appropriate tool you can even "superformat" the disk, gaining little more space for your application(s).
What do you need ?
First of all you need a "normal" PC with an hard disk and a REAL MS-DOS installation (or its emulator, such as Virtual PC or even MESS); you need it to do a normal Windows installation from floppy.
Proceed with the setup choosing the drivers you will need with the target PC. The minimal requirements are: 720K floppy disks, a graphics card and 512K of RAM (even less, depending on the application you need to run).
...I don't have a 720K disk drive !
If you have only a 360K floppy drive but you have also another spare 720K or high density disk drive you'd like to add you probably can do it:
you'll need a "BIOS extender", a driver supporting many non standard floppy behaviours; my favourite one is "800".
Be careful if you decide to replace the boot drive: most of these improvements won't work until you install the BIOS extender; the easiest way is to prepare a normal DOS boot disk with the BIOS extender to be put in drive "A:", and a specially formatted disk (with Windows) to be put in drive "B:" (must be added in the PATH) or to replace the boot one.
If just you want to connect a 720K drive things should be easy; even simpler BIOS extenders (mostly unlocking the DOS functionalities) will do the job; the floppy connectors are different, but you can use an adaptor or simply replace the floppy cable.
The high density disk could give some more problem: old floppy controllers don't support high density; you can replace the floppy controller ISA card or try to tweak the floppy drive experimenting with its jumpers (BE CAREFUL and REMEMBER THE OLD JUMPER POSITIONS). I could hook a 1.2MB drive onto an original PC XT by tweaking its motor speed; with the aid of a DOS extender it is now able to format 360K disks at 800K with absolutely no errors (my 1.4MB floppies have much more problems).
Other ideas to get disk space could be: real time compression (stacker or similar), an EMS RAM disk to which uncompress your zipped installation, the chain command, a virtual hard disk tool based on a floppy set (i.e. vhard). Remember that most of the DOS tools will work !
In a normally formatted 720K disk you won't have space for a shell (!), but if, with some magic, you could get some extra space, I'd suggest to use "File Manager" rather than "Program Manager".
Which part of Windows can I rip off ?
Almost everything. Even the "Program Manager", the "File Manager" and the "Task Manager".
Here is a list of the files I've left to make it run with an Hercules video card.
The three font files could be different depending on the video card you need to install.
In "SETUP.INF", under the video section, you'll see that a font size is specified for every video mode "i.e. 100,120,120".
The same file holds the font names for every "font size".
Total: about 520k
This means that in a 720K bytes disk you have roughly 200K free for your application (and extra DLLs eventually required).
You can clean up WIN.INI up to 0 bytes, depending on the informations the application requires.
SYSTEM.INI can be stretched a lot, too.
In example, to run the CLOCK application, you need to add the application files (AUDIT.SYS, AUDIT.EXE and DIGITAL.FON) and set the INI files as follows:
shell=audit.exe <========= This is the application or shell name !
That's it !
Small programs (REVERSI.EXE, SOL.EXE) will run with no tuning at all, some others are a pain.
The WIN.INI and SYSTEM.INI files can be reduced a lot; if you don't have a shell, you'll need to have multiple copies of "WIN.INI", in which you'll keep the application specific settings and the reference to the application in place of its shell.