xref: /openbmc/linux/Documentation/ABI/README (revision c7e45ea4)
1c18f6365SGreg Kroah-HartmanThis directory attempts to document the ABI between the Linux kernel and
2c18f6365SGreg Kroah-Hartmanuserspace, and the relative stability of these interfaces.  Due to the
3c18f6365SGreg Kroah-Hartmaneverchanging nature of Linux, and the differing maturity levels, these
4c18f6365SGreg Kroah-Hartmaninterfaces should be used by userspace programs in different ways.
5c18f6365SGreg Kroah-Hartman
6c18f6365SGreg Kroah-HartmanWe have four different levels of ABI stability, as shown by the four
7c18f6365SGreg Kroah-Hartmandifferent subdirectories in this location.  Interfaces may change levels
8c18f6365SGreg Kroah-Hartmanof stability according to the rules described below.
9c18f6365SGreg Kroah-Hartman
10c18f6365SGreg Kroah-HartmanThe different levels of stability are:
11c18f6365SGreg Kroah-Hartman
12c18f6365SGreg Kroah-Hartman  stable/
13c18f6365SGreg Kroah-Hartman	This directory documents the interfaces that the developer has
14c18f6365SGreg Kroah-Hartman	defined to be stable.  Userspace programs are free to use these
15c18f6365SGreg Kroah-Hartman	interfaces with no restrictions, and backward compatibility for
16c18f6365SGreg Kroah-Hartman	them will be guaranteed for at least 2 years.  Most interfaces
17c18f6365SGreg Kroah-Hartman	(like syscalls) are expected to never change and always be
18c18f6365SGreg Kroah-Hartman	available.
19c18f6365SGreg Kroah-Hartman
20c18f6365SGreg Kroah-Hartman  testing/
21c18f6365SGreg Kroah-Hartman	This directory documents interfaces that are felt to be stable,
22c18f6365SGreg Kroah-Hartman	as the main development of this interface has been completed.
23c18f6365SGreg Kroah-Hartman	The interface can be changed to add new features, but the
24c18f6365SGreg Kroah-Hartman	current interface will not break by doing this, unless grave
25c18f6365SGreg Kroah-Hartman	errors or security problems are found in them.  Userspace
26c18f6365SGreg Kroah-Hartman	programs can start to rely on these interfaces, but they must be
27c18f6365SGreg Kroah-Hartman	aware of changes that can occur before these interfaces move to
28c18f6365SGreg Kroah-Hartman	be marked stable.  Programs that use these interfaces are
29c18f6365SGreg Kroah-Hartman	strongly encouraged to add their name to the description of
30c18f6365SGreg Kroah-Hartman	these interfaces, so that the kernel developers can easily
31c18f6365SGreg Kroah-Hartman	notify them if any changes occur (see the description of the
32c18f6365SGreg Kroah-Hartman	layout of the files below for details on how to do this.)
33c18f6365SGreg Kroah-Hartman
34c18f6365SGreg Kroah-Hartman  obsolete/
35c18f6365SGreg Kroah-Hartman	This directory documents interfaces that are still remaining in
36c18f6365SGreg Kroah-Hartman	the kernel, but are marked to be removed at some later point in
37c18f6365SGreg Kroah-Hartman	time.  The description of the interface will document the reason
38c18f6365SGreg Kroah-Hartman	why it is obsolete and when it can be expected to be removed.
39c18f6365SGreg Kroah-Hartman
40c18f6365SGreg Kroah-Hartman  removed/
41c18f6365SGreg Kroah-Hartman	This directory contains a list of the old interfaces that have
42c18f6365SGreg Kroah-Hartman	been removed from the kernel.
43c18f6365SGreg Kroah-Hartman
44c18f6365SGreg Kroah-HartmanEvery file in these directories will contain the following information:
45c18f6365SGreg Kroah-Hartman
46c18f6365SGreg Kroah-HartmanWhat:		Short description of the interface
47c18f6365SGreg Kroah-HartmanDate:		Date created
48c18f6365SGreg Kroah-HartmanKernelVersion:	Kernel version this feature first showed up in.
49c18f6365SGreg Kroah-HartmanContact:	Primary contact for this interface (may be a mailing list)
50c18f6365SGreg Kroah-HartmanDescription:	Long description of the interface and how to use it.
51c18f6365SGreg Kroah-HartmanUsers:		All users of this interface who wish to be notified when
52c18f6365SGreg Kroah-Hartman		it changes.  This is very important for interfaces in
53c18f6365SGreg Kroah-Hartman		the "testing" stage, so that kernel developers can work
54c18f6365SGreg Kroah-Hartman		with userspace developers to ensure that things do not
55c18f6365SGreg Kroah-Hartman		break in ways that are unacceptable.  It is also
56c18f6365SGreg Kroah-Hartman		important to get feedback for these interfaces to make
57c18f6365SGreg Kroah-Hartman		sure they are working in a proper way and do not need to
58c18f6365SGreg Kroah-Hartman		be changed further.
59c18f6365SGreg Kroah-Hartman
60c7e45ea4SMauro Carvalho Chehab
61c7e45ea4SMauro Carvalho ChehabNote:
62c7e45ea4SMauro Carvalho Chehab   The fields should be use a simple notation, compatible with ReST markup.
63c7e45ea4SMauro Carvalho Chehab   Also, the file **should not** have a top-level index, like::
64c7e45ea4SMauro Carvalho Chehab
65c7e45ea4SMauro Carvalho Chehab	===
66c7e45ea4SMauro Carvalho Chehab	foo
67c7e45ea4SMauro Carvalho Chehab	===
68c18f6365SGreg Kroah-Hartman
69c18f6365SGreg Kroah-HartmanHow things move between levels:
70c18f6365SGreg Kroah-Hartman
71c18f6365SGreg Kroah-HartmanInterfaces in stable may move to obsolete, as long as the proper
72c18f6365SGreg Kroah-Hartmannotification is given.
73c18f6365SGreg Kroah-Hartman
74c18f6365SGreg Kroah-HartmanInterfaces may be removed from obsolete and the kernel as long as the
75c18f6365SGreg Kroah-Hartmandocumented amount of time has gone by.
76c18f6365SGreg Kroah-Hartman
77c18f6365SGreg Kroah-HartmanInterfaces in the testing state can move to the stable state when the
78c18f6365SGreg Kroah-Hartmandevelopers feel they are finished.  They cannot be removed from the
79c18f6365SGreg Kroah-Hartmankernel tree without going through the obsolete state first.
80c18f6365SGreg Kroah-Hartman
81c18f6365SGreg Kroah-HartmanIt's up to the developer to place their interfaces in the category they
82c18f6365SGreg Kroah-Hartmanwish for it to start out in.
83ee2f51dcSJosh Triplett
84ee2f51dcSJosh Triplett
85ee2f51dcSJosh TriplettNotable bits of non-ABI, which should not under any circumstances be considered
86ee2f51dcSJosh Triplettstable:
87ee2f51dcSJosh Triplett
88ee2f51dcSJosh Triplett- Kconfig.  Userspace should not rely on the presence or absence of any
89ee2f51dcSJosh Triplett  particular Kconfig symbol, in /proc/config.gz, in the copy of .config
90ee2f51dcSJosh Triplett  commonly installed to /boot, or in any invocation of the kernel build
91ee2f51dcSJosh Triplett  process.
92ee2f51dcSJosh Triplett
93ee2f51dcSJosh Triplett- Kernel-internal symbols.  Do not rely on the presence, absence, location, or
94ee2f51dcSJosh Triplett  type of any kernel symbol, either in System.map files or the kernel binary
958c27ceffSMauro Carvalho Chehab  itself.  See Documentation/process/stable-api-nonsense.rst.
96