Přístupnostní navigace
E-application
Search Search Close
Bachelor's Thesis
Author of thesis: Denis Milistenfer
Acad. year: 2025/2026
Supervisor: Ing. Jan Pluskal, Ph.D.
Reviewer: Ing. Miroslav Šafář
Package updates merged into the Nixpkgs collection do not reach users immediately - before being included in a distribution channel, they must pass through the automated build infrastructure Hydra, a process that can take several days. Without actively monitoring the repository, users have no way of learning about a new version in time. This thesis addresses this problem by designing and implementing a multi-user notification system that tracks package version changes directly at the Nixpkgs repository level and notifies users via email or webhooks. The system supports tracking packages across selected repository branches, authenticates users via the OIDC protocol, and handles concurrent requests efficiently. The result is a functional, deployable system verified by tests and real-world operation. The main contribution of this work is improved awareness of package version changes and the ability to react to them promptly, which is particularly valuable in the case of security updates.
Nix, Nixpkgs, package management, package collection, package version monitoring, multi-user web service, notification system, OpenID Connect, client-server architecture
Date of defence
15.06.2026
Result of the defence
Defended (thesis was successfully defended)
Grading
A
Process of defence
Student nejprve prezentoval výsledky, kterých dosáhl v rámci své práce. Komise se poté seznámila s hodnocením vedoucího a posudkem oponenta práce. Student následně odpověděl na otázku oponenta. Komise se na základě posudku oponenta, hodnocení vedoucího, přednesené prezentace a odpovědí studenta na položenou otázku rozhodla práci hodnotit stupněm A.
Topics for thesis defence
Language of thesis
Slovak
Faculty
Fakulta informačních technologií
Department
Department of Information Systems
Study programme
Information Technology (BIT)
Composition of Committee
doc. Dr. Ing. Dušan Kolář (předseda) doc. Dr. Ing. Otto Fučík (místopředseda) RNDr. Marek Rychlý, Ph.D. (člen) Ing. František Grézl, Ph.D. (člen) Ing. Tomáš Goldmann, Ph.D. (člen)
Supervisor’s reportIng. Jan Pluskal, Ph.D.
Student odvedl vynikající bakalářskou práci s reálným přesahem do praxe. Výsledný systém spolehlivě plní účel, pro který byl navržen, je nasazen na infrastruktuře skupiny NES@FIT a denně používán, což je nejlepší možný důkaz kvality realizačního výstupu.
Oceňuji zejména technickou hloubku implementační kapitoly s ukázkami kódu, návrh prioritního plánování kontrol verzí (obr. 3.4) a asynchronního doručování notifikací (obr. 3.5), promyšlené ošetření souběžnosti pomocí kombinace SkipInterval a singleflight, dodržení bezpečnostních zásad u OIDC (PKCE, state, nonce, RenewToken pro ochranu proti session fixation), ochranu proti SSRF u uživatelem konfigurovaných webhooků i důslednou testovací sadu kombinující integrační testy s testcontainers-go, jednotkové testy a zátěžové měření nástrojem k6.
Reflektivní psaní v kapitole implementace, kde student rozlišuje původní návrh a jeho úpravy během realizace (rozšíření datového modelu o entity check_state a system_config), je nadstandardní. Přes drobné stylistické nedostatky v textu (text je psán slovensky, ojedinělé chyby v diakritice) hodnotím celkovou úroveň práce jako vynikající.
Cílem práce bylo navrhnout a implementovat multiuživatelský notifikační systém, který sleduje změny verzí balíků v kolekci Nixpkgs přímo na úrovni repozitáře a doručuje uživatelům informace o těchto změnách e-mailem nebo webhookem dříve, než se nové verze stihnou propagovat skrze oficiální distribuční kanály. Zadání bylo vypsáno jako reakce na konkrétní potřebu sledování bezpečnostně relevantních aktualizací v ekosystému Nix. Kombinace více doménových oblastí, konkrétně OIDC autentizace s podporou více poskytovatelů identity, paralelního zpracování časově náročných volání nástroje nix, asynchronního doručování notifikací s opakovanými pokusy o doručení a obecné architektury klient-server, činí zadání náročnější. S dosaženými výsledky jsem velmi spokojen, zadání bylo bezezbytku splněno a v průběhu řešení rozšířeno o sledování dosud neexistujících balíků (entita watchlist) na základě podnětu z komunity.
Student samostatně nalezl 36 referenčních zdrojů a prokázal velmi dobrou orientaci v odborné literatuře. Kombinuje primární knižní prameny (Kleppmann, Madden, Richer/Sanso, Tanenbaum/Steen, Zalewski, Jackson), normativní dokumenty (RFC 6749, RFC 7636, RFC 5321, OpenID Connect Core 1.0) a aktuální online materiály, vědecké články k ekosystému Nix (Dolstra, Hausch a kol., Kowalewski a Seeber) i sekundární zdroje s praktickými doporučeními. Citační etika je dodržena, citace v textu jsou důsledně použity u všech převzatých tvrzení i u jednotlivých normativních RFC.
Student pracoval na práci kontinuálně a samostatně. Konzultace probíhaly pravidelně, student na ně chodil vždy velmi dobře připraven s konkrétními otázkami a předem promyšlenými variantami řešení. Připomínky a podněty z mé strany opakovaně zapracovával a v dalších iteracích se k nim sám vracel. Velmi kladně hodnotím schopnost samostatně rozhodovat o návrhových kompromisech a věcně je v textu obhájit, ať už jde o volbu server-side renderingu s kombinací htmx a templ, použití vzoru biased priority select v Go nebo deduplikaci souběžných volání pomocí singleflight (sekce 4.8 a 4.7).
Práce byla dokončena se značným předstihem a opakovaně konzultována. Závěrečná fáze probíhala iterativně, kdy student dokázal zapracovat veškeré připomínky k textu i k implementaci, finální podoba byla pečlivě laděna do detailu. Připravenost na odevzdání byla vzorná.
Zdrojové kódy jsou veřejně dostupné v GitHub repozitáři projektu pod otevřenou licencí. Systém je aktivně nasazen v rámci infrastruktury výzkumné skupiny NES@FIT a je mnou prakticky používán. Zpětná vazba od komunity (mimo jiné podnět uživatele z platformy Reddit) byla studentem reflektována přímo do funkcionality projektu, konkrétně se jedná o doplnění sledování balíků, které v Nixpkgs zatím neexistují.
Grade proposed by supervisor: A
Reviewer’s reportIng. Miroslav Šafář
Student ve své bakalářské práci zpracoval zadání zaměřené na návrh a implementaci multiuživatelského notifikačního systému pro sledování změn v kolekci balíčků Nixpkgs. Zadání považuji za splněné ve všech jeho bodech. Práce prokazuje velmi dobrou orientaci studenta v řešené problematice, schopnost navrhnout robustní a škálovatelné řešení a následně jej kvalitně implementovat.
Za nejsilnější části práce považuji návrh architektury systému, implementaci autentifikace pomocí OpenID Connect a celkový důraz na robustnost aplikace. Pozitivně hodnotím zejména ošetření výpadků externích služeb, omezení frekvence požadavků, zabezpečení webhooků a využití prioritních front při plánování kontrol balíčků. Oceňuji také velmi dobře zpracovanou technickou zprávu, která srozumitelně vysvětluje jak teoretická východiska, tak návrh a implementaci výsledného systému.
Dílčí slabiny spatřuji především v rozsahu ověření výsledného řešení. Uživatelské testování bylo provedeno s uživateli bez předchozí zkušenosti s Nix, přestože aplikace cílí zejména na správce systémů a vývojáře pracující s tímto ekosystémem. Zátěžové testování periodických kontrol by si rovněž zasloužilo ověření na větším množství sledovaných balíčků. Tyto nedostatky však považuji za dílčí a nesnižují celkově velmi vysokou kvalitu práce.
Implementovaná aplikace byla nasazena na infrastruktuře skupiny NES@FIT a je aktivně využívána, což dokládá její praktickou využitelnost. Celkově práci hodnotím jako velmi kvalitní inženýrský výstup s praktickým přínosem, a proto ji hodnotím stupněm A.
Evaluation level: průměrně obtížné zadání
Student měl za úkol nastudovat správce balíčků Nix a kolekci balíčků Nixpkgs a následně navrhnout a implementovat jednoduchý informační systém pro správu sledovaných balíčků, jejich periodickou kontrolu a zasílání notifikací. Obtížnost práce spočívá především v nefunkčních požadavcích kladených na tento systém, zejména v požadavcích na škálovatelnost navrženého řešení, odolnost vůči chybám a ochranu proti útokům zlomyslných aktérů. Zadání této bakalářské práce proto hodnotím jako průměrně obtížné.
Práce má logickou strukturu a jednotlivé kapitoly na sebe dobře navazují. V teoretické části je čtenáři nejprve vysvětlen správce balíčků Nix společně s jeho ekosystémem. Následně jsou popsány požadavky na robustní a škálovatelné aplikace a velmi dobře je vysvětlen také protokol OpenID Connect.
Kapitolu návrhu aplikace považuji za velmi dobře zpracovanou. Autor zde navržené řešení popisuje do značné míry detailu a jednotlivá architektonická rozhodnutí vhodně zdůvodňuje. Navazující kapitola implementace představuje kvalitní dokumentaci vytvořeného softwaru. Autor se implementované aplikaci věnuje jak na vyšší úrovni z pohledu celkové architektury, tak na nižší úrovni při vysvětlování konkrétních mechanismů, například dispečeru společně s poolem pracovníků.
Práce je po formální stránce zdařilá. V textu se sice vyskytuje několik gramatických chyb, překlepů a nekonzistencí ve způsobu zápisu některých anglických technických termínů, tyto nedostatky však nenarušují srozumitelnost práce.
Výsledek hodnotím jako velmi kvalitní inženýrský výstup. Za nejlépe zpracované části považuji zejména implementaci autentifikace pomocí OpenID Connect a důraz na robustnost a škálovatelnost navrženého řešení, a to například v podobě ošetření výpadků externích služeb, omezení frekvence požadavků nebo zabezpečení webhooků. Pozitivně hodnotím také využití vysokoprioritní a nízkoprioritní fronty při plánování kontrol, které zamezuje blokování uživatelských požadavků periodickou kontrolou.
Dílčí slabinu spatřuji v uživatelském testování, které bylo provedeno s uživateli bez předchozí zkušenosti s Nix, přestože aplikace cílí především na správce systémů a vývojáře pracující s tímto ekosystémem. Zátěžové testování periodických kontrol by si rovněž zasloužilo ověření na větším množství sledovaných balíčků.
Implementovaná aplikace byla nasazena na infrastruktuře skupiny NES@FIT a je aktivně využívána. Výsledek práce proto považuji za prakticky využitelný. Aplikace má zároveň potenciál uplatnit se i v širší komunitě kolem systému Nix.
Evaluation level: zadání splněno
Student splnil zadání ve všech jeho bodech.
Evaluation level: je v obvyklém rozmezí
Rozsah práce se nachází na horní hranici doporučeného rozsahu.
Student vhodně využívá jak knižní prameny, tak vědecké práce věnující se platformě Nix a souvisejícím tématům. Svá tvrzení řádně opírá o relevantní zdroje, díky čemuž práce působí velmi důvěryhodně. Za zvlášť zdařilou považuji práci s literaturou v části věnované návrhu robustní a škálovatelné aplikace. Menší formální nedostatek spatřuji v seznamu literatury, kde je duplicitně uveden záznam RFC 6749, přičemž oba záznamy se liší pouze datem citace.
Grade proposed by reviewer: A
Responsibility: Mgr. et Mgr. Hana Odstrčilová