Having watched a system slowly die due to a memory leak, I can confirm that free memory is always required. UNIX/Linux requires some free memory to load programs. Unix tends to do a lot of process creation, and uses free memory to load these programs. If you don't have free memory process execution will be very slow as memory will need to be reclaimed before the program can be reloaded.
Shared memory helps a lot as many programs can use the same read-only memory pages. However, writable pages need to be allocated on a per process basis. Disk buffers also help as the code needed may already be in memory.
For long running programs it is OK if initialization and shutdown code is paged out. This assumes the memory pages for this code are not shared by code which is actively used. Some programs may have rarely used code which can be swapped out. Programs which run rarely can also swap out with minimal impact.
Once you start to actively swap pages in and out of memory performance will degrade severely.