A binary file containing an executable program, consisting of a sequence of (op code, data) pairs. Byte-code op codes are most often fixed size bit patterns, but can be variable size. The data portion consists of zero or more bits whose format typically depends on the op code. A byte-code program is interpreted by a byte-code interpreter. The advantage of this technique compared with outputing machine code for some particular processor is that the same byte-code can be executed on any processor on which the byte-code interpreter runs. The byte-code may be compiled to machine code ("native code") for speed of execution but this usually requires significantly greater effort for each new taraget architecture than simply porting the interpreter. For example, Java is compiled to byte-code which runs on the Java Virtual Machine.