Filozofia - czyli przedmowa “Sagi o Linuksie”
20 grudnia 2007, Keyto
Motto na początek (inspirowane „Skrzypkiem na dachu”):
- Wszelkie darmowe unixy to dzieci komputerowych maniaków, a więc siłą rzeczy nie są dla zwykłych śmiertelników. Teraz łata się te systemy, aby je cokolwiek obłaskawić i przystosować dla mas. No, i pomimo wysiłków milionów “bazarowych” programistów idzie to topornie… A być może właśnie dlatego… - mówił Guru. Tewje milczał.
- Ja wiem… - Keyto nie wyglądał na przekonanego.
- Ech, Keyto. Linuksowe towarzystwo, by przyspieszyć prace zatrudnia za pieniądze programistów. To raz. A gdzie powstały unixy? To dwa. Nie były to systemy na Biurko, to trzy. KDE i GNOME są łatami, podsystemami, jeśli razi Cię słowo łata, dołączonymi do kompletnego systemu. Jak kiedyś Windows 3 był nakładką na DOS. Długo będziesz udawał, że tak nie jest? Nie chodzi o porównanie funkcjonalności, ale idei. Windows był od początku systemem łatwym.
- Masz rację – zgodził się Tewje.
- Ależ reb Tewje! UNIX, Linux, zwał jak zwał, ma zupełnie inną filozofię konstrukcji. Mówienie, że KDE to łata, to nieporozumienie! - Keyto zdawał się być lekko poirytowany i dłuższą chwilę wyłuszczał swoje racje.
- Masz rację – zgodził się Tewje.
W tym miejscu Michuk nie wytrzymał:
- Ależ, reb Tewje, jeśli on ma rację i on ma rację… Obaj naraz nie mogą mieć racji!
Tewje popatrzył na niego i powiedział po prostu:
- Masz rację.
A teraz po kolei, wyłuszczanie moich racji.
Rozdział 1: UNIX
Ta historia rozpoczyna się - jak to zwykle bywa - dawno, dawno temu, za górami, za lasami, morzami (a nawet oceanem), w Stanach Zjednoczonych Ameryki, w miejscu zwanym Bell Laboratories. W firmie owej stał komputer. Niby nic w tym nadzwyczajnego, ale w roku 1969, kiedy owe wydarzenia biorą swój początek, komputer nie był zjawiskiem powszechnym. Nie istniały jeszcze komputery osobiste, firmy Microsoft, Novell czy Apple. Żadnych flame wars… Ot, piękne, romantyczne czasy. A propos – czas pracy maszyn znanych nielicznym wybrańcom, czyli komputerów, był na wagę złota (wszak czas to pieniądz). I tu pojawił się problem. Pewna maszyna, dokładniej DEC, model PDP-7, stała bezczynnie. Nic więc dziwnego, że przydzielono do niej jednego z największych guru informatyki – Kena Thompsona, aby coś z tym fantem zrobił. Przecież komputer się marnuje! Tompson zwołał innych guru, w tym pracującego już wcześniej nad programowaniem systemów operacyjnych Dennisa Richie i wespół stworzyli wczesną wersję systemu UNIX. Rozwijali go jeszcze czas jakiś bez większego rozgłosu, wykorzystując w późniejszym okresie inne maszyny (na przykład PDP-11/20). Specjalnie dla UNIX-a opracowali język programowania „C”, a potem… Życie się bardzo skomplikowało.
Rozdział 2: Zasady
Dla tych, którzy tego nie wiedzą: programy komputerowe nie są tworzone tak, że „siada się do klawiatury i się pisze”. To mit, rozpowszechniany przez zamieszkujących miejsce zwane Holywood. Programy powstają w głowach ich autorów, przelewane są potem na papier (tak – na papier), nierzadko modelowane w postaci diagramów UML i dopiero gdzieś na końcu całego procesu implementowane. Implementacja to nic innego, jak nadanie konkretnych kształtów – konkretnych instrukcji kodu języka programowania - pomysłom opracowanym drobiazgowo wcześniej. Ważne jest to, że na samym początku konieczne jest przyjęcie jakichś fundamentalnych zasad, swoistego dekalogu, którego złamanie w okresie implementacji jest absolutnie niedopuszczalne. Porządek musi być, zwłaszcza w naukach ścisłych, zwłaszcza w matematyce i programowaniu. Inaczej program nie zadziała prawidłowo, co więcej - jego modyfikacje mogą być później niemożliwe.
Jak każdy system, tak i UNIX opiera się na pewnych fundamentach. Najważniejszy z nich?
Rozdział 3: Reguła KISS
Tak naprawdę jedyną, kardynalną zasadą przyświecającą twórcom ojca systemów Linux, BSD, Mac OS X i wielu innych, była reguła KISS. Wszystkie inne zasady to już jej konsekwencje. Niedaleko pada jabłko od jabłoni, zatem i owa zasada przeszła z matki na dzieci. Wzorcowo stosowana jest ona choćby w dystrybucjach Slackware, Arch czy Crux. Sukces ma wielu ojców, tak więc do sformułowania reguły KISS przyznają się informatycy (a dokładnie – wiąże się ją z hackerami z MIT), ekonomiści, matematycy, biolodzy… Wymieniać można długo. Jeśli ktoś interesuje się filozofią, wie, że podobną zasadę sformował nijaki William Ockham (tzw. Brzytwa Ockhama), który żył w latach (około) 1285-1349. Na pewno nie miał komputera i nie był ekonomistą (choć kto go tam wie). Osobiście sądzę, że reguła KISS jest stara „jak Matka Ziemia”… Ale, ale, może w końcu napiszę, co głosi.
KISS jest akronimem od „Keep It Simple, Stupid” (ang.), co po polsku znaczy „to ma być proste, głupku”. Jeśli komuś wydaje się to nieco obraźliwe – taki był cel. Obecnie rozwinięcie to trochę się łagodzi i funkcjonuje ono pod postaciami: “Keep it Simple and Stupid” (to ma być proste i głupie), “Keep It Short and Simple” (to ma być krótkie i proste) lub “Keep It Small and Simple” (to ma być małe i proste). Polacy nie gęsi i swój odpowiednik mają – BUZI (Bez Udziwnień Zapisu, Idioto). Nie wiem, kto to wymyślił, ale naprawdę genialny przekład. Do kompletu dodajmy jeszcze co pisał wspomniany Ockham (uwaga, będzie łacina): Non sunt multiplicanda entia sine necessitate - istnień nie należy mnożyć ponad potrzebę, co tłumaczy się też jako: Bytów nie mnożyć, fikcyj nie tworzyć, tłumaczyć fakty jak najprościej. I to sformułowanie cenię najbardziej..
Jak wiadomo, w programowaniu cel można osiągnąć różnymi drogami. Czy wszystkie są jednakowo dobre? Nie! Lepsze są te prostsze.
Są bowiem:
- prostsze do napisania,
- prostsze w konserwacji,
- prostsze w przerabianiu,
- prostsze w przekazywaniu projektu komuś innemu,
- prostsze w przenoszeniu na inne platformy sprzętowe,
- bardziej „odporne” na błędy i…
- często po prostu szybsze.
Z resztą jeśli nie programujecie – zapytajcie o zdanie jakiegoś doświadczonego programistę. Mała szansa, że się z tym nie zgodzi.
Pierwszą konsekwencją reguły KISS jest:
Rozdział 4: Reguła DRY
Don’t Repeat Yourself – nie powtarzaj się. Kiedy pisze się program, można postawić na dwie strategie: pisać kod linia pod linią, a kiedy zorientujemy się, że to co akurat mamy napisać już było, korzystamy z najlepszego przyjaciela informatyka, czyli sekwencji „kopiuj – wklej”. Nie jest to najlepsze rozwiązanie. Zamiast tego wymyślono tak zwane procedury (funkcje). Procedurę z powtarzającym się kodem piszemy raz, a wywołujemy ją wielokrotnie. Ale to jeszcze mało. Aby było to wygodne w użyciu, elastyczne i naprawdę spełniało zasadę prostoty, należy postępować według zasady:
Jedno zadanie – jedna procedura.
Otrzymamy wiele pojedynczych funkcji, mówiąc obrazowo „klocków”, z których każdy zapewni nam jakąś pojedynczą funkcjonalność. Kiedy jeden z klocków wymaga poprawy, nie ma sprawy – poprawiamy go, bądź też przepisujemy na nowo. Reszta kodu nawet się o tym „nie dowie”, byle klocek zapewniał identyczną funkcjonalność (i zgodność interfejsów programistycznych).
Zasada ta obowiązuje również w systemach operacyjnych. A już na pewno w rodzinie UNIX. Mówiąc nieco infantylnie, UNIX to kernel (silnik) tworzący środowisko (nie mylić ze środowiskiem graficznym…) i cała masa programików użytkowych – takich „klocków”, po jednym jako remedium na jeden problem. Kiedy mamy do rozwiązania problem złożony – z dostępnych „klocków” budujemy złożone rozwiązanie.
Rozdział 5: Prostota konstrukcji a prostota użytkowania
Zaznaczam raz jeszcze: prostota systemów z rodziny UNIX tyczy się ich konstrukcji. Nijak się to ma do prostoty użytkowania. Chociaż… popatrzmy na poniższy, głupiutki przykład:
srv@srv # ps aux | grep kowalski |
grep program_obslugi | tee log.txt
Załóżmy teraz, że Kowalski nie wie co to jest polecenie ps, polecenie grep, tee i ten dziwny znaczek pionowej kreski. Nie wie zatem, jak to poskładać, aby działało. Niech zatem administrator zrobi mu skrypt i sprawa załatwiona.
Może bardziej przekonywujący przykład: powszechnie znany i lubiany program MPlayer. Jest to - przypominam - dość toporny w obsłudze program konsolowy. Choć sam go używam, nie mogę zmusić się do nauczenia jego komend na pamięć, bo… istnieje nań nakładka graficzna, która zapewnia mi odpowiednią funkcjonalność. Jeden problem – jedna procedura. Osobny program odtwarza film, osobny zapewnia mi interfejs. Sam MPlayer to świetny program. Nie podoba Ci się jego tekstowy interfejs? Napisz inny. Nie umiesz programować? Znajdź inny, już napisany. A jakże – istnieją. Jedna funkcjonalność (doskonała), aby w ogóle wyświetlić film, inna dla prostoty obsługi (wybierz ją sam).
Analogicznie jak w Mac OS X. System Darwin – zapewnia, że to w ogóle działa. Interfejs Aqua - jest bohaterem legendy.
Rozdział 6: Inne zasady
Reguła KISS implikuje jeszcze inne konsekwencje. Na przykład to, że wszystko jest plikiem. Złośliwi dodają: „nawet kiedy nie jest”. I cóż z tego? Doświadczeni programiści wiedzą, że fundamentalnych zasad trzeba się trzymać z żelazną konsekwencją. Inaczej cel nie zostanie osiągnięty, inaczej wpędzimy się w rolę mitycznego Syzyfa: już, już kończymy projekt, ale jeszcze to a tamto nie działa i poprawiamy od początku. Może to, jak pisałem wcześniej, wydawać się toporne i dziwne od strony użytkownika, ale niekoniecznie jest dziwne od strony konstrukcji systemu. I już kilkadziesiąt lat działa.
Podobnie to, że każde polecenie to osobny proces, że interpreter poleceń jest po prostu procesem użytkownika. Te fundamentalne zasady zostały przyjęte, sprawdziły się i działają. No i przynoszą korzyści.
Rozdział 7: Klocki
Podstawową korzyścią wynikającą z princypiów systemu UNIX jest to, że po pierwsze: każdy składnik może być wymieniony na inny, byleby zamiennik zachowywał przyjętą funkcjonalność. Nie podoba Ci się bash? Użyj tcsh. Nie podoba się KDE? Istnieje Xfce.
Osobną sprawą jest, iż przyjęta filozofia zdeterminowała niesamowitą elastyczność systemu. Od systemów wbudowanych, poprzez desktopy, serwery, mainframe, po superkomputery. Ale czy da się powiedzieć, patrząc na system w urządzeniu zwanym routerem, że to kompletny system? Bo…
Rozdział 8: Cóż znaczy: kompletny system?
Kiedyś pisałem artykuł w którym poruszyłem temat kernela i systemów operacyjnych w ogóle. Państwo pozwolą, że się zacytuję: jeśli chodzi o system operacyjny, to w przyrodzie funkcjonują „dwie definicje. Ogólnie, najczęściej, przyjmuje się, że system operacyjny jest to jeden program, który działa w komputerze nieustannie od momentu uruchomienia systemu aż do jego wyłączenia (bądź restartu). Wszystkie inne programy są programami użytkowymi. W tym ujęciu system operacyjny to pojęcie jednoznaczne z kernelem. Inaczej mówiąc, można postawić znak równości pomiędzy słowem kernel a technicznym pojęciem systemu operacyjnego. Jeszcze inaczej: kernel ma za zadanie stworzyć środowisko dla innych programów.
Powszechnie jednak określenia „system operacyjny” używa się dla wszystkich programów dostarczanych przez producenta w odpowiedzi na zamówienie na środowisko pracy. Stąd też przyjęło się mówić Linux na całość systemu, choć nazwa ta oznacza w istocie sam kernel.” Koniec cytatu.
Cóż zatem oznacza „dorabianie funkcjonalności”, bądź też, na przykład „łatanie systemu poprzez dodawanie na siłę środowiska graficznego”? (Patrz motto na wstępie.)
Jeśli przyjmiemy pierwszą definicję – sam kernel (Linux) to kompletny system operacyjny. Wszystko inne to aplikacje użytkowe. Zalicza się więc do nich i interpreter bash, i serwer grafiki, i programy środowiska KDE. O żadnym dorabianiu funkcjonalności nie ma mowy. A może właśnie jest mowa – tyle, że w każdym przypadku, niezależnie czy mówimy o programie GIMP, czy edytorze „vim”. Ciekawe, że w tym ujęciu w systemie Windows - lub OS/2 - nie jest inaczej. Też mają kernele i programy użytkowe. Można napisać, że Areo (interfejs Visty) jest dorobiony do kernela systemu Windows? W tym ujęciu, można.
Jeśli przyjmiemy definicję drugą… To nie ma o czym mówić, bo w tym ujęciu nie ma czegoś takiego jak „kompletny system”. Debian GNU/Linux to kompletny system i kropka. Tak samo jak GoboLinux, tak samo jak MS Windows XP, tak samo jak OS/2 Warp któryśtam. Tak samo jak system wbudowany w router czy firewall, czyż nie?
Posłowie
W powyższym tekście jedynie dotknąłem tematu. O filozofii systemów rodziny UNIX można napisać opasłe tomiszcze, w końcu system powstał blisko 40 lat temu. Chciałem jednak zwrócić uwagę na to, że co dla jednych jest wadą – dla innych stanowić może nieocenioną zaletę.
Przede wszystkim zaś na to, że nie wolno mylić fundamentalnej filozofii projektu, która zapewnia mu nieograniczone wręcz możliwości dostosowawcze z rzekomym nieprzystosowaniem go do potrzeb zwykłego użytkownika. W końcu - co obchodzi zwykłego użytkownika, co drzemie pod jego interfejsem graficznym? To, co jedni nazywają „łataniem”, ja nazywam dorabianiem nowych funkcjonalności i nie jest to wyłącznie zabawa w słówka. UNIX został tak właśnie pomyślany, aby w każdym momencie można było doń dopisywać wciąż nowe i nowe „klocki”. Nawet takie, o których jeszcze nam się dziś nawet nie śni.
P.S. Następny odcinek będzie mniej filozoficzny a bardziej konkretny, gdyż omówię w nim start systemu. Ale to już w nowym roku. Więc:
if( data_czytania < to_date( swieta ) )
WriteLine( „Wesołych Świąt i szczęśliwego nowego roku” );
else if( data_czytania > to_date(swieta) and
data_czytania < to_date( nowy_rok ) )
WriteLine( „Szczęśliwego nowego roku” );
else
WriteLine( „Wszystkiego najlepszego w nowym roku :)” );
Komentarze (RSS) | Trackback (URI)


