Slobodný softvér (free software)

Pojem „free softvér“ už asi počula väčšina používateľov počítača. Mnohým ale stále nie jasné, že to „free“ znamená „sloboda“, prečo niekto vôbec robí softvér, ktorý si každý môže voľne skopírovať, a prečo sa napriek tomu free softvér často predáva...

„Free softvér“, ako ho definuje Free Software Foundation, nie je o cene, ale o slobode (freedom). To v skratke znamená slobodu používateľa spúšťať, kopírovať, distribuovať, študovať, meniť a zlepšovať daný softvér. Predpokladom toho je mať k dispozícii zdrojový kód. Aj preto sa odporúča pri preklade používať pojem „slobodný softvér“ a nie „free softvér“, keďže to druhé u väčšiny evokuje skôr „softvér zadarmo“.

Slobodného softvéru existuje obrovské množstvo, tu sme sa pokúsili vybrať tie najznámejšie produkty. V uvedenom zozname bude asi každému niečo chýbať; berte to preto iba ako príklady známych programov.

  • Linux - operačný systém, ktorý sa asi najviac zaslúžil o popularizáciu slobodného softvéru
  • Apache - webserver, ktorý beží na viac ako polovici všetkých internetových serverov
  • Perl, Python a PHP - vysokoúrovňové programovacie jazyky, známe hlavne ako nástroje na tvorbu dynamických web-stránok
  • Samba - umožňuje spraviť z Linuxového počítača server pre Windows
  • OpenOffice - najväčší balík kancelárskeho softvéru v oblasti slobodného softvéru (jeho kód používa aj nový StarOffice)
  • Gnome a KDE - najrozšírenejšie grafické prostredia pre Linux
  • GIMP - grafický program konkurujúci PhotoShopu
  • WINE - skupina programov umožňujúcich spúšťanie Windows aplikácií bez Windows (napríklad v Linuxe)
  • MySQL a PostgreSQL - výkonné databázové servery
  • Mozilla - internetový prehliadač, ktorého kód používa aj Netscape 6
  • Emacs a VIM - výborné textové editory (v prípade Emacs už skôr univerzálna aplikácia na čokoľvek, týkajúce sa textu)

Ako môže byť dobré niečo, čo je zadarmo? Toto je častá otázka ľudí, ktorí chápu tvorbu softvéru podobným spôsobom, ako výrobu nejakého fyzického produktu - keď je lacný (alebo dokonca zadarmo), predsa nemôže byť kvalitný. Treba si ale uvedomiť, že vďaka nemateriálnej povahe softvéru jediné, čo naozaj treba investovať, je čas. A stále je ešte na svete veľa ľudí, ktorí sú ochotní robiť zadarmo, ak sú presvedčení, že je to správne.

Na prvý pohľad sa možnosť „študovať, meniť a zlepšovať“ môže pre bežného užívateľa zdať zbytočná, ale čo ak používate nejaký program, ktorý jeho autor prestane ďalej vyvíjať? Alebo tam potrebujete nejakú funkciu, ktorú autor z nejakých dôvodov nechce implementovať? Ak sa jedná o slobodný softvér, stačí nájsť niekoho iného, kto to vie a urobí. Ak to slobodný softvér nie je (ani freeware nie je free softvér), máte smolu. Zanedbateľné nie je ani to, že softvér bez zdrojových kódov môže mať (a často aj má) neželané funkcie, napríklad zbieranie informácií o užívateľovi a ich posielanie niekam... U softvéru so zverejnenými zdrojovými kódmi je to prakticky vylúčené.

Súčasťou slobody používania slobodného softvéru je aj možnosť predaja, čiže free softvér nemusí byť vždy zadarmo (viď napríklad komerčné distribúcie Linuxu). Keďže však každý má možnosť ho zároveň poskytovať zadarmo, je jasné, že cena nikdy príliš nepresiahne náklady na výrobu (média a dokumentácie) a väčšinou sa pri slobodnom softvéri platí za podporu a nie za samotný produkt.

Najznámejšou licenciou v oblasti slobodného softvéru je GNU GPL. Možno vás napadne, že načo treba licenciu, veď ak autor do programu nedá žiadnu ochranu, je predsa free. Nie je to však pravda - v autorských zákonoch väčšiny krajín totiž vlastní autorské práva (ktoré sú rôzne) automaticky, a musí sa ich explicitne vzdať. Nie každý sa ale vyzná v práve, preto je výhodné mať k dispozícii už právnicky „vymakaný“ text, ako je práve GPL.

Väčšina produktov z oblasti slobodného softvéru začala tak, že niekto sám potreboval nejaký program a tak na ňom začal pracovať. Vďaka tomu, že ho uvoľnil pod „slobodnou“ licenciou, sa na jeho tvorbe mohlo podieľať neobmedzené množstvo ďalších autorov. Neraz tak vznikli až neuveriteľne rozsiahle projekty.

Vďaka tomuto prístupu, že autori robia to, čo sami potrebujú, sú paradoxne mnohé produkty z oblasti slobodného softvéru kvalitnejšie, než ich komerční konkurenti. Zároveň to ale znamená, že prepracované sú hlavne programy pre profesionálov a užívateľsky prívetivých programov je menej. Taktiež logicky takmer úplne chýbajú vysoko špecializované aplikácie.

