162306a36Sopenharmony_ciThis directory attempts to document the ABI between the Linux kernel and 262306a36Sopenharmony_ciuserspace, and the relative stability of these interfaces. Due to the 362306a36Sopenharmony_cieverchanging nature of Linux, and the differing maturity levels, these 462306a36Sopenharmony_ciinterfaces should be used by userspace programs in different ways. 562306a36Sopenharmony_ci 662306a36Sopenharmony_ciWe have four different levels of ABI stability, as shown by the four 762306a36Sopenharmony_cidifferent subdirectories in this location. Interfaces may change levels 862306a36Sopenharmony_ciof stability according to the rules described below. 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciThe different levels of stability are: 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci stable/ 1362306a36Sopenharmony_ci This directory documents the interfaces that the developer has 1462306a36Sopenharmony_ci defined to be stable. Userspace programs are free to use these 1562306a36Sopenharmony_ci interfaces with no restrictions, and backward compatibility for 1662306a36Sopenharmony_ci them will be guaranteed for at least 2 years. Most interfaces 1762306a36Sopenharmony_ci (like syscalls) are expected to never change and always be 1862306a36Sopenharmony_ci available. 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci testing/ 2162306a36Sopenharmony_ci This directory documents interfaces that are felt to be stable, 2262306a36Sopenharmony_ci as the main development of this interface has been completed. 2362306a36Sopenharmony_ci The interface can be changed to add new features, but the 2462306a36Sopenharmony_ci current interface will not break by doing this, unless grave 2562306a36Sopenharmony_ci errors or security problems are found in them. Userspace 2662306a36Sopenharmony_ci programs can start to rely on these interfaces, but they must be 2762306a36Sopenharmony_ci aware of changes that can occur before these interfaces move to 2862306a36Sopenharmony_ci be marked stable. Programs that use these interfaces are 2962306a36Sopenharmony_ci strongly encouraged to add their name to the description of 3062306a36Sopenharmony_ci these interfaces, so that the kernel developers can easily 3162306a36Sopenharmony_ci notify them if any changes occur (see the description of the 3262306a36Sopenharmony_ci layout of the files below for details on how to do this.) 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci obsolete/ 3562306a36Sopenharmony_ci This directory documents interfaces that are still remaining in 3662306a36Sopenharmony_ci the kernel, but are marked to be removed at some later point in 3762306a36Sopenharmony_ci time. The description of the interface will document the reason 3862306a36Sopenharmony_ci why it is obsolete and when it can be expected to be removed. 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci removed/ 4162306a36Sopenharmony_ci This directory contains a list of the old interfaces that have 4262306a36Sopenharmony_ci been removed from the kernel. 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ciEvery file in these directories will contain the following information: 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ciWhat: Short description of the interface 4762306a36Sopenharmony_ciDate: Date created 4862306a36Sopenharmony_ciKernelVersion: Kernel version this feature first showed up in. 4962306a36Sopenharmony_ciContact: Primary contact for this interface (may be a mailing list) 5062306a36Sopenharmony_ciDescription: Long description of the interface and how to use it. 5162306a36Sopenharmony_ciUsers: All users of this interface who wish to be notified when 5262306a36Sopenharmony_ci it changes. This is very important for interfaces in 5362306a36Sopenharmony_ci the "testing" stage, so that kernel developers can work 5462306a36Sopenharmony_ci with userspace developers to ensure that things do not 5562306a36Sopenharmony_ci break in ways that are unacceptable. It is also 5662306a36Sopenharmony_ci important to get feedback for these interfaces to make 5762306a36Sopenharmony_ci sure they are working in a proper way and do not need to 5862306a36Sopenharmony_ci be changed further. 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ciNote: 6262306a36Sopenharmony_ci The fields should be use a simple notation, compatible with ReST markup. 6362306a36Sopenharmony_ci Also, the file **should not** have a top-level index, like:: 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci === 6662306a36Sopenharmony_ci foo 6762306a36Sopenharmony_ci === 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ciHow things move between levels: 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ciInterfaces in stable may move to obsolete, as long as the proper 7262306a36Sopenharmony_cinotification is given. 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ciInterfaces may be removed from obsolete and the kernel as long as the 7562306a36Sopenharmony_cidocumented amount of time has gone by. 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ciInterfaces in the testing state can move to the stable state when the 7862306a36Sopenharmony_cidevelopers feel they are finished. They cannot be removed from the 7962306a36Sopenharmony_cikernel tree without going through the obsolete state first. 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ciIt's up to the developer to place their interfaces in the category they 8262306a36Sopenharmony_ciwish for it to start out in. 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ciNotable bits of non-ABI, which should not under any circumstances be considered 8662306a36Sopenharmony_cistable: 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci- Kconfig. Userspace should not rely on the presence or absence of any 8962306a36Sopenharmony_ci particular Kconfig symbol, in /proc/config.gz, in the copy of .config 9062306a36Sopenharmony_ci commonly installed to /boot, or in any invocation of the kernel build 9162306a36Sopenharmony_ci process. 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci- Kernel-internal symbols. Do not rely on the presence, absence, location, or 9462306a36Sopenharmony_ci type of any kernel symbol, either in System.map files or the kernel binary 9562306a36Sopenharmony_ci itself. See Documentation/process/stable-api-nonsense.rst. 96