Fairness is a concept relating to models of computation that present infinite behaviour, and in particular concurrent ones.
Let there be a machine that presents infinite nondeterministic behaviour, and whose finite description (e.g. program, or transition table, etc.) has at least one choice point, i.e. a configuration in which the machine nondeterministically chooses one of many alternatives.
An execution of this machine is fair if it does not always make the same choice at the same choice point.
There are many ways to make this "not always" precise, leading to various notions of fairness.
Fairness is closely related to the notion of [countable nondeterminism].
It is (somewhat?) widely believed that fairness is not implementable.
Here's a quote from [Hoare 1976], which uses an early instance of all caps:
The question arises: Should a programming language definition specify that an implementation must be fair?. Here, I am fairly sure that the answer is NO. Otherwise, the implementation would be obliged to successfully complete the example program shown above, in spite of the fact that its nondeterminism is unbounded. I would therefore suggest that it is the programmer's responsibility to prove that his program terminates correctly - without relying on the assumption of fairness in the implementation. Thus the program shown above is incorrect, since its termination cannot be proved.
Francez, Nissim. 1986. Fairness. New York, NY: Springer US. https://doi.org/10.1007/978-1-4612-4886-6.
@book{francez_1986,
address = {New York, NY},
title = {Fairness},
publisher = {Springer US},
author = {Francez, Nissim},
year = {1986},
doi = {10.1007/978-1-4612-4886-6},
}
Dijkstra, Edsger W. 1976. A Discipline of Programming. Prentice-Hall.
@book{dijkstra_1976,
title = {A {Discipline} of {Programming}},
isbn = {978-0-13-215871-8},
publisher = {Prentice-Hall},
author = {Dijkstra, Edsger W.},
year = {1976},
}
Hoare, C. A. R. 1978. ‘Communicating Sequential Processes’. Communications of the ACM 21 (8): 666–77. https://doi.org/10.1145/359576.359585.
@article{hoare_1978,
title = {Communicating sequential processes},
volume = {21},
issn = {0001-0782, 1557-7317},
doi = {10.1145/359576.359585},
number = {8},
journal = {Communications of the ACM},
author = {Hoare, C. A. R.},
year = {1978},
pages = {666--677}
}