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.

KOMENTARZE:

Павел Тюпак | 16 lipca 2008, 17:40:44

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.

642 KB | 16 lipca 2008, 18:22:04

Zrezygnowałam po przeczytaniu wstępu. ;)

Radek | 16 lipca 2008, 18:23:03

Co do niespójności… Windows też jest niespójny, bo przecież nie ma jednego odtwarzacza wideo dla windy, nie ma jednej przeglądarki internetowej… Totalna niespójność!
A poważnie – nie nazwałbym możliwości wyboru „niespójnością”.

Co do RPM/DEB... też nie wiem w czym Ci to przeszkadza. Potraktuj to tak: własna kompilacja to jak instalowanie przez setup.exe w Windowsie (chyba podobna trudność), a RPM/DEB/cokolwiek jest o niebo lepsze, bo daje dostęp do repozytoriów. Więc to taki „dodatkowy ficzer”.

A „niedoróbki”... Każdy tak rozbudowany projekt informatyczny ma niedoróbki. A Windowsie to wszystko tak super działa? Też się pojawiają różne kwiatki… Inna sprawa, czy użytkownik sobie z nimi daje radę czy nie. Jak admin dupa, to co by nie zainstalował, będzie kiepsko działać.

Ze swojego doświadczenia (ArchLinux w domu, Winda w pracy) mogę powiedzieć, że Linux wymaga mniej od użytkownika (użytkownik != administrator), jest bardziej przewidywalny i ma o niebo lepsze środowisko (N pulpitów itp itd.). Windows z kolei lepiej sobie radzi z jakimś egzotycznym sprzętem podłączanym do kompa. Na tym jego przewaga się kończy.

puppy | 16 lipca 2008, 18:51:06

Co do kernela, jest tam opcja pozwalająca ładować moduły z innych wersji. Oczywiście testing itd, ale jest.

Jeszcze jedna sprawa – pomysł, by rozdzielić GUI na serwer, wm, widgety – totalna klapa, która tylko spowalnia system. Jak do tego dorzucimy kolejne xcompmgr czy compiz, czyli dodatkową warstwę – tragedia. Nie wspominając o tym, że nie ma tu (sensownego) odpowiednika GDI, czyli w miarę bezstresowego rysowania po ekranie. Wszystko to musi iść przez kolejne programy, tłumaczące własne konstrukcje na natywne wywołania Xów. Widzieliście xcalc? To już wiadomo, czemu nikt nie używa czystego X ;-P

kFYatek | 16 lipca 2008, 19:34:56

@Павел: To nie jest takie do końca jak mówisz. Linux mi nie odpowiada o tyle, że jest niespójny i gdzieniegdzie niedorobiony, Windows mi też nie odpowiada, bo mimo swoich wielu zalet IMO nie jest wart swojej ceny. A chyba słuszniejszą ideologią jest używanie alternatywy, niż piracenie?

Choć przyznaję bez bicia, Windowsa kupiłem (w cenie laptopa). Choćby z tego względu, że nigdy nie wiadomo, kiedy będzie mi potrzebny jakiś program działający tylko pod Windowsem, z którym Wine sobie nie poradzi. Więc mógłbyś powiedzieć, że sam w ten sposób zaprzeczyłem swoim argumentom, i pewnie będziesz miał trochę racji nawet.

Ale jednak, mimo wszystko, mimo tych wszystkich żali, które wylałem, wolę Linuksa. Nie wiem dlaczego, ale tak po prostu jest. :)

@Radek: Nie chodzi mi o możliwość wyboru, tylko o brak kompatybilności między dystrybucjami i daleką od idealnej współpracę programów z „różnych światów” (aplikacji z KDE pod GNOME itp.).

Własna kompilacja odpowiednikiem setup.exe? OK. Jak mi pokażesz odpowiednik deinstalatora to może się przychylę do tego zdania.

