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