Про що курс, як побудований семестр і що від тебе очікується
Системне програмування вивчає програмне забезпечення, яке працює з ресурсами обчислювальної машини безпосередньо: процесами й потоками, пам'яттю, файлами, мережевими сокетами, набором інструкцій процесора. На відміну від прикладного програмування, де інтерпретатор, збирач сміття або браузер приховують ці деталі, системний програміст має розуміти, що відбувається на кожній межі між його кодом і машиною — і вміти це перевірити.
Курс побудований навколо трьох таких меж:
Обсяг — 3 кредити ЄКТС (90 годин): 20 годин лекцій, 20 годин лабораторних робіт, 50 годин самостійної роботи. Форма контролю — залік, накопичувальний: підсумок формують рівні, досягнуті в десяти лабораторних роботах, і результати трьох модульних контролів.
Лекційне заняття триває дві години й складається з презентації теми (з живим демо в терміналі) та самостійної роботи над двома темами СРС, що відповідають цій лекції. Матеріали СРС публікуються в Google Classroom разом із лекцією. СРС окремо не оцінюється: перша тема готує до захисту рівня 2, друга — до розширення рівня 3 відповідної лабораторної роботи.
Лабораторна робота має три рівні: рівень 1 (оцінка 3) перевіряється автотестами за покроковою інструкцією; рівень 2 (оцінка 4) — захист із поясненням механізму й живою демонстрацією; рівень 3 (оцінка 5) — розширення за контрактом (автоматизація, оптимізація, власне рішення). Студент обирає рівень самостійно; вищий рівень включає виконання попередніх.
Усі роботи виконуються в підготовленому контейнері розробника з попередньо встановленими інструментами відповідного модуля (Ubuntu 24.04 + Docker Engine; Rust 1.79 + Cargo; WABT, Node.js, clang, wasm-pack). Опис середовища кожної роботи зафіксований у конфігурації курсу і використовується для ініціалізації робочого простору — у кабінеті курсу або в GitHub Codespaces навчального репозиторію.
Здача — тегом submit/labNN у навчальному репозиторії; звіт REPORT.md містить варіант, вивід команд кожного кроку та відповіді на контрольні питання. Детально порядок здачі, перевірка середовища та робота з довідкою (man, --help, cat README.md) описані в Лабораторній 0, яка відкрита протягом усього семестру.
Кожна лабораторна робота має дві версії з ідентичними вимогами: сюжетну (наскрізна історія, у яку вплетені технічні відомості — основна для студента) та академічну (методична форма). Лекції та конспекти — академічні. На кожній сторінці лабораторної, СРС і конспекту наведено блок «Команди на цій сторінці» з однореченнєвим описом кожної команди терміналу.
Показати сайт наживо паралельно зі слайдами
Одна ідея на весь семестр: межа. Усі три модулі — про те, де вона проходить і хто її охороняє
Показати на сайті три «стрічки» модулів
Цифри — за тарифікацією 2026/27; Лекція 0 і Лабораторна 0 — поза сіткою годин, додаткові матеріали
СРС має подвійний зв'язок: подається з лекцією, готує до захисту і розширення лабораторної
| № | Тема | Модуль |
|---|---|---|
| Л1 | Три межі курсу: процес, адресний простір, системні виклики | М1 |
| Л2 | Простори імен, групи керування (cgroups), привілеї | М1 |
| Л3 | Образ як шари, Dockerfile, кеш, багатоетапна збірка | М1 |
| Л4 | Чому програми псують пам'ять | М2 |
| Л5 | Володіння (ownership) | М2 |
| Л6 | Запозичення і зрізи | М2 |
| Л7 | Option і Result | М2 |
| Л8 | Асемблер x86-64 | М3 |
| Л9 | WebAssembly як переносний асемблер | М3 |
| Л10 | Rust у WASM, межа з host-середовищем | М3 |
Кожна лекція — одна ідея й одне живе демо; слайди й конспект — на сайті
| № | Академічна назва | Сюжетна назва | М |
|---|---|---|---|
| ЛР1 | Контейнер розробника й огляд просторів імен | «Ізоляційна Капсула» | М1 |
| ЛР2 | Dockerfile з багатоетапною збіркою і порівнянням розмірів | «Кібер-Дієта» | М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»
| № | Тема | До якої ЛР і рівня готує |
|---|---|---|
| СРС 01 | Простори імен Linux (PID, NET, MNT, UTS, IPC, USER): що ізолює кожен | ЛР1 · рівень 2 → «4» |
| СРС 02 | Групи керування cgroups v2: обмеження CPU та пам'яті контейнера | ЛР1 · рівень 3 → «5» |
| СРС 03 | OverlayFS і шари образу: як влаштовано об'єднану файлову систему | ЛР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-й годині відповідної лекції; окремо не оцінюються
| № | Тема | До якої ЛР і рівня готує |
|---|---|---|
| СРС 07 | Модель володіння Rust проти збирача сміття і ручного керування пам'яттю | ЛР4 · рівень 2 → «4» |
| СРС 08 | Екосистема crates.io, Cargo.toml/Cargo.lock і семантичне версіонування залежностей | ЛР4 · рівень 3 → «5» |
| СРС 09 | Часи життя (lifetimes) у сигнатурах функцій: що саме перевіряє компілятор | ЛР5 · рівень 2 → «4» |
| СРС 10 | Rc | ЛР5 · рівень 3 → «5» |
| СРС 11 | Алгебраїчні типи даних (enum) і вичерпне зіставлення зі зразком (match) | ЛР6 · рівень 2 → «4» |
| СРС 12 | Патерн «зробити некоректний стан непредставним» (make illegal states unrepresentable) | ЛР6 · рівень 3 → «5» |
| СРС 13 | Result<T, E> проти panic!: коли доречна відновна відмова, а коли зупинка програми | ЛР7 · рівень 2 → «4» |
| СРС 14 | Власні типи помилок і трейт std::error::Error: Display, Debug, Box | ЛР7 · рівень 3 → «5» |
Виконуються на 2-й годині відповідної лекції; окремо не оцінюються
| № | Тема | До якої ЛР і рівня готує |
|---|---|---|
| СРС 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-й годині відповідної лекції; окремо не оцінюються
Перемикач — угорі кожної сторінки; вимоги ідентичні
СРС має подвійний зв'язок: до лекції (коли робимо) і до лабораторної (навіщо робимо)
Підкреслити: «3» — це вже робоча, перевірена автотестами лабораторна, а не «заради галочки»
Демо: відкрити середовище ЛР1, набрати cat /etc/os-release і docker version
cat /etc/os-release | head -2
docker version
cat README.md # інструкція до роботи — прямо в терміналі
docker run --help # довідка з будь-якої командиЯкщо це працює — середовище готове; далі все за інструкцією лабораторної
Показати на сайті Лабораторну 0 — там покроково, з командами git
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 — сайт відкриваємо просто зараз
РН17/ЗК9: обґрунтований вибір цифрових інструментів і ШІ з дотриманням доброчесності
Повний список — розділ «Джерела» робочої програми
Кожна команда терміналу з цієї сторінки — одним реченням. Позначка нове — команда зустрічається в курсі вперше; далі вважаємо її знайомою.
catнове/proc/....headновеhead -5 — перші п'ять).docker versionновеdockerновеdocker <підкоманда> --help — довідка).docker runновеdocker run -it ubuntu:24.04 bash — інтерактивно з терміналом; -d — у фоні; --rm — видалити після виходу; -p 8080:80 — прокинути порт).gitновеsubmit/labNN.git tagновеgit tag submit/lab01) — так ти «здаєш» лабораторну.git pushновеgit push --tags).manновеman ps; вихід — q.💡 Прочитати README прямо в терміналі: cat README.md (виведе весь файл) або less README.md (посторінково; вихід — клавіша q).
Довідка з будь-якої команди: man curl (повний посібник, вихід — q) або коротко curl --help; для підкоманд — docker run --help, cargo build --help.