@puppy: Akurat to rozdzielenie GUI IMO nie jest wielkim problemem. Niby to wszystko spowalnia system, a GNOME z Compizem albo KDE3 i tak ma mniejsze wymagania niż Vista, a gry (te, które mają swoje wersje i na Windę, i na Linuksa) – w końcu najbardziej wymagające programy jeśli chodzi o wydajność grafiki – mają bardzo porównywalną wydajność i tu, i tu.

jam łasica | 16 lipca 2008, 19:38:03

Co do pakietów to uważam, że powinien być JEDEN (nie trylion jak teraz) wspólny format i tyle w tym temacie :)

Niespójność GUI to zupełnie inna sprawa. Wszystkie aplikacje nigdy nie będą spójne pod względem wizualnym. Np. zobacz jak pod Windows wygląda Winamp lub WMP. Człowiekom jakoś to nie przeszkadza, a czasami nawet wręcz przeciwnie ;)

Guest | 16 lipca 2008, 20:01:58

> Własna kompilacja odpowiednikiem setup.exe? OK. Jak mi pokażesz odpowiednik deinstalatora to może się przychylę do tego zdania.

Zamiast make install, wystarczy checkinstall i już mamy pakiet, którym możemy zarządzać z menedżera pakietów.

kFYatek | 16 lipca 2008, 21:23:22

A o checkinstall nie słyszałem, a faktycznie, bardzo miły programik :)

Radek | 17 lipca 2008, 09:20:49

@kFYatek, „make uninstall” zamiast „make install”

@jam łasica, używaj jednej dystrybucji, to będziesz miał jeden menadżer pakietów. Zupełnie nie rozumiem tego narzekania, że jest kilka menadżerów. Co z tego? Przecież programiści tych paczek nie robią (chyba, że chcą) – wypuszczają źródło i na tym się ich praca kończy. Kompiluj skoro chcesz mieć taką samą instalację dla każdej dystrybucji.
Nie zabronisz ludziom pisać własne menadżery pakietów ;)

Co do współpracy KDE-Gnome, to nie wiem jak u Was, ale u mnie działa. W KDE mam gtk-qt-engine więc wszystkie GTKowe programy wyglądają jak trzeba. Za to w Windowsie co program to jakaś „skórka” (wspomniany winamp, wszelkie komunikatory, odtwarzacze wideo itp.), więc jest moim zdaniem dużo gorzej.

Listva | 17 lipca 2008, 11:17:48

Nie wiem czy to bylo w komentarzach czy nie ale…

Porównywanie JEDNEGO systemu (win) z KILKOMA (pare distro) i dziwienie sie ze kilka roznych systemow sie… rozni, jest IMO dziwne. Fakt ze distra maja wiele wspolnego, ale niezapominajmy ze kazde z nich to oddzielny system operacyjny. Wiec jak dla mnie porownanie moglo by dotyczyc np Winda vs suseł, winda vs fedora czy vs debian, a nie winda vs linux ;/. Wiele ludzi o tym zapomina niestety…

kFYatek | 17 lipca 2008, 11:51:36

@Radek: make uninstall… no dobra, tylko kto trzyma katalog ze źródłami po zainstalowaniu programu? A nawet jak trzyma, to wygrzebywanie go… mało to intuicyjne rozwiązanie jak dla mnie. checkinstall o niebo lepszy ;)

@Listva: OK, tyle, że… te wiele systemów (różne distro) mają ze sobą jednak jakby nie patrzeć więcej wspólnego niż różnego. Jak ktoś pisze program na Linuksa, to nie mówi, że to jest program na Debiana czy na Fedorę, tylko że jest to program na Linuksa – bo w 99% przypadków program równie dobrze skompiluje się pod każdą distro, a w jakichś 90% (jeżeli porównujemy distro z podobnego okresu czasowego i na tą samą architekturę) i binarki się uruchomią wszędzie. Więc ta Fedora i ten Debian… no cóż, niby różne systemy, ale aż się prosi, żeby psioczyć na niekompatybilność (różnice w systemie pakietów itp.) między nimi.

