Na lang wachten – en een onverwachte vijfde release candidate – is eindelijk de 10.0 versie van FreeBSD uitgekomen. De nieuwe release zit, zoals het hoort bij een “major release”, weer tjokvol met nieuwe functionaliteiten. Ook zijn er een aantal ingrijpende veranderingen, die vooral achter de schermen een groot verschil maken en zijn er grote stappen gemaakt met ARM-ondersteuning en virtualisatie.

Clang
Bij FreeBSD 9 werd het voor het eerst mogelijk om het gehele systeem in een andere compiler dan gcc te compileren: LLVM/Clang. Dat is een compiler onder de BSD-licentie, die vergelijkbare of zelfs betere prestaties levert dan gcc. Het probleem met gcc was dat het sinds de 4.2 versie onder de GPLv3-licentie valt. Die licentie is nóg minder populair in de BSD wereld dan GPLv2. In deze nieuwe FreeBSD is gcc dan ook uitgeschakeld (maar nog wel aanwezig, mocht je het nodig hebben) en is clang de standaard compiler.

Packages
De oude en zwaar gedateerde familie van pkg_add en pkg_info programma’s zijn vervangen door  pkgng. De ng staat voor “next generation” en dat is te merken. Eindelijk beschikt FreeBSD namelijk over een modern binair package management systeem. De echte FreeBSD gebruiker zweert wellicht bij het compileren van ports, maar het gemak van de nieuwe package manager zal waarschijnlijk toch een hoop mensen doen overstappen. Het installeren van een nieuwe package gaat op een erg herkenbare en gebruikersvriendelijke manier:

Listing 1

# pkg update

Updating repository catalogue

repo.txz                         100% 9055KB   8.8MB/s   6.1MB/s   00:01

# pkg search mysql-server

mysql-server-5.1.65            Multithreaded SQL database (server)

mysql-server-5.0.95            Multithreaded SQL database (server)

mysql-server-4.1.25            Multithreaded SQL database (server)

mysql-server-5.5.27            Multithreaded SQL database (server)

# pkg install mysql-server-5.1.65

Pkg is vergelijkbaar met bijvoorbeeld Debian’s apt-get, maar heeft uitgebreidere functionaliteiten. Zo kun je met het “pkg” commando geïnstalleerde software controleren op kwetsbaarheden, een backup maken van je package database en queries op je package database loslaten om de gewenste gegevens te verkrijgen:

Listing 2

# pkg query “Package name = %n, Version = %v, Size = %sh” mysql-server            

Package name = mysql-server, Version = 5.5.15, Size = 74 MB

Een gigantische stap vooruit dus voor FreeBSD!

Netwerk en kernel
Ook op het gebied van kernel zijn er een hoop nieuwigheden. De kernel is volledig tickless om het beter in virtuele machines te laten werken en er is een compleet nieuwe iSCSI stack. USB audio is sterk verbeterd, net als de ondersteuning voor moderne GPUs en Intel’s Ivy Bridge and Haswell architecturen. De grootste vorderingen zijn gemaakt in het netwerkgedeelte, waar de ondersteuning voor draadloos netwerken sterk is verbeterd. Het aantal drivers is namelijk uitgebreid, de nieuwste protocollen en standaarden zijn in de kernel opgenomen en het geheel is sneller geworden door verbeterde SMP-ondersteuning. SMP-ondersteuning is ook opgenomen in pf, de packet filter, die daarmee ook een stuk sneller is geworden. Ook CARP, de failover software die samenwerkt met pf, is compleet herschreven. Het verouderde BIND is vervangen door het modernere Unbound en LNDS.

Filesystems
FreeBSD 10.0 beschikt als allereerste besturingssysteem over ZFS TRIM. Een Trim commando wordt gebruikt om solid-state (SSD) harde schijven te vertellen, welke blokken data niet langer meer in gebruik zijn. Omdat SSD’s op een andere manier werken dan traditionele harde schijven is het een beter idee om het vrijmaken van die blokken op een andere manier te doen. Hiervoor wordt het Trim commando gebruikt en dat is nu dus ook beschikbaar voor ZFS. Met deze versie beschikt het daardoor ook over LZ4 compressie, een mechanisme dat maar liefst 50% sneller is dan de standaard LZJB compressie. Ook UFS heeft een update gekregen en je kunt nu de grootte van het filesysteem veranderen zonder het te hoeven unmounten. FUSE ondersteuning is nu volledig in userspace en niet meer afhankelijk van een aparte kernelmodule, waardoor het een stuk stabieler draait.

