The core of the interpreter: bytecodes and a way to run them. Bytecodes are contained in functions, which together are composed into a program.