Contributor(s): Garry Kranz

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.

This was last updated in March 2015

Continue Reading About orthogonal

Dig Deeper on Enterprise storage, planning and management



Find more PRO+ content and other member only offers, here.

Join the conversation


Send me notifications when other members comment.

By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Please create a username to comment.

What are the relative benefits of using orthogonal vs. non-orthogonal programming languages?
Well, I'd start with a simple definition of orthogonal - that features do not overlap, so there is only one 'right' way to do things. Perl is perhaps the classic non-orthogonal language, because "there is more than one way to do it."

In perl, for example, the following statements are equivalent:

print if 1..3 or /match/
if (1..3 or /match/) { print }

In the second example, the programmer could choose to omit the curly braces or add a semi-colon at the end.

Python is a more orthogonal language, used by similar communities to do similar things. 

The advantage in perl is that the language doesn't tell you how to do it. That gives a great deal of personal and style freedom - on the other hand, it means your code can be "all over the map" and hard to read. When I talk to people who write new perl code, they often express great appreciation for the freedom -- when I talk to people who /maintain/ perl code, it is the opposite.

Python is the other way 'round. Reading and maintaining is easy, but unless you have the personality of the gardener who cuts off a well-growing carrot because it is not growing in line, you may find writing python takes a little getting used to.

Wow, that's a fancy article!

I think it's safe to say that items are orthogonal to each other when you can change one element and not impact another. The storage example is good, because it is common for insurance companies to move older records to tape - code designed to update records greater than a few years old needs to be 'tweaked' to update those old records. A middle-layer that makes the code 'just work' would make it orthogonal across storage layers.

Virtualization is probably a more recent example - if the server is 'real' or 'virtual' and it does not matter, it is orthogonal to the task at hand. If it does (for example, the virtual server is on an openstack box that lacks the memory and CPU to serve all the requests), then it is not! :-)


File Extensions and File Formats

Powered by: