Rootless Root | |
The Unix Koans of Master Foo | |
Master Foo and the Ten Thousand Lines | |
Master Foo once said to a visiting programmer: “There is more | |
Unix-nature in one line of shell script than there is in ten thousand | |
lines of C.” | |
The programmer, who was very proud of his mastery of C, said: “How can | |
this be? C is the language in which the very kernel of Unix is | |
implemented!” | |
Master Foo replied: “That is so. Nevertheless, there is more | |
Unix-nature in one line of shell script than there is in ten thousand | |
lines of C.” | |
The programmer grew distressed. “But through the C language we | |
experience the enlightenment of the Patriarch Ritchie! We become as one | |
with the operating system and the machine, reaping matchless | |
performance!” | |
Master Foo replied: “All that you say is true. But there is still more | |
Unix-nature in one line of shell script than there is in ten thousand | |
lines of C.” | |
The programmer scoffed at Master Foo and rose to depart. But Master Foo | |
nodded to his student Nubi, who wrote a line of shell script on a | |
nearby whiteboard, and said: “Master programmer, consider this | |
pipeline. Implemented in pure C, would it not span ten thousand lines?” | |
The programmer muttered through his beard, contemplating what Nubi had | |
written. Finally he agreed that it was so. | |
“And how many hours would you require to implement and debug that C | |
program?” asked Nubi. | |
“Many,” admitted the visiting programmer. “But only a fool would spend | |
the time to do that when so many more worthy tasks await him.” | |
“And who better understands the Unix-nature?” Master Foo asked. “Is it | |
he who writes the ten thousand lines, or he who, perceiving the | |
emptiness of the task, gains merit by not coding?” | |
Upon hearing this, the programmer was enlightened. | |
Master Foo and the Script Kiddie | |
A stranger from the land of Woot came to Master Foo as he was eating | |
the morning meal with his students. | |
“I hear y00 are very l33t,” he said. “Pl33z teach m3 all y00 know.” | |
Master Foo's students looked at each other, confused by the stranger's | |
barbarous language. Master Foo just smiled and replied: “You wish to | |
learn the Way of Unix?” | |
“I want to b3 a wizard hax0r,” the stranger replied, “and 0wn | |
ever3one's b0xen.” | |
“I do not teach that Way,” replied Master Foo. | |
The stranger grew agitated. “D00d, y00 r nothing but a p0ser,” he said. | |
“If y00 n00 anything, y00 wud t33ch m3.” | |
“There is a path,” said Master Foo, “that might bring you to wisdom.” | |
The master scribbled an IP address on a piece of paper. “Cracking this | |
box should pose you little difficulty, as its guardians are | |
incompetent. Return and tell me what you find.” | |
The stranger bowed and left. Master Foo finished his meal. | |
Days passed, then months. The stranger was forgotten. | |
Years later, the stranger from the land of Woot returned. | |
“Damn you!” he said, “I cracked that box, and it was easy like you | |
said. But I got busted by the FBI and thrown in jail.” | |
“Good,” said Master Foo. “You are ready for the next lesson.” He | |
scribbled an IP address on another piece of paper and handed it to the | |
stranger. | |
“Are you crazy?” the stranger yelled. “After what I've been through, | |
I'm never going to break into a computer again!” | |
Master Foo smiled. “Here,” he said, “is the beginning of wisdom.” | |
On hearing this, the stranger was enlightened. | |
Master Foo Discourses on the Two Paths | |
Master Foo instructed his students: | |
“There is a line of dharma teaching, exemplified by the Patriarch | |
McIlroy's mantra ‘Do one thing well’, which emphasizes that software | |
partakes of the Unix way when it has simple and consistent behavior, | |
with properties that can be readily modeled by the mind of the user and | |
used by other programs.” | |
“But there is another line of dharma teaching, exemplified by the | |
Patriarch Thompson's great mantra ‘When in doubt, use brute force’, and | |
various sutras on the value of getting 90% of cases right now, rather | |
than 100% later, which emphasizes robustness and simplicity of | |
implementation.” | |
“Now tell me: which programs have the Unix nature?” | |
After a silence, Nubi observed: | |
“Master, these teachings may conflict.” | |
“A simple implementation is likely to lack logic for edge cases, such | |
as resource exhaustion, or failure to close a race window, or a timeout | |
during an uncompleted transaction.” | |
“When such edge cases occur, the behavior of the software will become | |
irregular and difficult. Surely this is not the Way of Unix?” | |
Master Foo nodded in agreement. | |
“On the other hand, it is well known that fancy algorithms are brittle. | |
Further, each attempt to cover an edge case tends to interact with both | |
the program's central algorithms and the code covering other edge | |
cases.” | |
“Thus, attempts to cover all edge cases in advance, guaranteeing | |
‘simplicity of description’, may in fact produce code that is | |
overcomplicated and brittle or which, plagued by bugs, never ships at | |
all. Surely this is not the Way of Unix?” | |
Master Foo nodded in agreement. | |
“What, then, is the proper dharma path?” asked Nubi. | |
The master spoke: | |
“When the eagle flies, does it forget that its feet have touched the | |
ground? When the tiger lands upon its prey, does it forget its moment | |
in the air? Three pounds of VAX!” | |
On hearing this, Nubi was enlightened. | |
Master Foo and the Methodologist | |
When Master Foo and his student Nubi journeyed among the sacred sites, | |
it was the Master's custom in the evenings to offer public instruction | |
to Unix neophytes of the towns and villages in which they stopped for | |
the night. | |
On one such occasion, a methodologist was among those who gathered to | |
listen. | |
“If you do not repeatedly profile your code for hot spots while tuning, | |
you will be like a fisherman who casts his net in an empty lake,” said | |
Master Foo. | |
“Is it not, then, also true,” said the methodology consultant, “that if | |
you do not continually measure your productivity while managing | |
resources, you will be like a fisherman who casts his net in an empty | |
lake?” | |
“I once came upon a fisherman who just at that moment let his net fall | |
in the lake on which his boat was floating,” said Master Foo. “He | |
scrabbled around in the bottom of his boat for quite a while looking | |
for it.” | |
“But,” said the methodologist, “if he had dropped his net in the lake, | |
why was he looking in the boat?” | |
“Because he could not swim,” replied Master Foo. | |
Upon hearing this, the methodologist was enlightened. | |
Master Foo Discourses on the Graphical User Interface | |
One evening, Master Foo and Nubi attended a gathering of programmers | |
who had met to learn from each other. One of the programmers asked Nubi | |
to what school he and his master belonged. Upon being told they were | |
followers of the Great Way of Unix, the programmer grew scornful. | |
“The command-line tools of Unix are crude and backward,” he scoffed. | |
“Modern, properly designed operating systems do everything through a | |
graphical user interface.” | |
Master Foo said nothing, but pointed at the moon. A nearby dog began to | |
bark at the master's hand. | |
“I don't understand you!” said the programmer. | |
Master Foo remained silent, and pointed at an image of the Buddha. Then | |
he pointed at a window. | |
“What are you trying to tell me?” asked the programmer. | |
Master Foo pointed at the programmer's head. Then he pointed at a rock. | |
“Why can't you make yourself clear?” demanded the programmer. | |
Master Foo frowned thoughtfully, tapped the programmer twice on the | |
nose, and dropped him in a nearby trashcan. | |
As the programmer was attempting to extricate himself from the garbage, | |
the dog wandered over and piddled on him. | |
At that moment, the programmer achieved enlightenment. | |
Master Foo and the Old Hand | |
An experienced Unix programmer, hearing of Master Foo's wisdom, came to | |
him for guidance. Approaching the Master, he bowed three times and | |
said: | |
“Master Foo, I am gravely troubled. In my youth, those who followed the | |
Great Way of Unix used software that was simple and unaffected, like ed | |
and mailx. Today, they use vim and mutt. Tomorrow I fear they will use | |
KMail and Evolution, and Unix will have become like Windows — bloated | |
and covered over with GUIs.” | |
Master Foo said: “But what software do you use when you want to draw a | |
poster?” | |
The programmer replied: “I...have never done that. But I am sure that I | |
could use LaTeX or pic to accomplish it without GUIs, in the proper | |
Unix way.” | |
Master Foo then said: “Which one will reach the other side of the | |
river: The one who dreams of a raft, or the one that hitchhikes to the | |
next bridge?” | |
Upon hearing this, the programmer was enlightened. | |
Master Foo and the Shell Tools | |
A Unix novice came to Master Foo and said: “I am confused. Is it not | |
the Unix way that every program should concentrate on one thing and do | |
it well?” | |
Master Foo nodded. | |
The novice continued: “Isn't it also the Unix way that the wheel should | |
not be reinvented?” | |
Master Foo nodded again. | |
“Why, then, are there several tools with similar capabilities in text | |
processing: sed, awk and Perl? With which one can I best practice the | |
Unix way?” | |
Master Foo asked the novice: “If you have a text file, what tool would | |
you use to produce a copy with a few words in it replaced by strings of | |
your choosing?” | |
The novice frowned and said: “Perl's regexps would be excessive for so | |
simple a task. I do not know awk, and I have been writing sed scripts | |
in the last few weeks. As I have some experience with sed, at the | |
moment I would prefer it. But if the job only needed to be done once | |
rather than repeatedly, a text editor would suffice.” | |
Master Foo nodded and replied: “When you are hungry, eat; when you are | |
thirsty, drink; when you are tired, sleep.” | |
Upon hearing this, the novice was enlightened. | |
Master Foo and the Nervous Novice | |
There was a novice who learned much at the Master's feet, but felt | |
something to be missing. After meditating on his doubts for some time, | |
he found the courage to approach Master Foo about his problem. | |
“Master Foo,” he asked “why do Unix users not employ antivirus | |
programs? And defragmentors? And malware cleaners?” | |
Master Foo smiled, and said “When your house is well constructed, there | |
is no need to add pillars to keep the roof in place.” | |
The novice replied “Would it not be better to use these things anyway, | |
just to be certain?” | |
Master Foo reached for a nearby ball of string, and began wrapping it | |
around the novice's feet. | |
“What are you doing?” the novice asked in surprise. | |
Master Foo replied simply: “Tying your shoes.” | |
Upon hearing this, the novice was enlightened. | |
Master Foo and the Recruiter | |
A technical recruiter, having discovered that that the ways of Unix | |
hackers were strange to him, sought an audience with Master Foo to | |
learn more about the Way. Master Foo met the recruiter in the HR | |
offices of a large firm. | |
The recruiter said, “I have observed that Unix hackers scowl or become | |
annoyed when I ask them how many years of experience they have in a new | |
programming language. Why is this so?” | |
Master Foo stood, and began to pace across the office floor. The | |
recruiter was puzzled, and asked “What are you doing?” | |
“I am learning to walk,” replied Master Foo. | |
“I saw you walk through that door” the recruiter exclaimed, “and you | |
are not stumbling over your own feet. Obviously you already know how to | |
walk.” | |
“Yes, but this floor is new to me.” replied Master Foo. | |
Upon hearing this, the recruiter was enlightened. | |
Master Foo Discourses on Returning to Windows | |
A student said: “We have learned that Unix is not just an operating | |
system, but also a style of approaching problems.” | |
Master Foo nodded in agreement. | |
The student continued: “Then, the Great Way of Unix can be applied on | |
other operating systems?” | |
Master Foo sat silent for a moment, then said: “In every operating | |
system there is a path to the Great Way, if only we can find it.” | |
The student continued: “What, then, of Windows? It is preinstalled on | |
most computers, and though its tools are mostly far inferior, they are | |
easy to use for beginners. Surely, Windows users could benefit from the | |
Unix philosophy.” | |
Master Foo nodded again. | |
The student said: “How, then, are those enlightened in the Unix Way to | |
return to the Windows world?” | |
Master Foo said: “To return to Windows, you have but to boot it up.” | |
The student said, growing agitated: “Master Foo, if it is so easy, why | |
are there so many monolithic and broken software packages for Windows? | |
Elegant software should also be possible with a GUI and fancy colors, | |
but there is little evidence that this occurs. What becomes of an | |
enlighted one who returns to Windows?” | |
Master Foo: “A broken mirror never reflects again; fallen flowers never | |
go back to the old branches.” | |
Upon hearing this, all present were enlightened. | |
Master Foo and the Unix Zealot | |
A Unix zealot, having heard that Master Foo was wise in the Great Way, | |
came to him for instruction. Master Foo said to him: | |
“When the Patriarch Thompson invented Unix, he did not understand it. | |
Then he gained in understanding, and no longer invented it.” | |
“When the Patriarch McIlroy invented the pipe, he knew that it would | |
transform software, but did not know that it would transform mind.” | |
“When the Patriarch Ritchie invented C, he condemned programmers to a | |
thousand hells of buffer overruns, heap corruption, and stale-pointer | |
bugs.” | |
“Truly, the Patriarchs were blind and foolish!” | |
The zealot was greatly angered by the Master's words. | |
“These enlightened ones,” he protested, “gave us the Great Way of Unix. | |
Surely, if we mock them we will lose merit and be reborn as beasts or | |
MCSEs.” | |
“Is your code ever completely without stain and flaw?” demanded Master | |
Foo. | |
“No,” admitted the zealot, “no man's is.” | |
“The wisdom of the Patriarchs” said Master Foo, “was that they knew | |
they were fools.” | |
Upon hearing this, the zealot was enlightened. | |
Master Foo Discourses on the Unix-Nature | |
A student said to Master Foo: “We are told that the firm called Novell | |
holds true dominion over Unix.” | |
Master Foo nodded. | |
The student continued, “Yet we are also told that the firm called | |
OpenGroup also holds true dominion over Unix.” | |
Master Foo nodded. | |
“How can this be?” asked the student. | |
Master Foo replied: | |
“Novell indeed has dominion over the code of Unix, but the code of Unix | |
is not Unix. OpenGroup indeed has dominion over the name of Unix, but | |
the name of Unix is not Unix.” | |
“What, then, is the Unix-nature?” asked the student. | |
Master Foo replied: | |
“Not code. Not name. Not mind. Not things. Always changing, yet never | |
changing.” | |
“The Unix-nature is simple and empty. Because it is simple and empty, | |
it is more powerful than a typhoon.” | |
“Moving in accordance with the law of nature, it unfolds inexorably in | |
the minds of programmers, assimilating designs to its own nature. All | |
software that would compete with it must become like to it; empty, | |
empty, profoundly empty, perfectly void, hail!” | |
Upon hearing this, the student was enlightened. | |
Master Foo and the MCSE | |
Once, a famous Windows system administrator came to Master Foo and | |
asked him for instruction: “I have heard that you are a powerful Unix | |
wizard. Let us trade secrets, that we may both gain thereby.” | |
Master Foo said: “It is good that you seek wisdom. But in the Way of | |
Unix, there are no secrets.” | |
The administrator looked puzzled at this. “But it is said that you are | |
a great Unix guru who knows all the innermost mysteries. As do I in | |
Windows; I am an MCSE, and I have many other certifications of | |
knowledge not common in the world. I know even the most obscure | |
registry entries by heart. I can tell you everything about the Windows | |
API, yes, even secrets those of Redmond have half-forgotten. What is | |
the arcane lore that gives you your power?” | |
Master Foo said: “I have none. Nothing is hidden, nothing is revealed.” | |
Growing angry, the administrator said “Very well, if you hold no | |
secrets, then tell me: what do I have to know to become as powerful in | |
the Unix way as you?” | |
Master Foo said: “A man who mistakes secrets for knowledge is like a | |
man who, seeking light, hugs a candle so closely that he smothers it | |
and burns his hand.” | |
Upon hearing this, the administrator was enlightened. | |
Master Foo and the End User | |
On another occasion when Master Foo gave public instruction, an end | |
user, having heard tales of the Master's wisdom, came to him for | |
guidance. | |
He bowed three times to Master Foo. “I wish to learn the Great Way of | |
Unix,” he said “but the command line confuses me.” | |
Some of the onlooking neophytes began to mock the end user, calling him | |
“clueless” and saying that the Way of Unix is only for those of | |
discipline and intelligence. | |
The Master held up a hand for silence, and called the most obstreperous | |
of the neophytes who had mocked forward, to where he and the end user | |
sat. | |
“Tell me,” he asked the neophyte, “of the code you have written and the | |
works of design you have uttered.” | |
The neophyte began to stammer out a reply, but fell silent. | |
Master Foo turned to the end-user. “Tell me,” he inquired, “why do you | |
seek the Way?” | |
“I am discontent with the software I see around me,” the end user | |
replied. “It neither performs reliably nor pleases the eye and hand. | |
Having heard that the Unix way, though difficult, is superior, I seek | |
to cast aside all snares and delusions.” | |
“And what do you do in the world,” asked Master Foo, “that you must | |
strive with software?” | |
“I am a builder,” the end user replied, “Many of the houses of this | |
town were made under my chop.” | |
Master Foo turned back to the neophyte. “The housecat may mock the | |
tiger,” said the master, “but doing so will not make his purr into a | |
roar.” | |
Upon hearing this, the neophyte was enlightened. | |
Master Foo and the Programming Prodigy | |
There was a time when rumors began to reach Master Foo and his students | |
of a prodigiously gifted programmer, a young man who wandered the | |
length and breadth of the land performing mighty feats of coding and | |
humiliating all who dared set their skill against his. | |
Eventually this prodigy came to visit Master Foo, who received him | |
politely and offered him tea. The Prodigy accepted with equal | |
politeness and explained the motive for his visit. | |
“I have come to you,” he said “seeking a code and design review of my | |
latest project. For it is of surpassing complexity, and I do not have | |
peers capable of understanding it. Only an acknowledged master such as | |
yourself (and here the Prodigy bowed deeply) can have the discernment | |
required.” | |
Master Foo bowed politely in return and began examining the Prodigy's | |
code. After some time he raised his eyes from the screen. “This code is | |
at first sight very impressive,” he said. “It is elegant in design, | |
utilizing original algorithms of great ingenuity, and appears to be | |
implemented in a craftsmanlike way which minimizes the possibility of | |
errors.” | |
The Prodigy looked very pleased at this praise, but Master Foo | |
continued: “However, I detect one significant flaw.” | |
“Flaw?” the Prodigy said. “What flaw?” | |
“This code is difficult to read,” said Master Foo. “It is only thinly | |
commented, its invariants are not specified, and I see no narrative | |
description of its architecture or internal data structures anywhere. | |
These problems will seriously impede your cooperation with other | |
programmers.” | |
The Prodigy drew himself up haughtily. “I do not seek the cooperation | |
of other programmers,” he said. “Every time I thought I had found one | |
who might match me in skill I have been disappointed. Thus, I work | |
alone.” | |
“But even the hacker who works alone,” said Master Foo, “collaborates | |
with others, and must constantly communicate clearly to them, lest his | |
work become confused and lost.” | |
“Of what others do you speak?” the Prodigy demanded. | |
Master Foo said: “All your future selves.” | |
Upon hearing this, the Prodigy was enlightened. | |
Master Foo and the Hardware Designer | |
On one occasion, as Master Foo was traveling to a conference with a few | |
of his senior disciples, he was accosted by a hardware designer. | |
The hardware designer said: “It is rumored that you are a great | |
programmer. How many lines of code do you write per year?” | |
Master Foo replied with a question: “How many square inches of silicon | |
do you lay out per year?” | |
“Why...we hardware designers never measure our work in that way,” the | |
man said. | |
“And why not?” Master Foo inquired. | |
“If we did so,” the hardware designer replied, “we would be tempted to | |
design chips so large that they cannot be fabricated - and, if they | |
were fabricated, their overwhelming complexity would make it be | |
impossible to generate proper test vectors for them.” | |
Master Foo smiled, and bowed to the hardware designer. | |
In that moment, the hardware designer achieved enlightenment. | |
Rootless Root | |
____________________________________________________________________________ | |
Gophered by Gophernicus/3.0.1 on Ubuntu/22.04 x86_64 |