История

Когда компьютеры были очень большие, а программы очень маленькие... Разработка ПО была неотъемлемой частью разработки компьютера. Программное обеспечение было жестко привязано к аппаратному обеспечению конкретной машины. Именно тогда и появились сами термины "аппаратное обеспечение", "программное обеспечение".

Простая мясорубка состоит из железяк, и работает сама по себе. Элементы компьютера, даже правильно собранные, сами по себе не заработают. Для работы компьютера необходимы программы. Аппаратное обеспечение должно быть скреплено прораммным.

В те времена, когда программное обеспечение было состоявляющей частью компьютера, оно разрабатывалось с той же скоростью и в то же время, что и апаратное обеспечение. Время проектирования ЭВМ Мир, начиная с теоретических разработок и заканчивая эксплуатационным образцом, составило 12 лет. И на протяжении всего этого времени параллельно с аппаратным разрабатывалось программное обеспечение, именно для "скрепления" аппаратуры, а не для решения пользовательских задач. Пользователи для решения своих задач писали программы сами. Заграницей использовались аналогичные подходы. Надо заметить, что в то время, в отличии от нынешней ситуации, Советский Союз опережал весь мир в области разработки вычислительной техники.

Неотъемлемость программного обеспчения от аппаратного можно наблюдать и в некоторых современных устройствах. Например,в неуправляемых свитчах. В них нет операционной системы, это почти что просто хабы, тем не менее, в них есть регистры для хранения MAC-адресов, реализация технологии защиты от spoof'инга, и т. п.

Исторической и идеологической предшественницей GNU/Linux является операционная система UNIX. История UNIX весьма обширна и интересна, но мы заострим вниманиt лишь на трех вещах, её касающихся.

Для себя

Исторически операционная система UNIX разрабатывалась для себя. Ребята работали над большим проектом под названием MULTICS. Кстати, название UNIX придумал наш Брайан Керниган, он решил просто выпендриться, у них там MULTICS, а у нас UNIX. И вот они работали над большим проектом, но у них был исследовательский зуд в голове, им выдали машину, которая находилась в подвале и была уже списана, PDP-7, которую никто уже не использовал, а им разрешали пользоваться, такая слабенькая машина. Один из них, Кен Томпсон, только что написал Star Trek, которая во всех мемуарах называется Space Travel, т.к. Star Trek это копирайт соответствующей команды, которая выпускает соответствующий сериал (гримасы современности), а он хотел играть в эту игрушку и отлаживать ее, а Денис занимался языками, он был теоретизированный товарищ, он хотел разрабатывать свой язык программирования под названием A, потом он его хотел дорабатывать и назвал его B, вобщем, много всего нужно было делать одновременно. Поэтому возникла задача разделения времени, сделать так, чтобы Кен шпарился в свой Space Travel, а в это время Денис редактировал исходный текст своего компилятора языка B. Таким образом, довольно давно, в конце 60-х -- начале 70-х сразу появилось разделение той среды, в которой вы работаете, на ядро, которое предоставляет базовые функции по разделению ресурсов компьютера. Уже тогда стало очевидным, что если вы хотите, чтобы несколько разных, не говорю людей, хотя тогда уже было запланировано несколько работающих людей, но даже несколько разных задач решались в одно и то же время на одном компьютере, необходимо сделать так, чтобы между этими задачами существовало грамотное разделение ресурсов. Под ресурсами понимается машинное время на процессоре, общая оперативная память и общие внешние устройства. Все это требовалось разделять между разными выполняющимися задачами, чтобы они друг другу не мешали. И все это надо было реализовать внутри ядра, т.к. понятно, что это та часть ПО машины, которой обычному пользователю заниматься не надо, ему должны просто предоставлять инструменты по разделению.

