FreeBSD a cudzí softvér

Nie ste pri používaní operačného systému FreeBSD obmedzovaní? Nechýbajú vám tam aplikácie, ktoré by ste mali v inom operačnom systéme? Toto sú otázky, ktoré používatelia FreeBSD počúvajú celkom často. Keď ich dostanú, zvyčajne sa záhadne pousmejú, pretože následne môžu tomu, kto im ich položil, vysvetliť jeden z veľkých tromfov tohto operačného systému.

Zvyčajne platí, že programy sú vo svojej spustiteľnej podobe určené pre jeden jediný operačný systém. Ak má byť program spustiteľný vo viacerých operačných systémoch, musí byť naprogramovaný takým spôsobom, aby sa dal preložiť – skompilovať a zlinkovať – do rôznych formátov spustiteľných súborov pre každý z operačných systémov zvlášť. Naprogramovať týmto spôsobom sa zvyčajne bez problémov dajú iba tie najtriviálnejšie programy, ktoré nepoužívajú grafické používateľské rozhranie, nepotrebujú používať systémové volania, signály operačného systému, zdieľanú pamäť, nepotrebujú spúšťať iné programy alebo zisťovať informácie o operačnom systéme. Za skutočnosťou, že aj zložité programy ako je napríklad webový server Apache alebo program na prácu s obrázkami GIMP, fungujú na viacerých operačných systémoch, je zvyčajne enormné úsilie tvorcov týchto programov, nutnosť programovať mnohé časti niekoľkokrát (pre každý operačný systém osobitne) a podobne. Úprava programov, ktoré vedú k možnosti ich prekladu pre viaceré operačné systémy, sa nazýva portovanie alebo portácia.

Jednou z možností, ako spúšťať v jednom operačnom systéme programy určené pre iný operačný systém, je jeho emulácia. Existujú programy, ktoré simulujú kompletný počítač a na takýto virtuálny počítač umožňujú doslova a dopísmena nainštalovať operačný systém a v tomto operačnom systéme používať programy preň určené. Tento prístup je síce priamočiary, ale má mnohé nevýhody. Softvér simulujúci hardvér počítača je komplikovaný a pridáva pre beh samotných používatelských programov dve nezanedbateľné programové vrstvy navyše: v prvom rade je to samotný simulátor virtuálneho počítača a potom je to ešte druhý operačný systém, v ktorom požadovaná aplikácia beží. Na počítači tak beží hostiteľský operačný systém, v ktorom je spustená používateľská aplikácia simulujúca virtuálny počítač, v nej je spustený iný – hosťujúci – operačný systém (v princípe nič nebráni tomu, aby boli hostiteľský a hosťujúci operačný systém rovnaké alebo aby sa líšili len vo svojej verzii) a nakoniec v hostiteľskom operačnom systéme konečne beží požadovaná aplikácia.

Výhodné by však bolo, ak by v hostiteľskom – natívnom – operačnom systéme mohla bežať priamo požadovaná aplikácia určená pre iný operačný systém. Takáto možnosť v určitých prípadoch existuje. Jedná sa o implementáciu aplikačného binárneho rozhrania (ABI – application binary interface) cudzieho operačného systému. Aplikačné binárne rozhranie je rozhranie medzi jadrom operačného systému a používateľskými aplikáciami, cez ktoré im jadro poskytuje svoje služby. Zjednodušene možno povedať, že ak sa v jednom operačnom systéme implementuje aplikačné binárne rozhranie iného operačného systému, bude možné spúšťať programy určené pre oba tieto operačné systémy.

Napriek tomu, že sa implementácia cudzieho aplikačného binárneho rozhrania označuje ako emulácia, o žiadnu emuláciu vo vyššie uvedenom zmysle nejde. V čase vzniku tejto črty v operačných systémoch jednoducho neexistoval lepší termín na jej označenie, a keďže asi neexistuje dodnes, pojem emulácia sa ujal a používa sa.

