I am new to linux system programming and I came across API and ABI while reading Linux System Programming.
Definition of API :
An API defines the interfaces by which one piece of software communicates with another at the source level.
Definition of ABI :
Whereas an API defines a source interface, an ABI defines the low-level binary interface between two or more pieces of software on a particular architecture. It defines how an application interacts with itself, how an application interacts with the kernel, and how an application interacts with libraries.
How can a program communicate at a source level ? What is a source level ? Is it related to source code in anyway? Or the source of the library gets included in the main program ?
The only difference I know is API is mostly used by programmers and ABI is mostly used by compiler.
This is the set of public types/variables/functions that you expose from your application/library.
In C/C++ this is what you expose in the header files that you ship with the application.
This is how the compiler builds an application.
It defines things (but is not limited to):