Make Firefox Private Again – omówienie strony
Lis zwęszył reklamy, ale mam go na smyczy.
Od jakiegoś czasu krążyła mi po głowie myśl, żeby zrobić wpis pokazujący trochę ciemnych stron przeglądarki Firefox.
Mówię to jako jej wieloletni użytkownik, a zarazem krytyk Google’a, wobec którego Firefox jest prywatniejszą, przyjazną alternatywą. Zresztą pozostaję stały w poglądach. Nadal planuję używać Lisa i punktować Wujka G… Ale na niektóre rzeczy wolę nie przymykać oka.
W każdym razie to jeszcze nie będzie ta przekrojowa krytyka. Pokażę tylko jedną dziwną akcję Firefoksa, która ostatnio zirytowała grono użytkowników. Prowadząc nawet do powstania tytułowej stronki, Make Firefox Private Again.
Najpierw będzie część bardzo lekka, czyli przybliżenie afery i proste rzeczy, które warto sobie wyklikać w opcjach, żeby wyłączyć reklamowe nowinki.
Potem będzie szczypta techniki. Omówię, na czym polegają skrypty ze stronki, która mnie do wpisu zainspirowała. Ale na tyle przystępnie, żeby było to strawne dla osób spoza cyfrowej bańki, za to obdarzonych ciekawością świata.
Zapraszam!
Spis treści
Część całkiem nietechniczna
Zwrot Firefoksa ku reklamom
Zacznę od ogólnych informacji z nowopowstałej stronki, Make Firefox Private Again (będę czasem skracał do MFPA).
Autor, uzasadniając jej powstanie, linkuje między innymi do wpisu z oficjalnego bloga Mozilli, firmy tworzącej Firefoksa.
Wpis wspomina o tym, że Firefox zaczął współpracę z firmą Meta nad nowym modelem reklam, rzekomo „szanujących prywatność”.
Advertising provides critical support for the Web. We’ve been looking to apply privacy preserving advertising technology (…)
For the last few months we have been working with a team from Meta (formerly Facebook) on a new proposal that aims to enable conversion measurement – or attribution – for advertising called Interoperable Private Attribution, or IPA.
Gdyby chodziło o zwykłe, „martwe” obrazki, dodawane do stron internetowych na wzór plakatów i billboardów, to jeszcze pół biedy. Ale mowa o tzw. reklamach śledzących, które analizują działania użytkowników i dopasowują się do nich.
Firefox ramię w ramię z Facebookiem, w interesie reklamodawców? Gorzka coś ta IPA i trudna do przełknięcia.
Ale czemu nie zaciekawiło to innych, czujniejszych ode mnie osób? Nie wznieciło ognia buntu, choć post ma już swoje lata, pochodzi z 2022 roku?
Może dlatego, że firma Mozilla z wieloma rzeczami eksperymentowała. Pocket, Mozilla Location Services, Deepspeech od komputerowego rozpoznawania mowy, wirtualna rzeczywistość, że tak wymienię parę przykładów. Nie wszystkie doprowadzili do końca, z niektórych się wycofali. Eksperymenty z reklamami mogły zostać uznane za jedną z takich inicjatyw i przemknąć bez protestów.
Ogólnikowo o nowej propozycji: ma polegać na tym, że przeglądarka będzie stała między użytkownikami a reklamodawcami okupującymi wiele stron internetowych. Ma im ujawniać na życzenie pewne informacje o skuteczności reklam. Ponoć jedynie zagregowane, uśrednione dla większych grup osób.
W ten sposób reklamodawcy nie powinni być w stanie ustalić: „ta osoba była wcześniej na stronach X i V, a na stronie Z podała swoje imię i nazwisko, czyli…”, jak to obecnie mogą zrobić, opierając się głównie na plikach cookies (tutaj dokładniejszy opis tej metody śledzenia).
Zmiana na lepsze? Nie jestem przekonany. Podejście Mozilli wydaje się opierać na appeasemencie, ugłaskaniu reklamodawców. Zakłada, że wybiorą wygodną opcję zamiast tradycyjnego, inwazyjnego śledzenia.
Tymczasem dotychczasowa zachłanność ad techu sugerowałaby raczej, że będą zbierali, co tylko się da (jak nie przez pliki cookies, to przez bardziej inwazyjne metody). A łagodniejszych reklam od Firefoksa użyją oprócz tego.
Gdy nie pytasz, to nie odmówią
Nawet gdybym widział potencjał w samej strategii… Za nic nie mogę zaakceptować innej rzeczy, o której autor Make Firefox… akurat nie napisał. W ramach ostatniej aktualizacji Firefox domyślnie włączył eksperymentalny model reklam, nie informując użytkowników.
Nie było żadnego pytania o zgodę. Ba, nie było nawet informacji o fakcie dokonanym. Mimo że po każdej aktualizacji pojawia się zwięzły ekran z informacjami, który byłby idealnym miejscem na wzmiankę.
Po prostu wśród opcji programu po aktualizacji do wersji 128 pojawiła się nowa. Domyślnie włączona.
Jeśli dodać do tego parę innych faktów – jak to, że firma Mozilla zwolniła parę lat temu część ekipy od przeglądarki, podczas gdy pani prezes podwyższyła sobie wynagrodzenie do poziomów kilkumilionowych – to zrozumiałe stają się obawy przed możliwą korporatyzacją Firefoksa.
Stronka MFPA linkuje też do artykułu z portalu The Register z czerwca tego roku. Wspomina on o zakupie przez Mozillę firmy Anonym, zajmującej się właśnie „prywatnymi reklamami”.
Z drugiej strony dyrektor ds. technicznych z Mozilli wypowiedział się na forum Reddit i pisze wprost, że dodany chyłkiem „prywatny pomiar reklam” nie ma związku z zakupem Anonyma.
W związku z tym proponuję potraktować tę sprawę jako wątek poboczny. Który jednak potwierdzałby tezę, że Firefox wyszedł w sprawie reklam poza luźne eksperymenty.
W internecie pojawiło się sporo poradników mówiących, w jaki sposób wyłączyć nową opcję. Jedno z rozwiązań zaproponował autor Make Firefox….
Jest ono jednak nieco bardziej hakierskie i działa tylko na systemie Linux. Dlatego zostawię je na potem. Póki co opiszę, jak osiągnąć niemal ten sam efekt w parę kliknięć, przez ustawienia samego Firefoksa.
Wyłączanie nowych ustawień
Na szczęście Firefox nie robi żadnych problemów z wyłączeniem nowej opcji. Wystarczy kliknąć w ikonę trzech kresek w górnym prawym rogu, a potem wejść w Ustawienia
.
Następnie po lewej stronie należy kliknąć zakładkę Prywatność i bezpieczeństwo
.
Na koniec trzeba znaleźć i odhaczyć odpowiednią funkcję.
I tyle! Co pewien czas, zwłaszcza po aktualizacji, można dla pewności sprawdzać, czy Mozilla przypadkiem nie przywróciła opcji. Gdyby to zrobili, to już oficjalnie poszliby w ślady Microsoftu czy Google’a.
Sposób alternatywny
Firefox pozwala zmieniać swoje ustawienia na kilka sposobów. Żeby osiągnąć ten sam efekt co wyżej, ale potencjalnie trwalszy (opisana wyżej opcja stała się u mnie szara, nieklikalna), można również:
- wpisać w górny pasek, tam gdzie są zwykle adresy stron,
about:config
, - zamknąć jednym kliknięciem rutynowe ostrzeżenie,
- zacząć wpisywać obok ikony lupy
dom.private-attribution.submission.enabled
(już po kilku pierwszych literkach na ekranie powinna pozostać jedyna pasująca opcja), - kliknąć opcję, aby zmieniła wartość na
false
.
Na tym koniec części najważniejszej dla codziennych użytkowników. Ale zachęcam do pozostania ze mną, mimo że pojawi się teraz odrobina konsoli. Zawsze to jakiś wgląd do Firefoksa oraz świata automatyzacji i zlecania brudnej roboty skryptom
Przystępna część techniczna
Ogólnie o stronce
Adres stronki to, przypomnę, https://make-firefox-private-again.com/.
Po jej załadowaniu ukazuje się prosty, czarny tekst na białym tle. Nietypowa, prosta szata graficzna? Nie; to tak naprawdę plik tekstowy. Skrypt w języku Bash.
Choć sam autor o tym nie wspomina, takie skrypty są przeznaczone z założenia dla systemu Linux. Dlatego żadna z instrukcji nie zadziałałaby na zwyczajnym Windowsie.
Poza tym skrypt nie zadziałałby też na smartfonach z Androidem, wewnątrz apki Termux. Choć jest tam konsola i potrzebne programiki, przeszkodą są zabezpieczenia Androida. Aplikacje nie mogą ingerować w wewnętrzne pliki innych aplikacji. A skrypt ze strony musi zajrzeć do folderów Firefoksa, żeby zadziałać.
Raczej nikogo nie zdziwi fakt, że przeglądarka umie otwierać inne rzeczy niż strony internetowe. W końcu może otwierać nawet pliki PDF, jak ten losowy przykład. O ile ktoś ręcznie nie zmieniał opcji, to takie pliki wyświetlą się w trybie specjalnie pod PDF-y. W prostym czytniku.
Zaskakiwać może natomiast fakt, że górny pasek nie sugeruje żadnego pliku tekstowego. Jest tam tylko adres: https://make-firefox-private-again.com/
.
To dlatego, że ścieżka z górnego paska jest tak naprawdę czymś innym, niż w świadomości codziennych użytkowników.
Intuicyjnie można powiedzieć, że przeglądarka mówi górnym paskiem: „oto, o co poprosiłam czyjś serwer”. Reszta ekranu, pod paskiem, wskazuje z kolei: „oto rzecz, którą dostałam w odpowiedzi, plus wszystkie elementy powiązane”.
Zwykle między tymi dwiema rzeczami jest zgodność. Ale nie zawsze.
W naturze trafiają się też odwrotne sytuacje – gdy link sugeruje nietypowy plik, a dostajemy zwykłą stronę internetową.
W przypadku Facebooka niektóre linki kończą się na przykład na profile.php
(plus zwykle dodatkowe parametry po znaku zapytania). A jednak po kliknięciu nasza przeglądarka wyświetla nie skrypt w języku PHP, tylko jakąś stronę internetową.
Wyświetlony skrypt jest dość krótki, więc dla wygody załączam jego screena:
Najważniejsza informacja na początek – za podstawową jednostkę w skryptach Basha można uznać linijki tekstu. W każdej z tych linijek tekst po krzyżyku (#
) to komentarz, który zostanie przez konsolę zignorowany. Jest przeznaczony dla czytelników.
Wniosek? Skrypt składa się tak naprawdę tylko z dwóch linijek. Tych u góry. Reszta to czytelne instrukcje dla użytkownika. Dobrze to widać, jeśli otworzy się plik w jakimkolwiek programie rozpoznającym i kolorującym składnię, jak Gedit z przykładu wyżej.
Echo
To teraz czas omówić te dwie linijki. Zacznę od drugiej, krótszej:
echo 'Restart Firefox for the change to have effect'
Pierwsza po lewej jest nazwa programu – echo
.
Potem jest spacja, która oddziela nazwę programu od argumentów, czyli wrzucanych do niego rzeczy.
Na końcu jest tekst, który można poznać po obecności cudzysłowów na początku i końcu. Jest traktowany jak pojedynczy element, niepodzielny i nierozbijany na spacjach.
Konsola jest miejscem, w którym można wpisywać nazwy programów albo wrzucanych do nich rzeczy, ewentualnie specjalne zmienne. Nic więcej. Jeśli wpisze się luzem nazwę, której nie ma w bazie rzeczy dopuszczalnych, to wyskoczy błąd.
Jak zatem wprowadzić do konsoli zwykły tekst, niemający dla niej specjalnego znaczenia? Trzeba go przemycić jako „wsad” do któregoś z dozwolonych programów. Wiele osób, tak jak autor stronki w tym skrypcie, wykorzystuje do tego celu Echo. Minimalistyczny program, który po prostu podaje tekst dalej.
Przy prostej postaci echo TEKST
nie będą się z tym tekstem działy żadne szczególne rzeczy. Przeleci sobie przez „układ pokarmowy” konsoli i trafi do wyjścia. Najczęściej: wyświetli się na ekranie.
Wniosek? Linijka druga oznacza po prostu, że po wykonaniu linijki pierwszej wyświetli się tekst „Restart Firefox for the change to have effect”.
Uproszczenie pierwszej linijki
Linijka numer jeden jest dużo dłuższa! Pojawiają się w niej aż cztery programy: echo
, tee
, grep
, cut
, do tego rura (|
), do tego parę zmiennych, zagnieżdżone w sobie cudzysłowy, ukośniki…
echo 'user_pref("dom.private-attribution.submission.enabled", false);' | tee -a $HOME/.mozilla/firefox/$(grep "Default=.*\.default*" "$HOME/.mozilla/firefox/profiles.ini" | cut -d"=" -f2)/user.js
Ale spokojnie. W takich sytuacjach lubię sobie rozbijać większego dziada na mniejsze, z których każdy już mieści się w mózgu.
Proponuję zacząć od lewej strony, bo jest tam wspomniane przed chwilą echo
, którego znaczenie jest względnie jasne. Jego ogólny sens jest ten sam co poprzednio – wprowadza tekst do konsoli.
Tekst zaczyna się i kończy pojedynczymi cudzysłowami ('
). Na razie go sobie odłożę na bok, bo dla konsoli nie ma żadnego specjalnego znaczenia. Mogłoby tam być wpisane „lorem ipsum”, a skrypt zadziałałby tak samo (choć Firefox zapewne by później dostał czkawki).
Kolejną rzecz do uproszczenia można zobaczyć bliżej końca linijki. Jest tam dolar, a po nim tekst w nawiasach – $(COŚ)
.
W skryptach Basha oznacza się w ten sposób zmienne. Wewnątrz nawiasów mogą znajdować się nie tylko proste wartości, ale również, jak tutaj, całe instrukcje dla programów.
Ten tekst również można chwilowo odłożyć na bok. Po obu uproszczeniach zostaje coś znacznie przyjemniejszego do czytania:
echo JAKIŚ_TEKST | tee -a $HOME/.mozilla/firefox/$(ZMIENNA)/user.js
Czytając od lewej: echo
tradycyjnie wprowadza do konsoli tekst.
Po nim znajduje się pionowa kreska, czyli „rura” (ang. pipe). Jej zasada działania jest prosta – pozwala wziąć efekt działania programu przed sobą i podać go programowi po swojej prawej stronie. A jest nim…
Tee
O tym programiku można poczytać choćby na stronce Linuxize. Pozwala on zapisać otrzymany tekst do jednego lub więcej plików, jednocześnie wyświetlając go w konsoli. Poświęćmy mu parę sekund.
Tajemnicza nazwa programu wynika z tego, że tee w języku angielskim to potoczne określenie na literę T (zresztą w ten sposób mówi się czasem na T-shirty). Z kolei litera T może symbolizować rozgałęzienie. Które pasuje do przypadku, gdy program wyrzuca tę samą rzecz w kilka miejsc, do pliku i konsoli.
Można go zatem nazwać intuicyjnie „rozgałęźnikiem”.
Do programu tee
, oprócz tekstu wpadającego przez rurę, trafiają dwa argumenty:
-
Opcja
-a
.Od słowa append. Mówi programowi, żeby dopisywał nową treść na końcu pliku. To ważne, bo w innym wypadku by ten plik nadpisał, usuwając całą jego poprzednią zawartość.
-
Ścieżka do pliku.
Skąd wiem, że ścieżka? Rozpoznaję po ukośnikach, które rozdzielają pliki i foldery – to skrypt na Linuksa, więc są skierowane w prawą stronę (
/
), odwrotnie niż na Windowsie.
Skąd wiem, że jedna? Nie wiem tego na pewno, ale tak obstawiam, bo nie ma w niej żadnych spacji i nie jest otoczona cudzysłowami. Dla konsoli byłaby traktowana jak jeden ciąg. Ale z drugiej strony spację mogłaby zawierać$(ZMIENNA)
, więc jeszcze nie wiem na 100%.
Nazwa pliku, jak to w ścieżkach, znajduje się na końcu, po ostatnim ukośniku. To user.js. Z kolei fragment .mozilla/firefox
sugeruje, że mowa tu o folderach związanych z przeglądarką Firefox.
Zatem esencja pierwszej linijki skryptu jest taka – zapisuje tekst wskazany na początku do pliku user.js w folderze wewnętrznym Firefoksa.
Dopasowanie do działania Firefoksa
Na chwilę zrobię odskocznię od konsoli, żeby wyjaśnić parę spraw. Dlaczego poprzez echo
wprowadzono akurat taki tekst? Dlaczego do jakiegoś user.js?
Tu akurat wyjaśnienie jest proste. W tych nazwach nie ma nic specjalnego z punktu widzenia konsoli. To wszystko konwencja przyjęta przez twórców Firefoksa.
- Firefox na systemach Linux zapisuje różne swoje ustawienia do podfolderu
.mozilla/firefox
(na innych systemach do innych lokalizacji). - Plik user.js zawiera ustawienia odbiegające od domyślnych, dodane przez użytkowników. Jest wczytywany podczas uruchamiania Firefoksa.
- Za nowe reklamy odpowiada ustawienie
dom.private-attribution.submission.enabled
. - Rozszerzenie .js oznacza, że to plik w języku JavaScript, innym skryptowym. Ludzie z Firefoksa zapewne udostępnili publicznie funkcję
user_pref(ZMIENNA, WARTOŚĆ)
, która pozwala zmieniać wartości różnych ustawień.
Autor Make Firefox… zapewne wyszukał na początku, skąd Firefox bierze ustawienia. Po czym stworzył skrypt wprowadzający te zmiany tam, gdzie będą dla Lisa czytelne.
Na tym się często opiera automatyzacja – trzeba poczytać o wewnętrznym działaniu jakiegoś innego programu i dopasować się do niego. Czasem przeklinając, jeśli ten nie ułatwia współpracy
Zmienna $HOME
W dwóch miejscach pojawia się tekst $HOME
. Dolar na początku sugeruje, że to jakaś zmienna o specjalnym znaczeniu.
Nie trzeba jej nigdzie wcześniej określać, bo to jedna ze zmiennych wbudowanych w konsolę. Takie zmienne to zwykle różne informacje na temat komputera, plików, czy samej konsoli.
Autor Make Firefox…, tworząc swój skrypt, musiał podać pełną ścieżkę do paru plików. Ta ścieżka zawsze zawiera folder domowy, którego nazwa jest zależna od użytkownika. Dla jednej osoby będzie to /home/dorota
, dla kogoś innego /home/marek
…
Używając zmiennej, autor może sprawić, że jego skrypt zadziała u wszystkich, dopasowując się do ich urządzenia.
Grep
Przejdę teraz do ostatniej nieomówionej rzeczy. Oto wnętrze tej złożonej zmiennej, która pojawiła się wewnątrz ścieżki:
grep "Default=.*\.default*" "$HOME/.mozilla/firefox/profiles.ini" | cut -d"=" -f2
Ponownie – można czytać od lewej, aż trafi się na pionową kreskę. Nieotoczona cudzysłowami, więc to nie tekst, tylko rura o specjalnym działaniu. Po jej lewej stronie jest program grep
i jego argumenty, a wynik jego działania trafia do programu cut
.
Zacznę od Grepa. Służy do wyszukiwania tekstu wewnątrz plików i ma składnię:
W roli pliku jest tutaj (ścieżka do) jakiegoś profiles.ini, również w wewnętrznym folderze Firefoksa.
Żeby zrozumieć sens tego fragmentu, warto wiedzieć, że Firefox dopuszcza wiele profili użytkowników, z których każdy ma jakieś własne ustawienia. I własny folder wewnętrzny, którego nazwa to ciąg losowych znaków, inny dla każdego użytkownika.
Plik profiles.ini to porządkuje. Jest jak taki spis, przypisujący rodzaje profili do wspomnianych nazw folderów. Autor MFPA potrzebuje nazwy, żeby ułożyć pełną ścieżkę „w głąb” Firefoksa, więc musi do tego pliku zajrzeć.
Tekstem do znalezienia jest natomiast "Default=.*\.default*"
. Dla jasności można zerknąć do pliku i zobaczyć, co w ten sposób znajduje:
Warto też wiedzieć, że kropki, gwiazdki i ukośniki zaserwowane Grepowi mają dla niego specjalne znaczenie:
-
.
oznacza jeden dowolny znak (niekoniecznie kropkę!); - …ale
\.
oznacza już konkretnie kropkę, bo ukośnik wyłącza specjalność; -
*
oznacza „zero lub więcej tej rzeczy, która stoi bezpośrednio przed gwiazdką”
(przykład:ba*
wyłapywałoby b, ba, baaa itd.); -
.*
oznacza dowolną ilość znaków, aż do napotkania tego po prawej stronie.
Swoją drogą na tym etapie coś poszło nie tak, bo Grep wykrył u mnie trzy pasujące nazwy folderów. Potem podał je dalej jako trzy rzeczy rozdzielane spacjami. W oczach programu tee: trzy ścieżki, z czego tylko jedna sensowna.
Ogólnie: nie zadziałało
Być może to przez to, że mam u siebie kilka różnych Firefoksów, z czego jeden jest dość wiekowy. Może mam przez to więcej folderów z profilami niż oczekiwałby skrypt. A może to niedopatrzenie w skrypcie.
W każdym razie, gdybym chciał profilu kończącego się słowem default, pomogłaby zamiana (w tekście dla Grepa) ostatniej gwiazdki na dolara, wskazującego koniec tekstu. Wówczas skrypt znalazłby tylko jeden profil.
Cut
Znaleziony fragment tekstu trafia do programu cut
. Jego zadaniem, jak angielska nazwa wskazuje, jest wycięcie z otrzymanej linijki tylko tej części, która go interesuje. Dostaje dwie opcje:
-
-d
, od delimiter (znak rozdzielający)
mówi, na jakich znakach program powinien podzielić otrzymany tekst. W tym wypadku na znakach=
. Kiedy to zrobi, zostaje z kilkoma częściami składowymi. W tym wypadku z dwiema, które sobie numeruje jako 1 i 2. -
-f
mówi, którą z tych rzeczy powinien wybrać. Jest2
, czyli drugą. To, co będzie po znaku równości.
Podsumowując współpracę programów grep
i cut
– pierwszy wyciąga ze spisu rodzaj profilu (domyślny) wraz z nazwą folderu. Drugi wycina z tego samą nazwę folderu.
Ta nazwa zostaje wstawiona zamiast zmiennej, w której siedzą oba programy. Dzięki temu cały skrypt dostaje pełną ścieżkę do pliku z ustawieniami (a przynajmniej powinien, gdyby mi działał). I może do niego wrzucić tekst wyłączający reklamy.
Podsumowanie w formie schematu
Na koniec coś dla wzrokowców. Działanie najważniejszej, pierwszej linijki, pokazane w formie autorskiego schematu.
Wątki poboczne
Skoro działanie skryptu już wyjaśnione, to przejdę do paru spraw luźniej powiązanych, które warto przy okazji poznać.
Wątek cyber(nie)bezpieczeństwa
Skrypt zawiera jeszcze parę programów, choć jedynie w części opisowej, instruktażowej. Pod hasłem „jak uruchomić” znajduje się linijka do wykonania w konsoli:
Wzbudziła ona pewien sprzeciw u paru komentujących na forum HN. Dlaczego? Ano dlatego, że sugerowany sposób instalowania jest dość niefrasobliwy. Oznacza po prostu „pobierz w ciemno i uruchom” (gdzie curl
to pobieracz, a sh
to uruchamiacz).
Ale przecież kod źródłowy jest na widoku? I, jak pokazałem wyżej, nieszkodliwy?
Problem w tym, że nawet przeczytanie kodu źródłowego może nie dać wystarczającej ochrony, jeśli po przeczytaniu, już uspokojeni, pobierzemy skrypt innym programem.
Wynika to z podstaw działania internetu. Podczas wysyłania cudzemu serwerowi próśb o różne rzeczy – strony, obrazki, skrypty – wiele programów ujawnia pewne podstawowe informacje. W tym swoją zwięzłą wizytówkę, zawartą w polu nazywającym się user agent.
Tak robi również curl – przedstawia się inaczej niż popularne przeglądarki. Każdy serwer, z którym się kontaktuje, może go rozpoznać i wręczyć mu niespodziankę, której nie dałby użytkownikom przeglądarek.
Bezpieczniejszym rozwiązaniem jest ręczne pobranie skryptu, zapoznanie się z kodem źródłowym (przynajmniej pobieżne) i dopiero wtedy uruchomienie tego samego zapisanego pliku programem sh
lub innym.
Świat majsterkowania z user.js
Rozwiązanie ze stronki MFPA jest krótkie i eleganckie (o ile działa), ale samo nie aspiruje do miana nowatorskiego. To dlatego, że wokół Firefoksa już od dawna działa aktywna społeczność, personalizująca swoje ustawienia właśnie przez gmeranie w pliku user.js.
Jednym z przykładów jest BetterFox, czyli skrypt user.js z ustawieniami poprawiającymi szybkość Firefoksa. Linkują też do paru innych wariantów, skupiających się na innych aspektach.
Innym przykładem jest plik user.js od użytkownika Arkenfox, pozwalający uszczelnić prywatność Firefoksa (kosztem wyłączenia pewnych bajerów, więc warto dokładnie się wczytać przed jego użyciem).
Te rozwiązania są idealne dla osób, które chcą wyższego poziomu prywatności, ale obawiałyby się niezależnych projektów opartych na kodzie źródłowym Firefoksa (jak Waterfox czy LibreWolf). Mamy tu bowiem oficjalnego Firefoksa, od Mozilli. Ale dopasowanego pod siebie.
Istnienie tych możliwości daje nadzieję, nawet w obliczu wieści takich jak te o zabawach Mozilli z reklamami. Niezależnie od tego, co wymyśli sobie bardziej „byznesowa” część twórców Firefoksa, zawsze pozostaną ręczne modyfikacje i alternatywy od społeczności.
Przynajmniej dopóty, dopóki kod źródłowy Lisa jest otwarty, a opcje personalizacji rozbudowane. Oby się to nie zmieniło!