Fact-checked by Grok 2 weeks ago

Software rot

Software rot, also known as code rot or software decay, refers to the progressive degradation of a software system's , , and over time, often resulting from environmental changes, accumulated modifications, and unaddressed technical issues, rendering the software increasingly difficult to use, modify, or rely upon without intervention. The term "software rot" originates from the in . This phenomenon is distinct from hardware degradation, as it primarily affects the functional integrity and adaptability of the rather than physical components. The primary causes of software rot include shifts in underlying dependencies such as operating systems, libraries, or architectures that break , often intentionally to enable improvements or accidentally due to ambiguous interfaces. Additionally, successive maintenance cycles introduce architectural inconsistencies, increased , and violations of principles, leading to a breakdown in where changes propagate across larger portions of the . External factors like evolving requirements, time pressures on developers, and inadequate tools further exacerbate the issue by fostering imprecise implementations and organizational silos that hinder cohesive evolution. In scientific and long-lived projects, the disappearance of supporting , such as deprecated languages or servers, can precipitate sudden collapse. Effects of software rot manifest as heightened , where minor updates trigger widespread failures, elevated fault rates linked to recent large-scale changes, and escalating effort required for , potentially increasing costs and reducing system reliability. Over time, this can result in immobility—difficulty extracting reusable components—and , where quick fixes compromise long-term structure, ultimately threatening project viability and reproducibility in fields like . Evidence from historical change analyses shows that erodes as codebases age, with the span of modifications expanding and fault potential rising, though proactive perfective may mitigate some decay. Mitigation strategies emphasize building on stable foundations, regular refactoring to preserve design integrity, and adaptive practices tailored to the software's lifecycle stage, such as accepting for short-term tools while investing in robustness for enduring systems. models based on cause-effect relationships, informed by Lehman's laws of , suggest that monitoring metrics like and effort during phases can help predict and counteract through simulated interventions. Despite these approaches, underfunding of remains a persistent challenge, underscoring the need for to long-term software health.

Definition and Terminology

Core Definition

Software rot, also known as code rot, refers to the gradual degradation of a software system's reliability, , or over time, even without any direct modifications to the code itself, arising from indirect influences such as environmental shifts or unaddressed needs, and distinct from deliberate alterations or initial programming errors. This phenomenon manifests as a slow erosion that can lead to unexpected failures, heightened system complexity, or eventual , often catching users off guard due to the software's apparent stability prior to decline. The term originated in hacker culture and was first documented in the 1983 edition of The Hacker's Dictionary (later formalized as the Jargon File), where it humorously described software that "loses" its functionality through disuse, akin to a notional decay process. Key characteristics include the progressive accumulation of incompatibilities or inefficiencies that undermine the software's original intent, without the need for active misuse or bugs introduced at development. Unlike hardware rot, which involves physical deterioration of storage media leading to (sometimes called ), software rot pertains exclusively to logical and functional decay within the code and its operational context, such as mismatches with evolving or operating systems. This distinction underscores that software rot stems from systemic interdependencies rather than material wear. For instance, changes in the surrounding computational environment can exacerbate this decay over extended periods of inactivity. Software rot is commonly referred to by several synonymous or closely related terms in literature, including code rot, which emphasizes the gradual degradation of quality and structure over time due to accumulated changes and neglect; , which highlights the slow corruption of in storage; software and software , broader phrases capturing the overall decline in system performance and ; and software , a metaphorical likening the increasing disorder in software systems to thermodynamic . The term "software rot" emerged from 1970s and 1980s computing folklore, particularly among early and systems researchers at institutions like , where it described mysterious failures in unused programs on hardware such as the PDP-6. In contrast, "bit rot" also emerged from 1980s hacker culture, as documented in the , where it describes the semi-humorous notion of due to physical degradation in storage media, such as bit flips or media decay, and error rates in long-term archiving. These terms carry nuanced distinctions: often points to hardware-induced data alterations, such as rare bit flips from alpha particles in chip packaging or media decay, whereas focuses on logical and architectural deterioration within the program's artifacts, independent of storage issues. Software erosion and decay encompass wider quality losses across the entire system, while software serves as a metaphorical extension, formalized by Meir M. Lehman in his laws of software evolution to describe rising complexity unless actively countered.

Causes

Environmental Changes

