Computing and the Papacy
A note: this post is an excerpt from my letter to Pope John Paul II: On the Nature of the Papacy: Exploring Some Secular Parallels which I wrote in answer to his request in Ut unum sint, 95; I sent it to him on Feb. 22, 2002. This particular selection will serve as a partial response to the Curt Jester's posting; it appears we both perceive some common points here. Hopefully, I will publish other selections as meditations for the coming feast of the Chair of St. Peter.
-- Dr. Thursday
V. Computing and the Papacy
Heart of Jesus, house of God and gate of heaven...
"I am the gate" (Jn 10:9 Jerusalem Bible).
Dear Holy Father, I am a computer scientist, and in nearly 25 years of employment and study in that discipline, I have noted many aspects which touch on philosophy and liturgy and theology and the Papacy. It is always exciting for me to write about computer science – the subject which, next to Catholicism, has been such an important part of my life – but it is even more awesome to present you with a few of my thoughts on this new but very large branch of science.
1. The First Principle: True and False, Yes and No, One and Zero
"A thing cannot both be and not be at one and the same time, and from the same point of view."
When speaking about the mystery of male and female, Chesterton made one of his characteristic paradoxical statements: "Those whom God has sundered, shall no man join." In this statement, I sense the foundation of both marriage and philosophy, and the foundation of philosophy is also the foundation of computing: each of these requires two things to be. And, as I mentioned in the last section, a bridge can be built only when there are two separate things. It is part of the paradoxical nature of the Supreme Pontiff that there are also times when he must preserve the divinely ordered separateness.
The ultimate separateness known in philosophy is the separation between being and non-being – thus between true and false – and on this fundamental duality, expressed in analogy as an electric current being on or off, is built all of the present-day technology of computers. As Chesterton has somewhere said that we should speak of the Catholic science of electricity, I suggest that we also should speak of the Thomistic science of computing. In a very early book, Chesterton said that he would "revert to the doctrinal methods of the thirteenth century, inspired by the general hope of getting something done." And so, computer science is founded, as all good science and all good engineering, in scholastic philosophy. In one view, it is a way of taking practical advantage of the Principle of Contradiction: "Being is not nonbeing." As Chesterton puts it, "I know that 'yes' is not the same as 'no' anywhere." Or, as First Philosophy states it: "A thing cannot be and not be at the same time from one and the same point of view."
Computer science uses the term Boolean for this two-fold character of yes and no after George Boole, a nineteenth century mathematician and logician who devised a way of doing logic by algebra. Computer science, following Mr. Boole, has greatly elaborated the theory of yes and no. However, computer science is not merely theoretical: it is also an engineering discipline, and it proceeds to convert that theory into practice by assigning two distinct voltage levels (or magnetic markings) to the two terms.
This duality enables us to make a machine which will "store" information. The unit of information is called a "bit." It can have only the value ONE or the value ZERO, depending on whether there is or is not an electric current at that position.
Eight of these "bits" are grouped into a unit called the "byte" which can store any of the 256 patterns of zeros and ones from 00000000 to 11111111. These patterns can be used in any way that suits the purposes of the programmer, though often they simply stand for the numbers from 0 to 255. Another use of these patterns is to deal with text, and so certain of them are assigned to particular symbols or characters. (This assignment is called ASCII: the American Standard Code for Information Interchange.) For example:
You will note that the change in the third position from a zero to a one changes the capital "A" to a small "a." Perhaps I might give a more dramatic example:
The bit, for computer people, is the "smallest part of a letter." The Pope, in preserving the truth even in the abstractions of metaphysics, preserves it not only for the Mystical Body of Christ which is the Church, but also for computers.
The "memory" of a computer is merely a collection of many bytes, each of which is known by its position, or "address." The "disk drives" and other forms of memory (as well as communication equipment such as networks) also rely on this technique.
The value of a byte can also serve as an instruction. This important concept is usually credited to John Von Neumann, a 20th century mathematician, and has become a part of the language. We speak of a computer "processing" information for us, because we instruct it – we write a program – to perform certain simple operations on the various patterns of zeros and ones in memory. You see, the computer contains both a "memory" and also a "processor" (called the "CPU" for "Central Processing Unit"). The instructions it can perform are very simple:
a) mathematical (such as ADD or SUBTRACT)
b) logical (determine the AND or the OR of the bits treated as true and false)
c) decision-making (for example, SKIP the next instruction if a particular value is zero)
d) other special actions (like STOP processing, or PRINT a particular value).
These instructions are performed by special pieces of electronics called "gates" which perform the elementary functions of pure logic (AND, OR, NOT) or provide the building blocks of "memory." (That is why I mentioned our Lord's words from St. John: "I am the gate.")
The instructions for a given computer are called its "instruction set." The various makes and models of computers have different instruction sets which are represented by different codes, and these machines also have differing speeds and efficiencies and uses. But there is one very interesting way in which they do not differ, and that is the next point I wish to take up.
2. The parable of obedience
"For I also am a man subject to authority..." (Mt 8:9).
As I have just mentioned, each computer has a variety of "instructions" which it is capable of performing. A computer programmer can use these instructions directly, or he can use any of a wide variety of programming languages when he writes a program which specifies in precise detail the particular sequence of operations to be done.
This development and implementation of programs is the major task I perform as a computer scientist. I plan out and write instructions, I put them into a computer, and the machine carries them out, thousands or millions of times faster than I can possibly perform them.
I have been struck by the relation of my work to other forms of engineering: my discipline, like all the others, depends on the strict obedience of things to physical laws. But for me there is almost a poetic sense of actually giving instructions to the inanimate objects.
Perhaps I might give an analogy from the bridge-builder. It is as if by Roebling's design, and through his directives to his assistants, he gave direct orders to the great pillars of stone and the wire cables – to things which were thousands or millions of times stronger than he was. One might imagine him commanding them: "Do not move. Hold this up. Do not bend, do not twist. Be stable. Hold and endure." In a certain sense his orders were "obeyed" because of the essential obedience of those pillars and cables to the laws of physics, and because his good design adhered to those laws. In a similar sense, then, I can "command" electronics to carry out my instructions.
And the wonder of this is the absolute obedience due to those natural laws. The machinery can in no way alter or choose to "disobey" my instructions – and computer programming (or, in a larger sense, "computer software engineering") is difficult because of that literal obedience. When the program is large and complex, it is very easy to overlook special cases or unusual instances, and there are always the more familiar dangers of what one might call a "typographical error" – which for a programmer can have disastrous results, because the program is "obeyed" (we say "performed" or "executed") by a machine, and not read by a human.
Computer programming, then, offers a kind of parable on obedience. It is something that even our Lord found marvellous, approving as He did of what we might call the "Parable of the Centurion":
For I also am a man subject to authority, having under me soldiers; and I say to this, Go, and he goeth, and to another Come, and he cometh, and to my servant, Do this, and he doeth it (Mt 8:9).
And this idea of obedience in nature is found elsewhere:
Who made these stars if not He who drills them like an army, calling each one by name? So mighty is His power, so great His strength, that not one fails to answer (Is 40:26 Jerusalem Bible translation).
To bring this mighty power of absolute "obedience" into some kind of useful order, programming has been separated into two sections. One part is called "applications programming." An "application" is software – a computer program – which solves a particular problem or serves some specialized purpose or use. Any given computer may possibly have any number of these programs at any given time. The other part is called the "operating system" which has the unique purpose of supporting any and every application. It has a universal purpose. Unlike applications, however, on any given computer, at any given time, there can be only one operating system.
3. The Operating System
"The thing was 'going on all the time'; that it was not an occasion, but a perpetual process...."
Chesterton wrote that about his visit to a cathedral in France while a service was going on. I found it a striking view because in modern Greek universities, the course for Operating Systems is called Leitourgika – and the operating system of a computer is indeed a "perpetual" process. It is almost a metaphysical pun to say that the end of an operating system is to never end, for it is the program which both controls and serves all the other programs which may be used on a given computer. The typical application comes to an end because it completes its work, and can now be dismissed, as Simeon prayed (See Lk 2:29). However, the operating system has its end in continuing to perform its work – or at least in being available to perform its work. Unlike an application, it does not come to a conclusion for, paradoxically, its completion is in never concluding.
An operating system provides the framework for other programs to exist in the computer. It allows the computer to be "shared." The power of the computer can thus be used in multiple ways at the same time. It also handles some of the difficult chores which are commonly used in programming: organizing memory, managing files of information, keeping time, printing, and other special needs. (I will examine one of these – the "mutex" – shortly.)
In order to perform these various tasks, and to be as nearly "perpetual" as possible, the operating system must have a particular integrity which transcends that of any other program. In fact, on many computers there are special instructions which are used only by the operating system: to protect itself as well as the applications it serves. For example, each application may use its own memory area in any way it likes, but it is prevented from using the memory belonging to the operating system, or to any other application.
These "privileged" instructions permit the organization of the work of the computer into parts which are performed by the system, and parts which are performed by the application. But it should be noted that the actions "reserved" to the system are that way only for the benefit and the use of the applications. (This parallels the division in the liturgy between the parts performed by the priest and the parts performed by the laity.) This division of labor guarantees that no application can violate the integrity of the operating system – which is therefore free to carry out the requests of the applications; likewise, it can always be relied upon to do so.
4. The "mutex" – a practical application of oneness
There are many interesting topics which I might mention in operating systems, but there is one which might demonstrate a little of the relevance of computing to the office of the Papacy.
Certain operating systems provide a mechanism which we call a mutex, from the words MUTual EXclusion. It is a device which prevents two things from happening at once. Now in physical reality, it seems obvious that if you are sitting in a chair, I cannot sit in it at the same time. Likewise, if the computer is performing an ADD instruction, it clearly cannot perform a SUBTRACT instruction at the same time. However, the operating system provides a way of having two (or more) separate uses of the computer at once – even though in reality, and by the arrangement of the operating system, the machine is doing only one thing at any given moment. But the operating system must also provide a way to make sure a programmer does not attempt to violate this rule of reality.
A mutex relies on part of the privileged character of the operating system: in particular, it requires that there be a third "entity" or state – a mediator which is neither one user nor another.
Here is the arrangement: whenever there is a particular task which can be done by only one user at a time, the task is "protected" by a mutex. First, one user must "lock" the mutex, then the task may be performed. Once the task is finished, the mutex is "unlocked." The mutex, however, is made in such a way that only one user may lock it at a time – any other user who attempts to lock it will be made to wait until it is unlocked. And how is this done? The operating system is "trusted" to perform this operation in a fair and just manner, so that anyone requesting this task by means of the mutex will eventually get an opportunity to do it.
When two users want to do a particular task which can be done by only one at a time, the operating system selects the first requestor and permits him to proceed by locking the mutex, while holding the other in a special "mutex wait" state. Once the first user finishes the task, he "returns" the mutex to the operating system to be unlocked. Then the operating system locks the mutex again and gives it to the next user who is waiting. That user may now proceed with the task.
The mutex, then, is a very small but very useful item of operating systems; yet it exemplifies the whole idea of having one single "trusted" authority to preserve order and maintain usefulness.
 Kreyche, Robert J. First Philosophy. 180.
 Chesterton, G. K. The Common Man 143; cf. Mt 19:6.
 Chesterton, G. K. Heretics. CW1:46.
 Chesterton, G. K. Illustrated London News. March 21, 1914. CW30:62.
 Kreyche, Robert J. First Philosophy. 178.
 Chesterton, G. K. A Miscelleny of Men. 158.