Listva | 17 lipca 2008, 11:53:31

kFYatek, ta ale patrząc pod kątem uzytkownikow ktorzy uzywaja jednego wzglednie dwoch distro naraz bardzo martwi ze ich system jest wrzucany ogólnistycznie do jednego wora, bo bardzo lubia byc wyroznieni ;)

kFYatek | 17 lipca 2008, 12:18:30

A poza tym popatrz jeszcze na zwykłych userów, którzy np. przychodzą do pracy w biurze, gdzie dział IT stwierdził, że zamiast Windowsów poinstaluje Linuksy. Dla takich to po zobaczeniu kilku różnych distro zapewne będzie istniał tylko „Linux z KDE” i „Linux z GNOME”, tylko „nie wiedzieć czemu na różnych komputerach są różne ikonki dla menu Start” ;) No dobra, jeszcze splashscreeny i ekrany logowania mogą zasiać trochę wątpliwości, ale myślę, że łapiesz aluzję ;)

Tak samo pracodawcy przecież nie piszą „zatrudnię programistę/administratora systemu Slackware” tylko „zatrudnię programistę/administratora systemu Linux”.

Listva | 17 lipca 2008, 12:21:31

No ja wiem o co chodzi, mowie tylko ze mi sie to niepodoba ;p. Poza tym Linux to nazwa jadra… ;p

Hoppke | 17 lipca 2008, 14:00:43

Bardzo fajny tekst, ale IMO za długi — mogłeś go rozbić na 3 kolejne wpisy, tym bardziej że i tak go tematycznie pogrupowałeś.

Faktycznie bardzo bolesny jest brak jednego formatu pakietów z oprogramowaniem i nieprzenośność pakietów nawet pomiędzy kolejnymi wersjami tej samej dystrybucji. Niestety pojęcia nie mam jak to rozwiązać, bo ta słabość jest wpisana w model rozwoju Linuksa i softu mu towarzyszącego.

A co do modułów jądra, to np. Mandriva używa DKMS. Wtedy właściwy moduł łączy się z jądrem przez warstwę pośrednią, i to ona bierze na siebie ciężar zmieniającego się API/ABI jądra. Ale ten problem również istnieje tylko dlatego, że ludzie produkujący jądro nie przywiązują większej wagi do zamrażania API/ABI i w wygodny (dla nich) sposób spychają to na dystrybucje.

kFYatek | 17 lipca 2008, 14:03:56

No właśnie z DKMS jest podobny problem co z LSB – ktoś się podjął rozwiązania problemu niejednolitości… ale nie zdobyło to wystarczającej popularności. I o ile jak piszesz w Mandrivie jest DKMS defaultowo, o tyle w innych dystrybucjach trzeba to doinstalowywać, ale tak naprawdę nie wiadomo po co, bo np. sterowniki do kart graficznych i tak się nie kwapią żeby z tego korzystać.

Hoppke | 17 lipca 2008, 14:11:02

I tu wychodzi zaleta centralnego sterowania, które może stosować Microsoft. Użytkownicy Linuksa mają gorzej, bo dystrybucje nigdy nie mogą dojść do porozumienia, często wręcz w ramach jednej dystrybucji dochodzi do tarć i sporów (stąd się wzięło Ubuntu na przykład, a potem Kubuntu i…)

Gorzej! Nawet gdyby zdarzył się cud i wszystkie wielkie dystrybucje ustanowiły sobie jakiś wspólny zestaw reguł, to i tak pewnie zaczęłyby powstawać dystrybucje wyłamujące się z tego schematu, choćby po to by zaspokoić czyjeś potrzeby „płynięcia pod prąd”. Czasem żałuję, że Linux nie należy do jakiejś rynkowej, drapieżnej korporacji która byłaby w stanie wymusić jeden model na dystrybucjach. Może wystarczyłoby nawet „albo załączasz biblioteki w takiej i takiej wersji, albo nie możesz użyć znaku >>Linux<<”. Tak jak Mozilla zrobiła z Firefoksem i Thunderbirdem…

