Content deleted Content added
LearnLagoon (talk | contribs) m The sentence "It is composed out of the system ..." changed to "It is composed of the system ..." |
m Bot: http → https |
||
(24 intermediate revisions by 11 users not shown) | |||
Line 1:
{{Short description|
{{essay-like|date=July 2014}}
[[File:Linux kernel interfaces.svg|thumb|upright=1.5|Linux API, Linux ABI, and in-kernel APIs and ABIs]]
The [[Linux kernel]] provides multiple interfaces to [[User space and kernel space|user-space and kernel-mode]] code.
== {{Anchor|Linux API}}Linux API ==
[[File:Linux API.svg|thumb|upright=1.5|The '''Linux API''' is composed out of the system call interface of the Linux kernel, the [[GNU C Library]] (by [[GNU]]), [[cgroups|libcgroup]],<ref name="libcgroup">{{cite web|url=https://www.freedesktop.org/wiki/Software/systemd/ControlGroupInterface/|title=ControlGroupInterface|publisher=[[freedesktop.org]]}}</ref> [[Direct Rendering Manager|libdrm]], [[Advanced Linux Sound Architecture|libalsa]] and [[evdev|libevdev]]<ref name="libevdev">{{cite web |url=
[[File:Linux kernel API.svg|thumb|upright=1.5|Linux API vs. [[POSIX]] API]]
The Linux API includes the kernel–user space API, which allows code in user space to access system resources and services of the Linux kernel.<ref>{{cite web
| url =
| title = Kernel System Calls
| date = 2006-11-02 | access-date = 2014-11-11
Line 36 ⟶ 30:
=== {{Anchor|System Call Interface|SCI}} System call interface of the Linux kernel===
The ''system call interface'' of a kernel is the set of all implemented and available [[system calls]] in a kernel. In the Linux kernel, various subsystems, such as the [[Direct Rendering Manager]] (DRM), define their own system calls, all of which are part of the system call interface.
Various issues with the organization of the Linux kernel system calls are being publicly discussed. Issues have been pointed out by Andy Lutomirski, [[Michael Kerrisk]] and others.<ref>{{cite web |url=
=== The C standard library ===
Line 52 ⟶ 46:
* [[dietlibc]]
* [[Bionic (software)|libbionic]] and [[Hybris (software)|libhybris]]
Although the landscape is shifting, amongst these options, glibc remains the most popular implementation, to the point of many treating it as the default and the term equivalent to libc.
==== Additions to POSIX ====
Line 74 ⟶ 70:
== Linux ABI ==
{{Expert needed|
[[File:Linux API and Linux ABI.svg|thumb|upright=1.5|The Linux API and
{{Main article|x32 ABI|Linux Standard Base}}
The
An ABI has to be defined for every instruction set, such as [[x86]], [[x86-64]], [[MIPS architecture|MIPS]], [[ARMv7-A]] (32-Bit), [[ARMv8-A]] (64-Bit), etc. with the [[endianness]], if both are supported.
Line 85 ⟶ 81:
== In-kernel APIs ==
The Linux kernel is a monolithic kernel, hence device drivers are kernel components. To ease the burden of companies maintaining their (proprietary) device drivers
== In-kernel ABIs ==
Since there are no stable in-kernel APIs, there cannot be stable in-kernel ABIs.<ref>{{cite web|url=
== Abstraction APIs ==
[[File:Linux kernel and OpenGL video games.svg|thumb|OpenGL is indeed an abstraction API to make use of diverse GPUs of multiple vendors without the need to program for each one specifically.]]
[[File:Division of labor cpu and gpu.svg|thumb|But the implementation of the OpenGL-specification is executed on the CPU in the context of the running operating system. One design goal of [[Vulkan (API)|Vulkan]] was to make the "graphics driver", i.e. the implementation of the graphics API, do less.]]
For
* Implementation of the [[OpenGL]] and [[Vulkan (API)|Vulkan]] specifications in proprietary Linux graphics drivers and the free and open-source implementation in [[Mesa (computer graphics)|Mesa]].
Line 104 ⟶ 100:
== See also ==
{{Portal|Linux}}
* ''[[The Linux Programming Interface]]'' by [[Michael Kerrisk]]▼
* {{Annotated link|Hybris (software)}}
* [[Semaphore (programming)]]▼
* {{Annotated link|netlink}}
▲** {{mono|[[File descriptor|eventfd()]]}}
* {{Annotated link|system call}}
* {{Annotated link|Windows API}}
* {{Annotated link|windows.h}}
* {{Annotated link|Wine (software)}}
== References ==
Line 121 ⟶ 117:
*[https://web.archive.org/web/20070227215533/http://www.gnugeneration.com/books/linux/2.6.20/kernel-api/ The API of Linux kernel 2.6.20] and [https://www.kernel.org/doc/htmldocs/kernel-api/ 4.12] (in deprecated htmldocs format)
*[https://abi-laboratory.pro/?view=timeline&l=linux API/ABI changes review for Linux]
* [
*{{usurped|1=[https://archive.today/20121220032539/http://www.makelinux.net/kernel_map/ Interactive Linux kernel map]}} with main API functions and structures, {{usurped|1=[https://web.archive.org/web/20180827040646/http://www.makelinux.net/kernel_map/LKM.pdf PDF]}} version
* {{usurped|1=[https://archive.today/20130221193824/http://www.makelinux.net/ldd3 Linux Device Drivers]}} by Jonathan Corbet, Greg Kroah-Hartman and Alessandro Rubini, 3rd edition
* [http://isis.poly.edu/kulesh/stuff/src/klist/ Linux Kernel Linked List Explained] {{Webarchive|url=https://web.archive.org/web/20090925130610/http://isis.poly.edu/kulesh/stuff/src/klist/ |date=2009-09-25 }}
|