Running Windows Programs
First, it's worth noting that for the majority of Windows applications, there is a Debian equivalent (if not several equivalents to choose from).
So, it's definitely worth checking out WinAppEquivalents to find existing applications that will suit your needs.
In some cases, you may not be able to find an acceptable replacement. There are three ways you can have your Windows/DOS application running under Debian.
Wine, which runs Windows programs under Linux, by converting APIs.
DOSEMU, a DOS Emulator, for very old programs.
In the case that your application was written for Windows specifically and not DOS, you could try wine. The acronym is actually (Wine Is Not an Emulator) but it is common to refer to it as an emulator anyway.
What Wine essentially does is to fake your program into believing that you are running Windows when you are really running something else. It runs every instruction in your program binary with your CPU but when the program calls for a resource that cannot be provided directly by your system, Wine intercepts the call and performs the necessary calls to stuff in Debian to accomplish the same task.
Quite often, Wine will actually set up a directory in your home directory which will be equivalent to your C drive when running your windows program. For example, your c:\program files directory will be created in your /home/myuser/.wine/.../program files directory and your program will know this directory as c:\program files. So, if you wonder where that program goes after you install it from the CD, it goes in there.
To invoke a program in Wine, it is usually as simple as running "wine program.exe" In most cases you can invoke it using Windows naming conventions like this "wine a:\setup.exe".
Unfortunately, not every program will run under Wine, which leads into the third alternative.
Installing Wine on Debian Jessie 64-bit (6th of March 2014)
(32-bit is much more straight forward and should only require "apt-get install wine" then "winecfg" then "wine windows_program.exe")
root@debian:~# uname -a Linux debian 3.12-1-amd64 #1 SMP Debian 3.12.9-1 (2014-02-01) x86_64 GNU/Linux root@debian:~# lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux testing (jessie) Release: testing Codename: jessie
(These last two steps are to make sure you're running 64-bit Jessie)
root@debian:~# dpkg --add-architecture i386
(This last step may not be necessary if i386 programs like Steam and Skype were already installed for example, see output of next step to verify if i386 architecture is already added)
root@debian:~# dpkg --print-foreign-architectures i386 root@debian:~# apt-get update root@debian:~# apt-get install wine root@debian:~# apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 root@debian:~# apt-get install p11-kit:i386 normal_user@debian:~# WINEARCH=win32 winecfg (declaring the variable WINEARCH is only necessary the first time winecfg is run) normal_user@debian:~# wine windows_program.exe
There are several restrictions implicit in the standard dosemu installation, which emphasizes security and stability. Applications which require direct keyboard access, direct video control, or access to DPMI memory will not work without modification to /etc/dosemu/conf, and probably setting dosemu.bin setuid, at some risk of system instability.
See the DosEmu page for more information.
The third alternative is to use a virtualization tool. They actually simulate a computer running within your computer. Your desired program literally runs within Windows running in a virtual computer running inside Debian. This way, Windows is there to handle all of the requests by your program and there is a much higher chance of the program running but the programs will run slower than under Windows directly (This isn't a concern nowadays).
After Windows has been fully installed onto the virtual computer, you then install your favorite application and away you go.
See the SystemVirtualization page for more information.