kFYatek | 17 lipca 2008, 14:23:51

Firefox i Thunderbird to nieco inna bajka, bo tutaj Firefox i Thunderbird jest jeden, a wszelkie projekty pochodne muszą się nazywać inaczej. Zresztą w zasadzie to na dobrą sprawę jest standard w świecie oprogramowania użytkowego, nikt nie nazywa produktu pochodnego tak samo jak oryginału, zawsze przynajmniej jakieś „Mod” do nazwy się dodaje. Zresztą w Linuksach jest tak samo – nie ma dwóch tak samo nazywających się dystrybucji. Tyle że żadna z nich nie zyskała aż tak dużego poważania, żeby być przyjętą za standard. Przez ostatnie kilka lat za najpopularniejszą dystrybucję uchodziło Ubuntu, obecnie z tego co widzę zaczyna być wyprzedzane przez openSUSE, a to przecież distra z zupełnie różnych światów (Ubuntu pochodzi od Debiana, SUSE jak widzę ma swoje korzenie w Slackware, ale np. korzysta z RPMów…).

Hoppke | 17 lipca 2008, 14:31:34

Jak słusznie zauważyłeś każda dystrybucja ma inną nazwę, ale sam nazwałeś je zbiorczo „linuksami”. Gdy pytam kogoś czego używa na swoim komputerze, to też najpierw powie mi „linuksa”, a dopiero potem doprecyzuje dystrybucję. Linux to silna marka, silniejsza od pojedynczych dystrybucji… możnaby jej pewnie użyć do wymuszania na dystrybucjach pewnych zachowań.

Inna sprawa, że dystrybucje często łatają błędy autorów jądra, więc wymuszanie czegokolwiek na nich byłoby mocno nie fair…

Beznadziejna sytuacja.

kFYatek | 17 lipca 2008, 14:44:42

BTW. Osobiście odkąd zacząłem używać Linuksa jako swojego podstawowego systemu, przeszedłem następującą drogę: Mandriva -> Fedora -> Kubuntu -> Ubuntu. Ale mam dziwne wrażenie, że znowu będę musiał zmienić distro, bo mam wrażenie, że z kolejnymi edycjami Ubuntu zaczyna coraz bardziej traktować użytkownika jak idiotę, który kliknie akurat ten przycisk, który rozwali system :/

A szkoda, bo to naprawdę dobrze działająca dystrybucja, i to z potężnymi repos…

Tak, Linux to potężna marka, ale przez nikogo nie zarządzana i na dobrą sprawę do nikogo nie należąca. I zmienić tej sytuacji w zasadzie się nie da. I właściwie zauważ, że nawet sami autorzy dystrybucji jej nie eksponują – nie muszą. Kiedy wejdziesz na stronę projektu Ubuntu czy Fedora, przeczytasz, że to „system operacyjny oparty na Linuksie”, a nie „dystrybucja Linuksa”. W dodatku postępuje trend usuwania słowa „Linux” z nazwy dystrybucji. O ile kiedyś wszystko nazywało się „Red Hat Linux”, „SuSE Linux” itp., to teraz mamy „Fedorę”, „Ubuntu”, „openSUSE” – bez „Linuksa” w nazwie. Jak widać, siła marki „Linux” jest tak duża, że nawet unikanie jej przez samych twórców nie zatrzyma jej używania przez użytkowników. I wydaje mi się, że nawet gdyby właściciel marki „Linux” zabronił jej używania w niektórych sytuacjach, to wydaje mi się, że użytkownicy i tak by takie systemy nazywali „Linuksami”.

