Страницы: -
1 -
2 -
3 -
4 -
5 -
6 -
7 -
8 -
9 -
10 -
11 -
12 -
13 -
14 -
15 -
16 -
17 -
18 -
19 -
20 -
21 -
22 -
23 -
24 -
есьма сложными и в значительной мере зависят от
имеющейся инфраструктуры. Возьмем системные вызовы Write (запись) и Read
(чтение). Для записи на диск и чтения с диска нужно создать драйвер
дисковода. Возьмем вызов Open (открыть). Нужно создать весь уровень файловой
системы, который будет анализировать имена и определять, где что лежит на
диске. На один этот системный вызов ушло несколько месяцев. Но когда он был
уже готов, тот же самый программный код можно было использовать и для других
функций.
Так шла разработка на ранних этапах. Я читал стандарты в руководствах к
Sun OS и других книжках, брал системные вызовы один за другим и старался
написать что-нибудь работающее. Это было довольно изнурительно.
А все потому, что, когда ничего не происходит, трудно оценить объем
сделанного. Можно писать маленькие тестики, которые будут проверять то, что
ты только что добавил. Но при этом реально ничего не выполняется. Через
некоторое время я бросил перебирать системные вызовы по списку и перешел к
другому методу. Получилась довольно полная система, и мне захотелось
выполнить настоящую программу. Первым делом нужно запустить оболочку, потому
что без нее довольно трудно запустить что-нибудь еще. А кроме того, оболочка
сама по себе содержит множество системных вызовов, которые все равно
понадобятся. Стоит ее запустить, и можно получить текущий список системных
вызовов, которые еще не реализованы.
В Unix оболочка -- это своего рода мать всех программ. Она всегда
наготове, чтобы запустить любой другой бинарник. (Бинарник -- это программа,
составленная из нулей и единиц -- на языке, который понимает машина. Если вы
написали программу на каком-то языке программирования, нужно откомпилировать
исходный код, чтобы получить бинарник.) Прежде всего оболочка позволяет вам
войти в систему. Ну хорошо, в реальной Unix-системе по традиции первая
программа, которую вы запускаете, это init, но для работы init необходима
большая инфраструктура. Это своего рода контроллер происходящего. Но если у
вас нет ничего работающего, то вам и init не нужна.
Поэтому мое ядро запускало не init, а оболочку. К тому времени я
реализовал около двадцати пяти системных вызовов и, как я уже писал, это
была первая настоящая программа, которую я хотел запустить. Оболочку я сам
не писал. Я загрузил к себе на диск клон Bourne Shell, одной из исходных
оболочек Unix. Он бесплатно распространялся по Интернету, и его название
представляло собой плохой каламбур. Исходную оболочку написал чувак по имени
Bourne, поэтому клон назывался Bourne-Again Shell
(Bourne-Again произносится
как born again --
укрепившаяся в вере. -- Прим. пер). Обычно его сокращали до
bash.
Стоит начать загружать с диска настоящую программу, как обнаруживается
прокол в драйвере дисковода или в загрузчике, так что тот не понимает, что
считывает. Поэтому он выдает комментарии по ходу своих действий. Это очень
важно, потому что только так можно узнать, в чем беда.
Я дошел до той стадии, когда моя программа загружала оболочку и
выдавала на печать сообщение о каждом системном вызове, который содержался в
оболочке, но который я еще не реализовал. Я загружался, запускал оболочку, а
она выплевывала что-нибудь типа: "Системный вызов 512 не выполнен". День и
ночь я вчитывался в распечатки системных вызовов, пытаясь понять, какие я
написал неправильно. Но это было намного увлекательнее, чем идти по списку
системных вызовов и реализовывать их один за другим. Теперь продвижение было
более наглядным.
Наконец, в конце августа или начале сентября, оболочка заработала.
После этого все стало намного проще.
Это был важный момент.
Как только оболочка заработала, я почти сразу же смог откомпилировать
еще несколько программ. Оболочка была сложнее, чем, к примеру, программа
копирования ср или команда выдачи листинга каталогов Is. Все нужное уже было
сделано для оболочки, поэтому, когда она заработала, произошел резкий скачок
от практически нулевой отметки до ста, ведь все составные части уже были на
месте. В какой-то момент готовых компонент оказалось столько, что настал миг
типа "Да будет свет!", потому что до этого ничего по-настоящему не работало.
Я был страшно доволен. Особенно потому, наверное, что в то лето ничем,
кроме программирования, не занимался. И это не преувеличение. С апреля по
август в Финляндии лучше всего. Все плавают на лодках между островами,
загорают на пляжах, сидят в дачных саунах. Я же редко вообще знал, день
сейчас или ночь, рабочий день или выходной. Плотные черные занавески
отгораживали меня от почти круглосуточного солнечного света и вообще от
внешнего мира. В иные дни (или ночи?) я выпрыгивал прямо из постели на стул
перед компьютером, до которого было примерно полметра. Мой отец,
по-видимому, уговаривал маму заставить меня наняться на лето на работу. Но
ей было все равно: я ей не мешал. Вот Сара немного сердилась, что занят
телефон, когда я выходил в онлайн. (Она бы, вероятно, выразила эту мысль
несколько менее дипломатично.) Без всякого преувеличения можно сказать, что
у меня практически не было контактов с миром вне моего компьютера. Ну
хорошо, может, раз в неделю в окно стучал приятель, и если я не просматривал
в это время на экране какую-нибудь важную программу, то впускал его в дом.
(Это всегда был "он" -- вы помните, это было еще до того, как хакеры стали
популярны среди девушек.) Мы садились на часок попить чаю и посмотреть MTV в
нашей кухоньке. Теперь, когда я задумался, то начинаю припоминать, что
иногда выходил выпить пива или сыграть в снукер, если в окно стучался
кто-нибудь вроде Иоуко (я обычно зову его "Авутоном"). Но больше, честное
слово, в моей жизни ничего в то время не происходило.
И я ни в малейшей степени не чувствовал себя жалким бледным яйцеголовым
неудачником. Оболочка работала, а это значило, что я фактически построил
основу работоспособной операционной системы. И я получал удовольствие.
Когда оболочка заработала, я стал тестировать встроенные в нее
программы. Потом я накомпилировал достаточно новых программ, чтобы начать
делать что-то настоящее. Я компилировал все в Minix, но перенес оболочку в
специальный раздел, который создал для новой операционной системы. Про себя
я называл ее Linux.
Честное слово, я никогда не собирался выпускать ее под именем Linux,
потому что это казалось мне слишком нескромным. Какое имя я приготовил для
окончательной версии? Freax. (Поняли? Freaks -- фанаты -- и на конце х от
Unix.) На самом деле некоторые ранние файлы проекта -- файлы, где
описывается, как компилировать исходники -- около полугода содержали
название Freax. Но это не имело особого значения. В то время мне не нужно
было название, потому что я не собирался ее никому показывать.
VIII.
From: torvaldsSklaava.Helsinki.Fi (Linus Benedict Torvalds)
To: Newsgroups: comp.os.inix
Subject: Чего вам больше всего не хватает в minix?
Summary: небольшой опрос для моей операционной системы Message-ID:
<1991Aug25.205708.9541@klaava.Helsinki.Fi>
Привет всем пользователям minix! Я тут пишу (бесплатную) операционную
систему (любительскую версию -- она не будет такой большой и
профессиональной, как gnu) для 386-х и 486-х AT. Я вожусь с этим с апреля, и
она, похоже, скоро будет готова. Напишите мне, кому что нравится/не нравится
в minix, поскольку моя ОС на нее похожа (кроме всего прочего, у нее -- по
практическим соображениям -- то же физическое размещение файловой системы).
Пока что я перенес в нее bash (1.08) и gсс (1.40) , и все вроде
работает. Значит, в ближайшие месяцы у меня получится уже что-то работающее,
и мне бы хотелось знать, какие функции нужны большинству. Все заявки
принимаются, но выполнение не гарантируется : -)
Линус (Torvalds@klaava.Helsinki.fi)
PS. Она свободна от кода minix и включает мультизадачную файловую
систему. Она НЕ переносима (используется переключение задач 386 и пр.) и,
возможно, никогда не будет поддерживать ничего, кроме АТ-винчестеров --
потому что у меня больше ничего нет : - (.
Наиболее рьяные энтузиасты Minix встрепенулись. Мне прислали не так
много заявок по поводу ее функций, но зато были другие сообщения.
>Расскажи поподробней! Ей нужен MMU?
Ответ: да
>Какая часть написана на Си? Какие будут трудности
>при переносе? Кто тебе поверит про машинную
>зависимость ;-) , я вот хочу ее перенести к себе на
>Amiga.
Ответ: она в основном написана на Си, но многие скажут, что это не
настоящий Си. В ней использованы все особенности 386-го, которые я смог
обнаружить, потому что хотел попутно разобраться в его работе. Некоторые из
моих файлов на Си сильно смахивают на ассемблер.
Как я уже писал, она использует MMU как для страничной подкачки (пока
не на диск), так и для сегментации. Именно из-за сегментации она
ПО-НАСТОЯЩЕМУ зависит от 386-го (у каждой задачи есть 64-мегабайтный сегмент
для кода и данных - максимум 64 задачи на 4 Гб. Если нужно больше 64 Мб на
задачу -- будут проблемы).
Несколько человек даже предложили стать бета-тестерами.
В итоге разместить ее в Интернете было просто естественно. Я привык
обмениваться программами именно так. Поэтому вопрос был только один -- на
каком этапе я решусь показать ее людям? Или точнее: когда она будет
достаточно готова, чтобы мне нечего было стыдиться?
Вообще-то мне хотелось иметь компилятор и настоящую среду, чтобы можно
было писать программы прямо в Linux, без помощи Minix. Но я был так горд,
когда у меня заработала оболочка gnu, что был готов всем это показать. И еще
мне хотелось получить отклики.
К тому моменту, как заработала оболочка, у меня было несколько
элементарных бинарников, которые я скомпилировал для операционки. Делать с
ними пока было особенно нечего, но уже было видно, что система похожа на
Unix. На самом деле она работала, как увечная Unix.
И вот я решился ее выложить. Я не делал публичных объявлений, а просто
написал пятерым-десятерым хакерам на личные адреса, что она лежит на
FTP-сайте. В числе прочих я написал знаменитому среди фанатов Minix Брюсу
Эвансу и Ари Лемке. Я выложил исходники самой Linux и еще несколько
бинарников, чтобы можно было хоть что-то делать. Я сказал, что нужно, чтобы
запустить все это хозяйство. На машине должна была стоять Minix (версия 386)
и нужен был компилятор GCC. Причем на самом деле нужна была моя версия GCC,
поэтому ее я тоже выложил.
Существуют правила нумерации версий. Это вопрос психологический. Когда
вы считаете, что программа по-настоящему готова -- это версия 1.0. А до
этого вы нумеруете версии так, чтобы было видно, сколько еще предстоит
потрудиться до выпуска 1.0. Из этих соображений я положил на FTP-сайт версию
0.01. Чтобы все знали, что она мало на что пока годится.
Эту дату я хорошо помню: 17 сентября 1991 года.
Не думаю, чтобы ту версию проверяло больше одного-двух человек. Для
этого нужно было возиться с установкой специального компилятора, выделить
пустой раздел, чтобы использовать его для загрузки, откомпилировать мое ядро
и запустить оболочку. А кроме запуска оболочки, делать было особенно нечего.
Можно было распечатать исходники -- всего 10 000 строк, т.е. меньше ста
страниц, если печатать мелким шрифтом. (Сейчас там уже порядка 10 миллионов
строк.)
Я стал распространять свою операционку прежде всего, чтобы доказать,
что все это не пустая болтовня -- я действительно что-то сделал. В Интернете
много болтают. О чем бы ни шла речь -- об операционке или о сексе -- многие
в киберпространстве просто вешают лапшу на уши. Поэтому важно после того как
ты растрезвонил, что пишешь операционку, иметь возможность сказать: "Вот --
я ее и правда сделал. Я не трепло -- можете сами посмотреть".
Ари Лемке, который организовал для нее РТР-сайт, невзлюбил название
Fгеах. Ему больше нравилось другое рабочее название, которое я использовал
-- Linux. Поэтому он назвал мой каталог pub/OS/Linux. Признаюсь -- я не
особенно сопротивлялся. Но инициатива была его. Поэтому я могу честно -- или
почти честно -- сказать, что не был нескромным. Я тогда подумал, а что --
хорошее название, и всегда можно будет на кого-нибудь свалить. Что я и
делаю.
Как я уже говорил, моя операционка была не очень полезной. Она легко
рушилась, если переполнить память или еще что-то не так сделать. Даже если
вы ничего плохого не делали, система рушилась после более-менее
продолжительного периода работы. Она тогда и не предназначалась для работы.
На нее можно было только любоваться. И восхищаться ею.
То есть просто экспонат для группы людей, которые интересуются
разработкой операционных систем. Для горстки технарей с узкой
специализацией.
Реакция была неизменно положительная, но при этом так же неизменно
звучало: "А вот хорошо бы она еще это делала" или "Смотрится классно, но на
моем компьютере не работает" .
Помню одно сообщение, где говорилось, что автору очень понравилась моя
операционка, он не меньше абзаца описывал, какая она классная. Потом
объяснял, что она только чтоуничтожила его жесткий диск и что мой драйвер
дисковода с придурью. Даже потеряв все свои файлы, он все равно был настроен
очень положительно. Такие сообщения было читать очень приятно. Это был отчет
об ошибках в программе, которая все у него вверх дном перевернула.
Именно таких сообщений я и ждал. Я исправил кое-какие глюки (например,
система перестала зависать, когда кончалась память). И еще я сделал большой
шаг вперед -- перенес в нее компилятор GCC, так что можно было компилировать
небольшие программы. Теперь пользователям не нужно было перед запуском
операционки загружать мой компилятор GCC.
IX.
Вы скорбите о тех временах, когда мужчины были настоящими мужчинами и
сами писали драйверы устройств?
Из объявления о выпуске Linux 0.02
В начале октября была выпущена версия 0.02 с исправлением ошибок и
добавлением некоторых программ. В ноябре я выпустил версию 0.03.
К концу 1991-го я был уже готов остановиться. Я сделал много интересных
вещей. Не все работало идеально, но в программистском мире люди часто теряют
интерес к проекту, когда решены основные задачи. Со мной примерно так и
было. Кому интересно вылавливать блох? Удержали меня две вещи: во-первых, я
нечаянно запортил раздел с Minix, а во-вторых, мне продолжали приходить
отклики.
В те времена я загружался в Linux, но использовал Minix как основную
среду разработки. Под Linux я в основном получал с университетского
компьютера почту и новости с помощью своей программы эмуляции терминала.
Поскольку университетская машина была постоянно занята, я написал программу
автодозвона. Но в декабре я по ошибке позвонил вместо модема на винчестер.
Вместо параметра auto-dial /dev/ttyl (последовательный интерфейс) я указал
/dev/hdal (винчестер). В итоге я нечаянно попортил некоторые важные части
раздела, где у меня сидела Minix. Теперь я не мог ее загружать.
Это был решающий момент: можно было переустановить Minix или принять
вызов и объявить, что Linux может полностью ее заменить. Я написал программы
для компиляции Linux внутри нее самой и каждый раз, когда мне требовалась
Minix, просто добавлял в Linux нужную функцию. Это большой шаг вперед, когда
отказываешься от исходной базовой среды и переходишь на самообеспечение.
Поэтому в конце ноября я выпустил версию 0.10. А еще через несколько недель
-- 0.11.
Вот тут системой стали по-настоящему пользоваться несколько человек. До
этого мне приходили сообщения только о мелких ошибках -- достаточно было
исправить одну строку. Теперь же мне стали присылать заявки на новые
функции. Помню, мне пришлось выйти из дома, чтобы увеличить ОЗУ с 4 до 8
мегабайт. Еще пришлось купить сопроцессор для операций с плавающей точкой,
потому что некоторые спрашивали, поддерживает ли Linux сопроцессоры. Новое
железо позволило проводить вычисления с плавающей точкой.
Помню, в декабре мне написал один немец. Он пытался скомпилировать
ядро, но не мог запустить GCC, потому что у него было всего два мега, а
компилятору тогда было нужно больше мега. Он спрашивал, нельзя ли
компилировать Linux какой-то другой программой, которая не требует столько
памяти. И хотя у меня таких проблем не было, я решил написать новую функцию
специально для него. Это называется страничной подкачкой на диск и дает
возможность в дополнение к имеющейся памяти использовать винчестер. Дело
было в канун Рождества 1991 года. Помню, как 23 декабря старался реализовать
подкачку. К 24-му она вроде заработала, но время от времени сыпалась.
Наконец, 25-го все было готово. Это была первая возможность, которую я
добавил по чужой заявке.
Я очень этим гордился.
Конечно, я ничего не сказал родным, когда мы собрались у папиной мамы
(Фармор) на праздничный обед с окороком и селедкой. Каждый день полку
линуксоидов прибывало, и я стал получать сообщения из таких стран, в которых
мечтал побывать (вроде Австралии и США). Не знаю почему, но мне не хотелось
обсуждать эти дела с родителями, сестрой или другими родственниками. Они же
не разбирались в компьютерах. Наверное, я думал, что они ничего не поймут.
С их точки зрения, я просто занимал телефон своим модемом. Раньше в
Хельсинки ночью был пониженный тариф, поэтому я старался большую часть
делать дома по ночам. Но иногда я занимал телефон целый день. Я пытался
раздобыть второй номер, но мы жили в старом доме, и запасных линий у них не
было, а новые проводить они не собирались. В то время Сара только и делала,
что разговаривала с друзьями по телефону. По крайней мере, мне так казалось.
Поэтому у нас периодически возникали стычки. Виртуальные. Во время ее
разговоров я принимался дозваниваться модемом, и у нее в трубке слышалось
звяканье. Это ее раздражало, но так я давал ей понять, что мне очень-очень
нужно считать почту. Я и не говорю, что был хорошим братом.
Подкачка на диск была довольно значительной вещью -- в Minix ее не
было. Я включил ее в версию 0.12, выпущенную в первую неделю января 1992-го.
Linux тут же стали сравнивать не только с Minix, но и с Coherent, небольшой
Unix-системой, выпущенной компанией Mark Williams. Добавление подкачки сразу
вывело Linux вперед.
Тут-то и начался ее стремительный взлет. Люди стали переходить от Minix
к Linux. В то время Linux еще многого не умела из того, что умела Minix, но
самые ходовые вещи в ней были. Да еще эта новая возможность, которую все
сразу оценили: подкачка позволяла запускать такие большие программы, для
которых фактически не было памяти. Когда память кончалась, можно было взять
использованный кусок, сохранить его на винт, запомнить, куда, и снова
использовать кусок памяти. Это было важным событием в начале 1992 года.
Именно в январе пользоваться Linux стали не только те 5, 10, 20
человек, с кем я переписывался и кого знал по именам, но и сотни неизвестных
мне людей. Среди пользователей Linux появились незнакомцы, и это было
прикольно.
Примерно в это время по Интернету гуляла утка. Какой-то мальчик по
имени Крейг якобы умирал от рака, и л