Quali sono i migliori esempi di bug del software che sono diventati caratteristiche (aka misbugs)?

Secondo Rob Pike, il comportamento di UNIX di nascondere i file i cui nomi iniziano con un punto era in realtà un errore.

Una lezione sulle scorciatoie.

Lungo tempo fa, mentre il design del file system Unix veniva elaborato, apparvero le voci . e .., per facilitare la navigazione. Non sono sicuro, ma credo che .. sia stato inserito durante la riscrittura della versione 2, quando il file system è diventato gerarchico (all'inizio aveva una struttura molto diversa). Quando si digitava ls, tuttavia, questi file apparivano, così Ken o Dennis hanno aggiunto un semplice test al programma. Era in assembler allora, ma il codice in questione era equivalente a qualcosa come questo:
if (name[0] == '.') continue;
Questa dichiarazione era un po' più breve di quello che avrebbe dovuto essere, che è
if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;
ma hey, era facile. Molti altri programmatori pigri introdussero dei bug facendo la stessa semplificazione. I file effettivi che iniziano con punti sono spesso saltati quando dovrebbero essere contati.

In secondo luogo, e molto peggio, fu creata l'idea di un file "nascosto" o "punto". Di conseguenza, i programmatori più pigri hanno iniziato a far cadere i file nella home directory di tutti. Io non ho molta roba installata sulla macchina che sto usando per scrivere questo, ma la mia home directory ha circa un centinaio di dot file e non so nemmeno cosa siano la maggior parte di essi o se siano ancora necessari. Ogni valutazione del nome del file che passa attraverso la mia home directory è rallentata da questa melma accumulata.

Sono abbastanza sicuro che il concetto di file nascosto sia stato una conseguenza non voluta. È stato certamente un errore.

Quanti bug e cicli di CPU sprecati e casi di frustrazione umana (per non parlare del cattivo design) sono risultati da quella piccola scorciatoia circa 40 anni fa?

Tenetelo a mente la prossima volta che volete tagliare un angolo nel vostro codice.

(Per coloro che obiettano che i file punto servono uno scopo, non lo metto in dubbio, ma controbatto che sono i file che servono lo scopo, non la convenzione per i loro nomi. Potrebbero facilmente essere in /cfg o /lib, che è quello che abbiamo fatto in Piano 9, che non aveva file di punti. Le lezioni possono essere imparate.)

https://plus.google.com/101960720994009339267/posts/R58WgWwN9jp