Firmy živiace sa predajom softvéru sa zväčša slobodného softvéru veľmi obávajú, znižuje totiž ich príjmy (načo by si mal zákazník kupovať niečo, čo môže dostať zadarmo). Preto sa ho snažia všemožne zdiskreditovať, najčastejšie obvineniami z komunizmu a nevhodnosti v kapitalistickej spoločnosti (zo všetkými odvodeniami od „spomalenia ekonomiky“ až po „hladujúcich programátorov“).

Toto všetko je samozrejme hlúposť a už sa o tom napísalo strašne veľa. V skratke: nikto nikoho nenúti, aby produkoval slobodný softvér. Vývoj veľkých projektov slobodného softvéru je takmer vždy sponzorovaný komerčnými firmami, ktoré si uvedomujú jeho výhody (vyššia kvalita, stabilita a ostatné pozitíva otvoreného kódu). Existuje veľa firiem, ktoré sa živia predajom slobodného softvéru, presnejšie poskytovaním technickej podpory preň. Firmy väčšinou potrebujú softvér prispôsobený ich požiadavkám, takže programátori budú zrejme ešte dlho mať roboty dosť.

Pbatenghyngvbaf Lbh ner n bofreinag jro unpxre Vs Lbh jnag n wbo va bhe pbzcnal cyrnfr znvy gb gbhtuthl ng ci2p qbg fx Unir n avpr qnl
V politice jest nejlepším měřítkem moudrosti výsledek.
		-- František Ladislav Rieger
    function perr($msg, $level)
    {
        echo $msg;
    }

    function readcsv_get_entity($fh, $sep = ';')
    {
        $entity = array();
        $attr = '';
        $eoe = false;

        while((! feof($fh)) && (! $eoe))
        {
            $ch = fgetc($fh);
            switch($ch)
            {
                case "\r":
                    break;
                case "\n":
                    $eoe = true;
                case $sep:
                    array_push($entity, $attr);
                    $attr = '';
                    break;
                case '"':
                    $ch = '';
                    while((! feof($fh)) && $ch != '"')
                    {
                        $ch = fgetc($fh);
                        $attr .= $ch;
                    }
                    $attr = rtrim($attr, '"');
                    break;
                default:
                    $attr .= $ch;
            }
        }

        if(feof($fh) && ($entity || $attr))
        {
            array_push($entity, $attr);
        }
        elseif(feof($fh))
        {
            $entity = false;
        }

        return $entity;
    }

    function readcsv_parsecsv($filename)
    {
        $ret = false;
        $sep = ';';
        $line = '';
        $line_num = 0;
        $cells = array();
        $names = array();

        $fh = fopen($filename, 'r');
        if(! $fh)
        {
            perr('Failed to open file \''
                . $file . "'\n", 8);
        }
        else
        {
        $line = '';
        while(! feof($fh))
        {
        $entity = readcsv_get_entity($fh, $sep);

        if($entity)
        {
        if($line_num == 0)
        {
        foreach($entity as $name)
        {
            array_push($names, trim($name, '"'));
        }
        }
        else
        {
        foreach($entity as $index => $val)
        {
        if(isset($names[$index]))
        {
            $cells[$line_num][$names[$index]]
                = trim($val, '"');
        }
        else
        {
            array_push($cells[$line_num],
                trim($val, '"'));
        }                            
        }
        }
        $line_num ++;
        }
        }
        fclose($fh);
        }

        return $ret;
    }
        
    function perr($msg, $level)
    {
        echo $msg;
    }

    function readcsv_get_entity($fh, $sep = ';')
    {
        $entity = array();
        $attr = '';
        $eoe = false;

        while((! feof($fh)) && (! $eoe))
        {
            $ch = fgetc($fh);
            switch($ch)
            {
                case "\r":
                    break;
                case "\n":
                    $eoe = true;
                case $sep:
                    array_push($entity, $attr);
                    $attr = '';
                    break;
                case '"':
                    $ch = '';
                    while((! feof($fh)) && $ch != '"')
                    {
                        $ch = fgetc($fh);
                        $attr .= $ch;
                    }
                    $attr = rtrim($attr, '"');
                    break;
                default:
                    $attr .= $ch;
            }
        }

        if(feof($fh) && ($entity || $attr))
        {
            array_push($entity, $attr);
        }
        elseif(feof($fh))
        {
            $entity = false;
        }

        return $entity;
    }

    function readcsv_parsecsv($filename)
    {
        $ret = false;
        $sep = ';';
        $line = '';
        $line_num = 0;
        $cells = array();
        $names = array();

        $fh = fopen($filename, 'r');
        if(! $fh)
        {
            perr('Failed to open file \''
                . $file . "'\n", 8);
        }
        else
        {
        $line = '';
        while(! feof($fh))
        {
        $entity = readcsv_get_entity($fh, $sep);

        if($entity)
        {
        if($line_num == 0)
        {
        foreach($entity as $name)
        {
            array_push($names, trim($name, '"'));
        }
        }
        else
        {
        foreach($entity as $index => $val)
        {
        if(isset($names[$index]))
        {
            $cells[$line_num][$names[$index]]
                = trim($val, '"');
        }
        else
        {
            array_push($cells[$line_num],
                trim($val, '"'));
        }                            
        }
        }
        $line_num ++;
        }
        }
        fclose($fh);
        }

        return $ret;
    }