The Jargon File, Version 4.2.2, 20 Aug 2000

Chapter 12

Chapter 123,920 wordsPublic domain

Node:broken, Next:broken arrow, Previous:brochureware, Up:= B =

broken adj.

1. Not working properly (of programs). 2. Behaving strangely; especially (when used of people) exhibiting extreme depression.

Node:broken arrow, Next:BrokenWindows, Previous:broken, Up:= B =

broken arrow n.

[IBM] The error code displayed on line 25 of a 3270 terminal (or a PC emulating a 3270) for various kinds of protocol violations and "unexpected" error conditions (including connection to a down computer). On a PC, simulated with `->/_', with the two center characters overstruck.

Note: to appreciate this term fully, it helps to know that `broken arrow' is also military jargon for an accident involving nuclear weapons....

Node:BrokenWindows, Next:broket, Previous:broken arrow, Up:= B =

BrokenWindows n.

Abusive hackerism for the crufty and elephantine X environment on Sun machines; properly called `OpenWindows'.

Node:broket, Next:Brooks's Law, Previous:BrokenWindows, Up:= B =

broket /broh'k*t/ or /broh'ket`/ n.

[rare; by analogy with `bracket': a `broken bracket'] Either of the characters < and >, when used as paired enclosing delimiters. This word originated as a contraction of the phrase `broken bracket', that is, a bracket that is bent in the middle. (At MIT, and apparently in the Real World as well, these are usually called angle brackets.)

Node:Brooks's Law, Next:brown-paper-bag bug, Previous:broket, Up:= B =

Brooks's Law prov.

"Adding manpower to a late software project makes it later" -- a result of the fact that the expected advantage from splitting development work among N programmers is O(N) (that is, proportional to N), but the complexity and communications cost associated with coordinating and then merging their work is O(N^2) (that is, proportional to the square of N). The quote is from Fred Brooks, a manager of IBM's OS/360 project and author of "The Mythical Man-Month" (Addison-Wesley, 1975, ISBN 0-201-00650-2), an excellent early book on software engineering. The myth in question has been most tersely expressed as "Programmer time is fungible" and Brooks established conclusively that it is not. Hackers have never forgotten his advice (though it's not the whole story; see bazaar); too often, management still does. See also creationism, second-system effect, optimism.

Node:brown-paper-bag bug, Next:browser, Previous:Brooks's Law, Up:= B =

brown-paper-bag bug n.

A bug in a public software release that is so embarrassing that the author notionally wears a brown paper bag over his head for a while so he won't be recognized on the net. Entered popular usage after the early-1999 release of the first Linux 2.2, which had one. The phrase was used in Linus Torvalds's apology posting.

Node:browser, Next:BRS, Previous:brown-paper-bag bug, Up:= B =

browser n.

A program specifically designed to help users view and navigate hypertext, on-line documentation, or a database. While this general sense has been present in jargon for a long time, the proliferation of browsers for the World Wide Web after 1992 has made it much more popular and provided a central or default techspeak meaning of the word previously lacking in hacker usage. Nowadays, if someone mentions using a `browser' without qualification, one may assume it is a Web browser.

Node:BRS, Next:brute force, Previous:browser, Up:= B =

BRS /B-R-S/ n.

Syn. Big Red Switch. This abbreviation is fairly common on-line.

Node:brute force, Next:brute force and ignorance, Previous:BRS, Up:= B =

brute force adj.

Describes a primitive programming style, one in which the programmer relies on the computer's processing power instead of using his or her own intelligence to simplify the problem, often ignoring problems of scale and applying naive methods suited to small problems directly to large ones. The term can also be used in reference to programming style: brute-force programs are written in a heavyhanded, tedious way, full of repetition and devoid of any elegance or useful abstraction (see also brute force and ignorance).

The canonical example of a brute-force algorithm is associated with the `traveling salesman problem' (TSP), a classical NP-hard problem: Suppose a person is in, say, Boston, and wishes to drive to N other cities. In what order should the cities be visited in order to minimize the distance travelled? The brute-force method is to simply generate all possible routes and compare the distances; while guaranteed to work and simple to implement, this algorithm is clearly very stupid in that it considers even obviously absurd routes (like going from Boston to Houston via San Francisco and New York, in that order). For very small N it works well, but it rapidly becomes absurdly inefficient when N increases (for N = 15, there are already 1,307,674,368,000 possible routes to consider, and for N = 1000 -- well, see bignum). Sometimes, unfortunately, there is no better general solution than brute force. See also NP-.

