Пара 1: История ОС: Unix, GNU, MINIX, Linux и дистрибутивы

90 минут · 3 курс, ML.

Содержание и результат

Различать ядро, userland и дистрибутив; понимать происхождение GNU/Linux и подготовить Ubuntu WSL2.

План занятия

0–15: компьютеры без современной ОС и пакетная обработка. 15–35: time-sharing, Multics и Unix. 35–50: GNU, MINIX и самостоятельное ядро Linux. 50–65: компоненты системы и дерево дистрибутивов. 65–80: WSL2 и паспорт среды. 80–90: разбор Linux/Darwin/NT по фактическому выводу команд.

Практика выполняется в своей учебной папке и на localhost. Подготовка окружения описана в lab/README.md.

Windows, WSL2 и Ubuntu

WSL2 даёт Linux-среду внутри Windows.

Покажите два разных окна: PowerShell и Ubuntu. Команды wsl относятся к управлению средой из Windows, команды pwd и ls — к Linux. WSL2 использует Linux-ядро в управляемой виртуальной машине; Ubuntu — дистрибутив с пакетами и утилитами. Это не второй загрузочный раздел и не контейнер Docker. Учебный репозиторий храним в домашней папке Linux, а не в /mnt/c: меньше различий с сервером и проблем файловых операций.

Папка /mnt/c доступна, но Windows и Linux имеют разные правила путей и прав.

Подробный разбор: История ОС: от очереди заданий до GNU/Linux

Первые ОС управляли очередью работы

ОС появилась как способ использовать дорогое оборудование, а не как графический рабочий стол.

Первые ОС управляли очередью работы

На ранних компьютерах запуск программы и подготовка устройств требовали большого участия оператора. Пакетный монитор автоматизировал переход от одного задания к следующему, стандартный ввод/вывод и обработку сбоев. GM-NAA I/O для IBM 704, созданная в 1956 году, — один из классических ранних примеров: утверждение «самая первая ОС» зависит от того, какие мониторы и инструменты включать в определение. Time-sharing в 1960-х дал многим пользователям интерактивные сеансы, пока CPU быстро переключался между задачами. Это потребовало защиты памяти, планирования и учёта ресурсов. Multics исследовал богатую многопользовательскую систему; Unix возник позже в другой команде и с более компактным подходом. Интерфейс рабочего стола — сравнительно поздний слой. Серверная ОС прекрасно выполняет работу без графического окружения.

Практическое следствие: Пакетная обработка оптимизировала очереди; time-sharing дал интерактивность. Современная ОС объединяет множество таких механизмов.

Unix: реализация, семейство и влияние

Linux похож на Unix по интерфейсам, но не является переименованным MINIX.

Unix: реализация, семейство и влияние

В 1969 году в Bell Labs Кен Томпсон, Деннис Ритчи и коллеги начали Unix на PDP-7 после участия лаборатории в Multics. Система постепенно получила файловую модель, процессы, shell и инструменты; перенос значительной части на C в 1970-х облегчил развитие на другом оборудовании. BSD выросла из Unix-окружения в Беркли; её наследие участвует в Darwin/macOS наряду с Mach. MINIX, опубликованный Таненбаумом в 1987 году для изучения ОС, предоставлял небольшой Unix-подобный пример. Торвальдс работал с MINIX и в 1991 году создал собственное ядро для 386. Его код нельзя описывать как скопированный MINIX: влияние, совместимость и прямое происхождение исходников — разные отношения. Дискуссия Таненбаума и Торвальдса затрагивала монолитное ядро и микроядерный подход; это не история рождения Git.

Практическое следствие: Сплошные ветви BSD обозначают развитие кодовой семьи; связь MINIX и Linux поясняет учебную среду и влияние, без утверждения о копировании.

GNU появился раньше ядра Linux

Рабочая система состоит из ядра и множества пользовательских компонентов.

GNU появился раньше ядра Linux

