Difference between API and ABI
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 any way? 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 a compiler.