Dependency hell is a colloquial term for the frustration of some software users who have installed software packages which have dependencies on specific versions of other software packages. In Computer science, coupling or dependency is the degree to which each program module relies on each one of the other modules Software versioning is the process of assigning either unique version names or unique version numbers to unique states of Computer software.
Contents |
Often, rather than "reinventing the wheel", software is designed to take advantage of other software components that are already available, or have already been designed and implemented for use elsewhere. Reinventing the wheel (aka "Not built here") is a phrase that means a generally accepted technique or solution is ignored in favor of a locally invented solution Component-based software engineering (CBSE (also known as Component-Based Development (CBD or Software Componentry) is a branch of the Software engineering This could be compared to how people building a house might buy off-the-shelf components, such as bricks, windows, and doors, rather than building everything themselves. Commercial off-the-shelf ( COTS) is a term for Software or Hardware, generally technology or computer products that are ready-made and available for sale
Even for a builder, it can be a problem if a building is designed for a certain door type, and only doors with different specifications are available. However, in the software world, where components evolve rapidly, and components are often dependent on other components, this problem is more pronounced.
The issue of dependency hell may be regarded as an anti-pattern, where the fault lies less with the suppliers of the products than with the framework into which they have to fit. In Software engineering, an anti-pattern (or antipattern) is a Design pattern that appears obvious but is ineffective or far from optimal in practice
On specific computing platforms, "dependency hell" often goes by a local specific name, generally the name of components. In Computing, a platform describes some sort of Hardware architecture or Software framework (including Application frameworks, that allows
Dependency hell takes several forms:
The most obvious (and very common) solution to this problem is to have a standardised numbering system, wherein software uses a specific number for each version (aka major version), and also a subnumber for each revision (aka minor version), e. Software versioning is the process of assigning either unique version names or unique version numbers to unique states of Computer software. A maintenance release (also minor release) is a release of a product that does not add new features or content g. : 10. 1, or 5. 7. The major version only changes when programs that used that version will no longer be compatible. The minor version might change with even a simple revision that does not prevent other software from working with it. In cases like this, software packages can then simply request a component that has a particular major version, and any minor version (greater than or equal to a particular minor version). As such, they will continue to work, and dependencies will be resolved successfully, even if the minor version changes.
Some package managers can perform smart upgrades, in which interdependent software components are upgraded at the same time, thereby resolving the major number incompatibility issue too. A package management system is a collection of tools to automate the process of installing upgrading configuring and removing software packages from a Computer
Many current Linux distributions have also implemented repository-based package management systems to try to solve the dependency problem. Linux (commonly pronounced ˈlɪnəks A software distribution, also referred to as a software distro, is a bundle of a specific Software (or a collection of multiple even an entire Operating A digital library is a Library in which collections are stored in digital formats (as opposed to print Microform, or other media and accessible by computers These systems are a layer on top of the RPM, dpkg, or other packaging systems that are designed to automatically resolve dependencies by searching in predefined software repositories. RPM Package Manager ( Red Hat Package Manager, abbreviated RPM) is a Package management system. dpkg is the Software at the base of the Debian Package management system. Typically these software repositories are FTP sites or websites, directories on the local computer or shared across a network or, much less commonly, directories on removable media such as CDs or DVDs. In Computing, a directory, catalog, folder or drawer is an entity in a File system, which contains a group of files and/or other directories A computer network is a group of interconnected Computers. Networks may be classified according to a wide variety of characteristics This eliminates dependency hell for software packaged in those repositories, which are typically maintained by the Linux distribution provider and mirrored worldwide. In Computing, a mirror is an exact copy of a Data set On the Internet, a mirror site is an exact copy of another Internet site Although these repositories are often huge it is not possible to have every piece of software in them, so dependency hell can still occur. In all cases, dependency hell is still faced by the repository maintainers. Examples of these systems include Apt, Yum, Urpmi, Portage and others. The Advanced Packaging Tool, or APT, is a free user interface that works with core libraries to handle installing software on Linux The Yellow dog Updater Modified ( YUM) is an open source command line package management utility for RPM -compatible Linux urpmi is a Mandriva Linux Package management tool for installing removing updating and querying software packages of local or remote (networked media Portage is a Package management system used by Gentoo Linux. Gentoo is sometimes referred to as a " Meta-distribution " due to the flexibility
Because different pieces of software have different dependencies, it is possible to get into a vicious circle of dependency requirements, or (possibly worse) an ever-expanding tree of requirements, as each new package demands several more be installed. In Engineering, a requirement is a singular documented need of what a particular product or service should be or do A tree structure is a way of representing the hierarchical nature of a Structure in a graphical form Systems such as Debian's APT can resolve this by presenting the user with a range of solutions, and allowing the user to accept or reject the solutions, as desired. The Advanced Packaging Tool, or APT, is a free user interface that works with core libraries to handle installing software on Linux The Haskell Compiler GHC is an example of a circular dependency. To compile it, you need GHC. It can be solved by downloading a binary version of GHC, and compiling the new version of GHC with this binary version.
James Donald, in his 2003 paper titled Improved Portability of Shared Libraries[1] argued that dependency hell is worse under Linux than Microsoft Windows. Linux (commonly pronounced ˈlɪnəks Several Linux distributions have had problems with software not packaged for the distribution when updating libraries, since the application programming interfaces of some Open Source libraries are prone to change between releases. A Linux distribution (also called GNU/Linux by distributions such as Debian, Fedora, Ubuntu, Linux Mint, Mandriva and
A modern example of dependency hell on Microsoft Windows, Linux, and Mac OS X is the Gecko Runtime Engine or GRE used by Mozilla projects. Gecko is a Layout engine currently developed by Mozilla Corporation, known as the layout engine of the Firefox web browser Mozilla Application Mozilla was the official public original name of Mozilla Application Suite by the Mozilla Foundation, currently known as SeaMonkey suite. Each product released from the Mozilla foundation includes its own version of the complete Gecko Runtime Engine, due to the volatile nature of the programming interfaces used. Thus, if a user installs Thunderbird, Firefox, and Sunbird, there will be three copies of GRE on the machine. Mozilla Thunderbird is a free, Open source, Cross-platform e-mail and News client developed by the Mozilla Foundation. The Mozilla Calendar Project is the name for the Mozilla project involved in the development of Sunbird calendar application and the Lightning integrated These may or may not be compatible, depending on when the GRE source tree was forked. In Computer science, source code (commonly just source or code) is any sequence of statements or declarations written in some Human-readable In Software engineering, a project fork happens when developers take a copy of Source code from one software package and start independent development Some external projects like Epiphany depend on specific versions of the Mozilla Suite to use GRE, and break if a different version is installed; while others such as Nvu bring their own copy of GRE. Epiphany is a Web browser for the GNOME graphical computing desktop The Mozilla Application Suite (originally known as Mozilla, marketed as the Mozilla Suite, and Code named SeaMonkey) is a Cross-platform Nvu (pronounced "N-view") is a discontinued WYSIWYG HTML editor, based on the Composer component of Mozilla Application Suite Observe that the duplication of the GRE is actually a work-around to the core problem of dependency hell.
By statically linking Gecko, the Mozilla developers avoid potential dependency hell, at the cost of increased disk usage. In Computer science, a static library or statically-linked library is a set of routines external functions and variables which are resolved in a caller at Compile-time Given the fact that harddisk space comes quite cheap these days, static linking in itself is not so bad. Tools such as bash or make that are statically compiled will never complain about a missing shared object when the c library (glibc) is upgraded. Both approaches have advantages and disadvantages.