As you all know, 3gs has new cpu.
the main difference for us is that new cpu support thumb2 instructions set, and 2g/3g cpu doesnt support it
binaries for 2g/3g has cpu subtype = 6, 3gs - cpu subtype = 9
3gs can run both binaries, 2g/3g only with subtype=6, you can edit cpu subtype with this app - hte.sf.net , then fix signature with ldid, for example compass app runs, but crashes trying to access compass
3 important instructions from thumb2 which are used in 3gs binaries is - CBZ, CBNZ, IT
that's why no need expect voice control on 2g/3g anytime soon.