Pokiaľ ide implementácu cudzích aplikačných binárnych rozhraní vo FreeBSD, je na tom tento operačný systém veľmi dobre. Okrem vlastného ABI sú totiž v jadre FreeBSD implementované tri rôzne cudzie aplikačné binárne rozhrania.

  1. System V Release 4, ktorý bol poslednou významnou vetvou unixu firmy AT&T. Stal sa základom prvých verzií operačných systémov SCO Unix a Solaris. Pre funkčnosť režimov SVR4 aj SCO Unix je potrebné mať komerčne distribuované knižnice týchto operačných systémov, a k týmto knižniciam je zasa potrebné mať príslušné používateľské licencie. Na sprevádzkovanie aplikačného binárneho rozhrania SVR4 stačí mať CD zo systémom Sun Soraris 2.6. V prípade ABI SCO Unix je potrebné príslušné knižnice nakopírovať z bežiaceho systému SCO Unix.

  2. Digital Unix alebo OSF/1 je variantou unixu navrhnutého pre procesory Alpha firmy Digital Equipment. Keďže tieto procesory boli 64-bitové, ani spomínaná emulácia nebude fungovať na 32-bitových počítačoch. (Škoda, že sa procesory Digital Alpha prestali vyrábať; disponovali niekorými zaujímavými črtami, ktorým ani súčasné 64-bitové procesory nemôžu konkurovať. Mám možnosť pracovať na jednom v súčasnosti už archaickom počítači s týmto procesorom, ale jeho odozva a priepustnosť je v porovnaní s počítačmi architektúry IA-32 tej doby skutočne excelentná.) Navyše, implementácia tohto aplikačného binárneho rozhrania je nekompletná, nakoľko operačný systém Digital Unix bol založený na mikrokerneli Mach, ktorého mnohé systémové volania nespĺňajú normu POSIX, ktorej sa FreeBSD drží.

  3. Linux – na rozdiel od predchádzajúcich režimov, ktorých použitie je problematické a teda aj veľmi zriedkavé, implementácia aplikačného binárneho rozhrania jadra operačného systému Linux je tak často v operačnom systéme FreeBSD využívaná, že mnoho používateľov tohto operačného systému ani netuší, že ABI linuxu používa a že niektoré používateľské aplikácie, s ktorými denne pracuje, sú naprogramované, skompilované a zlinkované pre operačný systém Linux.

Najjednoduchším spôsobom spúšťania programov je ich priame odovzdanie jadru operačného systému na vykonanie. Tento spôsob je však veľmi neflexibilný, preto sa s postupom času v unixovských operačných systémoch vyvinul systém, ako rôzne typy programov vykonávať rozličným spôsobom. Preto teraz môžeme priamo spúšťať kompilované programy, interpretovane shellovské, perlovské či pythonovské skripty. V operačnom systéme FreeBSD je táto myšlienka dotiahnutá ešte ďalej a je možné rozpoznávať aj medzi binárnymi typmi spustiteľných súborov a pre iný typ použiť iné aplikačné binárne rozhranie.

Binárny spustiteľný kód väčšiny unixovských operačných systémov je vo formáte ELF, ktorý pôvodne pochádza zo System V UNIXu firmy AT&T a do operačného systému FreeBSD bol prijatý vo verzii FreeBSD 2.2.6. Tento formát obsahuje medzi inými informáciami aj značku (angl. brand), ktorá slúži práve na označenie aplikačného binárneho rozhrania, z ktorým má byť daný program spustený. Značka sa dá zmeniť programom brandelf(1). Týmto programom možno túto známku aj nastaviť ak nie je nastavená, alebo zmeniť, ake je nastavená na nesprávnu hodnotu. Napríklad veľmi veľa programov určených pre operačný systém GNU/Linux má túto známku nastavenú na SVR4.

Linux ABI

Súčasti potrebné pre beh linuxových aplikácií pod operačným systémom FreeBSD sa zvyčajne inštalujú už pri inštalácii operačného systému FreeBSD, pokiaľ sa zvolí príslušná voľba v inštalačnom programe. Tieto súčasti sa inštalujú do adresára /usr/compat/linux/, kde sa vytvorí hierarchická adresárová štruktúra podobná adresárovej štruktúre koreňového adresára Linuxu:

% ll -lF /usr/compat/linux/
total 10
drwxr-xr-x   2 root  wheel    1K  8 jún 17:59 bin/
drwxr-xr-x   9 root  wheel    1K 18 júl 09:43 etc/
drwxr-xr-x   3 root  wheel    2K  8 jún 17:59 lib/
drwxr-xr-x   4 root  wheel  512B  8 jún 17:59 mnt/
drwxr-xr-x   2 root  wheel  512B 23 aug  1999 opt/
dr-xr-xr-x   1 root  wheel  512B 18 júl 10:44 proc/
drwxr-xr-x   2 root  wheel  512B  8 jún 17:59 sbin/
drwxr-xr-x  13 root  wheel  512B  8 jún 17:59 usr/
drwxr-xr-x  13 root  wheel  512B  8 jún 17:59 var/
%

Ak spomínané súčasti nie sú nainštalované, je možné ich nainštalovať zo stromu portov alebo z balíkov (viď predchádzajúci diel seriálu). Port linux_base sa nachádza v adresári /usr/ports/emulators/linux_base/. Vychádza z minimálnej inštalácie distribúcie operačného systému Red Hat Linux 7.1. K dispozícii sú aj ďalšie balíky linux_base, ktoré sú založené na distribúciách operačných systémov Red Hat Linux 6.1, Red Hat Linux 8.0, Linux Debian 3.0 či Gentoo Linux. Tieto porty obsahujú skutočne iba základné programy a zdieľané knižnice operačného systému GNU/Linux; ďalšie súčasti možno doinštalovať z portov v adresári /usr/ports/devel/: linux_devtools, linux_libglade, linux_kdump, linux_allegro, linux-glib2 či linux-sdl12.

