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