Hoppke | 17 lipca 2008, 14:52:56

Chyba, żeby rozkręcić kampanię reklamującą „prawdziwe” (certyfikowane) Linuksy oraz produkty linuksopodobne. Wyrobić w ludziach przeświadczenie, że produkty które nie są „prawdziwym linuksem” są gorsze. Duże pole do popisu dla ironicznych reklam z jajem :)

kFYatek | 17 lipca 2008, 15:05:23

Inna sprawa, że certyfikowanie dystrybucji byłoby potężnym polem do nadużyć. A jeśli wyrobić w ludziach przeświadczenie, że niecertyfikowane Linuksy są gorsze… wtedy zapewne dużo mniej ludzi decydowałoby się na stworzenie własnego distro, bo przerażałoby ich oczekiwanie na certyfikację wraz z każdym wydaniem, a „bez certyfikatu przecież nikt tego używać nie będzie”. Na arenie pozostałoby kilka największych projektów, co z jednej strony miałoby swoje zalety (większa spójność i jednolitość), ale też i wady (mniejsza konkurencja to wolniejszy rozwój).

Albo też drugi możliwy scenariusz – najbardziej liczące się dystrybucje zbojkotowałyby program certyfikacji jako sprzeczny z ideami Wolnego Oprogramowania, i wtedy, za przeproszeniem, o dupę rozbić takie certyfikaty, bo wydaje mi się, że siła bazy użytkowników Fedory, Ubuntu, Debiana, openSUSE czy innych popularnych dystrybucji wydaje mi się mimo wszystko dużo większa niż siła „ironicznych reklam z jajem”.

Hoppke | 17 lipca 2008, 15:14:16

To prawda, ale z drugiej strony niektóre dystrybucje (Fedora, SUSE, Mandriva…) występują już teraz w wersjach darmowych i płatnych. Możliwe, że dla dystrybucji certyfikowanie wersji płatnych byłoby sposobem na zwiększenie ich atrakcyjności. A za darmo miałbyś nadal distro bez certyfikatu. Pomysł poparliby też producenci komercyjnego softu…

kFYatek | 17 lipca 2008, 15:18:02

Widziałeś jakiegoś indywidualnego użytkownika używającego płatnego Linuksa? Płatne Linuksy są dla firm, które chcą mieć porządny support i o nic się nie martwić. Do zastosowań desktopowo-hobbystycznych mało kto jest chętny, żeby za Linuksa płacić.

A jeśli chodzi Ci o to, że np. certyfikat dla płatnego SUSE zwiększyłby popularność darmowego niecertyfikowanego openSUSE… wracamy do pierwszego podanego przeze mnie scenariusza – mniejsze distra przestałyby się w ogóle liczyć i pozostałyby tylko największe projekty (mające zaplecze ze strony dużych korporacji).

Hoppke | 17 lipca 2008, 15:22:02

Widziałem paru userów płatnej mandrivy. Myślę, że wszystko jest kwestią ceny jaką sobie producent zażyczy…

Tak, małe dystrybucje nie mogłyby marzyć o zdobyciu popularności bez mocnego wsparcia. Ale czy w danej chwili jest inaczej? Bez pieniędzy i niezłej reklamy (jak np. wysyłanie masy płytek jak to Ubuntu robi) chyba nie da się już zaistnieć. Rynek się nasycił.

kFYatek | 17 lipca 2008, 15:32:04

Ale jest wiele dystrybucji nie aż tak popularnych, ale jednak znajdujących swoją niszę na tyle dużą, żeby być zauważalnymi – jak choćby Arch czy Gentoo.

A poza tym już wracając do samej certyfikacji – jak wyobrażasz sobie np. rozwiązanie problemu pakietów z oprogramowaniem? Kiedy powstawał standard LSB, korzystający z RPMów, obóz Debiana się oburzył, że oni się na RPMy nie przesiądą, bo ich DEBy są lepsze. No i tak się kończą próby ustandaryzowania czegokolwiek w podzielonym świecie Linuksa ;)

