* ABI - application binary interface. This defines how the operating system looks at an executable file to know where things like data such as strings exist and where executable machine code resides. An example of how the ABI works would be the the entry point where the OS steps in and starts running your application. In many languages that would be main(). This ensures that code built by a variety of compilers and even libraries can interact with the OS and other compiled code. The OS defines the ABI and is independent of an ISA like ARM, PowerPC, MIPS or x86_64. Platforms can also have EABI's for embedded use where full blown operating systems like Linux are not used but instead run flat binary's or single process, multi threaded RTOS's. It ensures that code built by a variety of compilers and libraries can interact without the overhead of a complex OS which usually defines an ABI. So instead of a developer having to reinvent the wheel and design an ABI for embedded use, they can simply use the pre-defined and standardized EABI. Takes a lot of work off the developers plate and moves it into the compiler. The ISA or instruction set architecture defines the CPU itself. It is the job of the compiler to know how to compile and then link code for your ISA.