Ubuntu to IE6 dzisiejszych dystrybucji Linuxa?

Im dłużej mam przyjemność (choć przyznać muszę, że czasem wątpliwą) przygotowywać aplikacje desktopową na systemy Linuxowe, tym więcej spotykam przypadków, w których Ubuntu (a w sumie Unity) ukazuje swe mroczne oblicze.

Zaczęło się od błahych różnic w wyświetlaniu widgetów Gtk. Przycisk mrugał, etykieta dostawała spazmów, wszystko przez to, że silnik renderujący jest różny dla różnych styli Gtk a domyślny silnik w Ubuntu miał częste i widowiskowe ataki. Dotarcie do pierwszej odpowiedzi zajęło mi trochę czasu i wymagało poirytowania współpracowników zbyt częstymi „ho ho, zerknij na to!”. Na całe szczęście rozwiązanie nie było trudne, wystarczyło wstawić do pliku css:

* {
engine: none;
}

Druga niespodzianka czekała tuż za rogiem, gdy elementy interfejsu przestał mrugać, zauważyłem że całkowicie zniknęła ikona aplikacji w tray’u. Po krótkim poszukiwaniu dowiedziałem się, że w Unity ikony trayowe są wyłączone (a przynajmniej te standardowe Gtk.StatisIcon), ponieważ wygląd ich i rozmieszczenie było niekonsekwentne. Kiedyś istniała specjalna lista wyjątków, do której trzeba było dodać nazwę aplikacji, aby jej ikona mogła gościć na panelu Unity, teraz niestety w wersji 12.04 lista ta jest ignorowana przez system. Cóż mi pozostało, jak tylko zakasać rękawy, przygotować oddzielną klasę generującą AppIndicator (taka wersja Gtk.StatusIcon tylko dla Unity) i wykrywać na jakim systemie aplikacja została uruchomiona.

Tak, musiałem sprawdzać w kodzie na jakim systemie jestem uruchomiony, to już oznacza że dobrego startu nie było. Teraz będzie tylko z górki.

Po przygotowaniu oddzielnych indykatorów aplikacji i zorientowaniu się, że wersja dla Unity nie da się wystylować, przyszedł czas na powiadomienia. Jeżeli używacie Gnome3, KDE, Xfce albo praktycznie każdego innego środowiska nie zaczynającego się na U a kończącego na nity, zapewne widzieliście raz na jakiś czas w powiadomieniu przycisk. Nie w Unity, w Ubuntu pojawiło się kolejne założenie, tym razem zablokowano możliwość wyświetlenia powiadomienia z akcją. Nie można w żaden sposób wejść w interakcje z notyfikacją, którą przedstawi nam system. Dodatkowa klasa notyfikacji tylko dla Ubuntu? Nie, nie dałem rady przekonać się do tego gwałtu na kodzie. Przedstawiłem problem szefowi, który z bólem pozwolił zrezygnować z wszystkich przycisków i interakcji z powiadomieniami.

Teraz pozwolę sobie zadać głośne, nie skierowane do nikogo konkretnego pytanie: po co to wszystko? Czy czar Linuxa nie miał być częściowo spowodowany tym „masz wymagane biblioteki – odpalisz na każdej dystrybucji”? Czemu muszę więcej kodu przystosowywać specjalnie dla Ubuntu, niż (prawdopodobnie) będę musiał przystosować dla Windowsów?

Problem tkwi w tym, że Ubuntu jest duże, sławne i może narzucać swoje rozwiązania. Jest na tyle duże, że może takimi drobiazgami wymagać, aby programista pisał specjalną wersje swojego oprogramowania na Ubuntu, wtedy może pójdzie na skróty i napisze wersje TYLKO na Ubuntu. Wydaje mi się, że gdy się ma monopol, pojawia się potrzeba utrzymania i nakręcania tego monopolu dalej. Gdyby Ubuntu było mniejsze, mniej medialne, pewnie chętniej by przystawało na kompromisy. Zamiast tego wprowadzają „udogodnienia” tylko w obrębie swojego systemu.

Dlatego budzę się czasem w nocy zlany potem, drżąc o to, że jeżeli Ubuntu nie wyhamuje, coraz więcej osób będzie musiało używać w kodzie flagi IS_UBUNTU. Na dokładnie takie praktyki narzekaliśmy walcząc z monopolem IE6.