☰ Конспект ← Курс
ЛЕКЦІЯ 0

ВСТУП ДО ДИСЦИПЛІНИ: ПРОГРАМА, ОРГАНІЗАЦІЯ РОБОТИ, ОЦІНЮВАННЯ

Про що курс, як побудований семестр і що від тебе очікується

ВТФК · Системне програмування · 2026

План заняття

  • Що таке системне програмування і чому воно потрібне інженеру
  • Робоча програма: обсяг, модулі, форми контролю
  • Як побудоване заняття: презентація + СРС
  • Лабораторні: три рівні, Docker-середовище, здача тегом
  • Сайт курсу: сюжетна й академічна версії матеріалів
  • Політики: дедлайни, доброчесність, використання ШІ
  • Що зробити до наступного заняття

Показати сайт наживо паралельно зі слайдами

Що таке системне програмування

  • Код, який працює з ресурсами машини напряму: процеси, пам'ять, файли, мережа, набір інструкцій процесора
  • Ціна помилки вища, ніж у прикладному ПЗ: витік пам'яті, дірка в ізоляції, збій ядра
  • Це не «вивчити мову»: Docker, Rust і WebAssembly — інструменти, щоб побачити три межі між програмою і машиною
  • Результат курсу: розуміти, що відбувається під твоїм кодом, і вміти це перевірити в терміналі

Одна ідея на весь семестр: межа. Усі три модулі — про те, де вона проходить і хто її охороняє

Три модулі — три межі

  • Модуль 1 · Ізоляція процесів: межа середовища виконання — Docker, простори імен і cgroups Linux (Л1–3, ЛР1–3)
  • Модуль 2 · Керування пам'яттю: межа безпеки — Rust, володіння й перевірка запозичень (Л4–7, ЛР4–7)
  • Модуль 3 · Від асемблера до WebAssembly: межа набору інструкцій — x86-64, WAT, wasm-pack (Л8–10, ЛР8–10)
  • Кожному модулю відповідає модульний контроль (тест) наприкінці

Показати на сайті три «стрічки» модулів

Курс у цифрах

90
годин · 3 кредити ЄКТС
20 лекцій · 20 лабораторних · 50 СРС
3
модулі — три межі
ізоляція · пам'ять · інструкції
10+1
лабораторних (місій)
+ Лабораторна 0 — вступ, завжди відкрита
20
тем СРС
по 2 на кожну лекцію та ЛР

Цифри — за тарифікацією 2026/27; Лекція 0 і Лабораторна 0 — поза сіткою годин, додаткові матеріали

Як влаштований кожен тиждень

Лекціяпрезентація + демо · 1 год
СРС2 теми в аудиторії · 1 год
Лабораторнаконтейнер · 2 год
Здачатег submit/labNN
Захистрівні 2–3 · до кінця модуля

СРС має подвійний зв'язок: подається з лекцією, готує до захисту і розширення лабораторної

Лекції семестру

ТемаМодуль
Л1Три межі курсу: процес, адресний простір, системні викликиМ1
Л2Простори імен, групи керування (cgroups), привілеїМ1
Л3Образ як шари, Dockerfile, кеш, багатоетапна збіркаМ1
Л4Чому програми псують пам'ятьМ2
Л5Володіння (ownership)М2
Л6Запозичення і зрізиМ2
Л7Option і ResultМ2
Л8Асемблер x86-64М3
Л9WebAssembly як переносний асемблерМ3
Л10Rust у WASM, межа з host-середовищемМ3

Кожна лекція — одна ідея й одне живе демо; слайди й конспект — на сайті

Лабораторні роботи — 10 місій

Академічна назваСюжетна назваМ
ЛР1Контейнер розробника й огляд просторів імен«Ізоляційна Капсула»М1
ЛР2Dockerfile з багатоетапною збіркою і порівнянням розмірів«Кібер-Дієта»М1
ЛР3Два контейнери разом і ізольована мережа«Сліпий Канал»М1
ЛР4Перший проєкт на Cargo з юніт-тестом«Кування Відмички»М2
ЛР5Набір програм, що не компілюються (borrow checker)«Мертвий Лог»М2
ЛР6Структури і перелічення без null«Архітектура Ворога»М2
ЛР7Читання файлу з обробкою помилок«Мінне Поле»М2
ЛР8Модуль на WAT вручну«Пряма Ін'єкція»М3
ЛР9Той самий алгоритм у двох асемблерах«Розтин Системи»М3
ЛР10Ядро на Rust у WASM на сторінці з відтворюваною збіркою«Звільнення»М3

Кожна ЛР має сюжетну й академічну версію з однаковими вимогами; три рівні → «3» / «4» / «5»

Теми СРС — модуль 1

