Bachelor's Thesis

Notifikační systém pro sledování změn v Nixpkgs

Final Thesis 2.13 MB

Author of thesis: Denis Milistenfer

Acad. year: 2025/2026

Supervisor: Ing. Jan Pluskal, Ph.D.

Reviewer: Ing. Miroslav Šafář

Abstract:

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.

Keywords:

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)

znamkaAznamka

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

  1. Práce popisuje fronty, worker pool, SkipInterval a deduplikaci souběžných volání pomocí singleflight, ale explicitně neřeší situaci, kdy periodická kontrola všech balíčků nestihne doběhnout před dalším intervalem. Není zřejmé, zda se další cyklus odloží, zda se úlohy již čekající ve frontě deduplikují, ani jak se systém zachová při zaplnění nízkoprioritní fronty.

Language of thesis

Slovak

Faculty

Department

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 report
Ing. 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í.

Evaluation criteria Verbal classification
Informace k zadání

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.

Práce s literaturou

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.

Aktivita během řešení, konzultace, komunikace

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).

Aktivita při dokončování

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á.

Publikační činnost, ocenění

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í.

Points proposed by supervisor: 90

Grade proposed by supervisor: A

Reviewer’s report
Ing. 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 criteria Verbal classification Points
Náročnost zadání

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é.

Prezentační úroveň technické zprávy

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ů.

100
Formální úprava technické zprávy

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.

90
Realizační výstup

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ů.

95
Využitelnost výsledků

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.

Rozsah splnění požadavků zadání

Evaluation level: zadání splněno

Student splnil zadání ve všech jeho bodech.

Rozsah technické zprávy

Evaluation level: je v obvyklém rozmezí

Rozsah práce se nachází na horní hranici doporučeného rozsahu.

Práce s literaturou

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.

90
Topics for thesis defence:
  1. Práce popisuje fronty, worker pool, SkipInterval a deduplikaci souběžných volání pomocí singleflight, ale explicitně neřeší situaci, kdy periodická kontrola všech balíčků nestihne doběhnout před dalším intervalem. Není zřejmé, zda se další cyklus odloží, zda se úlohy již čekající ve frontě deduplikují, ani jak se systém zachová při zaplnění nízkoprioritní fronty.
Points proposed by reviewer: 95

Grade proposed by reviewer: A

Responsibility: Mgr. et Mgr. Hana Odstrčilová