Deprecation is the discouragement of use of something human-made, such as a term, feature, design, or practice. Typically something is deprecated because it is claimed to be inferior compared to other options available.
Something may be deprecated when it cannot be controlled, such as a term. Even when it can be controlled, something may be deprecated even when it might be useful for example, to ensure compatibility and it may be removed or discontinued at some time after being deprecated.[1]
In general English usage, the verb "to deprecate" means "to express disapproval of (something)". It derives from the Latin deponent verb deprecari, meaning "to ward off (a disaster) by prayer".
An early documented usage of "deprecate" in this sense is in Usenet posts in 1984, referring to obsolete features in 4.2BSD and the C programming language.[2] An expanded definition of "deprecate" was cited in the Jargon File in its 1991 revision,[3] and similar definitions are found in commercial software documentation from 2014 and 2023.[4]
While a deprecated software feature remains in the software, its use may raise warning messages recommending alternative practices. Deprecated status may also indicate the feature will be removed in the future. Features are deprecated, rather than immediately removed, to provide backward compatibility and to give programmers time to bring affected code into compliance with the new standard.
Notable reasons for deprecation include:
Reason | Example(s) | |
---|---|---|
The feature has been replaced by a more powerful alternative feature. | The Linux kernel contains two modules to communicate with Windows networks: smbfs and cifs . The latter provides better security, supports more protocol features, and integrates better with the rest of the kernel. Since the inclusion of cifs , smbfs has been deprecated.[5] | |
The feature contains a design flaw, frequently a security flaw, and so should be avoided, but existing code depends upon it. |
| |
The feature is considered extraneous and will be removed in a planned future version. | Early versions of the Web markup language HTML included a FONT element to allow page designers to specify the font in which text should be displayed. With the release of Cascading Style Sheets and HTML 4.0, the FONT element became extraneous, and detracted from the benefits of noting structural markup in HTML and graphical formatting in CSS. Thus, the FONT element was deprecated in the Transitional HTML 4.0 standard, and eliminated in the Strict variant.[8] | |
A planned future version of the software will make major structural changes, making it impossible or impractical to support older features. |
| |
A feature that once was available independently is combined with its co-feature. | In VLC Media Player, VLC used to stand for "VideoLan Client", and a separate "VideoLan Server" was available as its co-feature. Both the client and server became available in the same package, and so getting one independently would be impractical.[10] |
A building code example is the use of ungrounded ("2-prong") electrical receptacles (UK English: "unearthed"). Over time, these older devices were widely deprecated in favor of safer grounded ("3-prong") receptacles. The older, ungrounded receptacles were still permitted in many places by "grandfathering" them in existing electrical wiring, while prohibiting them for new installations. Thus, though ungrounded receptacles may still be available for legal purchase in a location where they are obsolete, they would generally be intended only for repairs to existing older electrical installations.
In writing and editing, usage of a word may be deprecated because it is ambiguous, confusing, or offensive to some readers. For example, the words sanction and inflammable may be misinterpreted because they have auto-antonymic or self-contradictory meanings; writing style guides often recommend substituting other words that are clearly understood and unambiguous. Some word usages that have acquired different connotations over time, such as gay or colored, may be deprecated as obsolete in formal writing.
In technical standards, use of a certain clause may be discouraged or superseded by new clauses. As an example, in the Ethernet standard IEEE 802.3-2012, Clause 5 (Layer Management) is "deprecated" by Clause 30 (Management), except for 5.2.4.
Deprecation may also occur when a technical term becomes obsolete, either through change or supersession. An example from paleontology is the previously deprecated term Brontosaurus: before being recognized once again as a unique genus,[11] it was considered a popular, yet deprecated, name for the genus Apatosaurus.[12] Some deprecated terms in medicine are consumption (tuberculosis), grippe (influenza), and apoplexy (stroke). In chemical nomenclature, the international standards organization IUPAC (International Union of Pure and Applied Chemistry) has deprecated the term "methyl ethyl ketone", and now recommends using the term "ethyl methyl ketone" instead.[13]
gets
function is very dangerous because it provides no protection against overflowing the string s
. The GNU library includes it for compatibility only. You should always use fgets
or getline
instead.. 26 January 2021. https://web.archive.org/web/20210126185245/http://www.gnu.org/software/libc/manual/html_node/. live.