A more simple-minded example of brute-force programming is finding the smallest number in a large list by first using an existing program to sort the list in ascending order, and then picking the first number off the front.

Whether brute-force programming should actually be considered stupid or not depends on the context; if the problem is not terribly big, the extra CPU time spent on a brute-force solution may cost less than the programmer time it would take to develop a more `intelligent' algorithm. Additionally, a more intelligent algorithm may imply more long-term complexity cost and bug-chasing than are justified by the speed improvement.

Ken Thompson, co-inventor of Unix, is reported to have uttered the epigram "When in doubt, use brute force". He probably intended this as a ha ha only serious, but the original Unix kernel's preference for simple, robust, and portable algorithms over brittle `smart' ones does seem to have been a significant factor in the success of that OS. Like so many other tradeoffs in software design, the choice between brute force and complex, finely-tuned cleverness is often a difficult one that requires both engineering savvy and delicate esthetic judgment.

Node:brute force and ignorance, Next:BSD, Previous:brute force, Up:= B =

brute force and ignorance n.

A popular design technique at many software houses -- brute force coding unrelieved by any knowledge of how problems have been previously solved in elegant ways. Dogmatic adherence to design methodologies tends to encourage this sort of thing. Characteristic of early larval stage programming; unfortunately, many never outgrow it. Often abbreviated BFI: "Gak, they used a bubble sort! That's strictly from BFI." Compare bogosity.

Node:BSD, Next:BSOD, Previous:brute force and ignorance, Up:= B =

BSD /B-S-D/ n.

