18c2ecf20Sopenharmony_ciThis directory attempts to document the ABI between the Linux kernel and
28c2ecf20Sopenharmony_ciuserspace, and the relative stability of these interfaces.  Due to the
38c2ecf20Sopenharmony_cieverchanging nature of Linux, and the differing maturity levels, these
48c2ecf20Sopenharmony_ciinterfaces should be used by userspace programs in different ways.
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ciWe have four different levels of ABI stability, as shown by the four
78c2ecf20Sopenharmony_cidifferent subdirectories in this location.  Interfaces may change levels
88c2ecf20Sopenharmony_ciof stability according to the rules described below.
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ciThe different levels of stability are:
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci  stable/
138c2ecf20Sopenharmony_ci	This directory documents the interfaces that the developer has
148c2ecf20Sopenharmony_ci	defined to be stable.  Userspace programs are free to use these
158c2ecf20Sopenharmony_ci	interfaces with no restrictions, and backward compatibility for
168c2ecf20Sopenharmony_ci	them will be guaranteed for at least 2 years.  Most interfaces
178c2ecf20Sopenharmony_ci	(like syscalls) are expected to never change and always be
188c2ecf20Sopenharmony_ci	available.
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci  testing/
218c2ecf20Sopenharmony_ci	This directory documents interfaces that are felt to be stable,
228c2ecf20Sopenharmony_ci	as the main development of this interface has been completed.
238c2ecf20Sopenharmony_ci	The interface can be changed to add new features, but the
248c2ecf20Sopenharmony_ci	current interface will not break by doing this, unless grave
258c2ecf20Sopenharmony_ci	errors or security problems are found in them.  Userspace
268c2ecf20Sopenharmony_ci	programs can start to rely on these interfaces, but they must be
278c2ecf20Sopenharmony_ci	aware of changes that can occur before these interfaces move to
288c2ecf20Sopenharmony_ci	be marked stable.  Programs that use these interfaces are
298c2ecf20Sopenharmony_ci	strongly encouraged to add their name to the description of
308c2ecf20Sopenharmony_ci	these interfaces, so that the kernel developers can easily
318c2ecf20Sopenharmony_ci	notify them if any changes occur (see the description of the
328c2ecf20Sopenharmony_ci	layout of the files below for details on how to do this.)
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci  obsolete/
358c2ecf20Sopenharmony_ci	This directory documents interfaces that are still remaining in
368c2ecf20Sopenharmony_ci	the kernel, but are marked to be removed at some later point in
378c2ecf20Sopenharmony_ci	time.  The description of the interface will document the reason
388c2ecf20Sopenharmony_ci	why it is obsolete and when it can be expected to be removed.
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci  removed/
418c2ecf20Sopenharmony_ci	This directory contains a list of the old interfaces that have
428c2ecf20Sopenharmony_ci	been removed from the kernel.
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ciEvery file in these directories will contain the following information:
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ciWhat:		Short description of the interface
478c2ecf20Sopenharmony_ciDate:		Date created
488c2ecf20Sopenharmony_ciKernelVersion:	Kernel version this feature first showed up in.
498c2ecf20Sopenharmony_ciContact:	Primary contact for this interface (may be a mailing list)
508c2ecf20Sopenharmony_ciDescription:	Long description of the interface and how to use it.
518c2ecf20Sopenharmony_ciUsers:		All users of this interface who wish to be notified when
528c2ecf20Sopenharmony_ci		it changes.  This is very important for interfaces in
538c2ecf20Sopenharmony_ci		the "testing" stage, so that kernel developers can work
548c2ecf20Sopenharmony_ci		with userspace developers to ensure that things do not
558c2ecf20Sopenharmony_ci		break in ways that are unacceptable.  It is also
568c2ecf20Sopenharmony_ci		important to get feedback for these interfaces to make
578c2ecf20Sopenharmony_ci		sure they are working in a proper way and do not need to
588c2ecf20Sopenharmony_ci		be changed further.
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ciNote:
628c2ecf20Sopenharmony_ci   The fields should be use a simple notation, compatible with ReST markup.
638c2ecf20Sopenharmony_ci   Also, the file **should not** have a top-level index, like::
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci	===
668c2ecf20Sopenharmony_ci	foo
678c2ecf20Sopenharmony_ci	===
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ciHow things move between levels:
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_ciInterfaces in stable may move to obsolete, as long as the proper
728c2ecf20Sopenharmony_cinotification is given.
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ciInterfaces may be removed from obsolete and the kernel as long as the
758c2ecf20Sopenharmony_cidocumented amount of time has gone by.
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ciInterfaces in the testing state can move to the stable state when the
788c2ecf20Sopenharmony_cidevelopers feel they are finished.  They cannot be removed from the
798c2ecf20Sopenharmony_cikernel tree without going through the obsolete state first.
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ciIt's up to the developer to place their interfaces in the category they
828c2ecf20Sopenharmony_ciwish for it to start out in.
838c2ecf20Sopenharmony_ci
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_ciNotable bits of non-ABI, which should not under any circumstances be considered
868c2ecf20Sopenharmony_cistable:
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_ci- Kconfig.  Userspace should not rely on the presence or absence of any
898c2ecf20Sopenharmony_ci  particular Kconfig symbol, in /proc/config.gz, in the copy of .config
908c2ecf20Sopenharmony_ci  commonly installed to /boot, or in any invocation of the kernel build
918c2ecf20Sopenharmony_ci  process.
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci- Kernel-internal symbols.  Do not rely on the presence, absence, location, or
948c2ecf20Sopenharmony_ci  type of any kernel symbol, either in System.map files or the kernel binary
958c2ecf20Sopenharmony_ci  itself.  See Documentation/process/stable-api-nonsense.rst.
96