1. A method for validating a native code module to be executed on a computing device, where the native code module comprises untrusted program code expressed using an instruction set architecture associated with the computing device, comprising: receiving the native code module; and validating that the native code module will execute safely by: determining that a set of instructions in the native code module do not include restricted instructions and/or do not access restricted features of the computing device; and determining that the set of instructions are aligned along byte boundaries such that a specified set of byte boundaries always contain a valid instruction and a set of control flow instructions in the native code module have valid targets.