title: Difference between API and ABI
body: <p>I am new to Linux system programming and I came across API and ABI while reading
  <strong>Linux System Programming</strong>.</p>
  <p><strong>Definition of API:</strong></p>
  <blockquote>
  <p>An API defines the interfaces by which
  one piece of software communicates
  with another at the source level.</p>
  </blockquote>
  <p><strong>Definition of ABI:</strong></p>
  <blockquote>
  <p>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.</p>
  </blockquote>
  <p>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?</p>
  <p>The only difference I know is API is mostly used by programmers and ABI is mostly used by a compiler.</p>