Ричард Столлман объявил GNU в 1983 году; работа началась в 1984-м. Целью была свободная Unix-совместимая система. До появления Linux уже развивались компилятор GCC, shell, библиотеки и утилиты. Linux дал самостоятельное ядро, вокруг которого можно было собрать рабочую среду с GNU и другими проектами. Поэтому ls не «написан внутри Linux-ядра», а Bash не является его частью. В Ubuntu типичны GNU libc и GNU coreutils. Coreutils объединяет прежние fileutils, shellutils и textutils: среди команд ls, cp, mv, chmod, cat, sort, uniq, wc. Grep и sed — отдельные GNU-проекты, awk имеет несколько реализаций; всё это нельзя называть одним пакетом «gnuutils». Alpine часто использует musl и BusyBox, поэтому не любая система с Linux содержит полный GNU-userland.

Практическое следствие: Linux — ядро. Дистрибутив собирает совместимые версии ядра, библиотек, утилит, служб и приложений.

Дистрибутив выбирает интеграцию и обновления

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

Дистрибутив выбирает интеграцию и обновления

Debian появился в 1993 году; Ubuntu развивается с 2004-го как производная Debian со своими выпусками, репозиториями и интеграцией. Ubuntu-based редакции Mint и Zorin OS наследуют часть этой базы, но LMDE является отдельной Debian-based линией. Kali с 2013 года основан на Debian; прежний BackTrack имел другую историю: Slackware в ранних версиях, затем Ubuntu. Fedora и RHEL относятся к RPM-экосистеме, но имеют разные циклы развития и поддержки. Arch делает другой выбор в пользу rolling release, Alpine — компактности и другого userland. Даже общая основа не разрешает смешать репозитории Debian, Ubuntu и Kali: версии ABI, dependencies и настройки могут расходиться. На занятиях используем один выпуск Ubuntu, чтобы отделять Linux-механизмы от особенностей пакетов.

Практическое следствие: Дистрибутив задаёт пакеты, libc, init и политику обновлений.

Опыт: связать рисунок с наблюдением

uname -srm
cat /etc/os-release
command -v bash ls grep sed
ls --version | head -n 1
ps -p 1 -o pid,comm,args

В паспорте среды отдельно запишите ядро, дистрибутив, shell и PID 1. На Mac вместо /etc/os-release используйте sw_vers, а для BSD ls не запускайте --version. WSL2 устанавливается по инструкции первой пары; установка выполняется до занятия.

Источники подробного разбора

Команды и наблюдения

Окружение: PowerShell, затем Ubuntu.

wsl --install -d Ubuntu-24.04
wsl --update
wsl -l -v
# Open Ubuntu after restarting Windows
uname -r
cat /etc/os-release
whoami
pwd

Установку и перезагрузку лучше выполнить до пары. Linux-команды запускаются после открытия Ubuntu; комментарий в примере обозначает границу сред.

Ожидаемый результат: В PowerShell у Ubuntu VERSION = 2; в Ubuntu видны Linux-ядро, версия дистрибутива и домашняя папка /home/имя.

Вариант для macOS

Выполняется в Terminal macOS. uname -s покажет Darwin, а не Linux; uname -m обычно arm64 на Apple Silicon или x86_64 на Intel. Для Linux-специфичных лабораторных нужен Ubuntu в VM или работа с партнёром на WSL2.

sw_vers
uname -s
uname -m
whoami
pwd

Практика: Паспорт рабочего окружения

  1. Откройте Ubuntu и создайте ~/devops-course командой mkdir -p ~/devops-course.
  2. Сохраните в environment.txt версии ОС, ядра, имя пользователя и текущую папку.
  3. Сравните с соседом: какие различия важны для воспроизводимости?
  4. Нарисуйте путь будущего изменения: код → проверка → запуск → пользователь.

Результат: environment.txt и схема из четырёх шагов.

Проверка: WSL2 подтверждён из Windows; рабочая папка находится в /home; студент различает PowerShell и Bash.

Неисправность для разбора: Вместо команды Linux в PowerShell получена ошибка. Найдите границу окружений, не устанавливайте случайный аналог команды.

Решение и диагностика

В Ubuntu: mkdir -p ~/devops-course; cd ~/devops-course; { cat /etc/os-release; uname -r; whoami; pwd; } > environment.txt. В PowerShell отдельно wsl -l -v. Если установка недоступна из-за прав администратора или виртуализации, работа в паре с уже настроенным ноутбуком позволяет выполнить лабораторную; настройку исправляем до следующей пятницы.

Основные выводы

Самостоятельная работа

Завершить настройку WSL2, принести паспорт окружения. Подготовить один пример «работает только у меня».

Источники