Ядро по сути, это всего лишь одна большая библиотека, которая предоставляет программный интерфейс для множества разных действий, связанных с манипуляцией этими самыми ресурсами. Можно ресурс заказать, можно освободить, можно попросить доступ и не получить его, и т.д. Для того, чтобы воспользоваться программным интерфейсом ядра, нужно было написать специальную программу, которая бы обращалась бы к ядру посредством т.н. системных вызовов (system call, 2-я секция manual). Каждый такой инструмент, который тем или иным способом позволят воспользоваться функциями ядра, получил название утилиты. Фактически, набор утилит по замыслу авторов должен был на основе программного интерфейса реализовать, скажем так, командный интерфейс к ядру. Одна для манипуляции файлами, другая для печати, и т.д.

[ПРИКРЕПЛЁННЫЙ ФАЙЛ]

Кен Томпсон и Денис Ричи даже что-то успели сделать в этом направлении, потом, в начале 70-х, даже начали куда-то внедрять, у них даже появился целый отдел, начальник его был товарищ, которая очень увлекался макроязыками, и он хотел что-то макроязыкастое сделать, фактически ему принадлежит идея конвейера. Это он придумал, что нужно не макроподстановки, не скобочки, как с Лиспе, а потоковую передачу данных делать. Хотя, до сих пор нет нормального способа осуществить ветвление, его даже графически нет. Если мы имеем дело с интерфейсом командной строки, то ничего сложнее конвеера пользователю предлагать не надо, иначе он запутается. Потом присоединился известный популяризатор науки Брайан Керниган, который ребятам предложил две вещи.

К той поре были уже языки программирования, например упомянутый PL/I, FORTRAN, на котором программировались математические вычисления, но их задача была не системная, а пользовательская. Помните я говорил, готовая машина отдавалась пользователю, и пользователь писал программы на Фортране, чтобы что-то вычислить. FORTRAN -- это Formula Translator, первый в мире высокоуровневый язык программирования, придуманный математиками, которым было лень писать программы на языке машинных кодов, хотя, в методической литературе, например, "Понедельник начинается в субботу", именно этот процесс и описан, по поводу одной заковыристой команды с Кивриным советовались, это была команда машинного языка. ALGOL, существовавший с 60-х годов был довольно теоретическим языком, не имевшим нормальной реализации, по причине некоторых своих неустранимых свойств, пресловутый PL/I, может быть, тогда уже был, но он был такой новогодней ёлкой, в него было насовано много интересных идей, главным образом пользовательских. А Керниган предложил во-первых, придумать специальный язык программирования, достаточно низкоуровневый, чтобы на нем можно было написать операционную систему, и, во-вторых, переписать большую часть ядра и практически все утилиты на этот язык программирования.

Потенциальным результатом этого была возможность портирования этой среды, этой операционной системы на компьютер с принципиально другой архитектурой. в 1972 году, кажется, было первое портирование операционной системы на компьютер Interdata-32, 32-разрядный, PDP-11 был 16-разрядный. Какая-то часть ядра, очень небольшая, которая отвечает за работу с аппаратурой, разумеется, оставалась на языке ассемблера, и до сих пор остается, а большая часть (логика), та, которой в общем все равно, была переведена на язык Си, и здесь начинается то, плоды чего мы пожинаем до сих пор, и поводу чего мы здесь собрались.

Переносимость программ

Здесь начинается одна совершенно замечательная возможность. Программный продукт -- операционная система, а уж тем более пользовательский программный продукт, перестал быть полностью ориентирован не только на один конкретный компьютер (а было и такое), но даже на конкретный тип компьютеров. Программный продукт стал портируемым. Это значит, что появилась возможность один раз его создавать, после чего сравнительно несложными операциями переносить с компьютера на компьютер, если они одинаковой архитектуры (буквально -- перенес, запустил, а она все еще работает), но даже если они разной архитектуры, то использовать компилятор с того же самого языка, перекомпилировать заново, и всё.