Teraz je na mieste zodpovedať otázku, ktoré linuxové aplikácie sa zvyknú pod operačným systémom FreeBSD používať. Sú to v prvom rade closed-source aplikácie, ktoré ich výrobcovnia uvoľňujú pre operačný systém GNU/Linux, ale nie pre FreeBSD. Za všetky možno spomenúť napríklad Adobe Acrobat Reader či RealAudio Player. Donedávna to platilo aj pre skvelý internetový prehliadač Opera; v súčasnosti však už tento existuje aj pre FreeBSD. V strome portov možno nájsť viac ako stovku aplikácií určených pre operačný systém GNU/Linux, ktoré je možné vďaka implementácii linuxového aplikačného binárneho rozhrania používať pod operačným systémom FreeBSD. Z najznámejších a najpoužívanejších sú to implementácie Java 2 SDK od IBM, Sunu aj Blackdownu, internetové prehliadače Opera a Mozilla, setiathome, Virtual Machine Ware aj linuxové grafické knižnice či hry. Netreba však zostať obmedzený iba na tie linuxové aplikácie, ktoré je možné inštalovať zo stromu portov či z balíkov. Keďže linux_base je založený na distribúcii Red Hat, je možné inštalovať aj aplikácie z balíkov .rpm, ktorých je veľké množstvo. Vďaka implementácii linuxového ABI možno v operačnom systéme FreeBSD používať aj TeXLive, čo je rozsiahla distribúcia typografického systému TeX s rôznymi nadstavbami (LaTeX, pdfTeX, Omega, nástroje na prácu s formátom PostScript, atď.). V príručke operačného systému FreeBSD možno nájsť zdokumentovaný postup inštalácie linuxových verzií aplikácií Mathematica, Maple, MATLAB, Oracle a SAP R/3. S použitím operačného systému FreeBSD možno teda rátať v školstve i v podnikovom prostredí.

Zamyslenie o prenostiteľných aplikáciách

Pre ľudí, ktorí pravidelne používajú viacero operačných systémov, je veľmi príjemné, keď môžu pod každým z nich bez väčších problémov používať tie isté programy a to všetko navyše bez veľkej námahy. V elektronických konferenciách sú časté otázky, či existuje program na nejakú činnosť, ktorý by bežal pod viacerými operačnými systémami, aby napríklad taká triviálna vec, ako písanie jednoduchého textu v textovom editore v dvoch rozličných operačných systémoch nevyžadovala od používateľa učiť sa dve rozdielne sady klávesových skratiek či zvykať si na rozličné zvýrazňovanie syntaxe. V takomto prípade sú veľmi obľúbené programy napísané v programovacom jazyku Java, ktoré sa môžu bez zmeny používať na rôznych operačných systémoch. Napríklad aj tento článok bol pôvodne napísaný v textovom editore jEdit, ktorý je napísaný práve v programovacom jazyku Java a nemá napr. problém s písaním znakov stredoeurópskych jazykov s diakritikou pod FreeBSD, Linuxom ani Windowsom. Niekomu sa to možno zdá triviálne, ale skúšali ste písať diakritiku v editore Emacs pod operačným systémom Windows?

Apropos, Java: Java má špeciálne postavenie vo vzťahu k operačnému systému FreeBSD a k implementácii cudzích aplikačných binárnych rozhraní v tomto operačnom systéme. Java pre platformu FreeBSD nie je totiž firmou Sun podporovaná. Vďaka implementácii aplikačného binárneho rozhrania operačného systému GNU/Linux možno vo FreeBSD použiť linuxovú verziu Java SDK, alebo si možno – pre istotu vďaka priam heroickému úsiliu jedného či dvoch výjovárov FreeBSD – preložiť vlasnú natívnu Javu pre FreeBSD, k čomu je ale potrebná tá linuxová.

Záver

Implementácia cudzích aplikačných binárnych rozhraní značne zvyšuje použiteľnosť operačného systému FreeBSD a podstatne rozširuje možnosti jeho nasadenia. Určite nie je všeliekom, ale podstatne uľahčuje život tým používateľom, ktorí sú nútení používať viaceré unixovské operačné systémy – najmä operačný systém GNU/Linux – ale majú svoje obľúbené aplikácie, ktorých sa nechcú vzdať.

FreeBSD Project Home