BSD Unix: Arhitektura, Filozofija i Praktična Primena za Napredne Korisnike

Uvod

BSD (Berkeley Software Distribution) predstavlja jednu od dve glavne grane razvoja Unix sistema, uz System V liniju. Za razliku od Linuxa, koji je nezavisna reimplementacija Unix koncepata, BSD sistemi (FreeBSD, OpenBSD, NetBSD, DragonFlyBSD) potiču direktno iz izvornog koda AT&T Unix-a, kroz rad Computer Systems Research Group (CSRG) na Univerzitetu Kalifornija u Berkliju tokom 1970-ih i 1980-ih. Ova genealoška razlika ima duboke posledice na arhitekturu, licenciranje i filozofiju dizajna koje se osećaju do danas.

Ovaj tekst pretpostavlja da već poznajete Unix-like sisteme (najverovatnije Linux) i fokusira se na ono što BSD razlikuje — ne na osnove korišćenja terminala.


1. Istorijski i licencni kontekst

1.1 Od AT&T-a do CSRG-a

Berkli je dobijao izvorni kod Unix-a od AT&T-a i tokom vremena dodavao sopstvene ekstenzije: virtuelnu memoriju, TCP/IP steka (koji je postao referentna implementacija za čitav internet), brz fajl sistem (FFS), i mnogo toga drugog. Krajem 1980-ih, CSRG je počeo da oslobađa delove koda pod permisivnom BSD licencom, nezavisno od AT&T koda.

1.2 AT&T tužba i “4.4BSD-Lite”

Početkom 1990-ih, AT&T (kroz USL) je tužio Berkeley Software Design Inc. (BSDi) tvrdeći kršenje autorskih prava. Spor je rešen 1994, a rezultat je bio 4.4BSD-Lite — distribucija očišćena od preostalog AT&T koda. Iz nje su nastali svi savremeni BSD-ovi. Ova pravna drama je jedan od razloga zašto je Linux, koji se paralelno razvijao bez pravnog tereta, dobio zamah u tom periodu.

1.3 BSD licenca vs GPL

Ovo je suštinska filozofska razlika koju morate razumeti:

  • BSD licenca (2-clause ili 3-clause) je permisivna — dozvoljava da uzmete kod, modifikujete ga i distribuirate čak i u zatvorenom, proprietarnom obliku, bez obaveze da vratite izmene zajednici.
  • GPL je copyleft — izmene i izvedeni radovi moraju ostati pod istom licencom.

Posledica: veliki delovi BSD koda su ugrađeni u macOS (Darwin jezgro je delom FreeBSD userland), Sony PlayStation OS, Nintendo Switch, Junos (Juniper), pa čak i u Windows-ov TCP/IP stek u ranim verzijama. BSD zajednica generalno gleda na ovo kao na uspeh filozofije “slobodan kod, slobodan izbor”, dok GPL zagovornici to vide kao gubitak za zajednicu jer se izmene ne vraćaju.


2. Porodica BSD sistema — ko je ko

SistemFokusKarakteristike
FreeBSDPerformanse, serveri, opšta namenaNajveća zajednica, ZFS, jails, Linux binarna kompatibilnost
OpenBSDBezbednost, ispravnost kodapf firewall, OpenSSH poreklo, agresivan security auditing
NetBSDPrenosivost“Of course it runs NetBSD” — radi na desetinama arhitektura
DragonFlyBSDEksperimentalna SMP arhitekturaHAMMER/HAMMER2 fajl sistem, forkovan iz FreeBSD 4.x

Svaki od ovih projekata ima potpuno odvojeno jezgro (kernel), za razliku od Linux distribucija koje dele isti kernel. Ovo je bitna distinkcija — “BSD” nije jedan OS sa distribucijama, već porodica srodnih ali nezavisnih operativnih sistema.


3. Arhitektonske razlike u odnosu na Linux

3.1 “Ceo sistem” pristup (monolitni projekat)

Linux distribucija = Linux kernel + odvojeno razvijen GNU userland (coreutils, glibc, itd.) + paketi treće strane, sve to sastavljeno od strane distributera (Debian, Red Hat…).

BSD = kernel + userland se razvijaju zajedno, u istom repozitorijumu, od strane istog tima, kao koherentan operativni sistem. Ovo znači:

  • ls, ps, cp i ostali alati u FreeBSD/OpenBSD su BSD-izvorni, ne GNU coreutils (drugačije opcije komandne linije, drugačije ponašanje).
  • Verzionisanje kernela i userland-a je sinhronizovano — nema mešanja “kernel 6.9 sa distribucijom baziranom na starijem userland-u”.
  • Dokumentacija (man stranice) je istorijski mnogo konzistentnija i potpunija nego kod Linuxa.