Здесь возникает одна очень важная вещь. В тот момент, когда жизненный цикл программного продукта полностью оторвался от жизненного цикла компьютера и даже класса компьютеров, стала очевидна пропасть, связанная с понятиями собственности на материальный объект и на программный продукт. Это началось в 70-е. В какой-то момент стало ясно, что в отличие от горшков, которые -- сколько хочешь произвести горшков, столько и нужно запасти глины, а если ты хочешь произвести в два раза больше одинаковых горшков, тебе нужно в два раза больше глины и энергии на обжиг, и т.д., а еще в два раза больше времени, чтобы их слепить, если ты их руками лепишь, то в программном продукте это все не так, и для того, чтобы сделать две копии одного и того же программного продукта, который будет работать на любой машине -- не нужно вообще ничего. Нужно вызвать утилиту копирования, она скопирует, и на этом расходы закончатся.

Стало очевидно, что, с одной стороны, переносимые программные продукты нельзя мерить той же меркой, что и материальные, тут явно какой-то продукт нематериальный, интеллектуальный, а с другой стороны, стала очевидной еще более важная вещь. Для того, чтобы написать хорошую программу, почти всегда разумно для этого привлечь усилия нескольких разных людей, каждому из которых нужно разное от этой программы. Вы написали программу, которая берет некий текст и форматирует его для печати на принтере IBM-(какой-то, под который впервые в мире была сделана такая отдельная программа), потом выяснилось, что

То есть, есть пользователи, которым от программного продукта нужно одно. есть пользователи, которым от него нужно другое и эти пользователи согласны дописать кусок программы, чтобы она стала делать и то, что им нужно, тоже.

Коллективная разработка

Фактически, после того, как система UNIX стала более или менее успешной, именно так шло ее развитие в течение порядка десятка лет. Люди что-то писали, какие-то программы, записывали их на магнитные ленточки, встречались на конференциях, передавали друг другу эти ленточки, дома они эти ленточки распаковывали, там оказывались программы, они их компилировали, находили в них ошибки, дорабатывали, снова записывали на ленточки, и так друг с другом обменивались. В особенности это касалось даже не столько того проекта, за которым стояли Кен Томпсон и Денис Ричи, все-таки это была Bell Labs, и то что ни делали было производственным продуктом и принадлежало компании AT&T. В большей степени это касалось UNIX-подобной операционной системы, которая разрабатывалась американскими университетами -- BSD (Berkley System Distribution). То есть, уже подразумевалось, что много людей пишут много программ, потом программы собираются в блок, этот блок называется distribution и распространяется. Авторы программ распространяли их затем, чтобы к ним присоединились те, кто хочет что-то подправить. Эта формы разработки программного продукта даже в те времена, когда для того, чтобы передать друг другу исходный текст, нужно было записать его на ленточку и ее передать друг другу в материальном виде, например, встретиться на конференции, переписать, или послать бандеролью, даже в те времена эта форма активно показывала себя с положительной стороны, потому что программами занимались ученые, их было немного, они встречались и постоянно тусовались на всяких конференциях, и на них обменивались не только идеями, но и неким содержанием.

Это счастье продолжалось до начала 80-х годов (или конца 70-х), в течение которых стало очевидно, что нарождающася операционная система UNIX, и ее всякие подобия, обладают двумя очень важными с точки зрения бизнеса свойствами:

Лицензионно-правовые аспекты

Это все привело к т.н. unix wars, войнам в стане правообладателей. Тут-то выяснилось, что большинство программного кода, который написан в этой ОС, кому-нибудь да принадлежит, более того, выяснилось, что по большей части он принадлежит работодателю. Если работник пишет программу не в свободное от работы время где-то в подвале, а в рабочее время за деньги работодателя, то, по определению, если иного не оговорено в контракте, программа является собственностью работодателя. Это вошло в резкое противоречие с упомянутым академическим стилем разработки программ. Разработчики UNIX-систем не привыкли к тому, что они не имеют права показать ту программу, которую они сейчас разрабатывают, то есть еще не доделали, двум-трем десяткам своих коллег, чтобы кто-нибудь из них заинтересовался и предложил свою помощь и что-то там доделал. Одно дело, когда у тебя целое сообщество заинтересованных, другое дело, когда ты один на эти деньги все пишешь.

