Пара 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.
В 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 в 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
Практика: Паспорт рабочего окружения
- Откройте Ubuntu и создайте ~/devops-course командой mkdir -p ~/devops-course.
- Сохраните в environment.txt версии ОС, ядра, имя пользователя и текущую папку.
- Сравните с соседом: какие различия важны для воспроизводимости?
- Нарисуйте путь будущего изменения: код → проверка → запуск → пользователь.
Результат: 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. Если установка недоступна из-за прав администратора или виртуализации, работа в паре с уже настроенным ноутбуком позволяет выполнить лабораторную; настройку исправляем до следующей пятницы.
Основные выводы
- Unix дал влиятельную модель процессов, файлов и пользовательских инструментов.
- GNU и Linux развивались как самостоятельные проекты; дистрибутив собирает их с другими компонентами.
Самостоятельная работа
Завершить настройку WSL2, принести паспорт окружения. Подготовить один пример «работает только у меня».