afaik programs have to specifically support multi core platforms. Their code has to enable the ability to use multiple cores. However, some simple dont need to use more than 1 core so people dont bother...
Programs don't use cores, they spawn threads. The threads are then automatically dispatched to the available cores by the OS thread scheduler.
If you use the Mac OS X Activity Monitor and look under the "threads" column, you'll see most processes have many threads. Each thread can run independently (and simultaneously) on an available core. A quick look at my wife's iMac shows Lightroom using 24 threads, iTunes 18 threads, and FireFox 38 threads.
It is obvious a typical system has many hundred or thousands of threads. However most of these threads are not in a runnable state but are waiting on some event -- user input, system call return, signal from another thread, etc.
If the activities of the threads within a process do not interact, a programmer can spawn these and harness multi-core hardware with little additional work. Imagine an office manager who with a pool of secretaries, who directs each one to write a letter to a client. Each one can work independently and get done faster, even if one finishes first.
If threads interact or share data, the programmer must synchronize them to avoid overwrites and race conditions. This takes a little more work. Imagine an office manager with a pool of secretaries who directs each one write one paragraph of a letter to a client. At some point they must all synchronize and combine their individual work.
A competent programmer will study their code and determine which execution paths are CPU intensive. He will then spawn multiple threads to handle these, assuming the availability of multi-core hardware. This does take a little additional work, to synchronize the results of the threads.
Since multi-core hardware has been available for *many* years, a decent developer will write their code accordingly. Unfortunately there are many developers not in this category, in spite of aids such as Apple's Grand Central Dispatch to assist them:
http://en.wikipedia.org/wiki/Grand_Central_Dispatch
Even if an individual process is not properly multi-threaded, there are many processes on a typical system. Within each process there are many threads. On a quad core system, all it takes is four runnable threads across all these processes to harness the available CPU capacity. So even without well-written multi-threaded code, a multi-core or hyperthreaded CPU can be beneficial.