Aż cud, że np. twórcy środowisk graficznych porozumieli się w kwestii uwspólnienia katalogów przechowujących np. pulpit, czy integracji schowka.

Павел Тюпак | 17 lipca 2008, 15:33:43

No ba, bo jest Linux i jest Debian ;).

Hoppke | 17 lipca 2008, 15:35:03

No, Debiana można od razu skreślić ;)

kFYatek | 17 lipca 2008, 15:36:23

I to już jest koniec tego projektu, bo prawdopodobnie za Debianem pójdzie Ubuntu, Knoppix i kilka innych naprawdę liczących się distro, a to już jest za duży udział w rynku, żeby projekt się udał ;)

Hoppke | 17 lipca 2008, 15:43:00

Na Ubuntu bym wbrew pozorom nie liczył, oni nie boją się komercji. Canonical ma nawet strategiczne partnerstwo z Linspire (Linspire dostaje support potrzebny do wypuszczenia Freespire na bazie Ubuntu, a Ubuntu dostaje support potrzebny do zintegrowania zasobów komercyjnego softu z Linspire). Myślę, że mogłoby być ciekawie.

kFYatek | 17 lipca 2008, 15:47:41

No dobra, ale wyobrażasz sobie, że wszystkie DEBowe dystrybucje oprócz samego Debiana nagle przesiadają się na RPMy? Bo ja nie. Tak samo jak nie wyobrażam sobie, żeby wszystkie RPMowe dystrybucje nagle przesiadły się na DEBy, ani że jedne i drugie przesiądą się na jakiś nowo wymyślony format. Niektóre elementy dystrybucji za bardzo w nie wsiąkły, żeby je zmieniać.

Hoppke | 17 lipca 2008, 15:51:04

Myślę, że na początek można żyć z różnymi formatami pakietów. To w końcu z grubsza taka różnica, jak między .zip a .tar.gz, można zawsze napisać sprytny konwerter (takiego lepszego aliena). Najważniejsze są wersje bibliotek i inne rzeczy, które zrywają kompatybilność binarek. Gdyby tu uzyskać jakiś standard, to już mielibyśmy znaczący postęp.

kFYatek | 17 lipca 2008, 16:05:32

Bo ja wiem? Mi się wydaje, że największym problemem jest tutaj brak spójności w rozwiązywaniu zależności między pakietami.

Ale podsunąłeś mi pewien pomysł – gdyby tak napisać menedżera pakietów, który równie dobrze radziłby sobie z RPMami, jak i z DEBami i tworzył dla nich spójną bazę danych zależności, i byłby dostarczany z narzędziami kompatybilnymi pod względem obsługi z linii poleceń z rpm i dpkg, to umożliwiłoby to płynne przejście na nowy standard zarówno dla dystrybucji DEBowych, jak i RPMowych. Tzn. trzebaby jeszcze napisać kompatybilne wersje apta i yuma, ale to nie wydaje mi się jakimś strasznym problemem.

Problemem jest jeszcze to, że różne dystrybucje stosują różny stopień rozdrobnienia pakietów, i nawet pomijając niekompatybilności samych formatów (DEB vs. RPM) trudno stworzyć spójny system rozwiązywania zależności, bo… hm… no trudno mi tutaj podać przykład z życia wzięty, ale załóżmy, że mamy bibliotekę libcośtam, która ma dwa komponenty – libcośtam-a i libcośtam-b. Powiedzmy, że twórcy Fedory zawrą to w jednym libcośtam.rpm, a w Ubuntu rozbiją to na libcośtam-common.deb, libcośtam-a.deb i libcośtam-b.deb. I teraz pakując program korzystający z libcośtam, jaką dać zależność? Że wymaga libcośtam-a i libcośtam-b, czy że wymaga libcośtam?