ТемаДо якої ЛР і рівня готує
СРС 01Простори імен Linux (PID, NET, MNT, UTS, IPC, USER): що ізолює коженЛР1 · рівень 2 → «4»
СРС 02Групи керування cgroups v2: обмеження CPU та пам'яті контейнераЛР1 · рівень 3 → «5»
СРС 03OverlayFS і шари образу: як влаштовано об'єднану файлову системуЛР2 · рівень 2 → «4»
СРС 04Відтворюваність збірки і довіра до образу (digest, pin версій)ЛР2 · рівень 3 → «5»
СРС 05Мережі Docker (bridge/none/host) і службове DNS між контейнерамиЛР3 · рівень 2 → «4»
СРС 06Керування секретами: env проти файлів проти docker secretsЛР3 · рівень 3 → «5»

Виконуються на 2-й годині відповідної лекції; окремо не оцінюються

Теми СРС — модуль 2

ТемаДо якої ЛР і рівня готує
СРС 07Модель володіння Rust проти збирача сміття і ручного керування пам'яттюЛР4 · рівень 2 → «4»
СРС 08Екосистема crates.io, Cargo.toml/Cargo.lock і семантичне версіонування залежностейЛР4 · рівень 3 → «5»
СРС 09Часи життя (lifetimes) у сигнатурах функцій: що саме перевіряє компіляторЛР5 · рівень 2 → «4»
СРС 10Rc і RefCell: спільне володіння та внутрішня мутабельність без гонокЛР5 · рівень 3 → «5»
СРС 11Алгебраїчні типи даних (enum) і вичерпне зіставлення зі зразком (match)ЛР6 · рівень 2 → «4»
СРС 12Патерн «зробити некоректний стан непредставним» (make illegal states unrepresentable)ЛР6 · рівень 3 → «5»
СРС 13Result<T, E> проти panic!: коли доречна відновна відмова, а коли зупинка програмиЛР7 · рівень 2 → «4»
СРС 14Власні типи помилок і трейт std::error::Error: Display, Debug, BoxЛР7 · рівень 3 → «5»

Виконуються на 2-й годині відповідної лекції; окремо не оцінюються

Теми СРС — модуль 3

ТемаДо якої ЛР і рівня готує
СРС 15Стекова машина WebAssembly і структура текстового формату .watЛР8 · рівень 2 → «4»
СРС 16Лінійна пам'ять WASM і межі безпеки пісочниціЛР8 · рівень 3 → «5»
СРС 17Угоди виклику (calling conventions) x86-64: System V AMD64 ABIЛР9 · рівень 2 → «4»
СРС 18Інструменти дизасемблювання: objdump та wasm-objdump, синтаксис AT&T проти IntelЛР9 · рівень 3 → «5»
СРС 19Межа Rust↔JS через wasm-bindgen: маршалінг типів і виклик з JavaScriptЛР10 · рівень 2 → «4»
СРС 20Відтворювані збірки Rust→WASM і цілісність ланцюга постачання (supply chain)ЛР10 · рівень 3 → «5»

Виконуються на 2-й годині відповідної лекції; окремо не оцінюються

Шлях однієї лабораторної

  1. 1
    Відкрити місіюсайт → сюжет або академічна версія; контейнер піднімається сам
  2. 2
    Виконати рівень 1за кроками з очікуваним виводом; REPORT.md
  3. 3
    Здати тегомgit tag submit/labNN && git push --tags → автотести
  4. 4
    Захистити 2 / 3пояснити механізм наживо; розширення за контрактом
  5. 5
    Підвищити до кінця модуляоцінка не остаточна, поки модуль відкритий

Дві версії однієї лабораторної

Сюжетна (основна для студента)
  • Наскрізна історія про С.І.Д.
  • Теорія вплетена в сцени
  • Рівні як місії, пасхалки, арт
Академічна
  • Мета · теорія · порядок виконання
  • Ті самі кроки й критерії
  • Зручна для звіту й захисту

Перемикач — угорі кожної сторінки; вимоги ідентичні

Як побудоване лекційне заняття (2 год)

  • Перша частина — презентація теми: ключова ідея, механізм, живе демо в терміналі
  • Друга частина — самостійна робота (СРС): дві теми на кожну лекцію, працюємо в аудиторії
  • Матеріали СРС публікуються в Google Classroom разом із лекцією
  • СРС не оцінюється окремо — вона готує до захисту (рівень 2) і розширення (рівень 3) відповідної лабораторної

СРС має подвійний зв'язок: до лекції (коли робимо) і до лабораторної (навіщо робимо)

Лабораторні: три рівні — три оцінки

  • Рівень 1 → «3»: базове завдання за покроковою інструкцією; перевіряють автотести
  • Рівень 2 → «4»: пояснити механізм і показати наживо; захист (усно, з демонстрацією)
  • Рівень 3 → «5»: розширення — автоматизація, оптимізація, власне рішення за контрактом
  • Рівень обираєш сам; вищий включає попередні. Підвищити рівень можна до закриття модуля

