The term orthogonal is derived from the Greek orthogonios ("ortho" meaning right and "gon" meaning angled). Orthogonal concepts have origins in advanced mathematics, particularly linear algebra, Euclidean geometry and spherical trigonometry. Orthogonal and perpendicular frequently are used as synonyms.
A related term, orthogonal projection, describes a method for drawing three-dimensional objects with linear perspective. It refers to perspective lines, drawn diagonally along parallel lines that meet at a so-called "vanishing point." Such perspective lines are orthogonal, or perpendicular to one another.
The orthogonal definition also has been extended to general use, meaning the characteristic of something being independent (relative to something else). It also can mean non-redundant, non-overlapping or irrelevant.
Orthogonal lines and mathematics
In Euclidean geometry, orthogonal objects are related by their perpendicularity to one another. Lines or line segments that are perpendicular at their point of intersection are said be related orthogonally. Similarly, two vectors are considered orthogonal if they form a 90-degree angle. Thus, motion by one vector along an orthogonal X-Y axis does not generate corresponding movement by the second vector; the vectors are related, yet wholly independent of each other.
Orthogonal control functions in computer hardware
In computer terminology, orthogonal describes a condition of independence between different dimensions or objects. A basic example is found on your computer monitor, which includes orthogonal controls for independently adjusting the brightness, contrast and color. You can adjust the brightness knob without changing other aspects of screen resolution, for instance. On a more complex level, orthogonal concepts are commonly associated with software development, persistent storage and networking.
Orthogonal view of software development
In computer terminology, something -- such as a programming language or a data object -- is orthogonal if it can be used without consideration as to how its use will affect something else. An orthogonal language enables software developers to independently change one operation of a system, without triggering a ripple effect of changes to subsidiary or dependent operations. Stated differently, orthogonal design means there is only one way to change the property of the system you are controlling -- executing Operation A exerts no impact on Operation B. This approach is especially useful when debugging script.
Orthogonal software development strives for simplicity when assembling instruction sets. A programming language is compiled from a small number of components that can be combined only in a small number of ways, thus reducing the number of errors and enabling developers to more quickly learn to read and write programs in the language.
Orthogonal programming languages
A programming language is orthogonal if its features can be used without thinking about how that usage will affect other features. pascal is sometimes considered an orthogonal language, while C++ is considered a non-orthogonal language.
Features of a program that are compatible with its own earlier versions -- called backward compatible -- have an orthogonal relationship with the features of the earlier version because they are mutually independent; you don't have to worry about how the use of one version's features will cause an unintended effect because of an interaction with features from the other version. Both the features and the programs can be said to be mutually orthogonal.
Orthogonal persistence and storage
The length of time data is kept in storage in a computer system is known as its persistence. Orthogonal persistence (sometimes also known as transparent persistence) is the quality of a programming system that allows a programmer to treat data similarly without regard to the length of time the data is kept in storage. Frequently, a programmer must use different approaches and separate coding to access data depending on how long it has been stored. Using a programming system with orthogonal data persistence allows the programmer to treat data the same way regardless of its persistence characteristic, saving programming time and making it easier to enforce referential integrity (a type of constraint applied to ensure correct data validity).
Orthogonal persistence vs. non-orthogonal persistence
A defining trait of orthogonal persistence is that data objects are loaded as needed, such as navigational database queries that load the target object when traversing between references in an object. Most industry-standard operating systems (OSes) support orthogonal persistence.
Perceived drawbacks of orthogonal persistence center mostly on inefficiency and semantic-level programming concerns. Orthogonal-persistent systems lack a high-level window into the persistent data store, which means developers cannot rely on data objects referencing one another in a systematic manner.
Non-orthogonal persistence requires that data writes and reads in storage occur in a programmatic way based on specified instructions in an application or program. The OS only makes non-volatile memory available that will "persist" with the application once read or write operations are completed.
Researchers at the University of Sydney in Australia note that non-orthogonal systems enable data compression "to be implemented at the coarse-grained object level, either transparently or at the user's request. An orthogonally persistent system, on the other hand, must support random access to any object at any time, so data compression generally cannot be implemented."
They also noted that a persistent system with coarse-grained data objects potentially boosts memory protection and simplifies issues related to "distribution, packaging data, setting and checking permissions, transferring data between persistent stores, and implementing persistence efficiently."
Orthogonal functions in networking, switch virtualization
Orthogonal frequency-division multiplexing (OFDM) is a multi-access networking schema that provides a high rate of data access and wide bandwidth. OFDM splits a signal into several narrowband channels at different frequencies. This form of digital modulation was developed in the 1960s as a way to reduce signal interference among channels situated near each other in frequency. In addition to high-speed data access, OFDM-modulated signals are used in digital audio broadcasts and digital TV.
Similarly, orthogonal functions play a role in virtualized storage networks that rely on intelligent switches. These orthogonal switching functions generally encompass the areas of network wiring and transport components, block-level storage virtualization and RAID management, and file system technologies for data object storage.