In several fields, especially computing, deprecation is the discouragement of use of some terminology, feature, design, or practice, typically because it has been superseded or is no longer considered efficient or safe, without completely removing it or prohibiting its use. Typically, deprecated materials are not completely removed to ensure legacy compatibility or back up practice in case new methods are not functional in an odd scenario.
It can also imply that a feature, design, or practice will be removed or discontinued entirely in the future.
In general English usage, the infinitive "to deprecate" means "to express disapproval of (something)". It derives from the Latin 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. An expanded definition of "deprecate" was cited in the Jargon File in its 1991 revision, and similar definitions are found in commercial software documentation from 2014 and 2023.
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.
Among the most common reasons for deprecation are:
- The feature has been replaced by a more powerful alternative feature. For instance, the Linux kernel contains two modules to communicate with Windows networks:
cifs. The latter provides better security, supports more protocol features, and integrates better with the rest of the kernel. Since the inclusion of
smbfshas been deprecated.
- The feature contains a design flaw, frequently a security flaw, and so should be avoided, but existing code depends upon it. The simple Java API methods
.resumeare further examples.
- The feature is considered extraneous, and will be removed in the future in order to simplify the system as a whole. Early versions of the Cascading Style Sheets and HTML 4.0, the
FONTelement became extraneous, and detracted from the benefits of noting structural markup in HTML and graphical formatting in CSS. Thus, the
FONTelement was deprecated in the Transitional HTML 4.0 standard, and eliminated in the Strict variant.
- A future version of the software will make major structural changes, making it impossible (or impractical) to support older features. For instance, when API which would support most programs with minor changes: the Carbon library (that has since been deprecated), available in both Mac OS 9 and Mac OS X. Programmers who were, at the time, chiefly using Mac OS 9, could ensure that their programs would run natively on Mac OS X by using only the API functions supported in Carbon. Other Mac OS 9 functions were deprecated, and were never supported natively in Mac OS X.
- Standardization or increased consistency in naming. Projects that are developed over long periods of time, or by multiple individuals or groups, can contain inconsistencies in the naming of various items. These might result from a lack of foresight, changes in nomenclature over time, or personal, regional, or educational differences in terminology. Since merely renaming an item would break backwards compatibility, the existing name must be left in place. The original name will likely remain indefinitely, but will be deprecated to encourage use of the newer, more consistent naming convention. An example would be an APIthat alternately used the spelling "color" and "colour". Standardization would result in the use of only one of the regional spellings throughout, and all occurrences of the other spelling would be deprecated.
- A feature that once was available only independently is now combined with its co-feature. An example is 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.
In writing and
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
- ^ a b "JEP 277: Enhanced Deprecation". openjdk.java.net. Archived from the original on 19 September 2018. Retrieved 9 February 2018.
- ^ Shea, Ammon. "A New Meaning of 'Deprecate'". Words We're Watching. Merriam-Webster. Retrieved 1 March 2023.
- ^ Raymond, Eric S.; Steele, Guy L., eds. (July 1992). The Jargon File, Version 2.9.10. Retrieved 1 March 2023 – via Project Gutenberg.
- ^ Stewart, Meghan (27 February 2023). "Windows client features lifecycle". What's new in Windows. Microsoft. Retrieved 1 March 2023.
- ^ "On the future of smbfs". LWN.net. 15 May 2006. Retrieved 1 March 2023.
- ^ GNU. "Line Input". The GNU C Library. GNU. Archived from the original on 26 January 2021. Retrieved 2 August 2008.
Deprecated function: char * gets (char *s). ... The
getsfunction 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
- ^ "Java Thread Primitive Deprecation". Oracle. Archived from the original on 15 October 2011. Retrieved 13 May 2011.
- OCLC 77574682.
- ^ Simenel, Éric (2000). "Carbonization 101". MacTech. Vol. 16, no. 12. Retrieved 1 March 2023.
- ^ "The cross-platform streaming solution". VideoLAN. Retrieved 1 March 2023.
- ^ "Brontosaurus Finally Validated as a Distinct Dinosaur". ABC News. Archived from the original on 9 April 2020. Retrieved 27 June 2020.
- ISBN 0-520-24209-2.
- ISBN 978-0-85404-182-4.
- How and When To Deprecate APIs from the JDK 5.0 Documentation
- Detect deprecated functions A tool that discovers deprecated functions in any Windows native application or library.