3 ms·
I won't say it's been easy, but it is not unreasonable to support the same application from 10.3.9 through 10.7. Anything much older though is very difficult;
by makecheck 15y ago
I won't say it's been easy, but it is not unreasonable to support the same application from 10.3.9 through 10.7. Anything much older though is very difficult; many APIs in the OS only became sufficient in 10.3, and it wasn't until 10.3.9 that Apple made the compiler's C library a shared object (which was of huge importance for forward-compatibility).
There are side effects to supporting PowerPC however.
To run a modern app on a PowerPC machine you need a Universal binary. And the binary is often the biggest part, meaning half the app's bloat comes from data that modern Macs don't even need. What's worse, 10.3.9 and earlier don't actually support Universal binaries so unless you require 10.4+ you will also need to include a PowerPC-only binary. At that point, roughly 2/3 of your app's disk bloat is entirely because of PowerPC support. In these days of App Store updates and other downloads, it's becoming a little harder to justify adding extra megabytes to an app that won't benefit most people.
The developer tools are also now falling behind. SDKs have been disappearing slowly over the years anyway, but now you can't even build with the 10.3.9 SDK unless you use the Xcode 3.x environment; no Xcode 4. You're also using GCC, so you can't take advantage of LLVM and some other nifty new things. This definitely starts to cause some headaches.
So basically, for the next year or so PowerPC has some life left, but beyond that it will probably be impossible for an app to support both modern Macs and PowerPC Macs without extraordinary effort.