Hoppke | 17 lipca 2008, 16:12:39

Z mieszaniem różnych typów pakietów mógłby sobie pewnie poradzić Smart (obsługuje deby, rpm-y, repozytoria różnych dystrybucji…), trzeba tylko rozwiązać nazywanie zależności.

„I teraz pakując program korzystający z libcośtam, jaką dać zależność? Że wymaga libcośtam-a i libcośtam-b, czy że wymaga libcośtam?”

Zostawić to automatowi skanującemu zależności binarki. Wykryje on, że binarki w pakiecie potrzebują „libcośtam.so.2” i wpisze to na listę zależności. Ale to akurat ten konkretny przypadek, nie da się w ten sposób rozwiązać zależności nie wynikających bezpośrednio z linkera i symboli w binarkach. Inna sprawa, że pomijając wyjątki typu Archa (wielkie paczki) czy PLD (masa drobnicy) wszystkie dystrybucje dzielą pakiety według podobnych schematów. Chociaż dobrze byłoby mieć konkretnie opisane standardy.

kFYatek | 17 lipca 2008, 16:26:36

Na pewno nie wszyscy się do tych standardów dostosują. Ktoś się na pewno wyłamie i stwierdzi, że standardowy model podziału pakietów jest za gruby lub za drobny i zrobi swoją dystrybucję wyłamującą się ze schematu.

Przychodzi mi na myśl jeszcze jedno rozwiązanie – zostawić standardy pakietów wewnątrz dystrybucji jej twórcom, ale stworzyć nowy standard przeznaczony tylko i wyłącznie do dostarczania oprogramowania nie wchodzącego w skład samej dystrybucji. I tam zależności mogłyby być już rozwiązywane według plików (tzn. w paczce mogłyby być informacje o każdym pojedynczym pliku wymaganym przez dany program), a podczas instalacji zapisywane w bazie danych (która oczywiście integrowałaby się z bazą pakietów należących do dystrybucji) z jakich pakietów te wymagane pliki pochodzą, do wgrywania plików np. do /etc/rc?.d mógłby ten menedżer pakietów mieć odpowiednie coś na kształt API (bo przecież w różnych systemach jest to w nieco różnych miejscach), które również dbałoby o spójny wygląd tych skryptów zgodnie z przyjętą w dystrybucji koncepcją.

Ogólnie całość przypominałaby trochę model przyjęty w Windows – inaczej zarządza się tam przecież komponentami systemu, a inaczej resztą oprogramowania. W Linuksie co prawda proporcje między softem uważanym za część dystrybucji systemu a tym określanym jako „third-party” są zgoła inne, ale zasady są dość podobne.

Hoppke | 17 lipca 2008, 16:29:54

Częściowo jest to załatwione — soft 3rd-party ląduje w /opt, do integrowania się z systemem mógłby być jakiś standardowy program, to nie problem… Wszystko rozbija się ostatecznie i tak o to, że w jednej dystrybucji wrzucili libgmp.so.3, w innej libgmp.so.2, i nijak nie dostosujesz się do obydwu, bo fizycznie możesz tylko z jedną wersją się zlinkować.

kFYatek | 17 lipca 2008, 16:38:25

Soft 3rd-party ląduje w /opt… teoretycznie, bo jak dotąd z softu lądującego w /opt to widziałem tylko Javę, no i niektóre gry. Tak to wszystkie programy instalowane uznawaną za standardową procedurą ./configure; make; make install – lądują przecież w /usr, albo /usr/local, zlewając się z resztą i utrudniając deinstalację.