Environmental changes in the , such as evolutions in operating systems (OS) and , can render previously functional software incompatible without any modifications to its . For instance, OS updates often deprecate application programming interfaces () or alter calls, leading to runtime failures in applications that rely on these elements. Similarly, shifts in architectures, like the transition from 32-bit to 64-bit s, introduce limitations; 32-bit programs may encounter issues with addressing, installations, or execution modes when run on 64-bit Windows environments, as the latter does not support 32-bit kernel-mode s or certain behaviors. In , deprecated calls, such as the interface removed in version 5.5 after years of deprecation, exemplify how evolutions can break older software unless layers are maintained. Updates to external dependencies, including libraries and frameworks, further exacerbate software rot by introducing breaking changes that disrupt integration without altering the core application code. Research on open-source Java projects reveals that dependency updates frequently cause behavioral incompatibilities, such as modified method signatures or removed features, requiring developers to refactor client code to restore functionality. For example, when a evolves to a new major version, it may eliminate deprecated functions or alter data structures, leading to errors or subtle in dependent software; empirical studies show that such breaking changes affect a significant portion of updates, requiring . These shifts highlight the challenge of maintaining software in dynamic environments where third-party components evolve independently. A more recent example is the end of support for on October 14, 2025, which leaves legacy applications without security updates or compatibility fixes, potentially leading to vulnerabilities and failures on newer hardware or networks. A prominent historical example of environmental mismatch contributing to software rot is the (Year 2000) bug, where widespread use of two-digit year representations in legacy systems led to potential date-handling failures as calendars rolled over from 1999 to 2000. This issue stemmed from early hardware and OS constraints that prioritized storage efficiency, assuming a fixed century context, but clashed with the evolving temporal requirements of modern computing. The problem affected millions of lines of code across financial, governmental, and infrastructural software, prompting global remediation efforts estimated at over $300 billion to avert widespread disruptions. Although largely mitigated, underscored how unaddressed environmental assumptions in can propagate rot over decades.

Internal Code Factors

Internal code factors refer to intrinsic properties within the that contribute to software rot, independent of external environmental shifts. These elements arise during and , gradually eroding the software's structure and reliability over time. Key contributors include the accumulation of unused or , the neglect of rarely updated sections, and the persistence of one-time or temporary code implementations. Unused or , which includes methods, classes, or files that are no longer executed, accumulates bloat in the , thereby increasing overall complexity and heightening the risk of unintended conflicts during modifications. This type of code often stems from incomplete features, deprecated functionalities, or remnants of experimental implementations that were never removed. A multi-study investigation revealed that is prevalent in both open-source and commercial systems, with approximately 13% of methods in open-source Java applications and 9% in industrial systems classified as dead on average, and about 5% of files in open-source projects identified as unused. Such accumulation not only inflates the size but also complicates comprehension and testing, as developers must navigate irrelevant elements that obscure the active logic. Rarely updated sections of , particularly infrequently exercised paths such as error-handling routines or edge-case branches, become brittle over time as they are not regularly or refactored. These areas often harbor implicit assumptions about formats, , or that become outdated without active maintenance, leading to subtle degradations in robustness. Empirical analyses of large have shown that modules with low change frequencies exhibit signs of , including higher rates of architectural violations and reduced , as measured by metrics like average code age and strength. For instance, in a 15-year-old comprising 5,000 modules, low-activity components demonstrated persistent erosion through accumulated inconsistencies. This brittleness manifests during rare invocations, potentially causing failures that are difficult to diagnose due to the lack of recent . One-time use code, or features implemented for temporary needs such as prototypes, migrations, or short-term fixes, contributes to rot when these elements persist indefinitely without cleanup. Originally intended for transient purposes, such code introduces ad-hoc structures that conflict with evolving requirements, fostering inconsistencies like mismatched interfaces or redundant logic. This phenomenon, sometimes termed "grime" in , leads to unnecessary code accumulation that dilutes the system's . Studies on software highlight how such temporary implementations, if not excised, exacerbate design decay by weakening modular boundaries and increasing scope. In legacy systems, this persistence can result in a significant portion of the codebase consisting of unused elements. Overall, these internal factors elevate costs in affected systems, as developers expend disproportionate effort untangling decayed structures.

External Dependencies

