Кризис UNIX way и фундаментальное IT-образование
В докладе делается попытка перечислить и систематизировать кардинальные изменения технологических составляющих таких операционных систем. Большинство таких изменений воспринимаются как отказ от «основополагающих принципов» построения ОС, известных как «путь UNIX». Верно ли, что современная вычислительная система должна быть основана на каких-то других, «более современных», принципах? Более десяти лет назад в своей работе «Операционная система UNIX» мы предложили обобщённый подход «проективной системы», формулирующий «основные положения» в терминах человеко-машинного взаимодействия, по возможности без описания реализации. По нашему мнению, этот подход (как и противопоставление «процедурной» организации) совершенно не потерял актуальности. Таким образом, смена технологий ставит проблему новой формулировки инвариантов, зато, по видимости, не обесценивает «путь UNIX» и обеспечивает преподавателя несколькими работающими вариантами реализации.
Призрак бродит
Технологические новшества Linux ⇒ кризис Linux ⇒ кризис UNIX way?
То, что было локальным расширением, становится системообразующим. Примеры:
rwxrwxrwx → MAC, SELinux, …;
- POSIX IPC → DBus;
- process groups (и не только) → cgropus;
rwxrwxrwx → Разные виды изоляции;
- текстовое журналирование с профилем → полное бинарное журналирование с поиском;
архитектура «цветочек» → архитектура «динамическая сеть»;
- вариант «sysvinit → systemd»: (системные утилиты = реализация системных вызовов) + оболочка → системные/прикладные службы + (отслеживание статуса+управление);
- кроссплатфоменная клиент-серверная сетевая графическая среда приложений → локальная 3D подсистема с зависимостью от аппаратуры;
- например, «X.Org → Wayland»
- shell-scripting → C programming;
- … .
Тезис: «инварианты»
«Linux — это UNIX сегодня»
«Инвариант» — термин из курса лекций 2011 года (лекция 2). Неформально говоря, «что вы встретите в любом Linux-е».
- Консоль: ИКС
- Иерархия файлов
- Процессы, права доступа и суперпользователь
- Текстовые конфигурационные файлы и системная информация
- Оболочка и сценарии
- Пакеты/репозитории
- Свободное сообщество
Антитезис: потеря инвариантности
В действительности от Linux требуется не то, что на самом деле
- Linux ≠ ОС ⇒ использование только ядра/базового окружения Linux
- Busybox-based
- Android
- Целевые дистрибутивы (прошивки)
- …
Симптом: подавляющая часть данных и управления вытеснена на прикладной уровень
Следствия:
- ⇒ Интерфейс управления не обязательно CLI (консоль?)
- ⇒ Прикладной интерфейс взаимодействия приложений (оболочка?)
- ⇒ Метаданные не обязаны иметь текстовый вид (конфиги?)
- Профессионализация сообщества разработчиков
Симптом: роль разработчика/сопровождающего пакет всё дальше от роли пользователя
Следствия:
- ⇒ «Центры приложений» вместо пакетных диспетчеров (пакеты?)
- ⇒ Депрофессионализация сообщества активных пользователей (сообщество?)
- Динамическое профилирование
- Временные внешние устройства, в т. ч. «новые»
- Пример: LKMS, PPD, …
- Мобильность: оперативное изменение условий, в т. ч. на «новые»
Пример: NM, PolKit, …
Симптом: не требующая вмешательства пользователя (или минимизирующая таковое) полуавтоматическая адаптация системы к новым условиям
Следствия:
- ⇒ Не обязательно задавать настройки вручную (конфиги?)
- ⇒ Недостаточно просто запускать и останавливать задачу, нужно сложное взаимодействие системных и прикладных подсистем (процессы?)
- ⇒ Множество управляющих действий и совершаются, и обрабатываются приложениями (сценарий?)
- Временные внешние устройства, в т. ч. «новые»
- Вопросы масштабирования: множественный деплоймент и обслуживание, непрерывная разработка, …
Симптом: ресурсоёмкость разработки становится существенно ниже ресурсоёмкости доставки и сопровождения
Следствия:
- ⇒ Скорость работы интегрирующей прослойки имеет значение (оболочка?)
- ⇒ Проще эффективно переписать, чем комбинировать имеющееся (оболочка?)
Симптом: упор на сопровождение окружений а не отдельных приложений
Следствия:
- ⇒ Нет необходимости модифицировать рабочую копию, надо обновлять «прошивку» целиком (пакеты? репозитории?)
- ⇒ (не только при масштабировании) Сложные уровни изоляции/защиты (процессы? права доступа? root?)
Эту повесть про старушку можно дальше продолжать.
Как возможно фундаментальное образование в области вычислительных систем?
Синтез: инварианты более высокого уровня
«Operating System» переводится как «систематика использования»
Заметим, что все «инварианты linux» — это реализации каких-то более высокоуровневых принципов использования компьютера.
Предложение из 2003-года: принципы организации операционной среды (aka 4U)
И: принцип информационной открытости
- для себя
- для эффективности взаимодействия
- для свободы ориентации
З: принцип минимизации затрат
- принятие решений
- физические действия
- умственная деятельность
У: принцип умопостижимости контекста
- human-readable
- human-writeable
- 7 +/- 2
О: принцип персональной ответственности
- захотел — получил
- достаточность знаний
- динамическая иерархия
Замечания:
- Ни один из этих принципов не выглядит устаревшим.
Современное состояние ОС оставляет (во всех смыслах слова!) желать лучшего в плане 4U
Перспективы
Кто виноват? Что делать?
Вариант 1. Рассказывать о различных реализациях в надежде на гештальт
Вариант 2. Использовать одну версию ОС в качестве базовой, акцентируя внимание на выполнение (возможно, подновлённой) концепции 4U
- Вариант 3. Написать свою идеальную ОС (не такой уж бессмысленный)
Литература
Программное обеспечение GNU/Linux (курс лекций на ВМК МГУ, осенний семестр 2011 года)