ARM: Raspberry Pi
We hebben in een eerdere BSD Hoek al eens stilgestaan bij FreeBSD op de Raspberry Pi. Met deze nieuwe versie hoef je daar niet meer zo moeilijk voor te doen als eerder beschreven. De ondersteuning voor de ARM architectuur is enorm uitgebreid en naast een hele hoop andere apparaten is nu dus ook de Raspberry Pi een platform waar je FreeBSD op kunt draaien.

Virtualisatie
Het gebied, waar met deze versie de grootste stappen zijn gezet, is virtualisatie. Voor virtualisatie van FreeBSD is er een nieuwe hypervisor van de grond af opgebouwd voor BSD, genaamd bhyve. Bhyve is een “lightweight low-level HVM” en ondersteunt de laatste AMD en Intel virtualisatie extensies en VirtIO voor para-virtualisatie. Bhyve is zo ontwikkeld dat het gemakkelijk over te nemen is door andere BSD’s en Linux.

Hoe ziet zoiets er uit? Om een FreeBSD kernel van een image vm0.img te laden, met 256 MB RAM en als naam “virtuele_machine_0”, gebruiken we het volgende commando:

Listing 3

/usr/sbin/bhyveload -m 256 -d ./vm0.img virtuele_machine_0

Dat laat het FreeBSD opstartscherm zien, en /dev/vmm/vm0 wordt aangemaakt als de virtuele machine. Om de virtuele machine met 2 CPUs op te starten, een tap0 netwerk interface en 512 MB RAM, voeren we in:

Listing 4

/usr/sbin/bhyve -c 2 -m 512 -A -H -P \

-s 0:0,hostbridge \

-s 1:0,virtio-net,tap0 \

-s 2:0,ahci-hd,./vm0.img \

-s 31,lpc -l com1,stdio \

virtuele_machine_0

Nadat de virtuele machine is afgesloten, kunnen we de resources terug claimen met:

Listing 5

/usr/sbin/bhyvectl –destroy –vm=virtuele_machine_0

Naast bhyve en virtio zijn er nog een aantal andere vorderingen wat betreft virtualisatie. Zo is er Xen DomU ondersteuning voor AMD 64-bit systemen en is de Virtual Private Systems extensie, die op het niveau van het besturingssysteem virtualisatie aanbiedt (vergelijkbaar met jails), opgenomen in FreeBSD 10. Een VPS is vergelijkbaar met een jail, maar een stuk efficiënter qua virtualisatie, omdat het slimmer met de beschikbare resources omgaat. Als laatste speerpunt is FreeBSD nu geschikt voor Microsoft’s Hyper-V. Dankzij code – gedoneerd door Microsoft, NetApp en Citrix – beschikt FreeBSD nu over alle benodigdheden om als gast op Microsoft’s virtualisatieplatform te draaien. Microsoft doneerde al langer code aan Linux en dat is nu dus ook bij FreeBSD het geval.

Updaten
Dat klinkt allemaal veelbelovend! Als opfrisser; met de volgende commando’s upgrade je naar 10.0-RELEASE:

Listing 6

# freebsd-update upgrade -r 10.0-RELEASE

# freebsd-update install

# reboot freebsd-update install

# pkg upgrade -f

# reboot freebsd-update install

Conclusie
Al met al is FreeBSD 10.0 een voortzetting van de ingeslagen weg. Er wordt erg veel aandacht besteed aan het implementeren van cutting edge technieken. FreeBSD liep enigszins achter qua virtualisatie, maar is dus hard op weg die achterstand in te halen. Een modern package management systeem zal het zeker voor de beginnende FreeBSD-gebruiker een stuk aantrekkelijker maken en de hoop is dat FreeBSD op de Raspberry Pi ook door jongere gebruikers kan worden ontdekt als alternatief voor Linux. Maar naast het inhalen van achterstanden blijft FreeBSD ook verbeteren in de gebieden waar het voorloopt. Qua netwerk functionaliteiten zijn er een hoop veranderingen aangebracht en ZFS is ook weer verder versneld en uitgebreid. Kortom, een zeer mooie release!

Links

https://www.freebsd.org/releases/10.0R/announce.html

https://wiki.freebsd.org/WhatsNew/FreeBSD10

http://www.bhyve.org