Мало того, выяснилось, что большая часть людей, участвовавших в разработке, не давали себе труда об этом задуматься, поэтому очень много исходного кода, который вошел в разные UNIX'ы, он то ли принадлежит кому-то, то ли не принадлежит никому, совершенно неизвестно, сделан он в рабочее или в свободное время, копирайта нигде не стоит, люди просто занимались своим делом, вот чего-чего а про копирайт они не думали.

В результате произошло в 80-х годах как произошёл стремительный рост UNIX-подобных систем как коммерческих, так и продолжалось развитие университетской ветки. Родовое дерево UNIX-систем занимает 24 листа A4, или даже больше (картинка).

Всё это совпало с тремя вещами:

программах, только этого не делаете. Вы сидите и программируете, вместо того, чтобы брать потом с этой программы 1000% дохода, из которых за вычетом налогов, 100% дохода положите себе в карман, вместо этого вы занимаетесь какой-то академической ерундой. Из этого можно сделать такой бизнес, от которого мир ахнет. И они тоже были в своём праве, любое место, где можно совершенно законным способом сделать много денег -- это место хорошее.

То есть, произошёл очевидный раскол на людей, которые хотели сохранить академический стиль разработки и продолжать заниматься исследованиями, как в остальном научном мире. Ученые собираются, что-то исследуют, публикуют статьи, и это всё, на что они претендуют. "Я первый опубликовался, это я придумал". А все остальные пользуются результатами их исследований. Иначе ученый сам не продвинется дальше, бывает нужна помощь исследователей совершенно из других областей, так оно все и продолжается. Это не просто ностальгия по старым временам, а сохранение научного подхода в области программирования. С другой стороны, в этом расколе другую сторону приняли люди, которые сказали, что это большие деньги, и бессмысленно их транжирить, вы можете организовать очень эффективное производство на эти 100% дохода, гораздо более эффективное, чем забесплатно.

К этому вопросу мы ещё вернёмся.

Указанные события имели место в 80-е года. С точки зрения развития программного производства, чтобы было понятно, 80-е годы выглядели как годы если не закостенения, то сильной остановки в плане стороны системно-технологической. Фактически 80-е почти все прошли под флагом "компьютер в каждый дом", разработки интерфейсной части, Макинтоши, DOS'ы с играми, потом Windows'ы, были еще отдельно игровые компьютеры. Технологически это топталось на месте или даже спускалось вниз, т.к. все домашние компьютеры были 8-битные, на которых даже полноценной ОС не было, там было "программное обеспечение". Почему? Потому что технология без исследований так вот не живет, она стоит, а исследования имеют академическую структуру. Что же касается другой стороны, то работа была из области: нарисовать кнопочку, заплатить художнику, заплатить мировому специалисту в области usability (Макинтош известен тем, что в нем работали за деньги практически все самые крупные на сегодняшний день специалисты в области usability).

К концу 80-х выполнилось необходимое условие для того, чтобы сформировалось свободное сообщество вокруг программных продуктов -- информационная связность, чтобы люди, которые хотят работать вместе, могли делать это так и тогда, как и когда им это удобно, без особенных расходов со своей стороны, чтобы не приходилось платить за свой энтузиазм.

К концу 80-х -- началу 90-х информационная связность дошла до того, что потихонечку стали вымирать такие вещи, как система UUCP, FIDO, какое-нибудь, у нас оно еще долго жило, но мы немножко в этом опоздали, телефонные BBS-системы, когда нет сети, а только модем, на который можно звонить. В какой-то момент даже перестали выпускать подборки свободного софта -- GNU distributions, потому что никому не было нужно, но в России всем этим вымирающим еще долго пользовались, т.к. в 90-е с было довольно туго с интернетом.

Связность возросла, и оппозиция между свободным и несвободным возросла еще сильнее, просто появились случаи серьёзного преследования копирайта, по поводу программного продукта, и т.п.

