리눅스에는 프로그램의 작성을 도와주기 위해 프로세스 대부분에 필요한 여러 라이브러리 함수가 있다.
시스템 콜은 보통의 함수 호출과는 다르게 C 언어 등의 고급언어에서는 직접 호출이 불가능하다. 아키텍처에 의존하는 어셈블리 코드를 사용해 호출한다.
만약 OS의 도움이 없다면 각 프로그램은 시스템 콜을 호출할 때마다 아키텍처에 의존하는 어셈블리 언어를 써서 고급언어로부터 어셈블리 코드를 호출해야만 한다.
OS의 도움이 없다면

이 방식은 프로그램을 작성하는데 시간이 오래 걸린다. 다른 아키텍처에도 사용할 수 없어 이식성도 매우 낮으며 이식할 수 없는 경우도 있다.
wrapper
OS는 내부적으로 시스템 콜을 호출하는 일만 하는 함수를 제공하는데 이를 시스템 콜 wrapper이라고 한다.
wrapper 함수는 아키텍처별로 존재한다. 고급언어로 써진 사용자 프로그램부터는 각 언어에 대응하여 준비된 시스템 콜의 wrapper 함수를 호출하기만 하면 된다.
사용자 프로그램은 wrapper 함수를 호출

C 언어에는 ISO에 의해 정해진 표준 라이브러리가 있다. 리눅스에는 이 표준 C 라이브러리가 제공되고 있다. 보통은 GNU 프로젝트가 제공하는 glibc를 C 라이브러리로 사용한다. 대부분의 C 프로그램은 glibc에 링크하고 있다.
glibc는 시스템 콜의 wrapper 함수를 포함한다. 또한 POSIX 규격에 정의된 함수도 제공한다.
POSIX 규격: 유닉스 계열의 OS가 갖추어야 할 각종 기능을 정해둔 규칙
프로그램이 어떠한 라이브러리를 통해 링크하고 있는가는 ldd 명령어를 사용하여 확인할 수 있다. 테스트로 echo 명령어에 대해 ldd의 실행 결과를 본다.

실행 결과를 보면 libc라는 부분이 표준 C 라이브러리에 해당한다
시스템에 의존하고 있는 여러 가지 프로그램에 대해 ldd를 실행해보면 매우 많은 프로그램이 libc에 링크되어 있음을 알 수 있다.
OS가 제공하는 프로그램은 OS가 제공하는 라이브러리와 마찬가지로 대부분의 프로그램이 필요하다. OS의 동작을 변경시키는 프로그램도 OS의 일부로써 제공한다.
OS가 제공하는 프로그램