3.2 Init sistem

BSD sistemi tradicionalno koriste jednostavan BSD-style init (/etc/rc, /etc/rc.conf, rc.d skripte) — sekvencijalan, čitljiv shell-based sistem, bez zavisnosti-grafa kakav ima systemd. FreeBSD koristi rc.d framework sa deklarativnim zavisnostima ali bez binarnog logovanja, socket aktivacije ili cgroups integracije koje systemd nudi. Ovo je namerno — BSD zajednica generalno vrednuje jednostavnost i predvidljivost nad feature-setom.

3.3 Paketni sistem: Ports vs Packages

  • Ports stablo — kolekcija Makefile-ova koji znaju kako da preuzmu izvorni kod, ispravno ga zakrpe za dati sistem i kompajliraju sa proizvoljnim opcijama (make config). Ovo daje granularnu kontrolu (npr. kompajliranje bez X11 zavisnosti).
  • pkg / pkgsrc — binarni paketi, brži za instalaciju, generisani upravo iz ports stabla.

NetBSD-ov pkgsrc je zanimljiv jer radi i van NetBSD-a — može se koristiti na Linuxu, Solarisu, macOS-u.

3.4 Jails (FreeBSD) — OS-level virtuelizacija pre kontejnera

FreeBSD jails, uvedeni 2000. godine, prethode Docker-u i LXC-u za više od decenije. Jail izoluje proces (i njegovu decu) u sopstveni fajl-sistemski root, mrežni identitet i skup korisnika, sa mnogo manjim overhead-om od pune virtuelizacije. Razlike u odnosu na Linux kontejnere:

  • Jails su ugrađeni direktno u kernel, ne kao skup nezavisnih namespace mehanizama (cgroups, namespaces, seccomp) koje neko mora da sklopi.
  • VNET jails omogućavaju potpuno nezavisan mrežni stek po jail-u.
  • Nema slojevitog union filesystem-a kao kod OCI slika — jails obično koriste ZFS clone/snapshot za efikasno kloniranje root okruženja.

3.5 ZFS integracija

FreeBSD ima jednu od najzrelijih ZFS implementacija van Solarisa/illumos-a, sa native boot-environments (moguće je “rollback-ovati” ceo sistem na prethodni snapshot pri boot-u preko boot loader menija), a bectl upravlja boot environments-ima analogno Solaris beadm-u.

3.6 pf — Packet Filter (OpenBSD)

pf, razvijen u OpenBSD-u (nakon licencnog spora oko IPFilter-a 2001. godine), postao je standard za paket filtriranje i u FreeBSD-u i u macOS-u (Apple je prešao na pf umesto ipfw). Sintaksa pravila je deklarativna i čitljivija od iptables:

block in all
pass out all keep state
pass in on egress proto tcp from any to any port 22 keep state

pf takođe uključuje queue-based traffic shaping (ALTQ/queueing framework) i tabele za efikasno rukovanje velikim listama IP adresa.


4. OpenBSD — bezbednosna filozofija

OpenBSD zaslužuje poseban osvrt jer njegov pristup bezbednosti nije skup zakrpa nego arhitektonski princip:

  • Proaktivna bezbednost: kod se kontinuirano audituje ne čekajući prijavljene ranjivosti (odatle poznati moto “Only two remote holes in the default install, in a heck of a long time”).
  • W^X (Write XOR Execute) — memorijska stranica ne sme istovremeno biti upisiva i izvršna, čime se otežava exploit razvoj. Ovo je bio standard u OpenBSD-u pre nego što je postao mainstream (NX bit, DEP na Windows-u, itd.).
  • ASLR, stack protector, pledge() i unveil()pledge(2) omogućava procesu da samoograniči sopstveni skup dozvoljenih sistemskih poziva nakon inicijalizacije (npr. program koji je već otvorio fajlove može reći kernelu “od sada mi dozvoli samo read/write, ništa mrežno”). unveil(2) ograničava koji delovi fajl sistema su uopšte vidljivi procesu. Ovo je mnogo elegantnije i lakše za programere od SELinux/AppArmor politika, iako granularnost i namena nisu identične.
  • Privilege separation — OpenSSH, koji je nastao unutar OpenBSD projekta, uveo je koncept razdvajanja procesa na neprivilegovani i privilegovani deo, koncept koji je kasnije usvojen šire u industriji.

5. Kernel arhitektura — detalji za napredne