В конце 80-х такая же судьба накрыла одного из самых известных людей в области свободного софта, а именно Ричарда Мэтью Столлмана, который работал над lisp-машиной (это такой компьютер, у которого вместо языка ассемблера внутри lisp), он делал к ней "программное обеспечение" (именно его), а потом выяснилось, что все, что он написал, в том числе и текстовый редактор EMACS, который он писал, вообще-то, для себя и для своих нужд, принадлежит компании-работодателю, просто потому, что так или иначе это было сделано в рабочее время. Он не просто задумался о том, что ПО должно быть свободным, но и, и это главное его достоинство, и главное действие, которое он для нас всех сделал -- изобрёл свободное лицензирование программных продуктов.

Свободное лицензирование программ

Когда вы начинаете распространять свой программный продукт, вы его сопровождаете некоторыми условиями распространения, которые вы как правообладатель на него накладываете. При этом, ровно так, как наши коллеги (или оппоненты) к своему программному продукту прикладывают условие, что нельзя его копировать, модифицировать, дизассемблировать, ровно тем же способом на своей программе можно написать: "программу можно дизассемблировать, распространять, модифицировать, что угодно с ней делать, но ни в коем случае нельзя то, что вы будете распространять потом, закрывать, делать его менее свободным, чем то, что вы получили сами".

Путем некоторых упражнений с юристами (в Америке есть такое понятие -- авторская лицензия: человек может написать любую бредятину, ее подписать у нотариуса и она будет иметь законную силу, у нас такого нет), усилиями RMS и его коллег и соратников по Free Software Foundation эта лицензия была доведена до статуса юридической значимости в США и в очень многих других странах (либо сама лицензия значима, либо она принимается во внимание, как у нас в России). И вы распространяете свой программный продукт не просто, а с законной лицензией, которая запрещает делать с ним то самое, от чего способ разработки и ваше понимание того, как дОлжно пользоваться вашим программным продуктом, пострадает. У этого есть всякие бизнес преимущества, но об этом попозже.

Движение FSF было достаточно обширно, не хватало сущей малости -- ядра. Было BSD-ядро, я не знаю, почему оно не приглянулось ребятам из FSF. Никто не мешал его перелицензировать под GPL. Есть же Debian GNU/kFreeBSD. Это какие-то личные заморочки. Нужно понимать, RMS замечательная личность, он очень красноречив, харизматичен и говорит очень много правильных вещей, вместе с тем у него очень много всяких исторических наслоений очень странных, и периодически он начинает изрекать всякие глупости типа: "все про Линуса (Торвальдса) знают, считают, что свободные программы это Линус а мы, значит, типа, ничего не сделали. На самом деле все сделали мы, а Линус так только, ядро написал."

Непонятно, чем BSD-ядро не подошло FSF. Хотя, надо понимать, что к конца 80-х началу 90-х в BSD ситуация была абсолютно такая же, там тоже были свои unix wars, помните, почему закрыли ветку FreeBSD 1, потому же, почему был отозван BSD 4.4. В нем нашли большой кусок кода, который оказался кому-то принадлежащим, и этот кто-то сказал -- только через мой труп или через ваши деньги, и BSD 4.4 отозвали вышел BSD4.3-Reno, это BSD 4.4 + весь код, который можно было включить, и там произошли большие всякие перетряхи, а может лично с McKusick'ом RMS что-то не поделил...

Дело резко сдвинулось с мертвой точки, когда один финский парнишка, тогда еще студент (этнически, вроде бы не финн), Линус Торвальдс, экспериментировал с еще тогда несвободной (сейчас уже она свободная) учебной ОС MINIX, написанной столпом этого дела, Э. Танненбаумом. В мире программирования есть Кнут, в мире ОС есть Танненбаум, такого же масштаба величина, разве чуть-чуть меньше. Линус написал очень маленький unix, складной, умещающийся на дискете, но, в традициях тогдашнего времени она была несвободная, ее можно было изучать, но нельзя было на основе ее ничего делать, но нельзя было распространять, по университетам можно, а дальше не надо. Это было вполне в академическом стиле, потому что, в конце концов, никто не предполагал, что на основе этого кто-то будет что-то делать. Он это дело изучал, а у него была идея сделать свободную систему, чтобы оторваться от ограничений университетских обучающих систем, а сделать систему, на которой можно делать все. И вот он изучал-изучал, потом решил написать целое ядро на этот счет, свое собственное, т.к. свободные утилиты уже были в большом количестве, люди их писали и пользовались ими, а ядра не было, и, начав в 1991 году, за год он так преуспел, ему удалось написать ядро достаточно работоспособное, которым можно было пользоваться в реальности (уточнить даты и версии)

