Хотя многие считают Linux современной операционной системой, она воплощает в себе идеи, которым уже более 50 лет. Рассмотрим некоторые из этих давних концепций и причины, по которым они сохраняются в современных дистрибутивах Linux.

Структура каталогов

Древовидная структура файлов

Возможно, вы не задумываетесь о структуре каталогов, но именно она поразила специалистов в области информатики, когда в 1974 году в журнале Communications of the ACM была опубликована статья «Система разделения времени Unix» (The Unix Time-Sharing System). Файловая система имела иерархическую структуру — воплощая новаторскую для того времени концепцию, которая сегодня воспринимается как нечто само собой разумеющееся.

Структура каталогов и по сей день является характерной чертой Unix-подобных систем, включая Linux. Каталоги расходятся от центрального корневого (обозначаемого как /) подобно тому, как ветви дерева отходят от ствола. В отличие от DOS или Windows, здесь нет буквенных обозначений дисков. Это означает, что дерево каталогов может охватывать несколько устройств: например, физический жёсткий диск и SSD, стационарный накопитель и USB-флешку или SSD и оптический диск. Такая организация обеспечивает файловой системе высокую гибкость.

Процессы

Одновременный запуск различных процессов из командной строки

Одной из отличительных черт Unix всегда была многозадачность, в то время как другие системы, например MS-DOS, были однозадачными. Именно она позволила реализовать такие функции, как управление задачами (job control).

Задачу можно перевести в фоновый режим, что удобно для процессов, которые, как известно, требуют длительного времени выполнения:

some_long_process &

Эта команда позволяет сохранить контроль над командной оболочкой (shell), переводя процесс some_long_process в фоновый режим. В противном случае вы не смогли бы выполнять другие действия, пока этот процесс работал.

Если вы запустили процесс в оболочке и он выполняется слишком долго, можно нажать Ctrl+z, чтобы приостановить его и вернуть управление оболочкой. 

Приостановленный процесс можно перевести в фоновый режим командой bg:

bg

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

Конвейеры

Перенаправление ввода и вывода способами, о которых вы даже не подозревали

Концепция «конвейера» (pipeline), пожалуй, является самым значимым наследием Unix в системе Linux. Программы Unix позволяют перенаправлять свои потоки ввода и вывода непосредственно в командной оболочке (shell).

Программа может направлять свой вывод в файл — например, утилита ps, перечисляющая все процессы в системе:

ps aux > allprocs

Также можно перенаправить ввод из файла — например, при запуске скрипта оболочки:

sh < command_list.sh

Но именно конвейер, вероятно, играет самую важную роль. Он передаёт вывод одной команды на вход другой. Один из моих любимых примеров — забавный трюк, превращающий вывод команды fortune в радужный текст:

fortune | lolcat

В рекламном фильме Bell Labs 1982 года можно увидеть, как Брайан Керниган, один из создателей языка C, буквально на лету создаёт программу проверки орфографии, используя уже существующие утилиты командной строки.

Открытый исходный код на языке C

C — ключ к запуску программ на разных типах компьютеров

Хотя сама система Unix не была проектом с открытым исходным кодом, университеты, получавшие её от Bell Labs, зачастую имели доступ к исходному коду. Одной из особенностей, отличавших Unix от других операционных систем, было то, что её основные компоненты были написаны на языке высокого уровня — языке C, созданном Деннисом Ритчи и ставшем популярным благодаря первому изданию книги «Язык программирования C» (авторы — Брайан Керниган и Деннис Ритчи; книга известна под аббревиатурой K&R).

Ранее операционные системы писались на языке ассемблера. Программы на ассемблере работают быстро, но писать их утомительно, к тому же они жёстко привязаны к конкретному компьютеру или архитектуре. Поскольку C — это компилируемый язык, для запуска программы, написанной на C, на другом компьютере достаточно было лишь создать компилятор для этой машины.

На практике же переносимость часто оставалась лишь теоретической. Хотя скомпилировать программу на C для запуска на другом компьютере было относительно несложно, на ранних этапах большинство разработчиков писали программы в среде Unix и зачастую воспринимали особенности этой системы как должное. В результате такие программы не работали в других операционных системах. Одним из способов решения этой проблемы был перенос всей среды на новый компьютер — иными словами, портирование Unix на эту машину. Поскольку C был языком высокого уровня, это можно было сделать, изменив лишь машинно-зависимые части кода.

Поддержка пользователей

В мире Linux можно обойтись помощью друзей

Во времена разработки Unix компания AT&T — материнская компания Bell Labs — действовала в рамках мирового соглашения, ограничивающего её деятельность в обмен на фактическую монополию на телефонную связь в США. На практике это означало, что AT&T не могла выводить на рынок никакие продукты, кроме услуг телефонной связи. Следовательно, компания не имела права продавать Unix как коммерческий продукт. Через свою дочернюю структуру Western Electric компания AT&T предоставляла Unix университетам и исследовательским лабораториям практически по себестоимости — за плату, едва покрывавшую расходы на пересылку магнитных лент.

Это также означало, что AT&T не обеспечивала техническую поддержку. Пользователям Unix приходилось самостоятельно заниматься исправлением ошибок и обновлением системы. Они объединялись в группы — например, в знаменитую Usenix, которая со временем сама по себе превратилась в крупную конференцию по компьютерным наукам. Студенты и аспиранты, изучающие информатику, успешно справлялись с возникавшими задачами. Одним из ответвлений этого движения стала система BSD (Berkeley Software Distribution), созданная в Калифорнийском университете в Беркли в конце 1970-х годов.

И сегодня можно получить помощь и поддержку в сообществах пользователей, на форумах и в тематических разделах Reddit.

Использование маломощного оборудования

Найдите старый компьютер (хотя, возможно, и не PDP-7)

Пользователи Linux гордятся тем, что могут запускать дистрибутивы этой системы на устаревшем оборудовании — например, на старом ноутбуке; однако эта традиция восходит ещё к самой Unix. Когда Кен Томпсон и Деннис Ритчи начали работу над Unix, это происходило после того, как компания Bell Labs вышла из проекта MULTICS — системы, которую можно назвать «Windows Vista своего времени». Это был амбициозный проект, призванный создать то, что мы сегодня назвали бы «облачными вычислениями»: своего рода вычислительную инфраструктуру, доступную и надёжную, подобно электросети или водопроводу (по крайней мере, в США).

Проект MULTICS вышел за рамки бюджета и затянулся, хотя в 1970-х годах система всё же появилась на мейнфреймах. В распоряжении Томпсона и Ритчи было менее мощное оборудование. Они взяли в работу компьютер PDP-7 производства Digital Equipment Corporation. Это было сродни тому, как сегодня находят новое применение старому ПК.


Продолжая традиции Unix

От иерархической структуры каталогов до переносимого кода на языке C — Linux сохраняет множество традиций, заложенных в Unix. Эта система опирается на лучшие достижения прошлого, устремляясь при этом в будущее.