A dependency refers to another piece of technology (software or hardware) a technology depends on for using. In software, "dependencies" may refer to the entire network of dependencies or just the software part of it.

The dependencies of a normal computer application include the physical computer, the energy source (including the grid and all the economic dependencies needed to maintain it), the operating system, and a set of libraries (some of which may be bundled with the OS). An increasing number of computer programs also depend on an Internet connection and an arbitrary server often maintained by the corporate owner of the program.

Hard and soft dependencies

Nature is full of dependencies but most of them are soft dependencies: animals can usually find nutrition from a wide variety of other organisms instead of strictly depending on a specific species. In high technology, however, we are mostly talking about hard dependencies: computers and cars need to be built from very specific components produced in very specific factories. Programs often depend on specific versions of specific libraries, and changes to those libraries may render the program unusable. Hard dependencies come with a low tolerance for faults and changes.

Documentation can be thought of as a soft dependency. Some kind of documentation is usually needed in order to fully utilize a program or a device, but this documentation can come from several alternative sources. It can also be omitted if the user has already learned the necessary information.

If only one compiler can compile the source code of a program, its compilation dependency is hard. If there's a large variety of different compilers that all succesfully produce a working executable, the dependency is much softer. The same applies to websites and how compatible they are with different browsers. If only a few high-end browsers are supported, the dependency is quite hard.

Optional dependencies are soft, especially if they don't change the features or behavior of the program. If it is possible to run an application either natively or in a web browser, the monstrous dependencies of the web browser don't need to be taken in account when assessing the application.

?Smallness softens: if a program is so short that it can be easily rewritten in another language by using the source code as a guide, its dependency on the original programming language softens.

Dependencies & permacomputing

Permacomputing calls for dependency-awareness, both regarding the material dependencies (the grid, the manufacturing infrastructure, etc.) and the digital ones. In both cases, the networks of hard dependencies are often several orders of magnitude larger than they should be, so permacomputing is concerned about shrinking the networks as well as moving the emphasis towards soft dependencies.

Software dependencies may sometimes include non-open-source pieces of software. These can usually be tolerated as long as there's a way to run them in an open-sourced emulator. Depending on an Internet connection in programs that are not essentially networking-related, however, should not be tolerated, especially if this means depending on an arbitrary server.