REKLAMA

21-letnia Polka naprawiła Linuxa. I ma dla nas ważną lekcję

Ta usterka przez dwie dekady dręczyła użytkowników klasycznego środowiska linuxowego - Enlightenment E16. Kamila Szewczyk zamiast narzekać zdecydowała się ją… po prostu usunąć. Zrobiła coś, czego nikt nie potrafił przez dekady.

Polka naprawia Linuxa Enlightenment Kamila Szewczyk
REKLAMA

Młoda programistka, 21‑letnia Kamila Szewczyk, znalazła i naprawiła błąd w kodzie menedżera okien Enlightenment E16. Błąd, który siedział tam od około 2006 r. I który potrafił zawiesić cały pulpit jednym… za długim tytułem okna. Nie dość, że zawstydziła starszych kolegów i koleżanki, to jeszcze na dodatek była uprzejma poświęcić swój czas i opisać na swoim blogu, jak odkryła, zdebugowała i poprawiła błąd. Niezwykle przyjemna lektura.

REKLAMA

Co to w ogóle jest Enlightenment E16 i kto go jeszcze używa?

Enlightenment to jeden z najstarszych wciąż rozwijanych menedżerów okien dla Uniksa i Linuksa. Projekt wystartował w 1997 r., a gałąź E16 (DR16) pojawiła się w 1999 r. - i żyje do dziś, choć większość świata dawno przesiadła się na nowsze wcielenia Enlightenment albo na zupełnie inne środowiska.

Czytaj też:

E16 ma dziś status „kultowego reliktu”: lekki (Kamila podaje ok. 24 MB peak RSS), mocno konfigurowalny, przyjazny klawiaturowym wyjadaczom, do tego wciąż „ładny” w swoim retro‑stylu. To typ oprogramowania, które nie goni za modą - zamiast tego latami szlifuje to, co już ma. Nowe wersje to głównie poprawki błędów i drobne usprawnienia, a nie kolejne warstwy funkcji, których nikt nie potrzebował. 

Właśnie w takim, pozornie „domkniętym” projekcie, od dwóch dekad czekał sobie błąd, który potrafił zamrozić cały pulpit.

Enlightenment E16 (zrzut ekranowy z bloga Kamili Szewczyk)

Jak zawiesić cały pulpit jednym PDF‑em

Scenariusz, od którego zaczęła się cała historia i który Kamila opisuje, brzmi znajomo, w sumie niezależnie od używanego systemu: ostatnia chwila przed zajęciami, dopieszczanie slajdów, kilka plików PDF z wykładem i zadaniami. Kamila, doktorantka na Uniwersytecie Saary, otwiera jeden z plików w Atrilu - i nagle cały desktop się zamraża. Zero reakcji. Twardy reset sesji X11 z TTY.   

Błąd jest się w pełni powtarzalny: ten konkretny PDF = natychmiastowy freeze. Winowajcą okazuje się tytuł pliku. Mechanizm w E16 działa tak: jeśli tytuł jest za długi, to menedżer próbuje go „przeciąć” w środku i wstawić w tytule okna interfejsu wielokropek: początek tytułu…koniec tytułu. Brzmi rozsądnie. Problem w tym, że implementacja tego dopasowywania używa wariantu metody Newtona - i robi to bez żadnego limitu iteracji.

W uproszczeniu: funkcja próbuje oszacować, ile znaków trzeba „wyciąć” ze środka, żeby zmieścić się w zadanej szerokości. Liczy średnią szerokość znaku (piksele na znak), porównuje aktualną szerokość z limitem, a potem koryguje liczbę usuwanych znaków - w górę lub w dół - na podstawie tego, jak bardzo się „przestrzeliła”. Mamy przybliżenie, mamy „pochodną” (średnią szerokość znaku), poprawiamy wynik i liczymy jeszcze raz.  

Niestety metoda Newtona to algorytm, który - pisząc kolokwialnie - może się rozjechać. Może nie zbiegać w ogóle, może oscylować między dwoma punktami, może się „rozbiec” w nieskończoność. Dlatego w podręcznikach zawsze pojawia się ten sam, nudny, ale kluczowy punkt: limit iteracji i sensowna tolerancja błędu.

W E16 tego limitu nie było. Pętla działała „dopóki nie zadziała”. A w przypadku tytułu PDF‑a Kamili wpadła w idealną pułapkę: dwustanową oscylację. Raz usuwała 8 znaków, potem 11, potem znowu 8, potem 11… i tak w kółko. Tekst był za każdym razem przeliczany, fonty mierzone, ale warunek zakończenia nigdy nie był spełniony. Efekt z punktu widzenia użytkownika: cały pulpit zamrożony, bo menedżer okien kręci się w nieskończonej pętli, próbując dopasować tytuł okna.  

Trzy linijki filozofii w trzech poprawkach do kodu

Kamila przygotowała łatkę do wersji E16 1.0.30 (wydanej w sierpniu 2024 r.). Poprawka jest zaskakująco prosta. Po pierwsze, wprowadza limit iteracji - 32 kroki. Jeśli po 32 próbach algorytm wciąż nie znalazł idealnego dopasowania, a aktualny wariant tytułu mieści się w zadanej szerokości, to po prostu go akceptuje. Jeśli się nie mieści - zwiększa liczbę usuwanych znaków o 1 i próbuje jeszcze raz. Koniec z nieskończonym kręceniem się w kółko.

Po drugie, limit dla parametru nuke_count: liczba usuwanych znaków nie może spaść poniżej 1. To zabezpiecza przed kuriozalnymi przypadkami, w których korekta w dół powoduje, że „ogon” tytułu zaczyna nachodzić na „głowę” - dostajemy wtedy dziwne, zdegenerowane ciągi znaków.

Po trzecie, limit dla cw, czyli średniej szerokości znaku: nie może spaść poniżej 1. Dzięki temu nawet jeśli pomiar szerokości tekstu zwróci coś patologicznego (np. zero), to nie zamienimy wzorów na krok Newtona w dzielenie przez zero.  

„Nowe” kontra „skończone”. Co ta historia mówi o współczesnym sofcie

Kamila wprost mówi, że lubi E16 właśnie dlatego, że to oprogramowanie jest w pewnym sensie „skończone”. Nie w znaczeniu „porzucone”, tylko: ma zestaw funkcji, który jest wystarczający, a kolejne wydania to głównie poprawki błędów i drobne usprawnienia, a nie niekończący się strumień nowinek. „W kółko dostarczamy niestabilność, której nie musimy dostarczać”, jak pisze.

Kamila w swoim poście na blogu przywołuje bardzo świeże przykłady: choćby wpadkę w jądrze Linuksa 6.6 LTS, gdzie poprawka w gałęzi stabilnej sprawiła, że wywołanie fgetxattr(54321, NULL, NULL, 0) - które powinno po prostu zwrócić błąd EINVAL - powodowało crash kernela. Łatka została szybko wycofana, ale przez kilka dni w stabilnym jądrze istniał banalny wektor DoS.

Do tego dochodzi jeszcze afera z backdoorem w XZ Utils - bibliotece kompresji, która trafiła do dystrybucji w wersji z potencjalnie celowo wprowadzonym, zaawansowanym backdoorem. Kamila opisuje moment, w którym na laptopie z Debianem Sid w trakcie kompilacji kodu czyta o XZ 5.6.0 i z przerażeniem sprawdza, czy przypadkiem nie ma tej wersji w systemie.

Na tym tle „stare, nudne” oprogramowanie rozwijane przez mały zespół z niewielką liczbą funkcji i powoli malejącą liczbą bugów zaczyna wyglądać jak całkiem rozsądna strategia. Mniej wektorów ataku, mniej niespodzianek, mniej feature’ów, których i tak nie użyjesz.

Co z tego wynika dla zwykłego użytkownika (który nie pisze własnego menedżera okien)

Jeśli na co dzień żyjesz w świecie elektroniki użytkowej, to ta historia brzmi znajomo także poza Linuksem. Telefony, telewizory, routery, konsole - wszystko żyje w trybie ciągłej aktualizacji. Nowe funkcje, nowe integracje, nowe UI, nowe bugi.

Kamila sugeruje bardzo pragmatyczne podejście: jeśli nie musisz, to nie goń za każdą nową wersją. Zostań na świeżym, ale stabilnym wydaniu - najlepiej LTS - i pozwól, żeby liczba błędów w tej konkretnej gałęzi z czasem malała. Aktualizować łatki bezpieczeństwa, ale nie rzucać się na każdą „rewolucję” w interfejsie czy zestawie funkcji.  

REKLAMA

To nie jest recepta dla wszystkich - są scenariusze, w których trzeba mieć absolutnie najnowsze biblioteki, sterowniki czy API. Ale dla ogromnej części użytkowników i administratorów to podejście „żyj z tym co działa i patrz, jak maleje liczba bugów” jest po prostu rozsądne. I bardzo odświeżające.

REKLAMA
Najnowsze
Aktualizacja: 2026-04-17T20:23:15+02:00
Aktualizacja: 2026-04-17T20:09:25+02:00
Aktualizacja: 2026-04-17T18:55:55+02:00
Aktualizacja: 2026-04-17T18:42:44+02:00
Aktualizacja: 2026-04-17T18:19:14+02:00
Aktualizacja: 2026-04-17T18:17:29+02:00
Aktualizacja: 2026-04-17T17:22:31+02:00
Aktualizacja: 2026-04-17T17:18:53+02:00
Aktualizacja: 2026-04-17T16:42:58+02:00
Aktualizacja: 2026-04-17T16:36:03+02:00
Aktualizacja: 2026-04-17T16:33:48+02:00
Aktualizacja: 2026-04-17T15:36:18+02:00
Aktualizacja: 2026-04-17T15:27:37+02:00
REKLAMA
REKLAMA
REKLAMA