Gratuluję ciekawego pomysłu na tekst
Mała uwaga: na początek tekstu wkradł się błąd językowy - “motto” to )cytat z innego dzieła lub aforyzm umieszczany przed tekstem utworu.
Zaufaj mi - jednak nie ma błędu
Jestem pod wrażeniem - tak trzymać - czekam na dalsze części!
Super. Swietnie sie czytalo… Czekam na nastepne czesci sagi…
Ciekawy tekst, czekam na dalsze części. Ale kod w Pascalu BLE
mi to nie przypomina pascala. procedura wypisująca nazywała się tam WriteLn, poza tym składnia warunkowa była if-THEN-else
Dokładnie, to jest raczej C, o którym też wspominano w artykule… choć wtedy było by printf() zamiast WriteLine(), ale cóż……
Rzeczywiście po lepszym przyjrzeniu się to nie Pascal (niestety jeszcze kilka lekcji będę nim katowany w szkole, aż nadejdzie C++).
1) Szanowni przedmówcy. Rozbawiły mnie Wasze komentarze. Ciekaw jestem ile żeście zrozumieli z tego co Keyto napisał? Przykro mi Panowie, ale chciałbym przeczytać CO Was zachwyciło w tekście, a nie jedynie to, że jesteście zachwyceni i wniebowzięci.
Cześć Keyto,
2) Popełniasz błąd zaliczając KDE do tej samy klasy programów użytkowych co Bash czy Xfce. Co z tego, że wszystkie określane są mianem programów użytkowych? Mercedesy Klasy S są samochodami, podobnie jak modele Lexusa i wszystkie wersje śp. Yugo czy Trabanta (także klasy S, była taka). Tylko co tu porównywać?
Ja twierdzę, że KDE jest łatką, Ty że funkcjonalnym zestawem programów, powiedzmy modułem.
Dokonajmy wobec tego następującego porównania. Stawiamy obok siebie cztery komputery z czterema różnymi systemami operacyjnymi i oglądamy sobie na ekranach monitorów Debiana z GNOME-m, OpenBSD z KDE, Vistę z Aero i Maca z Aquą. Wymyślamy sobie Keyto-Demiurga, który z własnej siedziby czwartego wymiaru wsadza swe brudne łapsko w nasz realny trójwymiarowy świat i każdemu systemowi wyrywa jego “przyjazność” (określenie z reklam Microsoftu), czyli graficzną łatkę (po mojemu) lub funkcjonalność (po Twojemu, nawiasem pisząc można wyrwać coś materialnego, nie abstrakcyjnego).
Ciekawe, który z nich będzie potem nadawał się do dalszej pracy. Debian na pewno. Jego płytka sieciowej instalacji zawiera ok. 170 MB kompletnego systemu bez X-ów (które nawiasem pisząc uważa się powszechnie za namiastkę grafiki, jeśli nie za synonim w ogóle). OpenBSD oferuje do pobrania kompletny system z X-ami w objętości ok. 204 MB. Podejrzewam, że Mac mając na pokładzie Darwina jest również przystosowany do pewnej “siermiężności”. Natomiast nie wiem co pozostanie z Visty. No nie wiem, nie znam tego systemu.
Wiem natomiast, że nie darmo autorzy NetBSD/OpenBSD chwalą się, że dostarczają kompletne, spójne (!) systemy operacjne, a nie jądro z dodatkami, pochodzącymi od różnych wytwórców (to oczywiście pite do Linuxa). Własnych doświadczenia podpowiadają mi, że mają rację. Ale o tym może innym razem.
W moim ujęciu Windows Vista jest kompletnym systemem jedynie z Aero. Natomiast OpenBSD z KDE to tylko OpenBSD z graficzną łatką KDE.
Co więcej, nowe funkcje nie wynikają z “zespolenia się” z systemem, gdyż nie korzystają z jego mechanizmów/programów, ale tworzą własne programy do tego celu, nie związane z kernelem czy systemem operacyjnym oferowanym przez twórców - vide dbusy, famy itp. dodatki.
Innymi słowy graficzne systemy KDE czy GNOME nie są dla mnie żadnymi dodatkowymi funkcjonalnościami, może jednak napiszę poprawniej, nie są dla mnie integralnymi chociaż wymiennymi modułami systemu operacyjnego zwiększającymi jego funkcjonalność, a łatkami (lubię pejoratywność tego określenia
) o identycznym przeznaczeniu.
Dla mnie różnica pomiędzy modułem, a łatką opiera się na stopniu integracji. Moduł kernela jest jego częścią, a nie łatką, ale KDE jest łatką systemu operacyjnego, a nie jego modułem. Oczywiście cały czas mówimy o Unixie. I nic tu nie zmieni żonglowanie definicjami systemu-kernela i systemu-pudełka (z półki w sklepie, to Twoja druga definicja).
Gdyby Unix był przystosowany do grafiki nie byłoby tylu problemów z tworzeniem KDE czy GNOME’a.
System OS/2 był systemem obiektowym w pełnym tego słowa znaczeniu. Napisany językiem obiektowym i prezentującym graficzne obiekty zespolone “obiektowo” z systemem. Podejrzewam, że podobnie jest teraz z Windows. To z tego powodu graficzny (pod)system OS/2 pamiętał gdzie zostały skopiowane pliki (w Windows trzeba było wtedy uruchamiać program, który je szukał “po” dyskach, hahaha…), funkcjonalność pulpitu można było zmieniać za pomocą przerobionych lub własnych klas języka w którym został napisany, itd. Unix to C i z obiektami ma niewiele wspólnego. Dorabianie do niego teraz “rozwojowości”, czyli takiego zaprojektowania, aby można było do niego dokładać nowe klocki, to zręczna zasłona dymna na jego słabości w tym zakresie.
OS/2 działał na bardzo słabych maszynach, gdy je porównać do dzisiejszych. Samo KDE to prawie 350 MB PLUS system operacyjny. OS/2 mieścił się w KDE i jeszcze miał sporo miejsca na “hasanie”. Mój OpenBSD po uruchomieniu zajmuje 24/50 MB z X-ami i FluxBoxem. I wiesz mi, łatka KDE z jej ikonami nie jest mi potrzebna. Ani do ustawienia serwerów, ani do usprawniania pracy biurowej. O jakiej nowej funkcjonalności piszesz? O wykrywaniu nośnika w napędzie CD, określaniu jego zawartość i uruchamianiu bez zgody użytkownika muzyczki? Na dodatek wszystko w kakaowej polewie i głupkowatej oprawie “przyjazności” dla użytkownika (maszyna/program ani żadna jej/jego część nie może być “przyjazna”, to debilny slogan dla debili). A technikę drag’n'drop miałem u siebie na biurku w latach 90. Synonimy teczek, szafek, biurek itp również. Integracja? Parę skryptów “za” kilkanaście kilo zrobi mi to samo, co KDE za 350 melonów. No, thanks.
3) Przeczysz sam sobie w zakresie prostoty. KDE i GNOME są zaprzeczeniem BUZIaczka, gdyż każda “głupia” opcja konfiguracyjna w tych środowiskach otoczona jest megabajtami zbędnej grafiki.
4) Nie rozumiem Twojego podejścia do kernela jako systemu. Owszem czytałem Twoje wypowiedzi i książkowe definicje, ale mnie nie przekonują. Przecież kernel nie tylko musi obsługiwać sprzęt, ale zapewniać kontakt ze światem zewnętrznym i operatorem/użytkownikiem. W takim podejściu program powłoki Bash pomimo, że jest programem użytkowym (z przestrzeni użytkownika), musi należeć do systemu operacyjnego. Oczywiście mogą to być inne powoki jak ksh, sh, tsh itp.
5) Keyto, na koniec osobista uwaga. Za często posługujesz się popularnymi bzdetami. Mówienie o filozofii Linuxa, GIMP-a, pulpitu, czy jakiegokolwiek programu jest powszechnym błędem. To debilny slogan dla debili, a za takiego Cię nie uważam. W Linuxie jest tyle “filozofii”, co w filozofii Linuxa.
Pozdrawiam
Twoja wypowiedź nadaję się na kolejny artykuł. W znaczeniu pozytywnym, Wasza dyskusja jest bardzo ciekawa. Ale czy to, że interfejs graficzny w linuksie działa jako “łatka” (nawet jeśli!) jest złe? Czy to robi jakąś różnice dla ZU? A dla programisty jest chyba uproszczeniem, większa modularność - większa obiektowość, prawda? Nie wiem, czy to zespolenie z systemem jak z wymienionego przez Ciebie OS/2 czy Windowsa jest wadą czy zaletą, ale imho - pewne korzyści niesie. Po prostu inny sposób budowy systemu (jako całości, nie chcę mi się roztrząsać kwestii różnic między systemem a kernelem…).
Wracając jeszcze do tej łatki - częściowo sam sobie przeczysz. Łatka jest moim zdaniem równoznaczna z patchem, modyfikacją jakiegoś programu, ingerencją w jego kod - np. kojarzy mi się z czymś, co poprawia luki, stabilność, ogólne działanie, może dodaje funkcjonalność. A zakładając że KDE nią jest, to czym jest interfejs graficzny w Windowsie, OS/2? Jeszcze “większą” łatką, skoro jest bardziej zespoloną z jądrem i systemem, niż te wszystkie KDE, GNOMY, Fluxboksy razem wzięte. Jakie powiązania jądra linuksowego widzisz z xorgiem? Żadnych. Powiedzmy wprost: ma tak luźne powiązania, że to nie łatka, to _MODUŁ_. Coś, co działa oddzielnie, korzystając tylko z możliwości dawanych przez kernel. Nie miesza się w nic, co należy do zadań kernela, wykonuje tylko swoje zadania - te najbardziej rozpoznawalne dla użytkownika, wyświetlanie ikonek, rozwijające się menu, itd. Podsumowując - oddzielny program, z patchem mający niewiele wspólnego.
Jeśli źle Cię zrozumiałem - wybacz, późno już, jestem zaspany, nawet nie chcę mi się sprawdzać poprawności językowej tych moich wypocin ;p
Mimo wszystko, gratuluje lekkości pisania, bardzo przyjemnie się czytało.
Fajny artykuł.
Dobry komentarz, ale…
Inaczej rozumiemy słowo łatka. Dla mnie jest to forma opisu zmiany w kodzie źródłowym poprawiająca jakiś błąd czy dodająca nowe funkcje.
KDE/GNOME i cała reszta WM to zwyczajne programy działające w przestrzeni użytkownika, które poprzez jądro komunikują się ze sprzętem. Nie są łatką systemu. Linux po prostu ma inne podejście do architektury niż Windows. Tak już po prostu jest.
Nie rozumiem jednocześnie tego całego zachwytu OS/2 (nie chodzi mi tylko o przedmówcę). To, że był w pełni obiektowy nie oznacza, że rozwiązywał wszystkie problemy tego świata. Obiektowość nic nie gwarantuje oprócz tego, że lepiej możemy odwzorować pewne układy. Nie powoduje, że system działa szybciej i wydajniej. To zależy tylko od tego jak został napisany i przez jakich programistów. Przecież i tak wszystko na sam koniec przepisywane jest na język Assembler i kompilowane do kodu maszynowego. Zgadzam się, że obiekty znacznie upraszczają rozwijanie projektu i ułatwiają lepszą implementacje pewnych rzeczy, ale nie nadają się do wszystkiego.
UNIX to C bo pisano go w czasach C. Jeśli istniałby lepszy (potężniejszy, szybszy i o większej sile wyrazu) język to pewnie by go użyto. Nie zapominajmy, że C na owe czasy to i tak był duży krok na przód, bowiem większość ówczesnych systemów pisano w czystym Assemblerze. Ciężko przepisać z jednego języka na inny nawet średniej wielkości projekt, a co dopiero system operacyjny, w dodatku, że przepisujemy na język, który ma zupełnie inną filozofię działania. Dlatego nie wydaje mi się, że kiedyś Linux będzie napisany w C++.
„OS/2 działał na bardzo słabych maszynach, gdy je porównać do dzisiejszych”. To było w 1995 roku! Pisano systemy pod kątem ówczesnego sprzętu. Jak by dysponowali lepszymi komputerami to system był by większy i miał większe możliwości. Jeśli mieli by porównywalnie wydajne karty graficzne to pewnie zaimplementowali by efekty 3D. Na pewno nie zaimplementowali wszystkiego co chcieli, bo ograniczała ich architektura. Dzisiaj też tak jest i w przyszłości też tak będzie. Technika cały czas się rozwija, nie porównujmy systemów w tak prosty sposób. Z Twojego komentarza można wysunąć wniosek, że 12 lat temu Linux z systemem graficznym wymagał 350MB RAMu, a to nie jest prawdą. Ciekawy jestem kogo by było stać na tak astronomiczną ilość pamięci. Z drugiej strony porównując w tak bezpośredni sposób OS/2 z dzisiejszym Linuksem to produkt IBM wypada mizernie.
„Przecież kernel nie tylko musi obsługiwać sprzęt, ale zapewniać kontakt ze światem zewnętrznym i operatorem/użytkownikiem”. Jądro systemu to najniższy i jedyny element OS, który komunikuje się bezpośrednio ze sprzętem, zarządza nim i udostępnia go użytkownikowi, programom etc. System operacyjny składa się z z jądra i dodatkowego oprogramowania, które umożliwia używanie systemu przez użytkownika. Chyba nie chcesz nam wmówić, że kernel powinien obsługiwać linię komend, interfejs graficzny itd. Posuwając się dalej można wymagać by w kernel wbudowano OpenOffice.
Moim zdaniem kernel powinien robić jak najmniej, a całą pozostałą „specjalistyczną” robotę pozostawić dodatkowym modułom (lub sterownikom jeśli ktoś woli). Dzięki temu łatwiej będzie go można rozbudowywać i dostosowywać do własnych potrzeb. Jądro nie wie nawet jak przechowywać dane na dyskach. Zadanie to zleca modułowi obsługującemu dany system plików, a ten porozumiewa się ze sterownikiem dysku by fizycznie zapisać dane (wszystko odbywa się poprzez i pod kontrolą jądra). To dobre rozwiązanie, bo jeśli któregoś pięknego dnia obudzisz się i stwierdzisz, że najlepszym sposobem przechowywania pracy magisterskiej będą bity zapisywane markerem na balonach przywiązanych do obudowy komputera - to wystarczy, że zbudujesz napęd markera, przywiążesz balony i napiszesz moduł obsługujący nową pamięć. Jeśli będzie poprawny to jądro ruszy i zbootuje Ci system z dmuchanego helem Kaczora Donalda.
Ad. pkt. 5. Mnie też mierżą te wszystkie opowieści o ideologiach i filozofiach. Trzeba dyskutować o konkretach.
Tak na marginesie - UNIX na początku (PDP-7 i PDP-11) był zakodowany w asemblerze, a C powstał właściwie po to, żeby przepisać w nim UNIX-a.
Czy mam rozumieć, że serwer X oraz powłoka to autorskie rozwiązania tychże programistów? Albo, że nie korzystają z gotowych programów open source?
Bo OS/2 powstał bardzo dawno temu trudno więc żeby wymagał mocy współczesnych maszyn. Wrato się jednak zastanowić czy gdyby był rozwijany do dziś to czy “obecny” OS/2 działałby na tak samo starych maszynach?
QNX wraz ze środowiskiem Photon mieści się na dyskietce 1,44MB. Fluxbox też jest opasły w porównaniu z np. EDE czy Ratpoison. Zapomninasz też dodać, że KDE z założenia jest środowiskiem graficznym a nie menadżerem okien.
KDE jest środowiskiem graficznym więc z założenia wszystko ma się odbywać graficznie. Głupotą więc byłoby tworzenie konfiguratorów tekstowych żeby potem użytkownik dorabiał sobie graficzny interfejs do nich.
Mimo tych wielu kłopotów KDE swoją funkcjonalnością, możliwościami i wymaganiami kładzie na łopatki choćby GUI Visty.
To samo dotyczy Linuksa i (Open/Net/Free)BSD jak również Fluxboksa i KDE/Gnome. Inne założenia i inna grupa docelowa.
Czy Mercedesa skreśla fakt, że w standardzie oferuje więcej niż Trabant?
Po pierwsze chciałbym się odnieść do punktu 3. Otóż moim zdaniem GUI powstało właśnie po to, by użytkownik szybciej się w systemie odnalazł, żeby był dla niego prostszy. Co z tego, że można np. skasować plik szybciej i wygodniej w konsoli? Zwykły użytkownik nie będzie się uczył na pamięć (albo czytał z kartki) 5 różnych poleceń. Łatwiej jest mu wyklikać.
Po drugie owe KDE/Gnome/Xfce/Enlightenment (to też bym tu zaliczył). Owszem, integralną częścią systemu tak do końca nie są, ale bardziej bym się skłaniał do określenia ich jako moduły systemu operacyjnego niż jako łatki. Choćby przez to, że ich dodanie faktycznie nie ingeruje w system a dodaje nową funkcjonalność za którą uważam choćby GUI pozwalające np. na edycję grafiki (jakoś nie wyobrażam sobie tego w konsoli). Nadal mogę korzystać z systemu jak dawniej i nawet nie tknąć żadnego ze składników w/w środowisk graficznych. Oczywiście zupełnie inna sytuacja jest w Windowsie. Tam bez powłoki graficznej system jest nie do użytku. Choć niewykluczone, że istnieje tam jakaś możliwość operowania systemem bez powłoki (a choćby dla programistów Microsoftu) to jednak dla użytkownika końcowego takiej opcji nie przewidziano.
Co się tyczy zużycia zasobw - 350 MB dla KDE to lekka przesada (no chyba, że liczysz z cache albo przeładowane graficznymi świecidełkami). U mnie jest to 110MB a mam wszystkie automontowania i takie tam. Poza tym sporo pamieci potrafą przy tym zająć programy niezwiązane z KDE co przekłada się na ogólne zużycie zasobów - wystarczy porównać np. SuSE i PCLOS - różnica jest.
Sądzę też, że 30MB czy 50MB zużytego RAMu po uruchomieniu systemu nie jest w Linuksie wartością nieosiągalną w dzisiejszych czasach. Nawet z GUI czego dowodem jest choćby DSL.
Vista już może pracować bez GUI.
A polega to na tym, że ma się na pełnym ekranie okienko command;-)
Nie, wersja Visty na serwery ma (czy tam ma mieć — nie śledzę tego dokładnie) tryb działania bez “Xów”
Nie “wersja Visty na serwery”, ale Windows Server 2008, który z Vistą ma troszkę wspólnego, ale nie tak wiele. I pracuje faktycznie w trybie takim, że ma jedno okno konsoli w trybie graficznym.
I wycięte pół systemu graficznego, że chodzi tylko cmd.exe, PowerShell, Notatnik, Regedit i chyba mmc.
Dotyczy to wersji o nazwie “Core”.
A gdyby Viście wyciąć Aero to by po prostu wyglądała jak Windows 2000, bo Aero to tylko nakładka (menedżer okien w sumie).
Mój Slackware 11.0 po odpaleniu razem z Fluxboksem zajmował ok 47MB RAM - z KDE ok 64MB. DSL po uruchomieniu z Fluxboksem zajmuje 16MB RAM.
Podałem te dane tak informacyjnie.
Łatka może wyglądać przykładowo http://www.linuxfromscratch.org/patches/lfs/6.3/bash-3.2-fixes-5.patch.
Łatka, jak sama nazwa wskazuje, łata program, czyli usuwa błąd lub dodaje funkcjonalność w już zamierzonym zakresie działania. Można się spierać nt. owego zakresu - ostatnio do linuksowego kernela nie weszła łatka z FrameBuffer UI. Ale dopóki to autor/autorzy określają zakres działania programu, dopóty do zadań kernela nie należy wyświetlanie graficznego interfejsu. Definicja Keyto jest im znacznie bliższa. Używając w odniesieniu do nich pojęcia łaty, świadomie deprecjonujesz ich znaczenie. Przeplatasz to wszystko narzekaniami na pamięciożerność tzw. środowisk graficznych. Po pierwsze, nie to jest przedmiotem dysputy, a po drugie, co to kogo obchodzi, ile zajmuje ci KDE i że Fluxbox mniej?
Link mi się popsuł
http://www.linuxfromscratch.org/patches/lfs/6.3/bash-3.2-fixes-5.patch
Co do dyskusji system operacyjny + oprogramowanie użytkowe, to nie ma idealnej definicji systemu operacyjnego.
Najlepsza wydaje się system operacyjny to program do uruchamiania innych programów No i w tym wypadku kernel pasuje jako system operacyjny. Prawie całą resztę można podmienić, powłok jest kilka, środowisk graficznych też od groma.
KDE i GNOME przeczą KISS?? Udowodnij proszę, tzn udowodnij, że można taką funkcjonalność uzyskać o wiele wiele łatwiej. Umiesz sam napisać coś lepszego? Bo ja nie. A tylko jeśli umiesz, to będziesz miał dowód, iż KDE i GNOME ssą. W przypadku braku tego dowodu nie można stwierdzić iż KDE i GNOME przeczą zasadzie KISS
To takie głupkowate wymądrzanie się. Kiedy pominiemy człowieka i jego potrzeby (uproszczenie dla systemu czy człowieka)może się okazać, że system jest zbedny i wyżucimy go do kosza. A twoje wyobrażenia chyba nie mogą być takie jak windows - jedynie słuszne. Potrzeby są różne, a nazywanie kogoś debilem, ponieważ ma inne oczekiwania jest sporym przegięciem. Ogólnie w “linuksie” podoba mi sie to, że wiele rzeczy można dostosować do swoich potrzeb, a nie podlegać czyims wyobrażeniom.
Hmm… Zgodnie z Wikipedią IBM powstał w 1889 roku więc to zdanie: “Niby nic w tym nadzwyczajnego, ale w roku 1969, kiedy owe wydarzenia biorą swój początek, komputer nie był zjawiskiem powszechnym. Nie było jeszcze komputerów osobistych, firm Microsoft, IBM czy Apple.” jest trochę bez sensu. Lepiej by było: “(…) firm Microsoft czy Apple, a IBM robił sumatory na korbkę.”
A poza tym bardzo fajny tekst
Niezły felieton - dobrze się czyta.
Ja bym się tylko nie zgodził z oceną (”genialny”) skrótu (a właściwie backronymu*) BUZI. Jest zgrabny, ale ma dużo węższe znaczenie, niż oryginalny KISS.
Do przykładu mplayera można też dorzucić graficzne nagrywarki CD/DVD - chyba wszystkie są nakładkami na specjalizowane narzędzia: cdrecord, mkisofs, cdparanoia itp.
*) zna ktoś jakieś tłumaczenie terminu “backronym”?
Chodzi o to, że najpierw powstaje nazwa, a później jej rozwinięcie? W książce “Perl. Wprowadzenie” spotkałem się z określeniem “retronim”. Można by się zastanowić nad trafnością tego tłumaczenie, może ono zostać odebrane jako stare lub przestarzałe słowo, bo to pierwsze kojarzy się z “retro”. Mi to tłumaczenie się podoba, ale nie wiem czy jest takie oczywiste dla każdego. Zawsze można zdać się na transkrypcję i napisać “bakronim” lub “bekronim”. Na rosyjskiej Wikipedii hasło to widnieje jako “bekronim”, widać przyjęła się transkrypcja z angielskiego.
[OFFTOPIC]
> spotkałem się z określeniem “retronim”
“Retronym” ma inne znaczenie (nie znałem tego słowa, sprawdziłem w wikipedii) - w skrócie: nowa nazwa dla starej rzeczy lub pojęcia, gdy stara nazwa zaczęła oznaczać coś innego, przestała być wyróżniająca lub z innego powodu stała się niewłaściwa. Dla przykładu - “gitara klasyczna” (zamiast po prostu “gitara”), aby odróżnić od gitary elektrycznej.
Cóż, pewnie skończy się na “bakronimie”
hmm… dziwne, ale ja soft robię w ten sposób, że siadam i piszę
UMLa nie lubię, a wszystkie diagramy czy inne schematy generuję sobie na bieżąco z kodu
Takie pisanie sprawdza się tylko przy małych projektach, najczęściej jednoosobowych - program na laboratoria etc. Przy dużych aplikacjach gdzie pisze się w zespole tak kolorowo już nie jest. Potrzebne jest specyfikacja tego co się tworzy i kto jest odpowiedzialny za jaką część. Dochodzi łączenie kodu (cvs rozwiązywanie konfliktów), testowanie, dbanie o wydajność i miliony innych rzeczy.
,,Siadanie i klepanie kodu” jest oczywiście możliwe, ale chyba nie wmówisz mi, że przed tym ,,procesem” nie potrzebujesz chwili wyciszenia i poukładania sobie w głowie co i jak napisać, z jakiś struktur/klas/wzorców skorzystać. Programowanie jest po prostu sztuką, procesem twórczym i nie można go porównywać z pracą przy taśmie w fabryce, gdzie w określonej kolejności zgodnie z instrukcją łączy się ze sobą elementy.