О компьютерных багах в исторической перспективе.
Когда изобретатель USB-порта умрет, то его гроб сначала опустят в яму, затем поднимут, перевернут, а затем снова опустят правильной стороной. |
Мечта всех без исключения пользователей USB. |
И не факт, что хватит одного переворачивания. |
Дополнение от [Bad username or site: shele4ka title= @ livejournal.com]. |
Намедни моё внимание привлёк интересный вопрос на superuser.com:
![]() | ![]() |
Меня настолько восхитил ответ на этот вопрос, что я переведу его целиком:
Судя по всему, это особенность не только Apple OS X, но всех систем, основанных на BSD, в целом. Вот кусочек исходного кода утилиты ls, который несёт ответственность за это поведение:
if (!getuid())
f_listdot = 1;
Эту правку можно проследить до исходников 4.4BSD-Lite. Вместе с другими исходниками эта правка была внесена во FreeBSD в 1994 году.
Этот кусочек кода присутствовал также в OpenBSD в 1995-м, его можно найти в этом изменении кода. Примечания к правке, вносящей это изменение, утверждают, что это перенос кода из NetBSD, так что, судя по всему, в NetBSD этот кусочек кода тоже существовал не позже 1995-го.
Логично будет залезть в исходники NetBSD и поискать его там. И что бы вы думали? — Мы находим этот кусочек кода в правке 1993 года, которая переносит в NetBSD код из 386BSD.
Если мы продолжим раскопки, обнаружится, что этот кусочек кода существовал в 386BSD версии 0.0, которая откололась от основной ветки BSD примерно в 1991-м году, во время разработки BSD 4.3.
В первый раз этот кусочек кода появился в версии 4.3BSD-Reno, которая является общим предком всех остальных современных BSD и MacOS X, согласно официальной генеалогии, в правке от 27 июня 1989 года, в первой работающей версии утилиты ls. Изначально комментарий гласил:
Но в более поздней правке за тот же день был изменён на
А заглавная буква и точка в конце фразы были добавлены только в этой правке 1992 года, и комментарий приобрёл свой современный вид:
Однако поведение, гласящее, что суперюзер по умолчанию видит все файлы, прослеживается до более ранних времён. Как видно из кода BSD версии 2.0, утилита вела себя таким образом уже 9 мая 1979 года:
Но автору ответа не удалось найти ни одного примера исходных кодов BSD версии 1.0 с таким поведением. На самом деле, в найденных исходниках 1BSD, датированных ноябрём 1977 года, этого кода нет, и вообще поддержки флага −A в утилите ls тоже нет.
Таким образом, в короткой редакции ответ будет звучать так: наисовременнейшая Apple OS X ведёт себя таким образом потому, что примерно тридцать семь лет назад, между ноябрём 1977 и маем 1979, во время разработки 2BSD, кому-то такое поведение показалось правильным.
Между прочим, существование кода, десятилетиями перетекающего из версии в версию, означает, что если в изначальном коде была ошибка, то и эта ошибка тоже будет кочевать из версии в версию десятки лет. И такие случаи бывают. Например, вот эта правка, выполненная 8 октября 2014 года, чинит проблему в операционной системе OpenBSD, внесённую Биллом Джоем в исходники 1BSD 24 августа 1977 года. На момент починки багу было 37 лет.
А мне говорили — «компьютерные науки, быстро развивающаяся область, созданная с нуля и поэтому свободная от ошибок прошлого»… Ага, щазз.