External dependencies, such as third-party libraries, , and services, significantly accelerate software rot by introducing elements beyond the developer's direct control, leading to unforeseen incompatibilities and degradation over time. Software designed with the assumption of constant connectivity often fails in offline or restricted network environments, such as during outages or in air-gapped systems, resulting in operational breakdowns that contribute to dormant rot. For instance, applications relying on real-time may halt or produce errors when is lost, exacerbating maintenance challenges as environmental conditions evolve. Vendor-initiated changes to , particularly from services like platforms or cloud providers, frequently break existing integrations, forcing developers to refactor code and potentially introducing new bugs. An empirical study of 2,224 OpenAPI specifications revealed that 87.3% of API versions with breaking changes lacked prior notices, impacting over 50% of operations in 38% of affected and complicating long-term . Supply chain vulnerabilities arise when software incorporates deprecated or abandoned dependencies, which may harbor unpatched flaws or become incompatible with updated systems. These issues manifest as hidden risks that propagate through the ecosystem, often remaining undetected until exploitation. A prominent example is the 2021 vulnerability (CVE-2021-44228) in the Apache Log4j logging library, a widely used open-source dependency that enabled remote code execution and affected millions of applications globally. This incident highlighted dependency rot, as many systems continued using vulnerable versions due to overlooked updates, leading to widespread exploitation and underscoring the need for vigilant dependency management.

Classification

Dormant Rot

Dormant rot describes the latent degradation of software components that are not actively used or accessed, remaining concealed until environmental or systemic changes trigger their invocation. This form of rot affects unused code paths, such as obsolete or modules, which do not exhibit immediate symptoms but gradually become incompatible as the surrounding application evolves. Key characteristics of dormant rot include the absence of ongoing performance degradation in the affected code, contrasted with the potential for abrupt failures upon reactivation, often stemming from mismatches with updated dependencies, , or environments. For instance, unused pattern implementations in tools like JRefactory demonstrated no structural decay during analysis but posed risks due to unaddressed external changes over the software's lifecycle. Unlike active rot, which manifests as progressive visible decay, dormant rot lies inactive, amplifying risks in long-term maintenance scenarios. Detecting dormant rot presents significant challenges, as it necessitates proactive measures beyond routine monitoring, such as static code to identify unused sections or comprehensive system-level testing to simulate reactivation scenarios. Unit tests for these components may pass in isolation, yet fail when integrated due to broader environmental shifts, underscoring the need for tools that trace code evolution and dependency alignment. Studies indicate that dormant rot, manifesting as or unused , can account for approximately 25% of methods in software systems, contributing substantially to maintenance burdens.

Active Rot

Active rot refers to the ongoing degradation of software systems that are actively maintained and deployed, where continuous changes introduce through accumulating and adaptations to evolving requirements. This form of rot manifests as a gradual increase in system complexity and error proneness during regular use and updates, often resulting from hasty modifications or incomplete fixes that compromise the original design integrity. Key characteristics of active rot include progressive performance degradation, such as slower response times due to unoptimized code additions, rising frequency of crashes from unresolved dependencies, and an escalation in bug reports as modifications propagate inconsistencies across the . In actively used systems, these issues compound over iterations, turning minor updates into sources of instability that demand disproportionate maintenance efforts. For instance, empirical analysis of projects shows that without intervention, bug-fix rates tend to increase over successive development windows, exemplifying this dynamic worsening. Measurement of active rot often relies on software metrics that track rising complexity and declining quality in maintained codebases. , which quantifies the number of linearly independent paths through code, tends to increase with each update, signaling heightened risk of defects; for example, thresholds like weighted methods per class (WMC) exceeding 54.4 indicate high rot levels. Similarly, test coverage metrics frequently decline as new features outpace testing efforts, thereby exposing vulnerabilities in active deployments. Active rot is particularly exacerbated by developer turnover, which leads to the loss of institutional and results in suboptimal code changes that accelerate degradation. A 2025 analysis of systems further notes that such turnover causes significant knowledge gaps, amplifying rot in actively evolving projects.

Effects

Functional Impacts

Software rot manifests in operational failures through progressive performance degradation, where software experiences slower execution times and heightened due to outdated optimizations that fail to leverage modern capabilities or accumulate inefficiencies from unaddressed errors. This phenomenon, often termed , arises from factors like memory leaks and resource fragmentation, leading to diminished system efficiency over prolonged operation. For instance, in long-running applications, response times can increase by up to 1.8 times the baseline before requiring intervention, illustrating how rot erodes operational speed without external changes. Reliability suffers as software rot introduces unpredictable crashes and incorrect outputs stemming from degraded logic and accumulated errors, such as inconsistencies or unreleased locks. These issues escalate in environments with continuous usage, where transient faults evolve into full system failures, compromising the dependability of the software. Studies on servers and similar systems highlight how such reliability loss correlates with increased failure rates, directly impacting operational continuity. Usability declines as interfaces and features break with new devices or evolving user expectations, resulting in frustrating experiences and reduced . Diminishing , a hallmark of , progressively hampers user interactions, potentially rendering applications completely unusable, as seen in early desktop software that slowed to impractical levels on updated systems due to unmaintained code. This erosion not only inconveniences end-users but also ties into broader difficulties by amplifying the perceived need for overhauls.

Maintenance Challenges

Software rot significantly increases the complexity of maintaining software systems, as entangled become progressively harder to understand and modify. Aging systems often accumulate design flaws, such as excessive between components, which complicate even minor changes and extend times due to unpredictable interactions across the . This degradation exacerbates accumulation, where initial shortcuts or unaddressed issues compound over time, imposing an "interest" in the form of slowed feature development and reduced agility in responding to new requirements. High levels of in rotted systems encourage further debt introduction, with developers 102% more likely to duplicate logic and 458% more prone to poor naming conventions, perpetuating a cycle of declining code quality. Economically, software rot drives substantial maintenance costs, with CIOs estimating that technical debt amounts to 20-40% of the value of their entire technology estate (as of 2023). This allocation often surpasses spending on innovation, creating a drag on overall organizational and contributing to accumulated estimated at $1.52 trillion globally (as of 2022). Developer productivity suffers notably from software rot, particularly during , where new team members require extended periods of and mentoring to navigate or decayed codebases effectively, far exceeding typical ramp-up times for well-maintained systems. In globally distributed projects involving software, challenges like insufficient and geographical barriers further prolong this process, straining team resources and delaying contributions from newcomers.

Examples

Legacy System Failures

In the 1980s, many expert systems, which were rule-based programs designed for specific domains like or configuration tasks, exhibited software rot, becoming brittle, costly to maintain, and unable to adapt amid the collapse of specialized hardware markets. These systems often encoded assumptions tailored to the era's computers; without updates, they led to decreased interest in the technology by the early 1990s. A prominent example of software rot in systems is the or Millennium Bug, where widespread use of two-digit year representations in date-handling code from the through caused potential miscalculations as the year approached. This rot stemmed from assumptions that dates would never exceed the , leading to risks of system failures in banking, utilities, and transportation if '00' was interpreted as 1900 instead of ; although global remediation efforts mitigated most disruptions, the issue exposed how embedded assumptions could threaten on a massive scale. Legacy video games from the 1990s, such as those developed for or early Windows, frequently fail to run natively on modern operating systems due to software rot from incompatible , driver assumptions, and hardware abstractions. Titles like Doom (1993) or (1990) rely on direct access to outdated sound cards, graphics modes, or interrupt handling that modern OSes like or 11 block for security, resulting in crashes, missing audio, or erratic performance without emulation tools like . This decay illustrates how environmental shifts in OS kernels and security features render standalone applications obsolete over time. NASA has encountered significant software rot in legacy Fortran codes used in space systems. For instance, at the Jet Propulsion Laboratory, programs written in 77 suffer from fixed-format assumptions incompatible with modern compilers and portability issues when run on new hardware, requiring incremental modernization to preserve functionality and accuracy.

Web and Network Applications

In web and applications, software rot often manifests as active rot, where ongoing environmental changes and lack of lead to gradual and failures in interconnected systems. A common example occurs in forked online software, where an abandoned fork diverges from its upstream project, accumulating custom modifications that create incompatibilities with updated dependencies, browsers, or protocols, ultimately rendering the forum unstable or insecure. installations, powering many wikis, experience rot through unpatched extensions and schema drifts in the database, where outdated plugins introduce vulnerabilities and failed updates cause data inconsistencies that compromise site functionality and expose users to exploits. Social media integrations illustrate rot when API changes disrupt dependent applications; for instance, Twitter's 2023 API overhaul, which ended free access and enforced new paid tiers starting February 9, broke numerous third-party apps reliant on the previous structure, forcing developers to scramble or abandon features. In 2022, WordPress plugin rot affected a significant portion of sites, with 36% of compromised WordPress websites featuring at least one vulnerable or unpatched plugin or theme, leading to widespread security exposures such as unauthorized access and malware infections.

Mitigation Strategies

Refactoring Approaches

