Question: Long and short is really in the question title. For a language which compiles to an intermediate language like MSIL or Java byte-code, if there's concern about something like reverse engineering or hacking to disable security features, should AOT (ahead of time) compilation be considered rather than just obfuscation? Obviously, there's a bit of wiggle room in this question as there's no one answer I wouldn't imagine, but when would you start looking at performing an AOT compilation before distributing something versus sending it out obfuscated?

For anyone that stumbles across this and isn't familiar:

Wikipedia Entry on AOT Compilers: <http://en.wikipedia.org/wiki/AOT_compiler>

Mono AOT Compiler feature: <http://www.mono-project.com/AOT>

Answer: 
> 
> should AOT (ahead of time) compilation be considered rather than just obfuscation?
> 
> 
> 

Although probably not your intent, that can be interpreted as "should we use AOT compilation as opposed to obfuscation", which implies that AOT compilation > obfuscation. This is not necessarily the case, in fact, I would argue that good obfuscation is better than AOT compilation, since it will at least slightly irritate the person doing the RE in assembly. In the long run though, neither will be of much help; anything can be cracked, given enough time.
It'll be a lot harder to maintain different versions. You should either use a language like C++ or if you're stuck with Java, you can use a custom class loader instead of just obfuscating. All code can be RE'd with time; I'd just trust the law to do your work for you and obfuscate.