hitech: (computer)
hitech ([personal profile] hitech) wrote2015-07-01 03:18 pm
Entry tags:

О компьютерных багах в исторической перспективе.

Когда изобретатель USB-порта умрет, то его гроб сначала опустят в яму, затем поднимут, перевернут, а затем снова опустят правильной стороной.
Мечта всех без исключения пользователей USB.
И не факт, что хватит одного переворачивания.
Дополнение от [Bad username or site: shele4ka title= @ livejournal.com].

Намедни моё внимание привлёк интересный вопрос на superuser.com:

Почему в командной строке Apple OS X команда ls, запущенная от имени суперюзера, показывает скрытые файлы (с точкой в начале имени), тогда как в Линуксе — показывает только не скрытые файлы, то есть файлы, начинающиеся не с точки?

Меня настолько восхитил ответ на этот вопрос, что я переведу его целиком:

Судя по всему, это особенность не только Apple OS X, но всех систем, основанных на BSD, в целом. Вот кусочек исходного кода утилиты ls, который несёт ответственность за это поведение:

/* Root is -A automatically. */
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. Изначально комментарий гласил:

/* root sees all files automatically */

Но в более поздней правке за тот же день был изменён на

/* root is -A automatically */

А заглавная буква и точка в конце фразы были добавлены только в этой правке 1992 года, и комментарий приобрёл свой современный вид:

/* Root is -A automatically. */

Однако поведение, гласящее, что суперюзер по умолчанию видит все файлы, прослеживается до более ранних времён. Как видно из кода BSD версии 2.0, утилита вела себя таким образом уже 9 мая 1979 года:

Aflg = getuid() == 0;

Но автору ответа не удалось найти ни одного примера исходных кодов BSD версии 1.0 с таким поведением. На самом деле, в найденных исходниках 1BSD, датированных ноябрём 1977 года, этого кода нет, и вообще поддержки флага −A в утилите ls тоже нет.

Таким образом, в короткой редакции ответ будет звучать так: наисовременнейшая Apple OS X ведёт себя таким образом потому, что примерно тридцать семь лет назад, между ноябрём 1977 и маем 1979, во время разработки 2BSD, кому-то такое поведение показалось правильным.


Между прочим, существование кода, десятилетиями перетекающего из версии в версию, означает, что если в изначальном коде была ошибка, то и эта ошибка тоже будет кочевать из версии в версию десятки лет. И такие случаи бывают. Например, вот эта правка, выполненная 8 октября 2014 года, чинит проблему в операционной системе OpenBSD, внесённую Биллом Джоем в исходники 1BSD 24 августа 1977 года. На момент починки багу было 37 лет.

А мне говорили — «компьютерные науки, быстро развивающаяся область, созданная с нуля и поэтому свободная от ошибок прошлого»… Ага, щазз.


Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting