A BSD hatása a modern internetre

enlightened Ez az oldal a közösségért készül. heart Kövess minket máshol is:  Linux Mint Magyar Közösség a Mastodon-on  Telegram csatorna – csak hírek  Beszélgessünk a Telegram – Linux csevegő csoport  Hírek olvasása RSS segítségével  Linux Mint Hivatalos Magyar Közösség a Facebook-on      Linux Mint Baráti Kör a Facebook-on
wink Ha hasznosnak találod, és szeretnéd, hogy folytatódjon, támogasd a munkát Ko-fi vagy Paypal segítségével. laugh

kami911 képe

A mai internet technikai alapjainak jelentős része nem látványos webes technológiákból, hanem jóval korábbi, mélyen az operációs rendszerekbe épült komponensekből származik. Ezek közül az egyik legfontosabb forrás a Berkeley Software Distribution, közismertebb nevén BSD. A Berkeley Unix nemcsak egy operációs rendszer-variáns volt, hanem egy olyan kísérleti műhely, amelyből a ma is használt hálózati programozási modell, a névfeloldás infrastruktúrája és a szabad szoftveres licencelés egyik legfontosabb ága kinőtt.

A történet hátterében az Egyesült Államok Védelmi Minisztériumának kutatási ügynöksége, az ARPA (később DARPA) áll. Az ARPANET-ből kinövő internet protokollszintű szabványosítása – elsősorban a TCP/IP – a hetvenes években elindult, de a gyakorlati használatot akadályozta, hogy nem létezett egységes, kényelmes programozói interfész. A protokollok ugyan működtek, de minden rendszer máshogy, ad hoc módon tette elérhetővé őket a fejlesztők számára.

A DARPA felismerte, hogy a hálózat elterjedéséhez szükség van egy olyan operációs rendszerre, amely natívan, egységes módon támogatja az internetes kommunikációt. A választás logikusan valamelyik Unix-változatra eshetett: a Unix hordozható volt, több hardverplatformon futott, és népszerű volt az akadémiai és kutatói közösségben. A meglepetés az volt, hogy nem az AT&T által licencelt, „hivatalos” Unix-vonalat támogatták, hanem a Kaliforniai Egyetem, Berkeley campusán működő, lényegében egyetemi kutatócsoportként induló BSD-projektet.

A BSD fejlesztésében ugyan kulcsszerepet játszottak a Berkeley hallgatói és oktatói, de a rendszer korán nyitottá vált a külső hozzájárulásokra. Marshall Kirk McKusick – aki a BSD egyik meghatározó alakja, és hosszú éveken át formálta a kódot és a projekt szervezeti kereteit – 1979 és 1993 között mintegy 60 olyan egyént és szervezetet sorolt fel, akik „nagy alrendszert” adtak a BSD-hez, és ezen felül még több száz kisebb hozzájáruló is részt vett a munkában. Ez a nyitottság és együttműködés előrevetítette a későbbi szabad szoftveres és nyílt forráskódú fejlesztési modelleket.

A DARPA számára több tényező is vonzóvá tette a Berkeley-t. Egyrészt már korábban is jelentős fejlesztéseket adtak a Unixhoz (például a job control, a vi szerkesztő, teljesítményjavítások), ami bizonyította a kreativitást és a kitartó mérnöki munkát. Másrészt a licencelési modell kulcsfontosságú volt: a Berkeley a saját kódját forráskóddal együtt, szabadon elérhetővé tette az egyetemi és kutatói közösség számára. Ez a gyakorlat, amely később BSD-licencként vált ismertté, lényegében a modern szabad és nyílt forráskódú szoftverek egyik ősforrása lett.

A BSD kód kezdetben az AT&T tulajdonában lévő Unix-komponenseket egészítette ki. Aki Unix-licencet vásárolt az AT&T-től, az a Berkeley kiegészítéseit is használhatta. A hálózati kód azonban fordulópontot jelentett: ez volt az első olyan jelentős rész, amelyet a Berkeley önállóan, az AT&T kódjától függetlenül adott ki. Ez később jogi vitákhoz és perhez vezetett, de hosszú évek munkájával a BSD-közösség végül létrehozott egy teljes, önálló, AT&T-kódtól mentes operációs rendszert.

A DARPA támogatásának hatására a Berkeley három kulcsfontosságú lépést tett, amelyek meghatározták a BSD és az internet további történetét:

  • Formális szervezet létrehozása: megalakult a Computer Systems Research Group (CSRG), amely több mint egy évtizeden át koordinálta a BSD fejlesztését. Ez a szervezeti keret tette lehetővé a nagyléptékű, konzisztens fejlesztést és a külső hozzájárulások integrálását.
  • A BSD-licenc kialakítása:
  • Önálló operációs rendszer megvalósítása:

A BSD és az internet fejlődése kölcsönösen erősítette egymást. A DARPA-szerződés keretében végzett munka a Berkeley-t az internetes technológiák egyik központi szereplőjévé emelte, miközben az internet elterjedése visszacsatolásként egyre fontosabbá tette a BSD-t. Az eredmények először a 4.1BSD és 4.2BSD kiadásokban jelentek meg, amelyek már integrált TCP/IP-t és a ma is ismert hálózati programozási modellt kínáltak. A későbbi 4.3BSD-t egy 2006-os InformationWeek cikk „a valaha készült egyetlen legnagyobb hatású szoftvernek” nevezte – ez jól mutatja, milyen mélyen épült be a világ informatikai infrastruktúrájába.

Fontos megjegyezni, hogy a Berkeley által kidolgozott eszközök és interfészek nem csak BSD-n működtek. A zsenialitásuk éppen abban állt, hogy más Unix-változatokra, sőt nem Unix-alapú rendszerekre is átültethetők voltak. Ez tette lehetővé, hogy az internet valóban univerzális kommunikációs platformmá váljon, amelyre joggal használjuk a „világháló” jelzőt. Amikor Tim Berners-Lee a nyolcvanas évek végén a World Wide Webet megalkotta, már egy olyan infrastruktúrára támaszkodhatott, ahol a TCP/IP, a névfeloldás és a hálózati programozási modell széles körben elterjedt volt.

A web, a streaming média, a távoli bejelentkezés (SSH, korábban telnet), az e-mail és gyakorlatilag minden internetes alkalmazás mélyén ott találjuk a Berkeley által kidolgozott fogalmakat és implementációkat. Ezek közül az egyik legfontosabb a Berkeley sockets programozási modell.

Berkeley sockets: a hálózati programozás egységes modellje

Minden modern operációs rendszernek szüksége van egy interfészre, amelyen keresztül a felhasználói programok elérik a hálózati réteget. A BSD által bevezetett socket API mára gyakorlatilag ipari szabvánnyá vált: a legtöbb Unix-szerű rendszer (beleértve a Linuxot), és számos más platform is ennek valamilyen formáját használja.

A socketek lényege, hogy a hálózati kommunikációt a Unix-féle „minden fájl” szemlélethez igazítják. A programozó egy rendszerhívással létrehoz egy socketet, megadva a protokollcsaládot (például IPv4 vagy IPv6), a kommunikáció típusát (stream, datagram, stb.) és a konkrét protokollt (TCP, UDP, stb.). A hívás visszatérési értéke egy egyszerű egész szám – egy fájlleíró –, amelyet a továbbiakban ugyanúgy lehet használni, mint egy fájlt: olvasni, írni, multiplexelni (select/poll/epoll), blokkoló vagy nem blokkoló módba állítani.

Ez az egységesítés óriási előrelépés volt. A fejlesztőnek nem kellett minden egyes hálózati protokollhoz külön, speciális API-t megtanulnia; a socketekre épülő modell a legtöbb esetben elegendő absztrakciót nyújtott. A TCP-alapú kapcsolatok például nagyon hasonlóan viselkednek, mint egy bájtfolyamot biztosító fájl, míg az UDP-datagramok egy-egy üzenetként kezelhetők.

Ha ma beleásunk egy HTTP-szerver, egy videostreaming-szolgáltatás, egy SSH-kliens vagy bármilyen más hálózati alkalmazás forráskódjába, szinte biztosan valamilyen Berkeley-socket API-változattal találkozunk. A Linux glibc-je, a POSIX-szabvány, sőt a Windows Winsock API-ja is a Berkeley-modellre épül, még ha néhol eltérő részletekkel is. A BSD tehát nem csak egy konkrét operációs rendszert adott a világnak, hanem egy gondolkodási keretet is arra, hogyan programozzuk a hálózatot.

DNS és BIND: a névfeloldás gerince

A hálózati programozási modell önmagában nem elég: valahogy meg is kell találni azt a gépet, amellyel kommunikálni akarunk. Itt lép be a képbe a Domain Name System (DNS), amelynek gyakorlati megvalósításában a BSD-projekt szintén kulcsszerepet játszott.

A DNS célja, hogy az ember számára könnyen megjegyezhető neveket (például lpi.org) IP-címekre (például 65.39.134.140) fordítsa le. Ez elsőre egyszerűnek tűnhet, de valójában egy rendkívül összetett, hierarchikus, elosztott rendszer, amelyben több szintű névszerverek, delegációk, cache-elés, redundancia és hibatűrés működik együtt. A DNS alapvető specifikációit az RFC 881 és RFC 882 írta le, majd későbbi RFC-k pontosították és bővítették.

Az internet korai szakaszában – amikor a hálózat még „kisváros” volt, ahol „mindenki ismert mindenkit” – a névfeloldást egyszerűen egy HOSTS.TXT nevű fájl kézi szerkesztésével oldották meg. Minden gép karbantartott egy ilyen listát, amelyben a hostnevekhez IP-címek tartoztak. Ez a megoldás nyilvánvalóan nem skálázódott: ahogy nőtt a hálózat, egyre nehezebb lett naprakészen tartani a fájlokat, és a hibalehetőségek is megsokszorozódtak.

