Linuksowa krytyka
Do napisania tej notki zainspirowały mnie niektóre rozmowy z jednym moim kolegą ze studiów, które od czasu do czasu zdarza nam się toczyć. Kolega ów jest dość sporym fanem rozwiązań software'owych spod znaku Microsoftu, ja zaś reprezentuję obóz wolnego oprogramowania i tak czasem sprzeczamy się o wyższości Windowsa nad Linuksem, Javy nad .NETem i tym podobnych.
Ale jako że nie jestem całkowicie bezkrytyczny... no cóż, postanowiłem napisać o kilku rzeczach, które najbardziej mnie irytują w Linuksie.
Niespójność
No właśnie. W Debianie i Ubuntu mamy APTa korzystającego z DEBów. Fedora i Mandriva mimo, że korzystają oba z RPMów, to w Fedorze mamy yuma, w Mandrivie - urpmi. Gentoo ma swoje emerge, o co mniej popularnych systemach dystrybucji oprogramowania ze Slackware'a, Archa i setki innych dystrybucji nie wspominając. Na dodatek ten sam format pakietu niekoniecznie oznacza kompatybilność - pakiety do Ubuntu nie muszą pasować do Debiana, co więcej, nawet pakiety przeznaczone do różnych wersji tej samej dystrybucji często nie są ze sobą kompatybilne. Do tego w systemach z rodziny Red Hata mamy skrypty konfigurujące np. sieć w /etc/sysconfig, w innych tego nie uświadczymy, za to w tych z rodziny Debiana mam np. spełniający w pewnym stopniu podobną funkcję katalog /etc/default. I ogólnie pliki konfiguracyjne które nie ustandaryzowały się w czasach przedpotopowych (kiedy Unix był jeszcze jeden) są wszędzie w innym miejscu.
Każdy sterownik musi choć częściowo być instalowany przez kompilację, bo modułów kernela nie można przenosić między różnymi jego wersjami. I do tego sami twórcy jądra odmawiają zmiany tego stanu rzeczy, argumentując, że należy pisać wolne sterowniki, to wtedy będą dołączone do oficjalnego kodu jądra. No i OK, szczytnie, ale to raz że powiększa rozmiar samego kernela, utrudnia aktualizacje sterowników, kiedy większość kodu jądra pozostaje niezmieniona, a poza tym... no cóż, znaczna część użytkowników Linuksa (w tym i - muszę przyznać - ja) woli mieć zamknięty sterownik niż niedziałający sprzęt. I to prawda, że to zatrzymuje proces uwalniania oprogramowania, ale... no cóż, zamknięte sterowniki i tak są powszechnie używane, i raczej się to w najbliższym czasie nie zmieni, więc możnaby troszkę poprawić dla nich wsparcie.
I jakby tego jeszcze było mało, to do tego dochodzą jeszcze różnice w środowiskach graficznych. Jedni preferują GNOME, inni KDE, jeszcze inni mniejsze rozwiązania w rodzaju Xfce czy IceWM. I powiecie, że to dobrze, że jest wybór. Jasne - dobrze. Tyle tylko, że preferencje użytkowników przekładają się też na preferencje programistów i twórcy oprogramowania piszą je korzystając z innych bibliotek, optymalizując je pod różne środowiska. I tak na przykład nie znam lepszego odtwarzacza audio pod Linuksa niż Amarok - i świetnie, gdyby nie to, że obecnie korzystam z GNOME, i kontrolki Qt się w tym środowisku nieszczególnie komponują, już nie wspominając o inaczej wyglądającym antialiasingu czcionek. Przykłady można mnożyć i w ten sposób zapewne większość użytkowników skończy z systemem na którym będą aplikacje napisane w Qt3, Qt4, Gtk1 i Gtk2. I każdy z tych toolkitów będzie wyglądał inaczej. Istnieją co prawda style wizualne mające swoje odpowiedniki zarówno dla Qt, jak i dla Gtk, tak samo istnieją też wrappery pozwalające korzystać ze stylów napisanych dla jednej biblioteki w drugiej, jak np. Gtk-Qt. Tyle że te pierwsze są zwykle średnio ładne, a te ostatnie miewają problemy z kompatybilnością. I tym samym skonfigurować system, który będzie jednocześnie ładny i spójnie wyglądać, jest niesamowicie trudno. A do tego dochodzą jeszcze aplikacje napisane w Javie korzystające ze Swingu, i trochę programów korzystających z mniej popularnych bibliotek.
Zresztą, gdyby jeszcze tylko o wygląd chodziło. Ale czasami aplikacje korzystające z bibliotek KDE mają tendencję do zaburzania pracy GNOME - i przypuszczalnie odwrotne przykłady też mogą się zdarzyć. I tak wspomniany wyżej Amarok po uruchomieniu pod GNOME powoduje mi, że przestaje działać wygaszacz ekranu, a na domiar złego trzeba go ręcznie wyłączyć przed shutdownem, bo Gnomowe skrypty wylogowania nie ruszą dalej zanim Amarok nie zniknie z listy procesów. Zapewne jest na to jakieś remedium, ale jak dotąd nie chciało mi się go szukać, a poza tym - dlaczego to nie może działać od razu?
Są co prawda inicjatywy mające na celu ujednolicenie tego chaosu, jak np. LSB, ale ich zakres jest ograniczony i do tego nie zyskują wystarczającej popularności.
Tutaj - trzeba otwarcie przyznać, Windows wypada zdecydowanie lepiej. Zaczynając od ostatniej, najbardziej błahej sprawy - zdecydowana większość programów korzysta mniej lub bardziej pośrednio z WinAPI, które rysuje wszędzie spójne kontrolki. Trochę niespójności było w okolicach premiery XP, kiedy to wiele programów nie miało manifestów kompatybilności z nowymi kontrolkami, ale nawet wtedy... no cóż, użytkownicy przywykli do starego wyglądu, przejście na "nowe" było stosunkowo płynne. Do tego nawet twórcy alternatywnych bibliotek jak Gtk czy Qt w wersjach pod Windows starają się, by domyślnie były możliwie podobne do wyglądu natywnego. Od Microsoftu wymaga się, żeby nowsze wersje Windows były możliwie kompatybilne ze starszymi wersjami, co zapewnia przenośność zdecydowanej większości oprogramowania między różnymi wersjami systemu.
Model dystrybucji oprogramowania
Przed chwilą narzekałem, że różne dystrybucje stosują różne formaty pakietów z oprogramowaniem, i że nawet między różnymi wersjami tej samej dystrybucji nie ma zagwarantowanej przenośności pakietów. Ale to nie wszystko. Twórcy oprogramowania nie przewidzą wszystkich możliwych dystrybucji. Jak ktoś napisze jakiś program, to zapewne zrobi binarki dla Debiana, Ubuntu, Fedory, OpenSuse, czasem Mandrivy - i to nie zawsze dla wszystkich wymienionych. Reszcie udostępnia zwykle paczkę z kodem źródłowym (a i nie zawsze - czasem trzeba ściągać z CVS czy SVN), z rzadka oprócz tego paczkę z wersją skompilowaną, zwykle w przypadku większych projektów przeznaczoną do rozpakowania w /usr/local, ewentualnie program instalacyjny.
Jeśli chodzi o paczkę z kodem źródłowym - no cóż, mimo iż sama kompilacja zwykle trudna nie jest, bo sprowadza się do ./configure; make; make install - to jednak trwa zdecydowanie dłużej niż instalacja binarek, co w przypadku większych projektów może okazać się zaporowe - nawet użytkownicy Gentoo nie zawsze kompilują takie kolosy jak OpenOffice.org, X.org czy KDE. No i wymaga się od użytkownika żeby trzymał na dysku kompilatory i całą masę plików nagłówkowych, nawet jeżeli nie jes programistą.
Ponadto zarówno paczki ze źródłami, jak i te z binarkami mają wspólną, dość sporą wadę - po instalacji ciężko taki program usunąć. Kiedy przestaniemy korzystać z jakiegoś programu i stwierdzimy, że tylko śmieci miejsce na dysku... to jeśli nie został zainstalowany z RPMa ani DEBa, tudzież czegoś o podobnej funkcjonalności, trzeba go ręcznie kasować plik po pliku. I tu się ujawnia system plików, który mimo swoich pewnych zalet ma jedną kolosalną wadę - pliki należące do tego samego programu rozpraszają się po różnych katalogach, a pliki należące do jednego programu mogą zlać się ze sobą tak, że trudno będzie się po jakimś czasie połapać. Nieco lepiej wygląda sytuacja programów z własnymi instalatorami - tu często dołączony jest również deinstalator. No i byłoby całkiem ślicznie, gdyby nie to, że takiego deinstalatora to ni przypiął, ni przyłatał - nie integruje się z systemem pakietów, więc nie odnajdziemy go w żadnym odpowiedniku windowsowego apletu "Dodaj/Usuń programy", który, choć daleki od ideału, spełnia swoje zadanie.
A to wszystko przy założeniu, że mamy jedną architekturę. A w tej chwili proporcje między użytkownikami Linuksa x86 i x86_64 stają się coraz bardziej wyrównane. O użytkownikach dużo mniej popularnych, ale jednak mających swoją niszę innych architektur nie wspominając. A pakiety 32-bitowe żeby zainstalować w systemie 64-bitowym często trzeba kombinować, nie zawsze też domyślnie w systemie znajdziemy wszystkie potrzebne takiemu 32-bitowemu programowi do działania biblioteki. A dostępność pakietów 64-bitowych jest jednak mniejsza niż 32-bitowych, o architekturach nie mających "x86" w nazwie nie wspominając. Zostaje kompilacja... ale jeśli mamy system 64-bitowy, a potrzebny nam jest jakiś program zamknięty nie mający swojej 64-bitowej wersji... no to w skrajnie pesymistycznym przypadku możemy być zmuszeni zainstalować pół systemu 32-bitowego żeby zmusić go do działania.
Tutaj Windows... no jeśli chodzi o wersję 64-bitową to narzekających istotnie jest trochę, ale przynajmniej jest prosta piłka - jeśli program w ogóle zadziała na 64-bitowym Windowsie, to zadziała od razu. Przywołane już "Dodaj/Usuń programy" od czasu Windows 95 zmieniło właściwie tylko wygląd, funkcjonalności tam prawie nie przybyło - ale mimo to na dobrze zarządzanym systemie wystarczająco dobrze spełnia swoją rolę. Trochę tutaj psują małe, free- czy też shareware'owe programiki, nie mające swoich instalatorów, a jedynie rozpakowywane - i często składające się z jednego lub kilku plików. Ale w zasadzie wystarczy je gromadzić w jednym miejscu, wtedy otrzymujemy co najwyżej dwa modele dystrybucji oprogramowania, co w porównaniu z Linuksem i tak jest niezłym wynikiem ;) Kiedyś sporym problemem Windowsa były nie do końca dobrze działające deinstalatory - teraz śmieci pozostawiane po usuwanych programach są raczej minimalne, zwłaszcza w przypadku lansowanego przez Microsoft spójnego modelu dystrybucji oprogramowania opartego na pakietach MSI, który oprócz tego ma też inne zalety, jak choćby uspójnienie instalacji nienadzorowanych. Zresztą - każdy deinstalator będzie lepszy niż brak deinstalatora, jak to bywa w przypadku programów linuksowych instalowanych z tarballi, czy to źródłowych, czy prekompilowanych.
Panujące niedopracowanie
Linux, choć wiele się przez lata zmieniło, nadal jest uważany za system dla bardziej doświadczonych użytkowników komputerów (choć to kwestia względna, bo choć w obsłudze nadal troszkę trudniejszy - to ma mniejsze wymagania wobec użytkownika w kwestii konserwacji już działąjącego systemu i świetnie daje sobie radę bez np. antywirusa czy firewalla, co pod Windowsem jest samobójstwem) i... pod wieloma względami nie ma to ochoty się zmienić. Nie wiem, czy użytkownicy machają ręką na rozmaite niedoróbki, czy programistom nie chce się ich eliminować, jeśli są mało dokuczliwe, ale... co chwilę można natknąć się na mniejsze lub większe nieprawidłowości w działaniu oprogramowania spod znaku wolnych licencji.
Pomijam tu już kłopoty ze sterownikami, bo te się mogą zdarzyć każdemu, zwłaszcza przy - bądź co bądź - ograniczonym dostępie do specyfikacji sprzętu. Ale taki np. Compiz. Generalnie działa zupełnie przyzwoicie, efektami graficznymi nie ustępując Mac OS X i Viście. Ale spróbujcie zmienić rozdzielczość bez restartu X-ów - przynajmniej u mnie (Compiz 0.7.4 na Ubuntu 8.04, grafika Intel GMA950) skutkuje to totalną kaszanką na ekranie, praktycznie niemożliwą do opanowania bez killowania Compiza.
Tak samo dzisiaj z ciekawości podłączyłem do laptopa stojący obok monitor CRT i próbowałem ustawić tryb dwumonitorowy. Jedyne co udało mi się uzyskać to sklonowany obraz. Zapewne byłoby lepiej, gdybym zamiast gnome-display-properties użył np. displayconfig-gtk, ale to wymagałoby ode mnie restartu X-ów - a przecież Windows robi to z marszu, a na dodatek gnome-display-properties "twierdz", że radzi sobie z taką konfiguracją...
PulseAudio nie udało mi się skonfigurować tak, jakbym tego chciał. Konfiguracja w tej chwili jest bliska optymalnej, ale nie działa moduł odpowiedzialny za wstrzymywanie pracy demona, kiedy jest nieużywany - już nawet pomijając kwestie związane ze zużyciem energii, to trzeba go "popchnąć" (odpalić pasuspender dla dowolnego, nawet nieistniejącego programu), żeby zaczął działać po wyjściu z trybu wstrzymania, czy hibernacji. Kiedy zaś autowstrzymywanie PulseAudio działało, z bliżej nieokreślonych powodów wstrzymywał się po przejściu na inną konsolę, jak również nie udało mi się utworzyć działającego wirtualnego urządzenia ALSA, a podczas odtwarzania przejmował mi wyłączną władzę nad kartą dźwiękową.
Skoro już o hibernacji wspomniałem - po wyjściu ze stanu hibernacji mój system ma tendencję do wyświetlania na "czystej" konsoli (tzn. Ctrl+Alt+F1 itp.) całego szarego ekranu, z którego nie można nic wyczytać. Tak samo magicznymi sposobami po wyjściu z hibernacji wyłącza się wyciszenie kanału "mikrofon", co już raz doprowadziło mnie do kompromitującej sytuacji w trakcie wykładu.
To są takie rzeczy, które niby nie mają wpływu na ogólną jakość działania systemu, ale... ale jednak nie świadczą o nim zbyt dobrze. I, no nie da się ukryć, że Windowsy są pod tym względem dużo bardziej dopracowane.
Podsumowanie
No cóż, ani Linux nie jest tym samym systemem dla geeków, którym był kilkanaście lat temu, ani Windows nie jest już tym wiecznie wieszającym się syfem oznaczonym cyferkami 95 czy 98. Nic też nie zmieni tego, że współczynnik jakości do ceny w przypadku Linuksa zawsze będzie nieskończenie większy ;) Ale gdybym miał porównywać tylko jakość, na cenę ani ideologię nie patrząc... to nie wiem, czy mógłbym z czystym sumieniem przyznać Linuksowi palmę pierwszeństwa. Dalej zamierzam go używać, bo jestem, może nie ortodoksyjnym, ale jednak fanem Wolnego Oprogramowania - ale nie da się ukryć, że w dalszym ciągu jest to system o wielu wadach.
Ech, jak ja kocham takie podejście – coś mi nie pasuje, ale i tak będę tego używał, bo to jest „ideologicznie słuszne”… A ideologię to lepiej zostawmy politykom, czy też GNU/Stalin^H^Hlmanowi, nie mieszajmy do technologii.