A GoboLinux egy rendkívül egyedi, alternatív Linux-disztribúció, amely alapjaiban definiálja újra a hagyományos Unix-szerű rendszerekben megszokott fájlrendszer-hierarchiát. A disztribúció legfőbb megkülönböztető jegye, hogy szakít a Filesystem Hierarchy Standard (FHS) konvencióival, és minden programot a saját, izolált könyvtárába telepít. Ennek a forradalmi megközelítésnek köszönhetően a GoboLinuxban nincs szükség a hagyományos értelemben vett csomagkezelő adatbázisra, mivel maga a fájlrendszer tölti be ezt a szerepet: a telepített programok listája, verziója és a hozzájuk tartozó fájlok egyszerűen a /Programs könyvtár tartalmának listázásával áttekinthetők.
Fejlesztők
A GoboLinux-projekt alapötlete Hisham Hashem Muhammad nevéhez fűződik, aki André Detsch-csel közösen hozta létre a disztribúció első, korai verzióját. A projekt születésének körülményeit Hisham Muhammad a következőképpen foglalta össze:
A kezdeti időszakot követően a projekt egy nemzetközi fejlesztői közösséggé nőtte ki magát, amely folyamatosan karbantartja és bővíti a rendszert.
Leírása
A GoboLinux egy moduláris felépítésű Linux-disztribúció, amely a telepített szoftvereket egy forradalmian új, logikus és átlátható módon szervezi. Ahelyett, hogy egy program komponenseit szétszórná a rendszer különböző pontjain – például a futtatható állományokat a /usr/bin, a konfigurációs fájlokat az /etc, az egyéb erőforrásokat pedig a /usr/share alá –, minden egyes alkalmazás a saját, dedikált könyvtárába kerül. Ez a megoldás nemcsak a programok közötti tiszta elkülönítést biztosítja, hanem rendkívül egyszerűvé és magától értetődővé teszi annak megállapítását, hogy mely szoftverek vannak telepítve, és az egyes fájlok melyik alkalmazáshoz tartoznak.
Annak érdekében, hogy a rendszer a széttagolt programfájlokat mégis megtalálja, a GoboLinux egy logikai csoportosítást alkalmaz szimbolikus linkek segítségével. A különböző típusú fájlok (futtatható állományok, könyvtárak, fejlécfájlok stb.) kategóriák szerint vannak rendezve a /System/Links könyvtár alatt. Például a /System/Links/Executables könyvtárban szimbolikus linkek mutatnak a /Programs alatt található összes végrehajtható állományra.
A hagyományos Unix/Linux alkalmazásokkal való teljes körű kompatibilitás fenntartása érdekében a rendszer olyan szimbolikus linkeket is tartalmaz, amelyek a szabványos Unix-könyvtárakat emulálják. Például a /usr/bin és a /sbin egyaránt a /System/Links/Executables könyvtárra mutat. Ez a megoldás kiküszöböli az azonos kategóriájú fájlok közötti önkényes megkülönböztetéseket, amelyek gyakran inkonzisztenciához vezetnek más disztribúciókban.
A GoboLinux rendszer gyökérkönyvtárának struktúrája a következőképpen néz ki: ~] cd / /] ls Depot Files Mount Programs System Users
A /Programs könyvtár tartalmazza az összes telepített programot, kivétel nélkül. A telepített alkalmazások listázása egyszerűen egy parancs kiadásával lehetséges: /] cd /Programs /Programs] ls
Minden programbejegyzés egy alkönyvtár, amelyen belül további, verziószámmal ellátott alkönyvtárak találhatók. Ez lehetővé teszi, hogy egy program több különböző verziója is egyszerre jelen legyen a rendszeren. /Programs] find Bash Bash Bash/5.1 Bash/5.1/bin Bash/5.1/bin/sh Bash/5.1/bin/bash Bash/5.1/bin/bashbug Bash/5.1/info Bash/5.1/info/bash.info Bash/5.1/man Bash/5.1/man/man1 Bash/5.1/man/man1/bash.1 …
A rendszer rugalmasságát jól mutatja, hogy ugyanazon szoftver több verziója is telepíthető párhuzamosan, és a felhasználó könnyedén válthat közöttük, vagy akár egyszerre is használhatja őket. A `Current` szimbolikus link mindig az aktívnak kijelölt verzióra mutat. /Programs] ls -l LibreOffice total 8 drwxr-xr-x 9 root root 4096 2023-10-21 01:07 7.5.2 drwxr-xr-x 3 root root 4096 2023-11-15 04:36 7.6.1 lrwxrwxrwx 1 root root 5 2023-11-15 04:36 Current → 7.6.1
/Programs] ls -l GTK3 total 12 drwxr-xr-x 10 root root 4096 2023-09-02 01:39 3.24.30 drwxr-xr-x 9 root root 4096 2023-10-21 05:48 3.24.38 lrwxrwxrwx 1 root root 7 2023-10-21 05:48 Current → 3.24.38 drwxr-xr-x 4 root root 4096 2023-10-21 01:39 Settings
Működése
Ahelyett, hogy a rendszer egy központi adatbázisban tartaná nyilván a telepített csomagokat és a hozzájuk tartozó fájlokat, a GoboLinux magát a fájlrendszert használja erre a célra. A fájlokat kategóriák szerint indexeli szimbolikus linkek segítségével, hogy a rendszer gyorsan és hatékonyan megtalálhassa őket anélkül, hogy végig kellene keresnie az összes programkönyvtárat. Ez a megközelítés elegáns megoldást kínál a „Melyik csomaghoz tartozik az XYZ fájl?” klasszikus problémájára is: a link céljából egyértelműen kiderül a fájl eredete.
A rendszer úgy van konfigurálva, hogy a fájlok keresésekor ezeket a linkelt könyvtárakat használja. A rendszerben minden fájltípushoz létezik egy megfelelő kategória: futtatható állományok, programkönyvtárak (library), fejlécfájlok, megosztott adatfájlok, kézikönyvoldalak (man pages) és így tovább.
A link-alapú indexelés másik fontos előnye, hogy a rendszer integritása könnyen ellenőrizhető. Ha egy programot eltávolítanak, a rá mutató szimbolikus linkek automatikusan „törötté” (broken link) válnak, és ezáltal inaktívvá lesznek. Ez a mechanizmus nagyban leegyszerűsíti a hibák felderítését, és biztosítja, hogy a rendszer állapota mindig szinkronban legyen a valósággal. Így elkerülhetők azok a helyzetek, amikor egy csomagkezelő egy hiányzó függőségre panaszkodik, holott a felhasználó biztos benne, hogy az telepítve van. A GoboLinuxban ha egy link él, akkor a fájl létezik – és fordítva.
Unix-kompatibilitás
A GoboLinux könyvtárstruktúrája első pillantásra radikális eltérésnek tűnhet a Unix hagyományaitól. Felmerülhet a kérdés, hogy ez azt jelenti-e, hogy minden programot módosítani kell az új hierarchiával való együttműködéshez. Szerencsére a válasz egyértelműen nem. A hagyományos elérési utakat a GoboLinux-struktúrára mutató szimbolikus linkekkel oldják meg, így a kompatibilitás a Unix-örökséggel transzparens módon megmarad.
A gyakorlatban ez azt jelenti, hogy a /bin, a /usr/bin és a /usr/sbin mind a /System/Links/Executables könyvtárra mutatnak. Az összes futtatható állományt tartalmazó hagyományos könyvtár ugyanarra a központi helyre van irányítva. Ez meglepő módon a GoboLinuxot bizonyos esetekben még a hagyományosabb disztribúcióknál is kompatibilisebbé teszi, mivel kiküszöböli azokat a problémákat, amikor egy szkript azért nem fut, mert például egy fájlra az /usr/bin/foo helyen hivatkozik, miközben az valójában az /usr/local/bin/foo útvonalon található.
A szabványos Unix-útvonalak alapértelmezés szerint nem láthatók a gyökérkönyvtárban. Valójában ott vannak, de a GoboHide nevű, opcionális kernel patch elrejti őket a felhasználó elől. Ez a funkció elsősorban esztétikai célokat szolgál, és használata nem kötelező. A GoboLinux működéséhez nincs szükség sem a kernel, sem más rendszerkomponensek módosítására, de a GoboHide egy letisztultabb és rendezettebb felhasználói élményt nyújt.
A leggyakoribb kifogás a GoboLinux ellen
A GoboLinux ellen leggyakrabban felhozott kritika az, hogy könyvtárszerkezete nem POSIX-kompatibilis. Ez azonban egy tudatos tervezési döntés eredménye. Az okokról a rendszer megalkotója, Hisham Muhammad adja a legpontosabb magyarázatot:
"Mindennek oka van. A /, /usr és /usr/local, illetve a /bin és /sbin közötti hagyományos megkülönböztetés történelmi okokra vezethető vissza. Én is értem ezeket a különbségeket. Azért szüntettem meg ezt a többszintű elkülönítést, mert hiszek abban, hogy a mögöttes problémákra léteznek modernebb megoldások. Egy GoboLinux rendszerben nincs szükség külön /usr és /usr/local könyvtárakra azért, hogy elkülönítsük a disztribúció által biztosított programokat a felhasználó által fordítottaktól. Itt minden program természetes módon, a saját könyvtárában van izolálva – ez volt a GoboLinux létrehozásának egyik legfőbb mozgatórugója.
A történelmi ok, amiért egyes Unix-könyvtárak (/bin, /lib, /sbin) közvetlenül a gyökérből erednek, az az volt, hogy egyfelhasználós módban, a /usr csatolása nélkül is lehessen a rendszert javítani. Ez mára már inkább egy dogmatikus elv. Ha ma rendszermentésre van szükségem, egy teljes értékű grafikus környezetet biztosító LiveCD-t használok, amellyel böngészhetek az interneten megoldások után kutatva. A régi módszernek évtizedekkel ezelőtt volt értelme, de ma már sokkal hatékonyabb eszközök állnak rendelkezésünkre.
A bin és sbin megkülönböztetése a mai kontextusban szintén elvesztette jelentőségét. A történelmi evolúció olyan önkényes besorolásokhoz vezetett, mint a ping és a traceroute külön könyvtárba helyezése. Egy Unix-rendszer a jogosultságokon alapul. Ha egy parancsot csak a rendszergazda futtathat, arra a chmod 700 parancs a megoldás.
Végül, ami a partíciók szétválasztását és a távoli menedzsmentet illeti: a kritikusok legjogosabb aggodalma a hálózaton megosztott programkönyvtárak kezelése. A leggyakoribb érv erre az, hogy „a merevlemezek ma már olcsók”. Bár ezzel egyetértek, megértem a központosítás iránti igényt is. Szerencsére a technológiai fejlődés erre is kínál megoldást: az „union mount” és az „overlay filesystem” (rétegelt fájlrendszer). Az ötlet lényege, hogy több partíciót is felcsatolhatunk ugyanabba a könyvtárba. Így a /Programs megőrzi azt a jelentését, hogy „a rendszerben elérhető összes program gyűjteménye”, függetlenül azok fizikai helyétől. Az operációs rendszerek, mint a Plan 9, már régóta alkalmaznak hasonló elveket."
A GoboLinux projekt célja
A fejlesztők elsődleges célja egy olyan rendszer létrehozása, amelyet ők maguk is szívesen használnak, és amely nem próbálja meg helyettük adminisztrálni a gépet. Míg a legtöbb Linux-disztribúció igyekszik leegyszerűsíteni a kezdő felhasználók dolgát, ez gyakran a tapasztaltabb felhasználók számára jelent korlátokat. A GoboLinux nem állítja magáról, hogy könnyebb, csupán azt, hogy logikusabb és átláthatóbb. A felhasználói visszajelzések szerint a rendszer adminisztrációja valóban egyszerűbb, mivel a felépítése lehetőséget ad a mélyebb megértésre – feltéve, hogy a felhasználó hajlandó időt szánni erre.
A /Depot és a /Files könyvtárak
A /Depot egy szabadon felhasználható terület a felhasználói adatok, például dokumentumok, médiafájlok vagy letöltött anyagok tárolására. Tekinthetünk rá egyfajta „közösségi területként”, amely minden felhasználó számára elérhető (hasonlóan a régebbi Unix rendszerek /pub könyvtárához). A GoboLinux rendszer maga nem használja a /Depot tartalmát; a könyvtár célja, hogy ösztönözze a felhasználókat az adatok rendezett tárolására, és tisztán tartsa a rendszer többi részét.
A /Files ezzel szemben egy szabványos GoboLinux könyvtár, amely programok által közösen használt, de egyikhez sem szorosan tartozó adatokat tartalmaz. Ilyenek például a betűtípusok (Fonts), bővítmények (Plugins) vagy kodekek. Az alkalmazások itt saját alkönyvtárakat is létrehozhatnak helyspecifikus adatok tárolására.
A GoboLinux könyvtárszerkezetének részletesebb bemutatása
A GoboLinux kialakítását olyan korábbi operációs rendszerek is inspirálták, mint a NeXT, az AtheOS és a BeOS, amelyek szintén újszerű könyvtárszerkezeteket vezettek be, miközben megőrizték a Unix-kompatibilitást. A GoboLinux gyökérkönyvtára hat fő könyvtárból áll.
/Programs/ – Ez a könyvtár tartalmazza az összes telepített programot, mindegyiket egy külön alkönyvtárban. Minden programkönyvtáron belül verziószámmal ellátott alkönyvtárak találhatók (pl. /Programs/GCC/13.2.0), valamint opcionálisan egy Settings és egy Variable alkönyvtár a konfigurációs, illetve a változó adatok számára. /Users/ – Ebben a könyvtárban találhatók a felhasználók saját (home) könyvtárai. Például a "bob" nevű felhasználó könyvtára az /Users/bob útvonalon érhető el. /System/ – A kritikus rendszerfájlok helye. Ezt leginkább a rendszeralkalmazások (pl. /System/Settings/passwd) és a GoboLinux saját szkriptjei használják.