Первоначально там были взяты куски из MINIX'а, которые потом были выброшены по лицензионным соображениям (дольше всего держалась файловая система, которую нужно было переписывать от начала до конца, но её тоже переписали, слишком уж она была учебно-тренировочная).

В этом же 1991 (уточнить!) году научный руководитель сказал Патрику Фолькердинку: вот тебе ядро, вот утилиты, сделай операционку. И в качестве дипломной работы он сделал дистрибутив. Фактически совершилось то, что раньше делалось десятилетиями. За год было создано ядро имелось достаточно нормальное окружение (утилиты), и вот из этого ядра и этого окружения, которые взяты из очень разных мест, собраны по всему миру, некий студент дипломник за год создал то, что называется дистрибутив -- комплект ПО с ядром. Нечто, что можно засунуть в компьютер на сидюке, установить, и получится операционная система. Эта штука была беспрецедентная, потому что до тех пор, все-таки, производство операционных систем как таковых было уделом крупных производителей или доставалась вам по университетской программе, как BSD. В 1992 году он сдал диплом и забыл про него, хотелось человеку работать, бабки зарабатывать, а не собирать из свободных программ какие-то операционные системы. И что вы думаете, в течение всего 1992 года его все стали клевать: "Мужик, ты тут сделал свободную операционную систему, мы тут ее у себя уже поставили, вот оно уже у нас стоит. Ты куда вообще делся, давай, продолжай. Ты ж понимаешь, что ничего другого нету". В 1993 году вышел первый плановый релиз дистрибутива Slackware (так он стал называться к тому моменту). Еще двое там было у истоков.

После этого процесс производства и выдачи программного продукта под названием ОС перешел из многолетней практики в практику месяцев, потому что тут же начали появляться другие дистрибутивы, вторым, по-моему, был сразу RedHat, Там американцы сказали: "там в Европе с этим Линуксом что-то такое делают интересное, а у нас тут только унылое BSD, щас мы тоже что-нибудь сделаем." Пришла некая команда со словами: "о, это же новая технология, щас мы ею воспользуемся, у нас же все программируют, нам ничего не надо делать, только продавай себе услуги". В течение всех 90-х наблюдался рост числа различных дистрибутивов, получивших название "операционная система GNU/Linux", и теперь понятно, что дистрибутив -- это не сами эти свободные программы, которые и без того одинаковые, и безусловно не ядро (а Linux -- это как раз ядро). Дистрибутив и компания, которая его производит, это те люди, которые собираются и делают из разрозненного набора операционную систему со своими присущими ей свойствами (например, вы могли заметить, что Ubuntu и ALT Linux отличаются, хотя оба Линуксы).

По статистике заметно, что активный рост дистрибутивов Линукс начинается всякий раз, когда выходит очередная версия Windows. Вышла Windows 95 в 94 году, 94-95 год -- это время зарождения многих дистрибутивов. Когда люди поняли, что им нужно переучиваться (с DOS, Win 3.1, и т.п.), они решили, что будут переучиваться на Линукс, а не на Windows 95. То же самое происходило в 99-2000 году, то же самое происходило с выходом XP, когда это было, а уж с выходом Vista я уже вообще молчу, даже самые унылые люди смотрят в сторону чего угодно, накопить денег и купить Mac вместе с MacOS, или плюнуть на все и перейти на этот ужасный Линукс, но только бы не Vista.

В этой длинной истории есть несколько важных пунктов, которые будут помогать нам въехать в то, почему Линукс так ужасен и что нам с этим делать.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

21

1

1

1

1

PavelSutyrin, Allena, VsevolodKrishchenko