1. A method comprising: receiving a native code module, wherein the native code module includes (i) data, and (ii) untrusted program code expressed using an instruction set architecture associated with a computing device; loading the native code module into a secure runtime environment of the computing device, including: enforcing data integrity for the native code module; enforcing code integrity for the native code module by at least checking the untrusted program code for the presence of restricted instructions from the instruction set architecture associated with the computing device; and enforcing control flow integrity by at least checking that jump instructions only use relative addressing; and then executing a set of instructions from the native code module in the secure runtime environment.