# Interfícies del nucli de Linux

El nucli de Linux proporciona múltiples interfícies per a l'espai d'usuari i el codi en mode nucli que s'utilitzen per a diferents propòsits i que tenen diferents propietats segons el disseny. Hi ha dos tipus d'interfície de programació d'aplicacions (API) al nucli Linux:
   * l'API "kernel – espai d'usuari"; i
   * l'API "interna del nucli".

## API de Linux

L'API de Linux inclou el nucli – API d'espai d'usuari, que permet que el codi de l'espai d'usuari accedeixi als recursos del sistema i als serveis del nucli de Linux. Està compost per la interfície de crida al sistema del nucli Linux i les subrutines de la biblioteca estàndard C. L'objectiu del desenvolupament de l'API de Linux ha estat proporcionar les característiques utilitzables de les especificacions definides a POSIX d'una manera que sigui raonablement compatible, robusta i de rendiment, i proporcionar funcions útils addicionals no definides a POSIX, igual que el nucli – Les API d'espai d'usuari d'altres sistemes que implementen l'API POSIX també proporcionen funcions addicionals no definides a POSIX.
L'API de Linux, per elecció, s'ha mantingut estable al llarg de les dècades gràcies a una política de no introduir canvis de ruptura; aquesta estabilitat garanteix la portabilitat del codi font. Al mateix temps, els desenvolupadors del nucli de Linux han estat històricament conservadors i meticulosos a l'hora d'introduir noves trucades al sistema.
Molt de programari gratuït i de codi obert està escrit per a l'API POSIX. Com que flueix molt més desenvolupament al nucli de Linux en comparació amb les altres combinacions de nucli i biblioteca estàndard C compatibles amb POSIX, el nucli de Linux i la seva API s'han augmentat amb funcions addicionals. La programació per a l'API Linux completa, en lloc de només l'API POSIX, pot proporcionar avantatges en els casos en què aquestes funcions addicionals siguin útils. Exemples actuals coneguts són udev, systemd i Weston. Persones com Lennart Poettering advoquen obertament per preferir l'API Linux a l'API POSIX, on això ofereix avantatges.
A FOSDEM 2016, Michael Kerrisk va explicar alguns dels problemes percebuts amb l'API d'espai d'usuari del nucli de Linux, descrivint que conté múltiples errors de disseny perquè no és extensible, no es pot mantenir, és massa complex, té un propòsit limitat, infringeix els estàndards i és inconsistent. La majoria d'aquests errors no es poden corregir perquè fer-ho trencaria l'ABI que el nucli presenta a l'espai d'usuari.

## Interfície de crida al sistema del nucli Linux

La interfície de crida al sistema d'un nucli és un conjunt de totes les crides de sistema implementades i disponibles en un nucli. Al nucli Linux, diversos subsistemes, com ara el Direct Rendering Manager (DRM), defineixen les seves pròpies crides al sistema, totes elles part de la interfície de crides del sistema.
S'estan discutint públicament diversos problemes amb l'organització de les cridesal sistema del nucli de Linux. Els problemes han estat assenyalats per Andy Lutomirski, Michael Kerrisk i altres.

### La biblioteca estàndard C

Una biblioteca estàndard C per a Linux inclou embolcalls al voltant de les trucades al sistema del nucli de Linux; la combinació de la interfície de trucada del sistema del nucli de Linux i una biblioteca estàndard C és el que construeix l'API de Linux. Algunes implementacions populars de la biblioteca estàndard C són
* glibc
* uClibc
* klibc
* Newlib
* musl
* dietalibc
* libbionic i libhybris

## Linux ABI

El terme Linux ABI es refereix a un ABI d'espai d'usuari del nucli. La interfície binària de l'aplicació fa referència als binaris compilats, en codi màquina. Per tant, qualsevol ABI d'aquest tipus està vinculat al conjunt d'instruccions. Definir un ABI útil i mantenir-lo estable és menys responsabilitat dels desenvolupadors del nucli de Linux o dels desenvolupadors de la Biblioteca C GNU, i més la tasca de les distribucions de Linux i dels proveïdors de programari independents (ISV) que vulguin vendre i donar suport als seus programari propietari com a binaris només per a un únic ABI de Linux, en lloc de donar suport a múltiples ABI de Linux.

## Referències

* ↑ «ControlGroupInterface» (en anglès). freedesktop.org.
* ↑ «libevdev» (en anglès). freedesktop.org.
* ↑ Alessandro Rubini. «Kernel System Calls» (en anglès). linux.it, 02-11-2006. [Consulta: 11 novembre 2014].
* ↑ Linus Torvalds. «Re: [Regression w/ patch Media commit causes user space to misbahave (was: Re: Linux 3.8-rc1)]» (en anglès). Linux kernel mailing list, 23-12-2012. [Consulta: 26 agost 2014].
* ↑ «Choosing between portability and innovation» (en anglès). LWN.net, 02-03-2011.
* ↑ «Interview: Lennart Poettering - Lennart Poettering will give a talk about "Systemd: beyond init" at FOSDEM 2011.» (en anglès). fosdem.org. [Consulta: 16 juny 2014].
* ↑ Error: hi ha arxiuurl o arxiudata, però calen tots dos paràmetres.Michael Kerrisk. «[Michael Kerrisk How to design a Linux kernel API]» (en anglès), 31-01-2016. [Consulta: 4 febrer 2016].
* ↑ «System Call Organization» (en anglès).
* ↑ «Making a universal list of syscalls?» (en anglès). LKML, 27-02-2014.
* ↑ «Flags as a system call API design pattern» (en anglès). LWN.net, 12-02-2014.
* ↑ «On vsyscalls and the vDSO» (en anglès). LWN.net, 08-06-2011.