xref: /openbmc/linux/Documentation/ABI/README (revision c18f6365)
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	The file Documentation/feature-removal-schedule.txt may describe
40c18f6365SGreg Kroah-Hartman	some of these interfaces, giving a schedule for when they will
41c18f6365SGreg Kroah-Hartman	be removed.
42c18f6365SGreg Kroah-Hartman
43c18f6365SGreg Kroah-Hartman  removed/
44c18f6365SGreg Kroah-Hartman	This directory contains a list of the old interfaces that have
45c18f6365SGreg Kroah-Hartman	been removed from the kernel.
46c18f6365SGreg Kroah-Hartman
47c18f6365SGreg Kroah-HartmanEvery file in these directories will contain the following information:
48c18f6365SGreg Kroah-Hartman
49c18f6365SGreg Kroah-HartmanWhat:		Short description of the interface
50c18f6365SGreg Kroah-HartmanDate:		Date created
51c18f6365SGreg Kroah-HartmanKernelVersion:	Kernel version this feature first showed up in.
52c18f6365SGreg Kroah-HartmanContact:	Primary contact for this interface (may be a mailing list)
53c18f6365SGreg Kroah-HartmanDescription:	Long description of the interface and how to use it.
54c18f6365SGreg Kroah-HartmanUsers:		All users of this interface who wish to be notified when
55c18f6365SGreg Kroah-Hartman		it changes.  This is very important for interfaces in
56c18f6365SGreg Kroah-Hartman		the "testing" stage, so that kernel developers can work
57c18f6365SGreg Kroah-Hartman		with userspace developers to ensure that things do not
58c18f6365SGreg Kroah-Hartman		break in ways that are unacceptable.  It is also
59c18f6365SGreg Kroah-Hartman		important to get feedback for these interfaces to make
60c18f6365SGreg Kroah-Hartman		sure they are working in a proper way and do not need to
61c18f6365SGreg Kroah-Hartman		be changed further.
62c18f6365SGreg Kroah-Hartman
63c18f6365SGreg Kroah-Hartman
64c18f6365SGreg Kroah-HartmanHow things move between levels:
65c18f6365SGreg Kroah-Hartman
66c18f6365SGreg Kroah-HartmanInterfaces in stable may move to obsolete, as long as the proper
67c18f6365SGreg Kroah-Hartmannotification is given.
68c18f6365SGreg Kroah-Hartman
69c18f6365SGreg Kroah-HartmanInterfaces may be removed from obsolete and the kernel as long as the
70c18f6365SGreg Kroah-Hartmandocumented amount of time has gone by.
71c18f6365SGreg Kroah-Hartman
72c18f6365SGreg Kroah-HartmanInterfaces in the testing state can move to the stable state when the
73c18f6365SGreg Kroah-Hartmandevelopers feel they are finished.  They cannot be removed from the
74c18f6365SGreg Kroah-Hartmankernel tree without going through the obsolete state first.
75c18f6365SGreg Kroah-Hartman
76c18f6365SGreg Kroah-HartmanIt's up to the developer to place their interfaces in the category they
77c18f6365SGreg Kroah-Hartmanwish for it to start out in.
78