[abbreviation for `Berkeley Software Distribution'] a family of Unix versions for the DEC VAX and PDP-11 developed by Bill Joy and others at Berzerkeley starting around 1977, incorporating paged virtual memory, TCP/IP networking enhancements, and many other features. The BSD versions (4.1, 4.2, and 4.3) and the commercial versions derived from them (SunOS, ULTRIX, and Mt. Xinu) held the technical lead in the Unix world until AT&T's successful standardization efforts after about 1986; descendants including Free/Open/NetBSD, BSD/OS and MacOS X are still widely popular. Note that BSD versions going back to 2.9 are often referred to by their version numbers alone, without the BSD prefix. See 4.2, Unix, USG Unix.

Node:BSOD, Next:BUAF, Previous:BSD, Up:= B =

BSOD /B-S-O-D/

Very commmon abbreviation for Blue Screen of Death. Both spoken and written.

Node:BUAF, Next:BUAG, Previous:BSOD, Up:= B =

BUAF // n.

[abbreviation, from _alt.fan.warlord_] Big Ugly ASCII Font -- a special form of ASCII art. Various programs exist for rendering text strings into block, bloob, and pseudo-script fonts in cells between four and six character cells on a side; this is smaller than the letters generated by older banner (sense 2) programs. These are sometimes used to render one's name in a sig block, and are critically referred to as `BUAF's. See warlording.

Node:BUAG, Next:bubble sort, Previous:BUAF, Up:= B =

BUAG // n.

[abbreviation, from _alt.fan.warlord_] Big Ugly ASCII Graphic. Pejorative term for ugly ASCII art, especially as found in sig blocks. For some reason, mutations of the head of Bart Simpson are particularly common in the least imaginative sig blocks. See warlording.

Node:bubble sort, Next:bucky bits, Previous:BUAG, Up:= B =

bubble sort n.

Techspeak for a particular sorting technique in which pairs of adjacent values in the list to be sorted are compared and interchanged if they are out of order; thus, list entries `bubble upward' in the list until they bump into one with a lower sort value. Because it is not very good relative to other methods and is the one typically stumbled on by naive and untutored programmers, hackers consider it the canonical example of a naive algorithm. (However, it's been shown by repeated experiment that below about 5000 records bubble-sort is OK anyway.) The canonical example of a really bad algorithm is bogo-sort. A bubble sort might be used out of ignorance, but any use of bogo-sort could issue only from brain damage or willful perversity.

Node:bucky bits, Next:buffer chuck, Previous:bubble sort, Up:= B =

bucky bits /buh'kee bits/ n.

1. obs. The bits produced by the CONTROL and META shift keys on a SAIL keyboard (octal 200 and 400 respectively), resulting in a 9-bit keyboard character set. The MIT AI TV (Knight) keyboards extended this with TOP and separate left and right CONTROL and META keys, resulting in a 12-bit character set; later, LISP Machines added such keys as SUPER, HYPER, and GREEK (see space-cadet keyboard). 2. By extension, bits associated with `extra' shift keys on any keyboard, e.g., the ALT on an IBM PC or command and option keys on a Macintosh.

It has long been rumored that `bucky bits' were named for Buckminster Fuller during a period when he was consulting at Stanford. Actually, bucky bits were invented by Niklaus Wirth when he was at Stanford in 1964-65; he first suggested the idea of an EDIT key to set the 8th bit of an otherwise 7-bit ASCII character). It seems that, unknown to Wirth, certain Stanford hackers had privately nicknamed him `Bucky' after a prominent portion of his dental anatomy, and this nickname transferred to the bit. Bucky-bit commands were used in a number of editors written at Stanford, including most notably TV-EDIT and NLS.

The term spread to MIT and CMU early and is now in general use. Ironically, Wirth himself remained unaware of its derivation for nearly 30 years, until GLS dug up this history in early 1993! See double bucky, quadruple bucky.

Node:buffer chuck, Next:buffer overflow, Previous:bucky bits, Up:= B =

buffer chuck n.

Shorter and ruder syn. for buffer overflow.

Node:buffer overflow, Next:bug, Previous:buffer chuck, Up:= B =

buffer overflow n.

What happens when you try to stuff more data into a buffer (holding area) than it can handle. This problem is commonly exploited by crackers to get arbitrary commands executed by a program running with root permissions. This may be due to a mismatch in the processing rates of the producing and consuming processes (see overrun and firehose syndrome), or because the buffer is simply too small to hold all the data that must accumulate before a piece of it can be processed. For example, in a text-processing tool that crunches a line at a time, a short line buffer can result in lossage as input from a long line overflows the buffer and trashes data beyond it. Good defensive programming would check for overflow on each character and stop accepting data when the buffer is full up. The term is used of and by humans in a metaphorical sense. "What time did I agree to meet you? My buffer must have overflowed." Or "If I answer that phone my buffer is going to overflow." See also spam, overrun screw.

Node:bug, Next:bug-compatible, Previous:buffer overflow, Up:= B =

bug n.

An unwanted and unintended property of a program or piece of hardware, esp. one that causes it to malfunction. Antonym of feature. Examples: "There's a bug in the editor: it writes things out backwards." "The system crashed because of a hardware bug." "Fred is a winner, but he has a few bugs" (i.e., Fred is a good guy, but he has a few personality problems).

Historical note: Admiral Grace Hopper (an early computing pioneer better known for inventing COBOL) liked to tell a story in which a technician solved a glitch in the Harvard Mark II machine by pulling an actual insect out from between the contacts of one of its relays, and she subsequently promulgated bug in its hackish sense as a joke about the incident (though, as she was careful to admit, she was not there when it happened). For many years the logbook associated with the incident and the actual bug in question (a moth) sat in a display case at the Naval Surface Warfare Center (NSWC). The entire story, with a picture of the logbook and the moth taped into it, is recorded in the "Annals of the History of Computing", Vol. 3, No. 3 (July 1981), pp. 285-286.

The text of the log entry (from September 9, 1947), reads "1545 Relay #70 Panel F (moth) in relay. First actual case of bug being found". This wording establishes that the term was already in use at the time in its current specific sense -- and Hopper herself reports that the term `bug' was regularly applied to problems in radar electronics during WWII.

Indeed, the use of `bug' to mean an industrial defect was already established in Thomas Edison's time, and a more specific and rather modern use can be found in an electrical handbook from 1896 ("Hawkin's New Catechism of Electricity", Theo. Audel & Co.) which says: "The term `bug' is used to a limited extent to designate any fault or trouble in the connections or working of electric apparatus." It further notes that the term is "said to have originated in quadruplex telegraphy and have been transferred to all electric apparatus."

The latter observation may explain a common folk etymology of the term; that it came from telephone company usage, in which "bugs in a telephone cable" were blamed for noisy lines. Though this derivation seems to be mistaken, it may well be a distorted memory of a joke first current among telegraph operators more than a century ago!

Or perhaps not a joke. Historians of the field inform us that the term "bug" was regularly used in the early days of telegraphy to refer to a variety of semi-automatic telegraphy keyers that would send a string of dots if you held them down. In fact, the Vibroplex keyers (which were among the most common of this type) even had a graphic of a beetle on them (and still do)! While the ability to send repeated dots automatically was very useful for professional morse code operators, these were also significantly trickier to use than the older manual keyers, and it could take some practice to ensure one didn't introduce extraneous dots into the code by holding the key down a fraction too long. In the hands of an inexperienced operator, a Vibroplex "bug" on the line could mean that a lot of garbled Morse would soon be coming your way.

Further, the term "bug" has long been used among radio technicians to describe a device that converts electromagnetic field variations into acoustic signals. It is used to trace radio interference and look for dangerous radio emissions. Radio community usage derives from the roach-like shape of the first versions used by 19th century physicists. The first versions consisted of a coil of wire (roach body), with the two wire ends sticking out and bent back to nearly touch forming a spark gap (roach antennae). The bug is to the radio technician what the stethoscope is to the stereotype medical doctor. This sense is almost certainly ancestral to modern use of "bug" for a covert monitoring device, but may also have contributed to the use of "bug" for the effects of radio interference itself.

Actually, use of `bug' in the general sense of a disruptive event goes back to Shakespeare! (Henry VI, part III - Act V, Scene II: King Edward: "So, lie thou there. Die thou; and die our fear; For Warwick was a bug that fear'd us all.") In the first edition of Samuel Johnson's dictionary one meaning of `bug' is "A frightful object; a walking spectre"; this is traced to `bugbear', a Welsh term for a variety of mythological monster which (to complete the circle) has recently been reintroduced into the popular lexicon through fantasy role-playing games.

In any case, in jargon the word almost never refers to insects. Here is a plausible conversation that never actually happened:

"There is a bug in this ant farm!"

"What do you mean? I don't see any ants in it."

"That's the bug."

A careful discussion of the etymological issues can be found in a paper by Fred R. Shapiro, 1987, "Entomology of the Computer Bug: History and Folklore", American Speech 62(4):376-378.

[There has been a widespread myth that the original bug was moved to the Smithsonian, and an earlier version of this entry so asserted. A correspondent who thought to check discovered that the bug was not there. While investigating this in late 1990, your editor discovered that the NSWC still had the bug, but had unsuccessfully tried to get the Smithsonian to accept it -- and that the present curator of their History of American Technology Museum didn't know this and agreed that it would make a worthwhile exhibit. It was moved to the Smithsonian in mid-1991, but due to space and money constraints was not actually exhibited years afterwards. Thus, the process of investigating the original-computer-bug bug fixed it in an entirely unexpected way, by making the myth true! --ESR]

Node:bug-compatible, Next:bug-for-bug compatible, Previous:bug, Up:= B =

bug-compatible adj.

[common] Said of a design or revision that has been badly compromised by a requirement to be compatible with fossils or misfeatures in other programs or (esp.) previous releases of itself. "MS-DOS 2.0 used \ as a path separator to be bug-compatible with some cretin's choice of / as an option character in 1.0."

Node:bug-for-bug compatible, Next:bug-of-the-month club, Previous:bug-compatible, Up:= B =

bug-for-bug compatible n.

Same as bug-compatible, with the additional implication that much tedious effort went into ensuring that each (known) bug was replicated.

Node:bug-of-the-month club, Next:buglix, Previous:bug-for-bug compatible, Up:= B =

bug-of-the-month club n.

[from "book-of-the-month club", a time-honored mail-order-marketing technique in the U.S.] A mythical club which users of `sendmail(8)' (the UNIX mail daemon) belong to; this was coined on the Usenet newsgroup comp.security.unix at a time when sendmail security holes, which allowed outside crackers access to the system, were being uncovered at an alarming rate, forcing sysadmins to update very often. Also, more completely, `fatal security bug-of-the-month club'. See also kernel-of-the-week club.

Node:buglix, Next:bulletproof, Previous:bug-of-the-month club, Up:= B =

buglix /buhg'liks/ n.

[uncommon] Pejorative term referring to DEC's ULTRIX operating system in its earlier severely buggy versions. Still used to describe ULTRIX, but without nearly so much venom. Compare AIDX, HP-SUX, Nominal Semidestructor, Telerat, sun-stools.

Node:bulletproof, Next:bullschildt, Previous:buglix, Up:= B =

bulletproof adj.

Used of an algorithm or implementation considered extremely robust; lossage-resistant; capable of correctly recovering from any imaginable exception condition -- a rare and valued quality. Implies that the programmer has thought of all possible errors, and added code to protect against each one. Thus, in some cases, this can imply code that is too heavyweight, due to excessive paranoia on the part of the programmer. Syn. armor-plated.

Node:bullschildt, Next:bum, Previous:bulletproof, Up:= B =

bullschildt /bul'shilt/ n.

[comp.lang.c on USENET] A confident, but incorrect, statement about a programming language. This immortalizes a very bad book about C, Herbert Schildt's "C - The Complete Reference". One reviewer commented "The naive errors in this book would be embarassing even in a programming assignment turned in by a computer science college sophomore."

Node:bum, Next:bump, Previous:bullschildt, Up:= B =

bum

1. vt. To make highly efficient, either in time or space, often at the expense of clarity. "I managed to bum three more instructions out of that code." "I spent half the night bumming the interrupt code." In 1996, this term and the practice it describes are semi-obsolete. In elder days, John McCarthy (inventor of LISP) used to compare some efficiency-obsessed hackers among his students to "ski bums"; thus, optimization became "program bumming", and eventually just "bumming". 2. To squeeze out excess; to remove something in order to improve whatever it was removed from (without changing function; this distinguishes the process from a featurectomy). 3. n. A small change to an algorithm, program, or hardware device to make it more efficient. "This hardware bum makes the jump instruction faster." Usage: now uncommon, largely superseded by v. tune (and n. tweak, hack), though none of these exactly capture sense 2. All these uses are rare in Commonwealth hackish, because in the parent dialects of English the noun `bum' is a rude synonym for `buttocks' and the verb `bum' for buggery.

Node:bump, Next:burble, Previous:bum, Up:= B =

bump vt.

Synonym for increment. Has the same meaning as C's ++ operator. Used esp. of counter variables, pointers, and index dummies in for, while, and do-while loops.

Node:burble, Next:buried treasure, Previous:bump, Up:= B =

burble v.

[from Lewis Carroll's "Jabberwocky"] Like flame, but connotes that the source is truly clueless and ineffectual (mere flamers can be competent). A term of deep contempt. "There's some guy on the phone burbling about how he got a DISK FULL error and it's all our comm software's fault." This is mainstream slang in some parts of England.

Node:buried treasure, Next:burn-in period, Previous:burble, Up:= B =

buried treasure n.

A surprising piece of code found in some program. While usually not wrong, it tends to vary from crufty to bletcherous, and has lain undiscovered only because it was functionally correct, however horrible it is. Used sarcastically, because what is found is anything but treasure. Buried treasure almost always needs to be dug up and removed. "I just found that the scheduler sorts its queue using bubble sort! Buried treasure!"

Node:burn-in period, Next:burst page, Previous:buried treasure, Up:= B =

burn-in period n.

1. A factory test designed to catch systems with marginal components before they get out the door; the theory is that burn-in will protect customers by outwaiting the steepest part of the bathtub curve (see infant mortality). 2. A period of indeterminate length in which a person using a computer is so intensely involved in his project that he forgets basic needs such as food, drink, sleep, etc. Warning: Excessive burn-in can lead to burn-out. See hack mode, larval stage.

Historical note: the origin of "burn-in" (sense 1) is apparently the practice of setting a new-model airplane's brakes on fire, then extinguishing the fire, in order to make them hold better. This was done on the first version of the U.S. spy-plane, the U-2.

Node:burst page, Next:busy-wait, Previous:burn-in period, Up:= B =

burst page n.

Syn. banner, sense 1.

Node:busy-wait, Next:buzz, Previous:burst page, Up:= B =

busy-wait vi.

Used of human behavior, conveys that the subject is busy waiting for someone or something, intends to move instantly as soon as it shows up, and thus cannot do anything else at the moment. "Can't talk now, I'm busy-waiting till Bill gets off the phone."