Комментарий к шестому изданию операционной системы UNIX Джона Лайонса (позднее переизданный как «Комментарий Лайонса к шестому изданию UNIX» [1] [2] и обычно называемый « Книгой Лайонса ») — весьма влиятельная [3] публикация 1976 года, содержащая аналитические комментарии к исходному коду программного обеспечения «резидентного ядра» [4] (т. е. ядра ) компьютерной операционной системы Unix шестого издания , а также отформатированную и проиндексированную Лайонсом копию указанного исходного кода, полученную от авторов из AT&T Bell Labs .
Работа Лайонса, сама по себе являющаяся примером раннего успеха UNIX как переносимого кода для издательской платформы, была набрана с использованием инструментов UNIX на системах, работающих под управлением кода, перенесенного в Университет, аналогичного тому, который она документировала. [5]
Предполагается, что это самая часто копируемая книга по информатике [6] : xi . Несмотря на свой возраст, книга Лайонса по-прежнему считается превосходным комментарием к простому, высококачественному коду.
Работа Лайонса была в последний раз переиздана в 1996 году компанией Peer-To-Peer Communications [6] и распространялась, воссоздавалась или реконструировалась различными способами в ряде СМИ другими сторонами. [5]
Исходный код и комментарии были напечатаны в виде книги в 1977 году, после того как впервые были собраны в мае 1976 года в виде набора лекционных заметок [4] для курсов компьютерных наук Лайонса (6.602B и 6.657G, упомянутых во введении к книге) в Университете Нового Южного Уэльса .
UNSW получил исходный код UNIX в 1975 году в ответ на запрос Кена Робинсона от 1974 года к Деннису Ритчи из Bell. [7] Bell Labs была дочерней компанией AT&T, из-за Декрета о согласии 1956 года AT&T не имела права вести бизнес в какой-либо другой области, следовательно, не могла продавать программное обеспечение, хотя, как это ни парадоксально, требовалось лицензировать свои изобретения, такие как Unix и транзистор. Western Electric , другая дочерняя компания AT&T, управляла лицензированием. С 1977 года, с лицензиями v7 и более поздними, AT&T запретила комментарии к коду для обучения и разрешала только одну копию Lions Commentary, напечатанную, на лицензию.
Группа пользователей UNIX, информационный бюллетень USENIX, UNIX News , от марта 1977 года, объявила о доступности книги для лицензиатов UNIX. [4]
Трудность в погоне за популярностью книги привела к тому, что к 1978 году она была доступна только в AT&T Bell Labs . [8]
Когда AT&T анонсировала UNIX версии 7 на USENIX в июне 1979 года, академическая/исследовательская лицензия больше не разрешала автоматически использование в классе. Однако тысячи студентов-компьютерщиков по всему миру распространяли фотокопии. Поскольку им не преподавали ее в классе, они иногда встречались после занятий, чтобы обсудить книгу. Многие пионеры UNIX и открытого исходного кода имели заветную фотокопию нескольких поколений. [ необходима цитата ]
Другие последующие эффекты изменения лицензии включали создание Эндрю С. Таненбаумом Minix . Как Таненбаум писал в «Операционные системы» (1987):
Когда AT&T выпустила версию 7, она начала понимать, что UNIX является ценным коммерческим продуктом, поэтому она выпустила версию 7 с лицензией, которая запрещала изучать исходный код на курсах, чтобы не подвергать опасности его статус коммерческой тайны. Многие университеты подчинились, просто отказавшись от изучения UNIX и преподавая только теорию.
Различные люди из UNIX, в частности Питер Х. Салус , Деннис Ритчи и Берни Гудхарт, много лет лоббировали различных владельцев Unix (AT&T, Novell , Santa Cruz Operation ), чтобы разрешить официальную публикацию книги. В 1996 году Santa Cruz Operation наконец разрешила выпуск исходного кода 6-го издания двадцатилетней давности (вместе с исходным кодом других версий « Ancient UNIX »), а полный код и версия комментариев 1977 года были опубликованы Peer-To-Peer Communications ( ISBN 978-1-57398-013-5 ). [6] Переиздание включает комментарии Майкла Тилсона (SCO), Питера Салуса, Денниса Ритчи, Кена Томпсона , Питера Коллинсона, Грега Роуза, Майка О'Делла, Берни Гудхарта и Питера Рейнджеса.
UNIX Operating System Source Code Level Six — это исходный код ядра, слегка отредактированный Lions для лучшего разделения функциональности — инициализация системы и управление процессами, прерывания и системные вызовы, базовый ввод-вывод, файловые системы и каналы и символьные устройства. Все процедуры и символы перечислены в алфавитном порядке с перекрестными ссылками.
Представленный код будет работать на PDP-11 /40 с дисководом RK05 , интерфейсом линейного принтера LP11, устройством записи на перфоленту PCL11 и терминальным интерфейсом KL11 или на подходящем эмуляторе PDP-11, например SIMH .
Комментарий к операционной системе UNIX начинается с заметок о UNIX и другой полезной документации (страницы руководства UNIX, руководства по оборудованию DEC и т. д.), раздела об архитектуре PDP-11 и главы о том, как читать программы на языке C. Далее следует исходный комментарий, разделенный на те же разделы, что и код. Книга заканчивается предлагаемыми упражнениями для студента.
Как объясняет Лайонс, этот комментарий дополняет комментарии в источнике. Понять код можно и без дополнительных комментариев, и читателю рекомендуется делать это и читать примечания только по мере необходимости. В комментарии также упоминается, как можно улучшить код.
Печально известный программный комментарий "Вы не должны этого понимать" находится в строке 2238 исходного кода ( Lions' Commentary , стр. 22) в конце комментария, объясняющего механизм обмена процессами. Он относится к строке 325 файла slp.c. [9] Исходный код гласит: [10] [11]
/* * Если новый процесс остановился, потому что был * выгружен, установите уровень стека на последний вызов * savu(u_ssav). Это означает, что return , * который выполняется сразу после вызова aretu , * на самом деле возвращает из последней процедуры, которая * сделала savu. * * От вас не ожидается понимания этого. */ if ( rp -> p_flag & SSWAP ) { rp -> p_flag =& ~ SSWAP ; aretu ( u . u_ssav ); }
Основная причина, по которой этот фрагмент кода было трудно понять, заключалась в том, что он зависел от странности способа, которым C-компилятор для PDP-11 сохранял регистры в вызовах процедур. Этот код не работал при портировании на другие машины и его пришлось перепроектировать в версии 7 UNIX . [12] Деннис Ритчи позже объяснил значение этого замечания: [10]
«От вас не ждут, что вы это поймете» было задумано как замечание в духе «Этого не будет на экзамене», а не как дерзкий вызов.