Refactoring approaches to software rot involve existing bases without altering external behavior, aiming to restore , reduce , and eliminate accumulated such as duplicated logic or obsolete patterns. These techniques directly address the caused by years of ad-hoc modifications, evolving requirements, and neglected , which contribute to software rot. By applying targeted refactorings, developers can reverse entropy-like effects, making the code more modular and easier to extend. Key methods include modularization, which breaks down monolithic components into smaller, cohesive units to improve ; removing , such as unused functions or variables that clutter the codebase and increase ; and updating dependencies through automated tools to resolve issues and vulnerabilities that exacerbate rot. Modularization often employs patterns like Extract Class or Extract Module to redistribute responsibilities, while elimination uses techniques such as Inline Method or Remove Unused Parameter to streamline the structure. Dependency updates leverage tools like Dependabot, which scans for outdated libraries and proposes pull requests for upgrades, preventing the buildup of unmaintained external code that leads to rot. These methods are grounded in established refactoring catalogs that emphasize small, transformations. A typical step-by-step process begins with identifying rot hotspots using code analyzers that detect issues like high , code smells, or dependency drift. Tools such as perform static analysis to flag these areas, providing metrics on duplication, , and potential bugs to prioritize interventions. Once hotspots are pinpointed, incremental refactoring follows, applying patterns iteratively—such as renaming variables for clarity or consolidating conditional expressions—to avoid introducing new defects. This floss-style approach, interleaving refactorings with feature development, ensures continuous improvement without dedicated downtime, drawing from Martin Fowler's patterns like Decompose Conditional or Replace Temp with Query. Comprehensive testing, including unit and integration suites, validates each step to maintain functionality. Integrated development environments (IDEs) support automated cleanup through built-in features, such as Eclipse's or IntelliJ IDEA's refactoring wizards that handle operations like extracting interfaces or optimizing imports with minimal manual effort. These tools integrate with analyzers to suggest and apply changes semi-automatically, accelerating the reversal of rot in large codebases. Empirical studies confirm that such approaches enhance internal quality attributes like cohesion and coupling, leading to fewer defects and better overall software health. For example, in a case study of refactoring operations across Java projects, the application of these techniques improved maintainability metrics and reduced bug proneness, demonstrating measurable gains in software quality.

Preventive Practices

Preventive practices for software rot emphasize proactive measures embedded in the lifecycle to minimize decay from the start. These include design principles that foster , processes that enforce , and ongoing to detect early signs of degradation. Modular architecture serves as a foundational design principle by encapsulating functionality into independent modules, which reduces interdependencies and limits the propagation of changes that could introduce inconsistencies over time. This approach has been shown to mitigate architectural erosion, a primary contributor to software rot, through techniques like conformance checking and design enforcement. complements modularity by inverting control and enabling between components, allowing substitutions without widespread modifications and thereby preserving system integrity as requirements evolve. Regular code reviews act as a critical safeguard, enabling peer scrutiny to enforce architectural adherence and identify suboptimal patterns that could accumulate into decay, with studies indicating they effectively curb buildup when integrated into workflows. Key processes for prevention include and testing, which automate the merging and validation of code changes to maintain a stable baseline and avert integration-related deterioration. Automated dependency updates systematically refresh external libraries, addressing compatibility drifts and vulnerabilities that exacerbate rot without manual intervention. Documentation standards, such as consistent inline comments, specifications, and architectural diagrams, ensure across teams, reducing misunderstandings that lead to erroneous modifications during . Monitoring code quality metrics, particularly the Maintainability Index—which evaluates factors like , lines of code, and volume on a 0-100 scale—via pipelines provides quantifiable insights into health. Teams can set thresholds to trigger alerts for declining scores, enabling timely interventions to sustain long-term viability. These measures collectively relate to managing by avoiding its initial accrual rather than addressing it post-facto.

Relation to Broader Concepts

Software Entropy

