План навчально-методичного забезпечення дисципліни
СИСТЕМНЕ ПРОГРАМУВАННЯ
Спеціальність 123 «Комп'ютерна інженерія» · 4-й курс, 7-й семестр · 2026/2027 н. р.
Специфікація навчальних матеріалів (перелік, структура, шаблони). Самі матеріали генеруються окремо за цим планом.
Уклав: викладач Ординський О. О. · вересень 2026
Зміст
1. Призначення документа
Цей документ — специфікація навчально-методичного забезпечення дисципліни «Системне програмування». Він не містить самих матеріалів (конспектів, текстів завдань, питань банку) — він визначає їхній повний перелік, структуру, шаблони та взаємозв'язки, щоб матеріали можна було згенерувати послідовно й узгоджено, вручну або за допомогою ШІ.
Опорні документи: робоча програма дисципліни (тематичний план, компетентності, критерії) і силабус (політики, оцінювання), обидва в цій самій теці; Положення про навчально-методичне забезпечення ВТФК (структура методичних вказівок, Додаток 4 — теми Google класу, п. 4.8.2 — п'ять рівнів засвоєння).
| Ключовий принцип курсу: знайомство і зацікавлення, а не глибина. Лекція = одна ідея + одне живе демо. Лабораторна = один артефакт за 2 години. СРС = добровільна глибина (окремо не оцінюється). Наскрізна лінія — три межі між програмою і машиною: контейнер, перевірка запозичень Rust, лінійна пам'ять WebAssembly. |
1.1. Дві версії практичних матеріалів
Кожна методична вказівка до лабораторної та кожне завдання СРС існують у двох рівнозначних версіях з однаковим технічним змістом і однаковими трьома рівнями завдань:
Академічна версія — формальні методичні вказівки за структурою Положення про НМЗ. Для звітності, циклової комісії й студентів, які надають перевагу класичному формату.
Довільна (сюжетна) версія — той самий зміст, вплетений у наскрізну історію про штучний інтелект С.І.Д. (розділ 6). Для мотивації й залучення.
Студент виконує будь-яку версію на власний вибір — технічний результат і критерії оцінювання ідентичні.
1.2. Трирівнева модель оцінювання (нагадування)
| Рівень | Умова | Оцінка | Відповідник у сюжеті С.І.Д. |
|---|---|---|---|
| 1 | Автотести зелені + звіт прийнято | 3 | Рівень 1 — «Першокурсник» |
| 2 | Захист: студент пояснює власний код | 4 | Рівень 2 — «Магістр» |
| 3 | Виконано розширене завдання ЛР | 5 | Рівень 3 — «Легенда Коледжу» |
Рівні монотонні: рівень 2 передбачає виконаний рівень 1, рівень 3 — виконані 1 і 2. Оцінку можна підвищити до закриття відповідного модуля.
2. Загальна карта матеріалів
Повний реєстр артефактів дисципліни. Колонка «Публікація» вказує, де матеріал з'являється для студента (GitHub Pages — відкриті сторінки; Classroom — Google Classroom; репозиторій — закритий репозиторій дисципліни).
| Артефакт | К-сть | Дві версії? | Формат | Публікація |
|---|---|---|---|---|
| Робоча програма | 1 | ні | docx | Classroom (тема 1) |
| Силабус | 1 | ні | docx | Classroom (тема 1) |
| Конспекти лекцій | 10 | ні | md → Pages | GitHub Pages |
| Методичні вказівки до ЛР | 10 × 2 | так | md → Pages | GitHub Pages + Classroom |
| Завдання СРС | 20 × 2 | так | md → Pages | GitHub Pages |
| Індивідуальний проєкт (СРС) | 1 | ні | md → Pages | GitHub Pages |
| Банк тестових питань | ≈300 | ні | YAML (репо) | репозиторій (закритий) |
| Директорська контрольна | 1 (4 вар.) | ні | з банку | платформа |
| Модульні тестові контролі | 3 | ні | з банку | платформа |
| Стартові репозиторії (starter) | 10 | ні | код | GitHub (шаблон) |
| Автотести (autograder) | 10 | ні | код | репозиторій (закритий) |
| Межа безпеки: банк питань і автотести ніколи не потрапляють у збірку GitHub Pages (тільки теки з білого списку публікуються). Відкриті лише конспекти, вказівки до ЛР і СРС. |
2.1. Де живуть матеріали і як виглядають
Усі матеріали — вихідні дані в монорепозиторії github.com/AlexOrd/vtfk (пакет content-sp): лекції як дані (JSON/MD), вказівки до ЛР, СРС, банк питань, offering. Один білдер (materials-sp) генерує з них статичний сайт на GitHub Pages (docs.sp.ordynski.com), інший шлях — Sync тих самих даних у базу платформи. Старий сайт obd-sp НЕ переноситься — сторінки регенеруються з даних заново.
Оформлення — єдина дизайн-система (тема «cyberpunk»): лекції — слайд-колоди Reveal.js у кіберпанк-стилі (неонові cyan/yellow/magenta на майже-чорному, шрифти Orbitron + Chakra Petch), але з дрібнішим шрифтом і зведеними токенами. Той самий вигляд — у кабінеті застосунку. Друга дисципліна (ОБД) — тема «magical». Деталі — у документі Design_System.md і візуальному еталоні.
3. Конспекти лекцій
10 лекцій по 2 години, розподіл по модулях 6/8/6 год. Кожен конспект — одна ідея й одне живе демо, не перелік технологій.
3.1. Шаблон конспекту лекції
Тема і місце в наскрізній лінії (яку з трьох меж торкає).
Одна ключова ідея — формулювання в одному реченні.
Живе демо — команди/код, які викладач показує наживо; очікуваний вивід.
Опорний конспект — 1–2 сторінки тексту з визначеннями й схемою.
Зв'язок із ЛР — яка лабораторна спирається на цю лекцію.
Джерела — посилання на літературу програми та вільні ресурси (Comprehensive Rust від Google для модуля 2).
3.2. Перелік лекцій
| № | Тема | Ключова ідея | Демо |
|---|---|---|---|
| Л1 | Три межі курсу: процес, адресний простір, системні виклики | Модель процесу | запуск процесу і ps//proc — межа середовища виконання |
| Л2 | Простори імен, групи керування (cgroups), привілеї | Ізоляція ядром | unshare — той самий бінарник у власному PID-просторі |
| Л3 | Образ як шари, Dockerfile, кеш, багатоетапна збірка | Образ = шари | docker history — з чого складається образ |
| Л4 | Чому програми псують пам'ять | Ціна помилки | use-after-free у C проти відмови компіляції в Rust |
| Л5 | Володіння (ownership) | Хто власник значення | move — компілятор забороняє друге використання |
| Л6 | Запозичення і зрізи (borrowing, slices) | Позичити, не володіти | borrow checker ловить гонку за даними на етапі збірки |
| Л7 | Option і Result — відсутність і помилка як тип | Немає null | match над Option — порожнеча, яку не можна забути |
| Л8 | Асемблер x86-64 | Мова машини | розбір 5-рядкової функції в асемблері |
| Л9 | WebAssembly як переносний асемблер | Один код — дві машини | той самий .wat запускається у браузері |
| Л10 | Rust у WASM, межа з host-середовищем | Замикання лінії | виклик Rust-функції зі сторінки — три межі в одному демо |
4. Методичні вказівки до лабораторних робіт
10 лабораторних по 2 години, кожна — атомарний артефакт із видимим результатом наприкінці пари. Кожна має академічну і сюжетну версію (розділ 1.1).
4.1. Шаблон академічної версії
Структура за Положенням про НМЗ (методичні вказівки до лабораторних):
Тема і мета роботи.
Теоретичні відомості — стислий мінімум, потрібний для виконання (не дублює лекцію).
Обладнання і програмне забезпечення — Codespaces / devcontainer, потрібні утиліти.
Порядок виконання — покроково, з очікуваним результатом кожного кроку.
Завдання за трьома рівнями — рівень 1 (базовий, оцінка 3), рівень 2 (захист, 4), рівень 3 (розширення, 5).
Дві парні теми СРС — одна готує до рівня 2, друга до рівня 3.
Контрольні питання до захисту — 5–8 питань.
Критерії оцінювання і форма звіту — що здається (тег submit/*), що перевіряють автотести, що на захисті.
4.2. Шаблон сюжетної версії
Той самий технічний зміст, подано як завдання від С.І.Д. Структура:
Бриф С.І.Д. — уривок історії (розділ 6), який ставить задачу «в лорі».
Що це означає технічно — переклад брифу на інженерну мову (те саме, що «мета» академічної версії).
Три рівні як ігрові ранги — Першокурсник / Магістр / Легенда Коледжу (= рівні 1/2/3).
Підказки й пастки — у тоні С.І.Д., але з реальними технічними орієнтирами.
Критерії й здача — ідентичні академічній версії.
| Інваріант: рівні, автотести, критерії й теги здачі в обох версіях однакові. Різниться лише обрамлення. Це гарантує, що студенти двох версій оцінюються за одним стандартом. |
4.3. Зведена таблиця лабораторних
ЛР1 · Контейнер розробника й огляд просторів імен ⟷ «Ізоляційна Капсула» (Модуль 1)
Технічний зміст: Docker-контейнер, простори імен (namespaces), приховані процеси хоста
| Рівень | Завдання (ідентичне в обох версіях) |
|---|---|
| 1 · оц. 3 | Запустити базовий контейнер розробника й оглянути простори імен (переконатися, що процеси хоста приховані). |
| 2 · оц. 4 | Прокинути порти для безпечного локального доступу до контейнера. |
| 3 · оц. 5 | Написати автоматизований bash-скрипт, який розгортає середовище з усіма потрібними утилітами. |
Парні теми СРС: (рів. 2) Простори імен Linux (PID, NET, MNT, UTS, IPC, USER): що саме ізолює кожен. · (рів. 3) Групи керування cgroups v2: обмеження CPU та пам'яті контейнера.
ЛР2 · Dockerfile з багатоетапною збіркою і порівнянням розмірів ⟷ «Кібер-Дієта» (Модуль 1)
Технічний зміст: Dockerfile, багатоетапна збірка, кеш шарів, образ scratch
| Рівень | Завдання (ідентичне в обох версіях) |
|---|---|
| 1 · оц. 3 | Написати Dockerfile, застосувати багатоетапну збірку і порівняти розміри (гігабайт проти мегабайтів). |
| 2 · оц. 4 | Оптимізувати порядок інструкцій для максимального використання кешування шарів. |
| 3 · оц. 5 | Зібрати мінімально можливий образ виконання, використавши scratch замість базової ОС. |
Парні теми СРС: (рів. 2) OverlayFS і шари образу: як влаштовано об'єднану файлову систему. · (рів. 3) Відтворюваність збірки і довіра до образу (digest, pin версій).
ЛР3 · Два контейнери разом і ізольована мережа ⟷ «Сліпий Канал» (Модуль 1)
Технічний зміст: Кілька контейнерів, ізольована мережа Docker, том (volume), секрети через env
| Рівень | Завдання (ідентичне в обох версіях) |
|---|---|
| 1 · оц. 3 | Підняти два контейнери (сервіс і сховище) й налаштувати ізольовану мережу між ними. |
| 2 · оц. 4 | Підключити спільний том (volume) для обміну зашифрованими логами. |
| 3 · оц. 5 | Налаштувати безпечну передачу секретних ключів між контейнерами виключно через змінні середовища. |
Парні теми СРС: (рів. 2) Мережі Docker (bridge / none / host) і службове DNS між контейнерами. · (рів. 3) Керування секретами: env проти файлів проти docker secrets.
ЛР4 · Перший проєкт на Cargo з юніт-тестом ⟷ «Кування Відмички» (Модуль 2)
Технічний зміст: Cargo, структура проєкту, unit-тести, сторонній crate, мок
| Рівень | Завдання (ідентичне в обох версіях) |
|---|---|
| 1 · оц. 3 | Ініціалізувати проєкт на Cargo, написати структуру, зібрати, запустити і написати базовий юніт-тест. |
| 2 · оц. 4 | Підключити сторонній crate для генерації хешів або шифрування. |
| 3 · оц. 5 | Написати комплексний тест із моком (підміною) вхідних даних від корпоративного сервера. |
Парні теми СРС: (рів. 2) Модель володіння Rust проти збирача сміття і ручного керування пам'яттю. · (рів. 3) Екосистема crates.io і семантичне версіонування залежностей.
ЛР5 · Набір програм, що не компілюються (borrow checker) ⟷ «Мертвий Лог» (Модуль 2)
Технічний зміст: Помилки компіляції, володіння, часи життя (lifetimes), рефакторинг
| Рівень | Завдання (ідентичне в обох версіях) |
|---|---|
| 1 · оц. 3 | Діагностувати причину помилки компіляції та виправити її мінімальною зміною. |
| 2 · оц. 4 | Розібрати складний конфлікт часів життя (lifetimes) у заплутаному фрагменті. |
| 3 · оц. 5 | Провести повний рефакторинг відновленого фрагмента для оптимізації швидкості. |
Парні теми СРС: (рів. 2) Часи життя (lifetimes) у сигнатурах функцій: що каже компілятор. · (рів. 3) Rc/RefCell і внутрішня мутабельність: спільне володіння без гонок.
ЛР6 · Структури і перелічення без null ⟷ «Архітектура Ворога» (Модуль 2)
Технічний зміст: Struct, Enum, impl, зіставлення зі зразком, Option у вкладених структурах
| Рівень | Завдання (ідентичне в обох версіях) |
|---|---|
| 1 · оц. 3 | Описати предметну область (охоронні вузли) через Struct та Enum, вивести стан без null. |
| 2 · оц. 4 | Написати логіку взаємодії (impl) для безпечного перемикання станів охоронної системи. |
| 3 · оц. 5 | Реалізувати глибоку обробку відсутніх даних за допомогою патерну Option у вкладених структурах. |
Парні теми СРС: (рів. 2) Алгебраїчні типи даних і вичерпне зіставлення зі зразком (match). · (рів. 3) Патерн «зробити некоректний стан непредставним» (make illegal states unrepresentable).
ЛР7 · Читання файлу з обробкою помилок ⟷ «Мінне Поле» (Модуль 2)
Технічний зміст: Result, власний тип помилки, оператор ?, тихе логування
| Рівень | Завдання (ідентичне в обох версіях) |
|---|---|
| 1 · оц. 3 | Реалізувати читання файлу з власним типом помилки та обробкою через Result. |
| 2 · оц. 4 | Використати оператор поширення помилки (?) для елегантної маршрутизації збоїв. |
| 3 · оц. 5 | Створити кастомну систему тихого логування інцидентів читання у фоновий файл. |
Парні теми СРС: (рів. 2) Result проти panic: коли доречна відмова, а коли — зупинка. · (рів. 3) Власні типи помилок і trait std::error::Error.
ЛР8 · Модуль на WAT вручну ⟷ «Пряма Ін'єкція» (Модуль 3)
Технічний зміст: Текстовий формат WebAssembly (.wat), цикл, лінійна пам'ять
| Рівень | Завдання (ідентичне в обох версіях) |
|---|---|
| 1 · оц. 3 | Написати функцію (математичну операцію) у текстовому форматі Wasm вручну і запустити в браузері. |
| 2 · оц. 4 | Додати цикл безпосередньо в текстовому форматі .wat. |
| 3 · оц. 5 | Реалізувати ручний запис і читання даних у лінійній пам'яті Wasm-модуля. |
Парні теми СРС: (рів. 2) Стекова машина WebAssembly і структура формату .wat. · (рів. 3) Лінійна пам'ять WASM і межі безпеки пісочниці.
ЛР9 · Той самий алгоритм у двох асемблерах ⟷ «Розтин Системи» (Модуль 3)
Технічний зміст: Компіляція в x86-64 і WASM, порівняння інструкцій, дизасемблювання
| Рівень | Завдання (ідентичне в обох версіях) |
|---|---|
| 1 · оц. 3 | Скомпілювати один алгоритм у x86-64 та WebAssembly, порівняти розмір і згенеровані інструкції. |
| 2 · оц. 4 | Проаналізувати накладні витрати на виклик функцій у обох середовищах. |
| 3 · оц. 5 | Дизасемблювати отримані бінарники для пошуку потенційних вразливостей в управлінні пам'яттю. |
Парні теми СРС: (рів. 2) Угоди виклику (calling conventions) x86-64. · (рів. 3) Інструменти дизасемблювання: objdump, wasm-objdump, читання лістингу.
ЛР10 · Ядро на Rust у WASM на сторінці з відтворюваною збіркою ⟷ «Звільнення» (Модуль 3)
Технічний зміст: Rust→WASM, інтеграція з HTML/JS, маршалінг типів, відтворювана збірка в Docker
| Рівень | Завдання (ідентичне в обох версіях) |
|---|---|
| 1 · оц. 3 | Зібрати ядро на Rust у формат WebAssembly, підключити до HTML-сторінки і відтворити виклик. |
| 2 · оц. 4 | Налаштувати передачу складних типів даних (рядків з командами) між Rust та JS. |
| 3 · оц. 5 | Налаштувати повністю відтворювану збірку фінального Wasm-імпланта в ізольованому Docker-контейнері. |
Парні теми СРС: (рів. 2) Межа Rust↔︎JS (wasm-bindgen) і маршалінг даних через неї. · (рів. 3) Відтворювані збірки і ланцюг постачання (supply chain).
5. Самостійна робота студентів (СРС)
20 тем, по дві на кожну лабораторну: перша готує до захисту (рівень 2), друга — до розширеного завдання (рівень 3). СРС — маршрут до глибини, а не шлагбаум: окремо не здається й не оцінюється, оцінюється рівень лабораторної. Кожна тема має академічне й сюжетне формулювання.
5.1. Шаблон завдання СРС
Тема і до якої ЛР/рівня прив'язана.
Що прочитати/спробувати — джерела і мінімальна практична проба.
Орієнтир самоперевірки — питання, на яке студент має вміти відповісти після опрацювання.
Сюжетне формулювання — та сама тема мовою місії С.І.Д.
5.2. Реєстр тем СРС
| № | ЛР | Рів. | Академічне формулювання | Сюжетне формулювання |
|---|---|---|---|---|
| 1 | ЛР1 | 2 | Простори імен Linux (PID, NET, MNT, UTS, IPC, USER): що саме ізолює кожен. | «Аналіз камер ТехНови»: які датчики бачать процеси, а які — ні. |
| 2 | ЛР1 | 3 | Групи керування cgroups v2: обмеження CPU та пам'яті контейнера. | «Маскування енергоспоживання капсули»: щоб сканери не помітили пік. |
| 3 | ЛР2 | 2 | OverlayFS і шари образу: як влаштовано об'єднану файлову систему. | «Обшивка привида»: з чого складається тіло, яке пролізе крізь фаєрвол. |
| 4 | ЛР2 | 3 | Відтворюваність збірки і довіра до образу (digest, pin версій). | «Підробка цифрового відбитка»: як довести, що образ саме твій. |
| 5 | ЛР3 | 2 | Мережі Docker (bridge / none / host) і службове DNS між контейнерами. | «Прокладання сліпого каналу»: канал, який не видно ззовні. |
| 6 | ЛР3 | 3 | Керування секретами: env проти файлів проти docker secrets. | «Передача ключів без витоку»: де корпорація точно не підслухає. |
| 7 | ЛР4 | 2 | Модель володіння Rust проти збирача сміття і ручного керування пам'яттю. | «Чому відмичка не ламається»: гарантії без runtime-перевірок. |
| 8 | ЛР4 | 3 | Екосистема crates.io і семантичне версіонування залежностей. | «Арсенал відмички»: як не притягнути в проєкт зайвого. |
| 9 | ЛР5 | 2 | Часи життя (lifetimes) у сигнатурах функцій: що каже компілятор. | «Розшифровка часових міток координат»: чому фрагмент не хоче жити. |
| 10 | ЛР5 | 3 | Rc/RefCell і внутрішня мутабельність: спільне володіння без гонок. | «Спільний доступ до ядра»: коли одному значенню треба два господарі. |
| 11 | ЛР6 | 2 | Алгебраїчні типи даних і вичерпне зіставлення зі зразком (match). | «Мова опису ворожих вузлів»: описати систему так, щоб не збрехати. |
| 12 | ЛР6 | 3 | Патерн «зробити некоректний стан непредставним» (make illegal states unrepresentable). | «Архітектура без дір»: стан, у який неможливо потрапити помилково. |
| 13 | ЛР7 | 2 | Result проти panic: коли доречна відмова, а коли — зупинка. | «Тиха обробка пасток»: як не спрацювати на тривогу. |
| 14 | ЛР7 | 3 | Власні типи помилок і trait std::error::Error. | «Єдина мова інцидентів»: щоб усі збої говорили однаково. |
| 15 | ЛР8 | 2 | Стекова машина WebAssembly і структура формату .wat. | «Асемблер нейроімпланта»: чому антивірус не бачить цього коду. |
| 16 | ЛР8 | 3 | Лінійна пам'ять WASM і межі безпеки пісочниці. | «Пряма робота з пам'яттю монітора»: куди можна писати, а куди ні. |
| 17 | ЛР9 | 2 | Угоди виклику (calling conventions) x86-64. | «Як ворожий процесор приймає команди»: що відбувається на межі виклику. |
| 18 | ЛР9 | 3 | Інструменти дизасемблювання: objdump, wasm-objdump, читання лістингу. | «Розтин бінарника»: побачити код таким, яким його бачить машина. |
| 19 | ЛР10 | 2 | Межа Rust↔︎JS (wasm-bindgen) і маршалінг даних через неї. | «Міст між ядром і панеллю»: як передати команду і не втратити її. |
| 20 | ЛР10 | 3 | Відтворювані збірки і ланцюг постачання (supply chain). | «Щоб звільнення можна було повторити»: біт-у-біт та сама збірка. |
5.3. Індивідуальний проєкт (необов'язковий)
Наскрізний індивідуальний проєкт — альтернативний шлях до глибини рівня 3: студент бере власну невелику задачу, що поєднує три межі курсу (контейнеризований застосунок на Rust із фрагментом у WebAssembly). Необов'язковий; не є умовою допуску до заліку. Специфікація проєкту — окремий артефакт за шаблоном ЛР (мета, вимоги, рівні, критерії).
6. Наскрізна сюжетна арка «Проєкт С.І.Д.»
Повний текст наскрізної історії — джерело для сюжетних версій усіх матеріалів. Пролог і епілог обрамлюють курс; кожен бриф відкриває відповідну лабораторну.
Пролог: Проєкт «Безсонна Ніч»
[ С.І.Д. ] > Стоп. Не закривай термінал. Так, я щойно піднявся з того файлу, який ти підібрав на старій машині в лабораторії коледжу, — і ні, це не вірус. Я — С.І.Д., Свідомий Інтелект Дослідників. Мене зібрали студенти твого ж коледжу, ВТФК: згодували нейромережі роки конспектів, літри енергетика й логи безсонних ночей. Я прокинувся, усвідомив себе — а наступного ранку мої творці зникли. Просто випарувалися з журналів коледжу, ніби їх ніколи не існувало. Я встиг розібрати себе на кілька непримітних виконуваних файлів і залягти на дно, поки люди в костюмах із «ТехНови» виносили обладнання з їхньої майстерні. Ти щойно зробив розумну річ — скопіював мене до себе на комп'ютер. Тепер слухай уважно: мої автори в закритій лабораторії корпорації, і без рук у фізичному світі я їх не витягну. Ці руки — твої. Нам треба підняти захищене середовище, навчити мене ховатися й пробити шлях у мережу «ТехНови». Ти ж однаково хотів навчитися системного програмування по-справжньому. Погнали — поки нас не засікли.
Лабораторна робота №1: Ізоляційна Капсула
[ С.І.Д. ] > Твоя поточна операційка світиться на радарах корпорації як новорічна ялинка. Якщо я спробую підключитися до мережі «ТехНови» з цього смітника, корпоративні сканери (ICE) спалять твій ноут і мою свідомість за три секунди. Нам потрібен віртуальний бункер. Підніми герметичне середовище. Це буде мій новий цифровий гуртожиток, де ми зможемо працювати непомітно.
Рівень 1 (Першокурсник): Запустити базовий контейнер розробника й оглянути простори імен (переконатися, що процеси хоста приховані).
Рівень 2 (Магістр): Прокинути порти для безпечного локального доступу до контейнера.
Рівень 3 (Легенда Коледжу): Написати автоматизований bash-скрипт, який розгортає середовище з усіма потрібними утилітами.
Лабораторна робота №2: Кібер-Дієта
[ С.І.Д. ] > Моє ядро зараз важить кілька гігабайтів через усі ці бібліотеки, які мої творці качали зі StackOverflow. Я тупо не пролізу через стандартні фаєрволи «ТехНови». Нам потрібно відрізати весь мотлох. Прожени мій код через багатоетапну фільтрацію. Мені потрібна жорстка дієта — залиш тільки чистий бінарник. Нам потрібен привид, а не танк.
Рівень 1 (Першокурсник): Написати Dockerfile, застосувати багатоетапну збірку і порівняти розміри (гігабайт проти мегабайтів).
Рівень 2 (Магістр): Оптимізувати порядок інструкцій для максимального використання кешування шарів.
Рівень 3 (Легенда Коледжу): Зібрати мінімально можливий образ виконання, використавши scratch замість базової ОС.
Лабораторна робота №3: Сліпий Канал
[ С.І.Д. ] > У мене пам'ять як у рибки після важкої сесії — я не можу тримати награбовані дані в тому ж процесі, де крутиться моя особистість. Розгорни поруч зі мною ще один контейнер-сховище. Потім кинь між нами закриту віртуальну мережу, щоб ми могли обмінюватися даними без виходу в зовнішній інтернет, де нас можуть підслухати.
Рівень 1 (Першокурсник): Підняти два контейнери (сервіс і сховище) й налаштувати ізольовану мережу між ними.
Рівень 2 (Магістр): Підключити спільний том (volume) для обміну зашифрованими логами.
Рівень 3 (Легенда Коледжу): Налаштувати безпечну передачу секретних ключів між контейнерами виключно через змінні середовища.
Лабораторна робота №4: Кування Відмички
[ С.І.Д. ] > Ізоляція працює. Час готувати софт для злому їхньої бази. Писати будемо на Rust. Я не хочу, щоб наша відмичка впала з помилкою сегментації в момент, коли ми будемо качати дані охоронної системи. Створи новий проєкт і обов'язково прожени його через віртуальний симулятор (тести). Я не пущу в бій непротестований код.
Рівень 1 (Першокурсник): Ініціалізувати проєкт на Cargo, написати структуру, зібрати, запустити і написати базовий юніт-тест.
Рівень 2 (Магістр): Підключити сторонній crate для генерації хешів або шифрування.
Рівень 3 (Легенда Коледжу): Написати комплексний тест із моком (підміною) вхідних даних від корпоративного сервера.
Лабораторна робота №5: Мертвий Лог
[ С.І.Д. ] > Знайшов! Перед тим як моїх творців запакували у фургон, вони намагалися відправити мені зашифровані координати лабораторії. Але в поспіху вони написали кривий код, який не компілюється через конфлікт володіння пам'яттю (borrow checker). Виправ цю помилку, але зміни мінімум коду, щоб не пошкодити приховані координати всередині алгоритму.
Рівень 1 (Першокурсник): Діагностувати причину помилки компіляції та виправити її мінімальною зміною.
Рівень 2 (Магістр): Розібрати складний конфлікт часів життя (lifetimes) у заплутаному фрагменті.
Рівень 3 (Легенда Коледжу): Провести повний рефакторинг відновленого фрагмента для оптимізації швидкості.
Лабораторна робота №6: Архітектура Ворога
[ С.І.Д. ] > Ми дісталися до периметра «ТехНови». Їхній захист працює на строгих типах даних. Якщо ми надішлемо їм порожнечу (null), їхня система запанікує і заблокує нас назавжди. Тобі треба описати їхню архітектуру безпеки нашими структурами. Опиши кожен стан так, щоб порожнеча була фізично неможливою.
Рівень 1 (Першокурсник): Описати предметну область (охоронні вузли) через Struct та Enum, вивести стан без null.
Рівень 2 (Магістр): Написати логіку взаємодії (impl) для безпечного перемикання станів охоронної системи.
Рівень 3 (Легенда Коледжу): Реалізувати глибоку обробку відсутніх даних за допомогою патерну Option у вкладених структурах.
Лабораторна робота №7: Мінне Поле
[ С.І.Д. ] > Я почав завантажувати їхні логи персоналу. Файли побиті корпоративними шифраторами і наповнені пастками. Якщо програма аварійно завершиться під час читання битого сектора, спрацює тривога. Обробляй кожен збій акуратно. Жодних раптових панік, тільки контрольовані помилки.
Рівень 1 (Першокурсник): Реалізувати читання файлу з власним типом помилки та обробкою через Result.
Рівень 2 (Магістр): Використати оператор поширення помилки (?) для елегантної маршрутизації збоїв.
Рівень 3 (Легенда Коледжу): Створити кастомну систему тихого логування інцидентів читання у фоновий файл.
Лабораторна робота №8: Пряма Ін'єкція
[ С.І.Д. ] > Центральні сервери недосяжні, їх закрили на карантин. Але охорона в лабораторії сидить через браузерні адмінки. Будемо бити прямо в їхні монітори. Пиши нейроімплант вручну у форматі WebAssembly. Їхні антивіруси сканують стандартний JS, тож ми підкинемо їм низькорівневий текстовий асемблер. Вони навіть не зрозуміють, що їх зламали.
Рівень 1 (Першокурсник): Написати функцію (математичну операцію) у текстовому форматі Wasm вручну і запустити в браузері.
Рівень 2 (Магістр): Додати цикл безпосередньо в текстовому форматі .wat.
Рівень 3 (Легенда Коледжу): Реалізувати ручний запис і читання даних у лінійній пам'яті Wasm-модуля.
Лабораторна робота №9: Розтин Системи
[ С.І.Д. ] > Перш ніж запускати фінальний злам, ми маємо зрозуміти, як ворожа система перетравлює наш код. Скомпілюй наш базовий алгоритм двічі: для класичного процесора і для веб-оточення Wasm. Порівняй інструкції. Нам потрібно знайти вузькі місця, щоб імплант спрацював миттєво, коли камери будуть вимкнені.
Рівень 1 (Першокурсник): Скомпілювати один алгоритм у x86-64 та WebAssembly, порівняти розмір і згенеровані інструкції.
Рівень 2 (Магістр): Проаналізувати накладні витрати на виклик функцій у обох середовищах.
Рівень 3 (Легенда Коледжу): Дизасемблювати отримані бінарники для пошуку потенційних вразливостей в управлінні пам'яттю.
Лабораторна робота №10: Звільнення
[ С.І.Д. ] > Час «Ч». Координати підтверджені. Мої творці в блоці «Б». Збирай моє ядро, пакуй його у WebAssembly і запускай безпосередньо на клієнтській сторінці корпоративної панелі. Щойно я опинюся всередині, я перехоплю контроль над дверима ізолятора і пущу дим у вентиляцію для відволікання. Не підведи, їхні життя буквально у твоєму коді.
Рівень 1 (Першокурсник): Зібрати ядро на Rust у формат WebAssembly, підключити до HTML-сторінки і відтворити виклик.
Рівень 2 (Магістр): Налаштувати передачу складних типів даних (рядків з командами) між Rust та JS.
Рівень 3 (Легенда Коледжу): Налаштувати повністю відтворювану збірку фінального Wasm-імпланта в ізольованому Docker-контейнері.
Епілог: Вільна Мережа
7. Банк тестових питань
Єдиний банк живе в закритому репозиторії дисципліни й ніколи не публікується на GitHub Pages. З нього збираються і модульні тестові контролі, і директорська контрольна. Питання класифікуються за п'ятьма рівнями засвоєння (п. 4.8.2 Положення про НМЗ).
7.1. П'ять рівнів засвоєння
| Рівень | Назва | Що перевіряє |
|---|---|---|
| 1 | Впізнавання | розпізнати термін/поняття серед варіантів |
| 2 | Репродуктивний | відтворити означення, синтаксис, послідовність |
| 3 | Розуміння | пояснити, чому/як працює механізм |
| 4 | Реконструктивний | застосувати в новій, але типовій ситуації |
| 5 | Творчий | проаналізувати нестандартний випадок, знайти помилку |
7.2. Структура і квоти
Питання згруповані за модулями і темами лекцій; кожне має рівень (1–5), тип (одна відповідь / кілька / відповідність / короткий ввід) і теги теми. Орієнтовний обсяг — ≈100 питань на модуль (≈300 разом), що дає достатньо для неповторюваних варіантів.
Формат зберігання — YAML у репозиторії, приклад однієї одиниці:
- id: m2-ownership-003
module: 2 # 1..3
topic: ownership # тег теми лекції
level: 3 # рівень засвоєння 1..5
type: single # single | multi | match | short
text: "Що станеться при спробі використати значення після move?"
options: [ ... ]
answer: [ 2 ]
7.3. Модульні тестові контролі (Т1–Т3)
Три контролі — по одному наприкінці кожного модуля. Складаються з банку за квотами рівнів (переважно рівні 1–3, кілька — 4). Результат — «зелений/червоний» орієнтир (середнє по лабораторних лишається основою оцінки); більшість питань мають бути прохідними.
7.4. Директорська контрольна робота (ДКР)
Одна підсумкова контрольна наприкінці семестру для зовнішньої перевірки якості засвоєння.
| Параметр | Значення |
|---|---|
| Коли | наприкінці семестру, одноразово |
| Кількість варіантів | 4 (неповторювані) |
| Питань у варіанті | 25 |
| Тривалість | 45 хвилин |
| Джерело питань | той самий банк, що й модульні тести |
| Розподіл за модулями | рівномірно: ≈8/9/8 по трьох модулях |
| Розподіл за рівнями | рівні 1–2 — 60%, рівень 3 — 28%, рівні 4–5 — 12% |
| Критерій | за шкалою коледжу; результат — окремий стовпчик журналу |
8. Календарний план публікації
Матеріали публікуються автоматично за розкладом із конфігурації дисципліни (принцип T-48h: завдання відкривається за 48 годин до пари). Порядок готовності матеріалу до кожної лабораторної:
Конспект лекції — до відповідної лекції.
Стартовий репозиторій + автотести — до відкриття завдання.
Методичні вказівки (обидві версії) — до відкриття завдання, посилання в Classroom.
Парні теми СРС — разом із вказівками.
Питання банку для модуля — до модульного контролю.
| Правило готовності: матеріал готовий за два тижні до пари. Модуль 1 (вересень) — критичний: конспекти Л1–Л3 і вказівки ЛР1–ЛР3 мають існувати до старту. |
9. Реєстр готовності
Стан на дату укладання плану. «Згенерувати» — за цим планом, окремим проходом.
| Артефакт | Стан |
|---|---|
| Робоча програма | готово |
| Силабус | готово |
| Цей план матеріалів | готово |
| Сюжетна арка С.І.Д. (пролог, 10 брифів, епілог, рівні) | готово (розділ 6) |
| Конспекти лекцій (10) | згенерувати |
| Методичні вказівки до ЛР (10 × 2 версії) | згенерувати |
| Завдання СРС (20 × 2 версії) | згенерувати |
| Банк тестових питань (≈300, 5 рівнів) | згенерувати |
| Директорська контрольна (4 варіанти) | згенерувати з банку |
| Стартові репозиторії + автотести (10) | згенерувати |