Several factors are responsible for software rot, including changes to the environment in which the software operates, degradation of compatibility between parts of the software itself, and the emergence of
bugs in unused or rarely used code.
Environment change 2.9 as result of changes in
AMD drivers, causing strobing dots of light and incorrect rendering of
surface normals. Updates had to be made in Blender's code to accommodate these changes, fixing the bug. When changes occur in the program's environment, particularly changes which the designer of the program did not anticipate, the software may no longer operate as originally intended. For example, many early
computer game designers used the
CPU clock speed as a
timer in their games. However, newer CPU clocks were faster, so the gameplay speed increased accordingly, making the games less usable over time.
Onceability There are changes in the environment not related to the program's designer, but its users. Initially, a user could bring the system into working order, and have it working flawlessly for a certain amount of time. But, when the system stops working correctly, or the users want to access the configuration controls, they cannot repeat that initial step because of the different context and the unavailable information (password lost, missing instructions, or simply a hard-to-manage
user interface that was first configured by trial and error). Information architect Jonas Söderström has named this concept
onceability, and defines it as "the quality in a technical system that prevents a user from restoring the system, once it has failed".
Unused code Infrequently used portions of code, such as document filters or interfaces designed to be used by other programs, may contain bugs that go unnoticed. With changes in user requirements and other external factors, this code may be executed later, thereby exposing the bugs and making the software appear less functional.
Rarely updated code Normal
maintenance of software and systems may also cause software rot. In particular, when a program contains
multiple parts which
function at arm's length from one another, failing to consider how changes to one part that affect the others may introduce bugs. In some cases, this may take the form of libraries that the software uses being changed in a way which adversely affects the software. If the old version of a library that previously worked with the software can no longer be used due to conflicts with other software or security flaws that were found in the old version, there may no longer be a viable version of a needed library for the program to use.
Online connectivity Modern commercial software often connects to an online server for license verification and accessing information. If the online service powering the software is shut down, it may stop working. Since the late 2010s most websites use secure
HTTPS connections. However this requires encryption keys called
root certificates which have expiration dates. After the certificates expire the device loses connectivity to most websites unless the keys are continuously updated. Another issue is that in March 2021 old encryption standards TLS 1.0 and TLS 1.1 were
deprecated. This means that operating systems, browsers and other online software that do not
support at least TLS 1.2 cannot connect to most websites, even to download patches or update the browser, if these are available. This is occasionally called the "TLS apocalypse". Products that cannot connect to most websites include PowerMacs, old Unix boxes and
Microsoft Windows versions older than Server 2008/Windows 7 (at least without the use of a third-party browser). The
Internet Explorer 8 browser in Server 2008/Windows 7 does support TLS 1.2 but it is disabled by default. ==Classification==