Greg Kroah-Hartman | c18f636 | 2006-04-27 14:10:12 -0700 | [diff] [blame] | 1 | This directory attempts to document the ABI between the Linux kernel and |
| 2 | userspace, and the relative stability of these interfaces. Due to the |
| 3 | everchanging nature of Linux, and the differing maturity levels, these |
| 4 | interfaces should be used by userspace programs in different ways. |
| 5 | |
| 6 | We have four different levels of ABI stability, as shown by the four |
| 7 | different subdirectories in this location. Interfaces may change levels |
| 8 | of stability according to the rules described below. |
| 9 | |
| 10 | The different levels of stability are: |
| 11 | |
| 12 | stable/ |
| 13 | This directory documents the interfaces that the developer has |
| 14 | defined to be stable. Userspace programs are free to use these |
| 15 | interfaces with no restrictions, and backward compatibility for |
| 16 | them will be guaranteed for at least 2 years. Most interfaces |
| 17 | (like syscalls) are expected to never change and always be |
| 18 | available. |
| 19 | |
| 20 | testing/ |
| 21 | This directory documents interfaces that are felt to be stable, |
| 22 | as the main development of this interface has been completed. |
| 23 | The interface can be changed to add new features, but the |
| 24 | current interface will not break by doing this, unless grave |
| 25 | errors or security problems are found in them. Userspace |
| 26 | programs can start to rely on these interfaces, but they must be |
| 27 | aware of changes that can occur before these interfaces move to |
| 28 | be marked stable. Programs that use these interfaces are |
| 29 | strongly encouraged to add their name to the description of |
| 30 | these interfaces, so that the kernel developers can easily |
| 31 | notify them if any changes occur (see the description of the |
| 32 | layout of the files below for details on how to do this.) |
| 33 | |
| 34 | obsolete/ |
| 35 | This directory documents interfaces that are still remaining in |
| 36 | the kernel, but are marked to be removed at some later point in |
| 37 | time. The description of the interface will document the reason |
| 38 | why it is obsolete and when it can be expected to be removed. |
Greg Kroah-Hartman | c18f636 | 2006-04-27 14:10:12 -0700 | [diff] [blame] | 39 | |
| 40 | removed/ |
| 41 | This directory contains a list of the old interfaces that have |
| 42 | been removed from the kernel. |
| 43 | |
| 44 | Every file in these directories will contain the following information: |
| 45 | |
| 46 | What: Short description of the interface |
| 47 | Date: Date created |
| 48 | KernelVersion: Kernel version this feature first showed up in. |
| 49 | Contact: Primary contact for this interface (may be a mailing list) |
| 50 | Description: Long description of the interface and how to use it. |
| 51 | Users: All users of this interface who wish to be notified when |
| 52 | it changes. This is very important for interfaces in |
| 53 | the "testing" stage, so that kernel developers can work |
| 54 | with userspace developers to ensure that things do not |
| 55 | break in ways that are unacceptable. It is also |
| 56 | important to get feedback for these interfaces to make |
| 57 | sure they are working in a proper way and do not need to |
| 58 | be changed further. |
| 59 | |
| 60 | |
| 61 | How things move between levels: |
| 62 | |
| 63 | Interfaces in stable may move to obsolete, as long as the proper |
| 64 | notification is given. |
| 65 | |
| 66 | Interfaces may be removed from obsolete and the kernel as long as the |
| 67 | documented amount of time has gone by. |
| 68 | |
| 69 | Interfaces in the testing state can move to the stable state when the |
| 70 | developers feel they are finished. They cannot be removed from the |
| 71 | kernel tree without going through the obsolete state first. |
| 72 | |
| 73 | It's up to the developer to place their interfaces in the category they |
| 74 | wish for it to start out in. |
Josh Triplett | ee2f51d | 2013-11-12 15:11:14 -0800 | [diff] [blame] | 75 | |
| 76 | |
| 77 | Notable bits of non-ABI, which should not under any circumstances be considered |
| 78 | stable: |
| 79 | |
| 80 | - Kconfig. Userspace should not rely on the presence or absence of any |
| 81 | particular Kconfig symbol, in /proc/config.gz, in the copy of .config |
| 82 | commonly installed to /boot, or in any invocation of the kernel build |
| 83 | process. |
| 84 | |
| 85 | - Kernel-internal symbols. Do not rely on the presence, absence, location, or |
| 86 | type of any kernel symbol, either in System.map files or the kernel binary |
| 87 | itself. See Documentation/stable_api_nonsense.txt. |