Software entropy refers to the tendency of software systems to degrade toward and increased complexity over time, analogous to the second law of , which posits that the —or —of a can only increase or remain constant without external intervention. In software contexts, this describes how initial well-structured code inevitably accumulates disorganization through modifications, unless deliberate maintenance efforts are applied to counteract the process. The concept highlights that software, like physical systems, requires ongoing "energy" in the form of refactoring and to preserve and coherence. This principle was formalized in software engineering literature by and colleagues in their work, where they explicitly drew the parallel to thermodynamic to explain why evolving systems become harder to maintain without intervention. As changes are introduced—such as feature additions, bug fixes, or adaptations to new environments—the internal structure of the codebase fragments, leading to higher coupling, redundancy, and opacity. Without countermeasures, this rising manifests as diminished performance, escalated error rates, and prolonged development cycles, underscoring the irreversible nature of degradation in unmodified systems. While software rot represents the tangible symptoms of this degradation, such as failing tests or integration issues, software entropy serves as the foundational theoretical model explaining the inexorable drive toward disorder. provides the conceptual lens for why rot occurs, emphasizing preventive architecture over reactive fixes, and it intersects with notions like by illustrating how deferred maintenance accelerates systemic decline.

Technical Debt

Technical debt, a concept introduced by in 1992, describes the implied future cost of additional rework resulting from choosing expedient, suboptimal solutions during software development to meet short-term goals. In the context of software rot, technical debt manifests as accumulated design and implementation shortcuts that gradually erode software maintainability and performance over time, leading to increased complexity and brittleness. This debt often arises from pressures to deliver features quickly, such as duplicating code instead of refactoring or ignoring edge cases, which compounds as the system evolves and new changes interact with legacy flaws. A key mechanism linking technical debt to software rot is design pattern decay, where intentional architectural patterns degrade through "grime" and "rot." Grime refers to the accumulation of unrelated, non-pattern code within pattern-implementing classes, increasing coupling and reducing modularity, while rot involves structural changes that violate the pattern's original intent, such as breaking encapsulation or responsibility distribution. In a multiple case study of three large object-oriented systems, researchers found no instances of rot but substantial grime buildup over time, which elevated maintenance efforts by complicating testing and adaptability—directly contributing to the overall degradation characteristic of software rot. These forms of decay represent intentional or unintentional technical debt, as developers defer cleanup, allowing small issues to proliferate into systemic entropy. The , adapted to , further illustrates how unmanaged accelerates software rot by normalizing poor practices. Just as visible encourages further vandalism, minor code violations (e.g., inconsistent naming or unused variables) signal tolerance for larger flaws, prompting developers to introduce more debt knowingly. from developer surveys and code analyses shows that existing debt correlates with higher rates of new debt introduction, creating a feedback loop that hastens rot through reduced code quality and heightened bug proneness. Addressing this requires proactive debt repayment, such as periodic refactoring, to prevent the in maintenance costs that defines software rot.