A libgmp.so.2 i libgmp.so.3 to, o ile mi wiadomo, po prostu różne wersje biblioteki. I zauważ, że np. w Windows ten sam problem występuje, choćby (bo mi pierwsza na myśl przychodzi) słynna przed laty biblioteka uruchomieniowa Visual Basica – były i VBRUN300.DLL i VBRUN400.DLL, później MSVBVM60.DLL, i wszystko to była zasadniczo ta sama biblioteka w kolejnych wersjach, i też się przecież nie dało zlinkować z każdą z nich jednocześnie. A jednak jakoś to wszystko działało, i mimo pojawiających się gdzieniegdzie w Sieci narzekań, ja tam nigdy z DLLkami pod Windowsem większych kłopotów nie miałem.

Hoppke | 17 lipca 2008, 16:51:32

Większość komercyjnego softu (bazy danych itp.) trafia do /opt. Tak, .so.2 i so.3 to tylko różne wersje biblioteki, ale to właśnie stanowi 90% problemów z przenośnością pakietów między dystrybucjami.

Linux oczywiście również może przechowywać równocześnie X wersji tej samej biblioteki, tyle że… to nie jest normą. Systemy pakietów z definicji nie pozwalają na zainstalowanie więcej niż 1 wersji pakietu, czasem (naprawdę sporadycznie) developerzy pozwalają na to i robią np. pakiety „gcc” oraz „gcc2”. Ale spróbuj zainstalować równolegle gcc-3.0 i gcc-3.1, w większości dystrybucji będzie to niemożliwe bez ostrego kombinowania. W przypadku aplikacji to akurat „wina” FHS, ale binarki bibliotek nie są problemem — każda wersja ma inną nazwę pliku. Problemem jest model pakietów, który wymusza upgrade wersji zamiast instalacji równoległej. Co wynika z przeświadczenia, że każde distro jest zamkniętym, odizolowanym światem. I koło się zamyka.

kFYatek | 17 lipca 2008, 17:00:21

Z drugiej strony, całość powoli się klaruje, bo te biblioteki, w których posiadanie kilku wersji zainstalowanych naraz ma sens, mają odpowiednie nazwy pakietów – przykłady: libgtk i libgtk2, libqt3 i libqt4, itp. Głównym problemem jest moim zdaniem brak spójności w nazewnictwie tychże.

Komercyjny soft trafia do /opt… być może. Ale wśród indywidualnych użytkowników dużo częstszy jest scenariusz: ktoś usłyszał o fajnym opensource’owym programie, i chciałby go zainstalować, ale jego twórca jest fanem Fedory, i chciało mu się do niej zrobić RPMa, ale ten użytkownik używa akurat Ubuntu, do którego akurat nikt nie zrobił pakietu z tym programem. W celu jego skompilowania musi ściągać 100 MB pakietów -devel (BTW: w jednych dystrybucjach nazywają się one -devel, w innych -dev…), przy odrobinie szczęścia całość idzie bez błędów kompilacji, a po uruchomieniu okazuje się, że ten program wcale nie jest taki fajny – i jak go teraz skasować?

kFYatek | 17 lipca 2008, 17:03:26

Użytkownicy komercyjni sobie i tak poradzą, bo mają komercyjny support i/lub rzesze informatyków którzy w opisanej sytuacji stworzą odpowiedniego DEBa tylko na wyłączny użytek wewnętrzny firmy ;) Na dzisiejszym braku standaryzacji Linuksa najbardziej cierpią indywidualni hobbyści… i firmy oferujące ten wyżej wspomniany komercyjny support ;)

Radek | 17 lipca 2008, 18:01:27

„okazuje się, że ten program wcale nie jest taki fajny – i jak go teraz skasować?”

kFYatek, powtórzę się, ale… może make uninstall? ;) A poza tym ten użytkownik, o którym pisałeś, mógł zrobić paczkę a nie instalować ze źródeł – nie dość, że łatwiej by się odinstalowywało, to jeszcze przysłużyłby się swoejmu ulubionemu Ubuntu…

dos | 18 lipca 2008, 17:15:16

Kolejny, który pisze o tym, co już dawno zostało napisane. Setki razy…

DODAJ KOMENTARZ: