Nerd Fonts — ikony i glify w czcionkach terminalowych
Nerd Fonts dokłada tysiące ikon do popularnych czcionek programistycznych. Najciekawszy plik w tym repozytorium to jednak audyt licencji — i on wyjaśnia, dlaczego IBM Plex Mono nazywa się tu BlexMono.
Znak rozgałęzienia w znaku zachęty powłoki, ikona Dockera obok nazwy kontenera, logo Pythona przy pliku .py w drzewie katalogów. Terminal potrafi dziś wyświetlać ikony, choć nie umie wyświetlać obrazków — i rozwiązanie tej sprzeczności jest sprytne: ikony są znakami w czcionce, umieszczonymi w prywatnym obszarze Unicode, więc terminal rysuje je tak samo jak literę „a".
Nerd Fonts jest projektem, który to robi: bierze popularne czcionki programistyczne i dokłada do nich tysiące glifów z kilkunastu zbiorów ikon. Efekt zna każdy, kto konfigurował sobie znak zachęty. Ale w tym repozytorium jest plik ciekawszy niż same czcionki — i o nim będzie duża część tego wpisu, bo dotyczy pytania, które w firmie zadaje się poniewczasie.
Stan projektu
Repozytorium: ryanoasis/nerd-fonts. 64 566 gwiazdek i, co przy tej skali zdumiewające, dwadzieścia otwartych zgłoszeń. Start w grudniu 2014, więc dwanaście lat historii. Repozytorium waży blisko trzydzieści gigabajtów, bo zawiera zarówno czcionki źródłowe, jak i wszystkie warianty załatane.
Wydania: v3.5.1 z 21 sierpnia 2026 i v3.5.0 z 2 sierpnia 2026, wcześniej v3.4.0 z kwietnia 2025 i v3.3.0 z listopada 2024. Rytm jest więc kilkumiesięczny, ale sierpniowe wydania pokazują, że projekt właśnie przyspieszył. Commity pochodzą z 5 września 2026, a wśród nich są zwyczajne prace utrzymaniowe: poprawki skryptu instalacyjnego i uzupełnienia dokumentacji.
Warto odnotować dwie liczby świadczące o skali współpracy: plik z listą kontrybutorów waży 84 kB, a bot dodający kolejne osoby pojawia się w historii commitów regularnie.
Dlaczego GitHub raportuje brak licencji
To pytanie prowadzi do najcenniejszej części tego projektu. GitHub pokazuje dla tego repozytorium NOASSERTION, a powód jest prosty: nie ma tu jednej licencji, bo nie może być.
Plik licencji wyjaśnia podział na trzy części. Kod źródłowy projektu — skrypty powłoki, skrypty Pythona i sam program łatający czcionki — jest na licencji MIT z prawami Ryana L. McIntyre'a. Czcionki źródłowe i załatane, wraz z katalogami zawierającymi jawne pliki licencji, są na SIL Open Font License 1.1. A poza tym, cytując: w projekcie obecnych jest wiele innych licencji, z odesłaniem do osobnego dokumentu.
Ten osobny dokument to license-audit.md i jest to artefakt, jakiego w projektach open source praktycznie się nie spotyka: audyt licencyjny każdej czcionki i każdego zbioru ikon. Zawiera listę wszystkich napotkanych licencji z krótkim omówieniem każdej, tabelę źródeł glifów wraz z ich licencjami oraz tabelę wszystkich czcionek z identyfikatorami SPDX.
Dla firmy, która chce osadzić załataną czcionkę we własnym produkcie — w aplikacji terminalowej, w motywie edytora, w interfejsie webowym — to jest dokument, od którego należy zacząć, a nie skończyć.
Zastrzeżone nazwy czcionek, czyli dlaczego IBM Plex Mono nazywa się tu BlexMono
Oto rzecz, którą widzi każdy użytkownik i której prawie nikt nie rozumie. Na liście załatanych czcionek są pozycje o nazwach wyglądających na żart: BlexMono, CaskaydiaCove, AnonymicePro, BitstromWera, AtkynsonMono. Obok nich są jednak czcionki noszące nazwy zwyczajne: Agave Nerd Font, Arimo Nerd Font, AdwaitaMono Nerd Font.
Różnica nie jest kwestią gustu, a obowiązku prawnego — i projekt oznacza ją w tabeli osobną kolumną opisaną jako *RFN, z wartością TAK albo NIE dla każdej czcionki.
RFN to Reserved Font Names, czyli zastrzeżone nazwy czcionek — klauzula licencji SIL OFL. Jej działanie jest następujące: autor czcionki może zastrzec jej nazwę, a wtedy każda zmodyfikowana wersja musi zostać przemianowana. Nie wolno rozpowszechniać przerobionej czcionki pod nazwą oryginału, bo użytkownik nie odróżniłby jej od dzieła autora. Załatanie czcionki tysiącem ikon jest oczywiście modyfikacją.
Stąd nazwy. IBM Plex Mono ma zastrzeżoną nazwę, więc wersja załatana nazywa się BlexMono. Cascadia Code — CaskaydiaCove. Anonymous Pro — AnonymicePro. Vera Sans Mono — BitstromWera. Atkinson Hyperlegible Mono — AtkynsonMono. Natomiast Agave, Arimo czy Adwaita Mono nazwy nie zastrzegają, więc mogą zachować swoją z dopiskiem „Nerd Font".
Praktyczny wniosek dla ciebie jest podwójny. Po pierwsze, szukając czcionki nie znajdziesz jej pod oryginalną nazwą, jeśli miała RFN — i to jest najczęstsza przyczyna wrażenia, że danej czcionki w projekcie nie ma. Po drugie i ważniejsze: jeśli sam załatasz czcionkę z zastrzeżoną nazwą i rozdasz ją klientom albo dołączysz do produktu, ta sama zasada obowiązuje ciebie. Musisz ją przemianować, a nie tylko dopisać „patched" do nazwy pliku.
Pozostałe licencje warte uwagi
Audyt wymienia kilkanaście licencji i kilka z nich zasługuje na osobne zdanie, bo niosą warunki, których nie ma w typowych licencjach oprogramowania.
Bitstream Vera — obejmuje między innymi DejaVu Sans Mono i OpenDyslexic. Autorzy audytu streszczają ją słowami „rób co chcesz, bez sprzedawania, trzeba przemianować czcionkę". Wymóg przemianowania jest tu więc wpisany w samą licencję, niezależnie od mechanizmu RFN.
Ubuntu Font License 1.0 — obejmuje rodzinę Ubuntu i ma wymóg nazewniczy sformułowany nietypowo, cytowany w audycie w całości: zmodyfikowane wersje, które nie zostały istotnie zmienione, muszą zachować nazwę oryginału i dodać elementy odróżniające, w formie „derivative X". Autorzy piszą przy tym otwarcie, że może istnieć pewna niejednoznaczność co do nazewnictwa, ale wierzymy, że spełniamy jej warunki — i tę szczerość doceniam bardziej niż zapewnienie o pełnej zgodności.
Czcionki podwójnie licencjonowane — Monoid występuje jako „MIT albo OFL bez RFN", a Overpass jako „OFL bez RFN albo LGPL 2.1". Przy takich pozycjach wybór licencji należy do ciebie i warto go zapisać w dokumentacji projektu, żeby nie trzeba było go odtwarzać po dwóch latach.
Licencje bez identyfikatora SPDX — Monofur oraz cała rodzina Ubuntu są oznaczone przedrostkiem LicenseRef, a audyt dodaje notatkę, że takie licencje nie mają wartości SPDX. Praktycznie znaczy to, że automatyczne narzędzia skanujące zależności ich nie rozpoznają i trafią do rubryki „nieznane" — więc jeśli w firmie prowadzicie taki rejestr, te pozycje trzeba wpisać ręcznie.
I pozycja, która wymaga najwięcej uwagi. W tabeli zbiorów ikon Font Logos jest oznaczone jako „Unlicensed", czyli bez licencji. To zbiór logotypów systemów operacyjnych i dystrybucji — a więc, poza kwestią praw autorskich, także znaków towarowych. Logo dystrybucji jest znakiem jej właściciela i użycie go w produkcie komercyjnym to osobna rozmowa niż licencja czcionki. Jeśli twój produkt ma pokazywać te ikony klientom, warto zajrzeć w warunki użycia znaków każdego z tych projektów, a nie zakładać, że obecność w czcionce cokolwiek załatwia.
Uczciwie trzeba dodać, że streszczenia licencji w audycie są pomocne, ale to streszczenia — napisane przez opiekunów projektu, nie przez prawników. Zdanie o zakazie sprzedawania przy OFL wymaga na przykład doprecyzowania, bo ta licencja zabrania sprzedawania samej czcionki, a nie sprzedawania produktu, który ją zawiera. Traktuj więc ten dokument jako doskonały punkt startowy i mapę, a nie jako opinię prawną.
Tabela, która nie może się rozjechać
Szczegół inżynierski wart pochwały, bo rozwiązuje problem, na którym takie dokumenty zwykle się psują. Tabela licencji w audycie nie jest utrzymywana ręcznie — jest generowana z danych maszynowych.
Informacje licencyjne dla każdej czcionki leżą w pliku fonts.json (plik o tej nazwie w korzeniu repozytorium to zresztą tylko wskaźnik do właściwej lokalizacji w katalogu skryptów), a na końcu audytu podane jest wprost polecenie jq, które z tego pliku produkuje widoczną tabelę.
Znaczy to dwie rzeczy. Po pierwsze, dokumentacja licencyjna nie może rozejść się z rzeczywistością, bo obie pochodzą z tego samego źródła. Po drugie i praktyczniej: jeśli potrzebujesz tych danych w swoim procesie — na przykład do wygenerowania noty licencyjnej w swoim produkcie — możesz je wziąć w formacie maszynowym, zamiast parsować tabelę w Markdownie.
Instalacja
Dróg jest cztery i różnią się bardziej niż zwykle, więc warto wiedzieć, którą wybrać.
Archiwum z wydania to najprostsza droga, gdy potrzebujesz jednej czcionki — pobierasz archiwum konkretnej rodziny, bo pełny zestaw to gigabajty.
Homebrew instaluje pojedyncze rodziny jako paczki, na przykład brew install font-hack-nerd-font. Warto wiedzieć — i README zostało niedawno o to poprawione — że Homebrew działa również na Linuksie, nie tylko na macOS.
Skrypt instalacyjny jest najwygodniejszy przy automatyzacji stanowisk i ma sensowny zestaw poleceń:
./install.sh list
./install.sh install Hack
./install.sh install all
./install.sh install # tryb interaktywny
VERBOSE=3 ./install.sh install DaddyTimeMono
GH_RELEASE_TAG=v3.2.1 ./install.sh listTa ostatnia linia jest warta zapamiętania: zmienną środowiskową można przypiąć konkretne wydanie. Przy przygotowywaniu obrazów stanowisk albo kontenerów deweloperskich to jedyny sposób, by wszyscy mieli tę samą wersję czcionki — bo różnice w wersjach glifów potrafią rozjechać znaki zachęty i szerokości kolumn.
Chocolatey albo Scoop to opcja dla Windowsa, przy czym README opisuje te repozytoria jako nieoficjalne. To istotne przy wdrożeniu firmowym: paczki nie są utrzymywane przez projekt.
Łatanie własnej czcionki
Jeśli twoja czcionka nie jest w zestawie — albo firma ma własną, markową — możesz ją załatać samodzielnie. Narzędziem jest skrypt font-patcher, uruchamiany pod FontForge, i ma bogaty zestaw opcji. Te najważniejsze:
--complete(skrótowo-c) — dodaje wszystkie dostępne glify. Bez tego dokładane są tylko wybrane zbiory.--careful— nie nadpisuje glifów, które w czcionce już są. Przy czcionce, która ma własne symbole, to opcja, którą chcesz włączyć.--mono(skrótowo-s) — tworzy czcionkę o stałej szerokości, w której zarówno istniejące, jak i dodane glify są jednoszerokościowe. To odpowiedź na najczęstszy problem: ikona szersza niż znak psuje wyrównanie w terminalu.--variable-width-glyphs— wariant przeciwny, gdy czcionka nie musi być monospace.--dry— przebieg próbny, oraz--outputdirdo wskazania katalogu wyjściowego.
Jest też opcja pozwalająca dołożyć własny zbiór glifów i opcja czytająca konfigurację z pliku, więc powtarzalne łatanie da się wpiąć w potok budowania.
Rzecz, o której trzeba wiedzieć, bo bywa źródłem zdziwienia: bez podania żadnych flag dostajesz tylko dwa zbiory glifów — Seti-UI wraz z własnymi dodatkami projektu oraz Devicons. Pozostałe dokłada się osobno albo hurtowo przez --complete. Do wyboru są: Font Awesome i jego rozszerzenie, Material Design Icons, ikony pogodowe, Octicons z GitHuba, Font Logos (dawniej Font Linux), Powerline Extra Symbols, symbole zasilania według normy IEC, Pomicons oraz Codicons.
Osobno wybiera się szerokość glifów ikon: podwójną (zmienną, proporcjonalną), pojedynczą (stałą, monospace) albo proporcjonalną. To jest właśnie ten parametr, od którego zależy, czy ikony rozjadą kolumny w terminalu — i przy czcionce do terminala odpowiedzią jest pojedyncza.
Przypominam tylko o rzeczy z poprzedniej sekcji: łatając czcionkę z zastrzeżoną nazwą, musisz ją przemianować przed rozdaniem. To dotyczy również czcionki firmowej, jeśli kupiliście ją na licencji zabraniającej modyfikacji — wtedy trzeba najpierw sprawdzić umowę z dostawcą.
Reguła RFN na żywym przykładzie
Wszystko, co napisałem wyżej o zastrzeżonych nazwach, ma w tym projekcie datowane potwierdzenie — i warto je pokazać, bo dowodzi, że nie jest to teoria.
Historia zmian wydania v3.5.0 z sierpnia 2026 ma sekcję opisaną jako zmiany łamiące zgodność, a w niej pozycję: D2Coding zostaje przemianowane na D2Koding. Zgadza się to z tabelą czcionek, w której D2Coding ma w kolumnie zastrzeżonych nazw wartość TAK. Czcionka, która przez lata była rozpowszechniana pod nazwą oryginału, została przemianowana, a zmianę uznano za łamiącą zgodność — bo dla użytkowników to znaczy, że nazwa czcionki w ich konfiguracji przestała istnieć.
To najlepszy możliwy argument za sprawdzeniem tej kolumny przed osadzeniem czcionki w produkcie. Jeśli projekt utrzymywany przez dwanaście lat przez ludzi znających te licencje musiał wykonać taką korektę, to warto założyć, że przy własnym łataniu też się pomylisz — chyba że sprawdzisz zawczasu.
W tej samej sekcji jest druga zmiana łamiąca zgodność, praktyczna dla automatyzacji: spłaszczenie podkatalogów czcionek. Kto pobiera archiwa skryptem i rozpakowuje je z założoną strukturą katalogów, ten po tej aktualizacji musi swój skrypt poprawić. Wydanie łatkowe v3.5.1 z 21 sierpnia dołożyło zresztą poprawkę do „zapomnianych" podkatalogów, więc migracja nie przeszła gładko nawet u autorów.
Z pozostałych rzeczy w tym wydaniu warto odnotować, że projekt trzyma się wersjonowania semantycznego, dołożył dwie nowe czcionki, zaktualizował wszystkie pozostałe do bieżących wersji źródłowych oraz — jak to ujmuje lista zmian — wreszcie doprowadził glify Braille'a do rozmiaru dokładnie odpowiadającego komórce znaku.
Wariant tylko z ikonami
Rozwiązanie, o którym warto wiedzieć, bo bywa lepsze od łatania. W zestawie jest czcionka zawierająca wyłącznie ikony, wydana na licencji MIT, a obok niej plik konfiguracyjny dla mechanizmu fontconfig o wielkości pięćdziesięciu kilobajtów.
Pomysł polega na tym, by nie ruszać swojej czcionki tekstowej wcale, a zamiast tego skonfigurować system tak, by dla zakresów znaków zajmowanych przez ikony sięgał do czcionki pomocniczej. Zysk jest podwójny: zachowujesz dokładnie tę czcionkę, którą chcesz mieć do tekstu, i unikasz całej kwestii licencyjnej modyfikacji, bo niczego nie modyfikujesz. Do tego czcionka z ikonami jest na MIT, czyli najprostszej z możliwych licencji.
Przy wdrożeniu firmowym to jest wariant, od którego warto zacząć rozważania.
Pułapki w jednym miejscu
- Czcionki z zastrzeżoną nazwą są przemianowane — szukaj BlexMono zamiast IBM Plex Mono, CaskaydiaCove zamiast Cascadia Code.
- Łatając czcionkę z RFN samodzielnie, musisz ją przemianować przed rozdaniem albo dołączeniem do produktu.
- Font Logos jest bez licencji, a logotypy dystrybucji są znakami towarowymi. Przy produkcie komercyjnym to osobna sprawa do sprawdzenia.
- Licencje z przedrostkiem
LicenseRefnie mają identyfikatora SPDX — automatyczne skanery zależności ich nie rozpoznają. - Bitstream Vera wymaga przemianowania niezależnie od mechanizmu RFN. Dotyczy między innymi DejaVu.
- Streszczenia licencji w audycie to streszczenia, napisane przez opiekunów projektu — punkt startowy, nie opinia prawna.
- Repozytoria Chocolatey i Scoop są nieoficjalne i nie są utrzymywane przez projekt.
- Bez
--monoikony mogą psuć wyrównanie w terminalu przy własnym łataniu. - Przypnij wydanie zmienną
GH_RELEASE_TAGprzy obrazach stanowisk — różnice wersji glifów rozjeżdżają znaki zachęty. - Bez flag patcher dokłada tylko dwa zbiory glifów — Seti-UI z dodatkami i Devicons. Resztę trzeba wskazać albo użyć
--complete. - Wydanie 3.5.0 przemianowało D2Coding na D2Koding i spłaszczyło podkatalogi czcionek — obie zmiany łamią zgodność, druga psuje skrypty pobierające.
- Repozytorium waży blisko 30 GB. Klonuj z ograniczoną głębokością albo pobieraj archiwa wydań.
Podsumowanie
Nerd Fonts to projekt, który w codziennej pracy jest niewidoczny — instalujesz raz i zapominasz — a przy wdrożeniu produktowym okazuje się jednym z bardziej złożonych licencyjnie elementów, jakie można sobie wpuścić do repozytorium. Dobra wiadomość jest taka, że sami autorzy tę złożoność udokumentowali lepiej, niż robi to większość projektów o dowolnej wielkości.
- Audyt licencyjny każdej czcionki i zbioru ikon z identyfikatorami SPDX — artefakt, którego w projektach open source praktycznie się nie spotyka.
- Oznaczenie zastrzeżonych nazw czcionek wprost w tabeli, dzięki czemu widać, gdzie obowiązek przemianowania dotyczy również ciebie.
- Dane licencyjne w formacie maszynowym, z których generowana jest widoczna tabela — nie mogą się rozjechać i możesz ich użyć u siebie.
- Cztery drogi instalacji, w tym skrypt pozwalający przypiąć konkretne wydanie na potrzeby powtarzalnych stanowisk.
- Program łatający z sensownymi opcjami — pełny zestaw glifów, ostrożne nadpisywanie i tryb stałej szerokości.
- Wariant wyłącznie z ikonami na licencji MIT, który pozwala w ogóle nie modyfikować swojej czcionki.
Licencyjnie ten projekt nie ma jednej odpowiedzi i właśnie dlatego jest wart osobnego wpisu. Kod narzędzi jest na MIT i możesz z nim zrobić praktycznie wszystko. Czcionki mają kilkanaście różnych licencji, w większości permisywnych, ale z warunkami nazewniczymi, których w oprogramowaniu nie spotykasz. A jeden zbiór ikon nie ma licencji wcale. Jeśli instalujesz to sobie na laptopa, żadna z tych rzeczy cię nie dotyczy. Jeśli osadzasz załataną czcionkę w produkcie, który sprzedajesz — zacznij od pliku license-audit.md, sprawdź kolumnę zastrzeżonych nazw dla swojej czcionki i rozważ wariant z osobną czcionką ikon, bo najprostszą drogą przez ten labirynt jest po prostu niczego nie modyfikować.