Підкреслити: «3» — це вже робоча, перевірена автотестами лабораторна, а не «заради галочки»

Робоче середовище: Docker-контейнер розробника

  • Усі ЛР виконуються в підготовленому контейнері з уже встановленими інструментами саме для цієї роботи
  • Модуль 1 — Ubuntu 24.04 + Docker Engine; модуль 2 — Rust 1.79 + Cargo; модуль 3 — WABT, Node.js, clang, wasm-pack
  • Однакове середовище вдома, в коледжі, з будь-якого пристрою через браузер (GitHub Codespaces / кабінет курсу)
  • Код живе в твоєму навчальному репозиторії на GitHub — контейнер можна прибрати, репозиторій лишається

Демо: відкрити середовище ЛР1, набрати cat /etc/os-release і docker version

Перша перевірка середовища

bash
cat /etc/os-release | head -2
docker version
cat README.md        # інструкція до роботи — прямо в терміналі
docker run --help    # довідка з будь-якої команди

Якщо це працює — середовище готове; далі все за інструкцією лабораторної

Здача робіт

  • Один навчальний репозиторій на семестр, каталог на кожну ЛР: lab01/, lab02/, …
  • У каталозі — код і REPORT.md: варіант, вивід команд кожного кроку, відповіді на контрольні питання
  • Здача — тегом submit/labNN у репозиторії; автотести запускаються за тегом
  • Варіант завдання залежить від номера в списку групи (N % 4 або N % 3) — вказуй його на початку звіту

Показати на сайті Лабораторну 0 — там покроково, з командами git

Здача тегом

bash
git add lab01 && git commit -m "lab01: рівень 2"
git tag submit/lab01 && git push --tags
# повторна здача після покращень:
git tag -f submit/lab01 && git push -f --tags

Тег — це «я здаю». Перевстановлений тег — «я здаю кращу версію»

Сайт курсу: дві версії кожної лабораторної

  • Сюжетна версія — наскрізна історія про ШІ-компаньйона С.І.Д.: технічні відомості вплетені в оповідання; для студента вона основна
  • Академічна версія — та сама робота мовою методички: мета, теорія, порядок виконання, критерії; зручна для звіту
  • Перемикач між версіями — угорі кожної сторінки; зміст і вимоги ідентичні
  • Лекції та конспекти — академічні; СРС — з коротким сюжетним обрамленням
  • На кожній сторінці — блок «Команди на цій сторінці»: кожна команда терміналу одним реченням

Показати ЛР1 у двох версіях і блок команд; QR — сайт відкриваємо просто зараз

docs.sp.ordynski.com

Політики курсу

  • Дедлайни — у силабусі й розкладі; ЛР відкриваються за графіком, Лабораторна 0 і Лекція 0 — відкриті завжди
  • Академічна доброчесність: код пишеш сам; на захисті пояснюєш кожен рядок
  • ШІ-інструменти дозволені як помічник (пояснити, підказати, перевірити) — із зазначенням у звіті; не дозволені як автор роботи, яку ти не можеш пояснити
  • Сертифікати з профільних курсів (Docker, Rust) можуть зараховуватись як рівень 2 відповідної ЛР — за процедурою силабуса

РН17/ЗК9: обґрунтований вибір цифрових інструментів і ШІ з дотриманням доброчесності

Інструменти й джерела на семестр

  • Docker Engine і документація docs.docker.com; man-pages Linux (namespaces(7), cgroups(7))
  • Rust: The Rust Programming Language (Klabnik, Nichols), Rust by Example, Comprehensive Rust (Google)
  • WebAssembly: WABT, MDN WebAssembly, wasm-bindgen guide, Compiler Explorer
  • GitHub: навчальний репозиторій, Codespaces; Google Classroom — оголошення, СРС, здача звітів

Повний список — розділ «Джерела» робочої програми

Що зробити до наступного заняття

  • Прочитати Лабораторну 0 («Перше ввімкнення») — вхід у курс і в історію
  • Створити навчальний репозиторій за шаблоном і відкрити середовище; перевірити docker version
  • Обрати стать протагоніста в сюжетній версії (модалка на першій сторінці історії) — це впливає лише на текст
  • Наступна лекція: три межі курсу — процес, адресний простір, системні виклики
docs.sp.ordynski.com/lab0 → Лабораторна 0

🥚 У прикладі здачі коміт підписано «lab01: рівень 2», а в Лабораторній 0 на дні голопроєктора вигравіювано C1D — шістнадцяткове число, яке дорівнює 3101. Запам'ятай його: воно трапиться в курсі не раз.

VTFK · TERMLINK · L00← → · space · f — на весь екран