5.1 GENERIC kernel i konfiguracija

FreeBSD i dalje omogućava klasičan pristup: menjate kernel config fajl (npr. /usr/src/sys/amd64/conf/MYKERNEL), uklanjate nepotrebne drajvere/module, i kompajlirate ceo kernel (make buildkernel && make installkernel) — pristup koji je u Linux svetu uglavnom zamenjen modularnim učitavanjem i distribucijskim kernelima.

5.2 GEOM (FreeBSD) — slojeviti storage framework

GEOM omogućava sastavljanje storage transformacija (enkripcija preko geom_eli, RAID preko graid, multipath preko gmultipath) kao slojeva grafa nezavisnih transformacija nad blok uređajima, čime se kompleksne storage konfiguracije mogu graditi kompoziciono, slično Linux device-mapper-u ali sa drugačijim API dizajnom.

5.3 Capsicum (FreeBSD) — capability-based sandboxing

Capsicum je framework za sandboxing zasnovan na capability modelu — proces koji uđe u “capability mode” gubi pristup globalnom namespace-u (ne može otvarati fajlove po apsolutnoj putanji, na primer) i mora unapred dobiti file descriptor-e sa ograničenim pravima. Ovo je akademski rigorozniji pristup od Linux seccomp-a, razvijen u saradnji sa Univerzitetom Kembridž.

5.4 Scheduler

FreeBSD nudi dva schedulera: ULE (podrazumevani, SMP-svestan, sa podrškom za CPU affinity i hijerarhijske grupe) i stariji 4BSD scheduler. NetBSD i OpenBSD imaju sopstvene, jednostavnije implementacije koje prioritizuju predvidljivost nad agresivnom optimizacijom propusnosti.


6. Praktične implikacije za administratore koji dolaze sa Linuxa

  • Mrežna konfiguracija je u /etc/rc.conf, ne u distribuiranim fajlovima poput /etc/network/interfaces ili NetworkManager-a.
  • Fajl sistem raspored prati istorijski BSD layout: /usr/local je rezervisan za softver instaliran preko ports/pkg, čist odvojeno od baznog sistema u /bin, /sbin, /usr/bin — bazni sistem i “dodatni” softver se ažuriraju nezavisno (freebsd-update vs pkg upgrade).
  • Nema /proc po defaultu u istoj meri kao Linux — FreeBSD ima linprocfs za kompatibilnost, ali se većina introspekcije radi preko sysctl MIB stabla, koje je mnogo šire korišćeno nego u Linuxu (hiljade parametara dostupnih preko sysctl -a).
  • Linux binarna kompatibilnost u FreeBSD-u (linux64 ABI kompatibilni sloj) omogućava pokretanje određenih nemodifikovanih Linux binarnih fajlova, uključujući istorijski i Steam/Wine radna opterećenja, iako je opseg ograničen.

7. Kada birati BSD umesto Linuxa

Realno gledano, izbor zavisi od konteksta:

  • FreeBSD ima smisla za storage servere (ZFS, ARC keširanje), mrežne uređaje (pfSense/OPNsense su bazirani na FreeBSD-u), i tamo gde je bitna koherentnost celog sistema i dugoročna ABI stabilnost.
  • OpenBSD je izbor kada je bezbednosni model prioritet iznad performansi — VPN gateway-i, firewall-ovi, sistemi izloženi internetu sa minimalnom površinom napada.
  • NetBSD je pravi izbor za embedded/nestandardni hardver gde prenosivost dominira.
  • Linux i dalje dominira u ekosistemu (dostupnost drajvera, kontejnerska orkestracija, komercijalna podrška, cloud-native alati) i to treba iskreno priznati — BSD nije “bolji Linux”, već drugačija filozofija sa sopstvenim kompromisima.

Zaključak

BSD sistemi nisu relikvija — oni predstavljaju alternativnu, koherentnu viziju Unix-a gde se kernel i userland razvijaju kao jedna celina, gde je licenciranje filozofsko pitanje isto koliko i pravno, i gde su neki od danas standardnih bezbednosnih i virtuelizacionih koncepata (jails, pf, pledge/unveil, privilege separation) prvi put uvedeni i dokazani u praksi. Za naprednog korisnika, razumevanje BSD arhitekture nije samo akademska vežba — mnogi koncepti koje danas sматrate “Linux-standardom” (namespace izolacija, W^X memorija, capability sandboxing) imaju svoje poreklo ili paralelnu, često elegantniju implementaciju u BSD svetu.

Leave a Reply

Your email address will not be published. Required fields are marked *