A DNS ezt a problémát oldotta meg egy elosztott, hierarchikus névteret bevezetve, ahol a felelősség delegálható (például a .org zóna kezelőjétől az lpi.org domain adminisztrátoráig), és ahol több, egymástól független, de együttműködő névszerver biztosítja a rendelkezésre állást és a hibatűrést. Egy ilyen rendszer megtervezése és implementálása a nyolcvanas évek elején komoly mérnöki kihívást jelentett, különösen úgy, hogy akkor még nem léteztek a ma ismert elosztott konszenzusprotokollok (Paxos, Raft), koordinációs szolgáltatások (ZooKeeper) vagy masszívan partícionált adatbázisok (például Cassandra).

A BSD-fejlesztők által létrehozott Berkeley Internet Name Domain (BIND) szoftver nem az első DNS-szerver volt, de nagyon korán érkezett, és gyorsan de facto szabvánnyá vált. BIND névszerverként és resolverként is működött, és szorosan integrálódott a BSD-rendszerekbe. A forráskód szabad elérhetősége, a folyamatos fejlesztés és a hordozhatóság miatt más Unix-változatokra is gyorsan átültették.

BIND évtizedeken át uralta a DNS-szerverek piacát. Még akkor is, amikor már több alternatíva (NSD, PowerDNS, Knot DNS, Unbound, stb.) is elérhető volt, BIND maradt a legelterjedtebb megoldás. 2023 körülre, amikor BIND-et már sokan „legacy” technológiának tekintették, becslések szerint még mindig az autoritativ DNS-szerverek mintegy 60%-át ez a szoftver szolgálta ki. Ez azt jelenti, hogy a világszerte használt domainnevek jelentős részének feloldása valamilyen formában a BSD-ből kinőtt technológián keresztül történt.

Érdekesség, hogy a DNS-architektúra számos olyan tulajdonságot mutat, amelyeket ma a modern elosztott rendszerek tervezésénél is alapelvként kezelünk: hierarchikus delegáció, több független, de együttműködő autoritatív csomópont, cache-elés a terhelés csökkentésére, és a konzisztencia–elérhetőség–partíciótűrés közötti kompromisszumok tudatos kezelése. Mindezt jóval azelőtt valósították meg, hogy a „CAP-tétel” vagy a ma ismert elosztott adatbázisok megszülettek volna.

BSD, Linux és a mai nyílt forráskódú ökoszisztéma

A Linux Professional Institute ma már külön BSD Specialist minősítéssel ismeri el a BSD-rendszerek jelentőségét. Ez önmagában is jelzi, hogy a Linux és a BSD nem egymás ellenfelei, hanem egymást kiegészítő, egymásból is tanuló ökoszisztémák. A Linux-kernel és a GNU-felhasználói tér ma a legelterjedtebb nyílt forráskódú platform, de számos olyan komponensre támaszkodik, amelyek koncepciója vagy konkrét implementációja BSD-eredetű: a socket API, számos hálózati eszköz, sőt egyes felhasználói programok is BSD-licenc alatt érkeztek vagy onnan inspirálódtak.

A BSD-licenc különösen fontos szerepet játszott abban, hogy a BSD-kód széles körben, akár zárt forrású termékekben is megjelenhetett. Számos kereskedelmi Unix-változat, hálózati eszköz (routerek, tűzfalak), sőt egyes nagyvállalati operációs rendszerek is tartalmaztak vagy tartalmaznak BSD-eredetű komponenseket. A licenc megengedő jellege ugyan vitákat váltott ki a szabad szoftveres közösségen belül (különösen a GPL-licenchez képest), de kétségtelenül hozzájárult ahhoz, hogy a BSD-technológiák mélyen beépüljenek az ipari infrastruktúrába.

Gyakorlati tanulságok Linux Mint felhasználóknak

Egy Linux Mint felhasználó számára elsőre úgy tűnhet, hogy a BSD története „távoli” téma, de a mindennapi gyakorlatban rengeteg ponton találkozunk a BSD-örökséggel:

  • Amikor Pythonban, C-ben vagy bármely más nyelven socketet nyitunk, valójában a Berkeley sockets modelljét használjuk.
  • Amikor egy domainnevet pingelünk vagy böngészőben megnyitunk, a háttérben DNS-lekérdezések futnak, amelyeket gyakran BIND-alapú vagy BIND-kompatibilis szerverek szolgálnak ki.
  • Számos hálózati diagnosztikai eszköz (például traceroute, tcpdump) BSD-eredetű vagy erősen BSD-inspirált.

A BSD és az internet közös története jól mutatja, hogy a mély, alacsony szintű technikai döntések – mint egy API kialakítása vagy egy névfeloldó rendszer architektúrája – évtizedekre meghatározhatják, hogyan építünk szoftvert, hogyan gondolkodunk hálózatokról, és végső soron hogyan működik a digitális világ, amelyre ma már a mindennapi életünk épül.

A történet azonban itt nem ér véget: a BSD későbbi verziói, a különböző BSD-változatok (FreeBSD, NetBSD, OpenBSD, DragonFly BSD) és az ezekre épülő rendszerek (például egyes router-disztribúciók, tűzfalak) tovább vitték és továbbfejlesztették ezt az örökséget. A következő részben ezekre a fejleményekre, valamint a BSD és a modern internet további kölcsönhatásaira térünk ki részletesebben.