References

  1. [1]
    [PDF] Does Code Decay? Assessing the Evidence from Change ...
    Fourth, software that is decaying may nevertheless be increasing in value. Indeed, the very changes that \cause" decay also increase the value of the software. ...Missing: rot
  2. [2]
    [PDF] Dealing With Software Collapse - HAL
    May 2, 2019 · In this article, I will explain what soft- ware collapse is, what causes it, and how you can manage the risk of it happening to you. What I call ...
  3. [3]
    [PDF] A System Dynamics Model based on Cause and Effect Diagram to ...
    The accomplishment of experimental studies may offer some knowledge regarding the feasibility of building software decay models using simulation techniques ...
  4. [4]
    software rot - catb. Org
    software rot: n. Term used to describe the tendency of software that has not been used in a while to lose; such failure may be semi-humorously ascribed to ...Missing: origin | Show results with:origin
  5. [5]
    bit rot
    - **Definition of Bit Rot**: Hypothetical disease where unused programs or features stop working over time, even if unchanged, due to bits decaying as if radioactive. Contents of files or code become increasingly garbled.
  6. [6]
    software rot
    ### Summary of Software Rot from https://catb.org/jargon/html/S/software-rot.html
  7. [7]
    Eternal Bits - IEEE Spectrum
    Jul 1, 2005 · ... bit rot—the well-documented degradation of data on magnetic storage media due to physical factors, such as alpha particles emitted from ...
  8. [8]
    Avoiding "Bit Rot": Digital Information Preservation
    May 16, 2011 · Avoiding "Bit Rot": Long-Term Preservation of Digital Information [Point of View]. Abstract: This paper discusses about the long term ...
  9. [9]
    bit rot
    - **Definition of Bit Rot**: Hypothetical disease where unused programs or features stop working over time, as if bits decay radioactively, causing files or code to become garbled.
  10. [10]
    A unified theory of software evolution - Salon.com
    Apr 8, 2002 · “The entropy of a system increases with time unless specific work is executed to maintain or reduce it.”
  11. [11]
    Deprecated features in the Windows client - Microsoft Learn
    This article provides details about the features and functionalities that are no longer being developed in Windows client.
  12. [12]
    Overview of the compatibility considerations for 32-bit programs on ...
    Jan 15, 2025 · This article discusses the compatibility considerations and limitations for 32-bit programs that are running on 64-bit versions of Windows.Missing: rot | Show results with:rot
  13. [13]
    Linux 5.5 Finally Doing Away With The SYSCTL System Call
    Nov 28, 2019 · The Linux 5.5 kernel is set to finally eliminate the code backing the sysctl system call, which has been deprecated for about a decade.Missing: breaking legacy
  14. [14]
    Chapter 10. Deprecated functionality | Red Hat Enterprise Linux | 9
    The kexec_load system call for kexec-tools has been deprecated. The kexec_load system call, which loads the second kernel, will not be supported in future RHEL ...
  15. [15]
    The Y2K Problem: - ACM Digital Library
    This section discusses the complex set of reasons and causes at the root of the perpetuation, exacerbation and cri- sis construction of the Millennium bug.
  16. [16]
    Y2K | National Museum of American History
    The term Year 2000 bug, also known as the millennium bug and abbreviated as Y2K, referred to potential computer problems which might have resulted when dates ...
  17. [17]
  18. [18]
    None
    ### Key Internal Code Factors Leading to Software Decay or Rot
  19. [19]
    Bit Rot: the silent killer - Sonar
    Jan 18, 2020 · Bit rot happens to all software when the dependencies and tooling required to build, test, and deploy it change over time.
  20. [20]
    Software Assumptions Failure Tolerance: Role, Strategies, and Visions
    Software Assumptions Failure Tolerance: Role, Strategies, and Visions ... Across the system layers, a complex and at times obscure web of assumptions ...Missing: connectivity | Show results with:connectivity
  21. [21]
    [PDF] A First Look at the Deprecation of RESTful APIs: An Empirical Study
    Aug 28, 2020 · To warn developers promptly and thus prevent critical impact on downstream applications, a deprecated-removed model should be followed, and ...
  22. [22]
    A03 Software Supply Chain Failures - OWASP Top 10:2025 RC1
    Software supply chain failures are breakdowns or other compromises in the process of building, distributing, or updating software. They are often caused by ...
  23. [23]
    Code Rot and Cyber Risk: The Hidden Threat in Legacy Software
    Oct 24, 2025 · CISA used, as an example, the Log4Shell vulnerability in a 2021 open source code library that resulted in widespread exploitation by threat ...
  24. [24]
  25. [25]
    [PDF] Testing Consequences of Grime Buildup in Object Oriented Design ...
    A pattern realization that is not used can be thought of as suffering from dormant rot: “Software that is not currently being used gradually becomes ...
  26. [26]
    [PDF] Overcoming Code Rot in Legacy Software Projects - DSpace@MIT
    Abstract. Legacy software projects tend to be the most susceptible to code rot due to typical issues (e.g., outdated documentation) that affect software ...<|control11|><|separator|>
  27. [27]
    [PDF] Identification of Software Rot Using Range Control Limits
    Inadequate requirement. [7] and time pressure are two more factors which cause software rot [6]. Unused code (interfaces etc.) which normally remain unexecuted ...
  28. [28]
    [PDF] Which Refactoring Reduces Bug Rate? - CS.HUJI
    We provide empirical evidence for code rot [5, 10], and show that refactoring slows the decay rate. This is a demonstration of Lehman's 7th law of software.
  29. [29]
    Understanding software architecture erosion: A systematic mapping ...
    Feb 9, 2022 · Knowledge lost due to developer turnover, [S34][S69]. Requirement ... code rot (e.g., [S28]); some other terms focus on the AEr ...
  30. [30]
    [PDF] How Do Communities of ML-Enabled Systems Smell? A ... - arXiv
    Apr 24, 2025 · Technical debt is a clear example of a tech- nical challenge ... Truck Factor Smell. TFS Developer turnover may cause a significant loss ...
  31. [31]
    [PDF] SOFTWARE AGING ANALYSIS OF WEB SERVER USING NEURAL ...
    Software aging injures the usability of the software system and brings inconvenience to the users. It mostly occurs due to the accumulation of runtime errors.
  32. [32]
    [PDF] User Experienced Software Aging: Test Environment ... - Trepo
    Software aging is empirically observed in software systems in a variety of manifestations ranging from slower performance to various failures as reported by.
  33. [33]
    [PDF] The development of a software obsolescence ... - DiVA portal
    The difference between software aging and software obsolescence is that aging refers to the degradation of quality and performance, whereas software ...
  34. [34]
    Diagnosing design problems in object oriented systems - IEEE Xplore
    Software decay is a phenomenon that plagues aging software systems. While in ... maintenance costs. Published in: 12th Working Conference on Reverse ...
  35. [35]
    How poor maintainability drains 2025 IT budgets in finance - SIG
    Apr 2, 2025 · Their 2024 report ... CIOs estimate that 20-40% of their IT budget is spent addressing technical debt, amounting to an estimated $1.52 trillion ...
  36. [36]
  37. [37]
    From AI Winters to Generative AI: Can This Boom Last? - Forbes
    Aug 24, 2025 · While the field never went entirely dormant, the collapse of dedicated hardware, the brittleness of expert systems, and the failure of national ...
  38. [38]
    Y2K bug - National Geographic Education
    Dec 6, 2024 · The Y2K bug was a computer flaw, or bug, that may have caused problems when dealing with dates beyond December 31, 1999.<|control11|><|separator|>
  39. [39]
    Why your favorite childhood games won't run on modern PCs
    Nov 4, 2024 · Trying to run an older game on modern equipment may cause compatibility issues, as the game simply doesn't know how to communicate with new hardware.
  40. [40]
    [PDF] Modernizing Fortran 77 Legacy Codes
    An incremental approach to modern- ization of scientific software written in the. Fortran 77 computing language has been developed.Missing: 2010s space rot
  41. [41]
    Software Rot: Definition, Causes, Threats, Mitigation Methods
    Jun 17, 2022 · As Codurance says, if there is a software rot, “a new change causes a cascade of subsequent changes in dependent modules within the codebase.
  42. [42]
    Reuse and maintenance practices among divergent forks in three ...
    Mar 4, 2022 · We empirically explore maintenance practices in such fork-based software families within ecosystems of open-source software.Missing: forum | Show results with:forum
  43. [43]
    Manual:Security - MediaWiki
    Jul 22, 2025 · Brian Wolff presents on how to secure a MediaWiki installation at EMWCon 2018. Stay up to date. Be careful about which extensions you use.Missing: rot drifts
  44. [44]
    Twitter Ends Its Free API: Here's Who Will Be Affected - Forbes
    Feb 3, 2023 · Twitter will start charging for access to their free API from February 9, meaning third-party software developers who access API data to promote their own ...<|separator|>
  45. [45]
    [PDF] 2022 Website Threat Research Report - Sucuri
    36% of all compromised websites had at least 1 vulnerable plugin or theme present in ... vulnerable WordPress plugins. These malware campaigns inject ...
  46. [46]
    An Empirical Study on the Impact of Refactoring on Quality Metrics in ...
    Our results indicate that when refactoring affects the metrics it generally improves them. In many cases refactoring has no significant impact on the metrics, ...
  47. [47]
    Refactoring Techniques
    Simplifying Conditional Expressions · Consolidate Conditional Expression · Consolidate Duplicate Conditional Fragments · Decompose Conditional.Missing: rot | Show results with:rot
  48. [48]
    a large-scale survey of software refactoring - ACM Digital Library
    Aug 18, 2021 · Root canal refactoring is to set aside an extended period specially for refactoring. Floss refactoring is to interleave refactorings with other ...Missing: rot | Show results with:rot
  49. [49]
    A Case Study on the Impact of Refactoring on Quality ... - SpringerLink
    Results indicate that refactoring not only increases aspects of software quality, but also improves productivity.
  50. [50]
    How changes affect software entropy: An empirical study
    Aug 7, 2025 · Aim This paper empirically investigates the relationship of source code complexity and disorganization—measured using source code change entropy ...
  51. [51]
    Entropy — Why Code Rots And Technical Debt Grows - ITNEXT
    Jul 5, 2024 · Software is like entropy: It is difficult to grasp, weighs nothing, and obeys the Second Law of Thermodynamics; i.e., it always increases.Missing: analogy | Show results with:analogy<|separator|>
  52. [52]
    A Model-Based Approach to Software Refactoring - ResearchGate
    Sep 12, 2015 · software rot [1], results in an increase of maintenance costs,. which ... technical debt, a term. coined by Cunningham [7] to describe ...