18 dec. 2013

Totul despre Linux

Pentru ca zilele trecute eram bipolar, am decis sa-mi iau singur un interviu:


Ce este Linux?
Intrebarea asta e grea si are cam 3 raspunsuri, cam toate aproximativ corecte.
1. Linux este un sistem de operare.GNU/Linux este un sistem de operare. Sistemul de operare GNU/Linux are in componenta lui nucleul lui Torvalds (Linux) si suita de aplicatii GNU. Suita de aplicatii cuprinde in principal un compilator, diverse utilitare ce permit functionarea si programarea calculatorului pe care ruleaza Linux. (Ma refer la programarea modului de functionare a PC-ului, nu neaparat scrierea de cod)
2. Linux este un nucleu(kernel).Da. Cuvantul Linux luat singur, inseamna nucleul sistemului de operare, dar multa lume cand vorbeste de Linux se refera la o distributie. Daca am folosit ca exemplu GNU/Linux in prima explicatie, atunci o sa va zic si de GNU/Hurd. Hurd este si el un nucleu, peste care ruleaza suita de aplicatii GNU.PS: Nucleul e cel ce face legatura intre user-space (spatiul utilizatorului, aplicatiile ce sunt accesibile utlizatorului) si hardware. Daca utilizatorul creaza un fisier pe disc, aplicatia interactioneaza cu kernelul, ii spune ce vrea utilizatorul si kernelul trimite comanda catre hardware.
3. Linux este o distributie.Mmm, da. Nu e foarte corect sa spunem asta, dar o putem face. Oricum, mai toate distributiile Linux au in componenta numelui si cuvantul "Linux". 


Ce este o distributie Linux?
O distributie Linux e un sistem de operare, o suita de aplicatii care ruleaza sub kernelul Linux.

Si totusi, ce e o distributie Linux?
E un sistem de operare, ca Windows-ul sau MacOSX. E suita aia de aplicatii GNU (si nu numai) puse intr-un pachet mare si frumos ca utilizatorul sa le poata folosi imediat dupa instalarea sistemului. E kernelul + user-space-ul, unde user-space-ul difera de la distro la distro.

N-am prea inteles, dar fie. Totusi, de ce sunt asa multe distro-uri? Ce le deosebeste?
Uh. Buna intrebare... Sunt multe distributii pentru ca se poate. Cred ca asta ar fi cel mai bun raspuns la intrebarea asta.Ce le deosebeste? Aproximativ nimic, si totul.Pentru ca la baza toate ruleaza un set de aplicatii standard si kernelul Linux, toate sunt cam la fel. Le deosebeste in principal versiunea kernelului, managerul de pachete(daca exista), setul de aplicatii cu care vin preinstalate, interfata si motivul pentru care au fost create.Cand spun motiv, ma refer mai mult la target-ul utilizatorilor. Exista distro-uri specializate pentru penetration testing, distro-uri pentru routere, servere, mai nou avem si o distributie dedicata jocurilor PC (SteamOS), pentru MediaCentere, etc.

Si daca o distributie e destinata serverelor, o pot folosi numai pe servere? Sau daca instalez pe PC un distro specific pentru MediaCenter, o sa pot folosi PC-ul numai ca MediaCenter?
Avem doua intrebari si cam aceeasi idee.Raspunsul este: nu. Eu am avut un server ftp ce rula pe laptop-ul cu care imi faceam treaba zilnic. De asemenea, chiar distro-ul de server ruleaza un set de aplicatii destinate special serverelor, asta nu inseamna ca nu se poate instala o interfata/un desktop enviroment(DE).

Desktop enviroment?
Stiti utilizatorii de Windows care isi personalizeaza sistemul schimband teme si altele? Cu un DE iti poti schimba total interfata. E ca si cum ai trece la de W7 fara interfata Metro la W8 cu interfata Metro, dar sub capota ruleaza distributia ta preferata.

Mai zi de distro-uri si ce le diferentiaza.
Well, e mult de zis si ar trebui explicat pentru fiecare distro in parte.Spre exemplu luam Debian-ul. Debian-ul de la mama lui e un distro mai mult destinat serverelor. De ce? Pentru ca are cateva repizitorii din care poti alege si fiecare e destinata cam altor utiliatori. By default, Debian vine cu repo-urile "stable". Asta inseamna ca toate pachetele de aici au fost testate si paratestate contra breselor de securitate si evenutalele brese au fost astupate, versiunile pachetelor(programelor) de aici sunt stabile si mai vechi, nu prea exista bug-uri, update-urile sunt lente. Pe langa stable, exista si testing si experimental. Testing-ul are pachete mai noi, pachete ce nu au fost testate asa minutios, pachete ce au functii noi in ele si sunt in curs de testare. (am putea zice versiuni beta)Ubuntu este bazat pe Debian testing. Adica toate pachetele din Ubuntu sunt de fapt pachete Debian din repo-ul Testing.

Repozitoriul si managerul de pachete?
Aici e simplu. Repo-ul/repozitoriul inseamna un "market" al aplicatiilor ce ruleaza sub Linux. Repo-ul este specific fiecarei distributii, mai mult sau mai putin din cauza modului in care pachetele sunt impachetate.Daca in Windows aveam *.cab sau *.msi pentru a instala aplicatiile, in Linux avem *.deb, *.pkg, *.rpm, *.xz, etc si fiecare tip de fisier este recunoscut de un singur tip de manager de pachete (instaler).

Asta inseamna ca nu pot instala un *.pkg cu un manager de pachete ce stie doar de *.deb?
Exact. Dar nu iti face griji. De obicei aplicatia de care ai tu nevoie e doar la o simpla comanda distanta. Mai mult ca sigur exista pachetul in marketul distro-ului.

Cum instalez un pachet de tip *.tar sau *.tar.gz sau *.gz?
Simplu. Nu il instalezi. Nu exista pachete de tipul asta. Alea sunt sursele unor programe, arhivate. Cel mai bine cauti programul in marketul distributiei si il instalezi de acolo.

Nu puteau fi puse intr-o arhiva de tip zip sau rar?
Mmm, nu chiar. Ma rog. Puteau fi puse, dar hai sa zicem ca e vorba de obisnuita, plus ca zip-ul nu ofera un algoritm de compresie asa bun pentru fisiere de tip text.

Cate DE-uri exista pana la urma? Poate orice distributie sa fie instalata cu un anumit DE?
Sunt vreo 3-4 DE-uri cunoscute si folosite cel mai des: Gnome,KDE,Xfce,Lxde,Unity(exclusiv Ubuntu)
Acestea pot fi instalate in orice distributie, mai putin Unity. Pur si simplu nu merge prea bine pe altceva in afara de Ubuntu. (Nu intru in detalii)
Eu momenan rulez Gnome pe ArchLinux. Anul trecut aveam KDE, dar mie unul nu mi-a facut cu ochiul KDE-ul niciodata. E mai mult o chestie de gusturi.

Ce pot sa fac in Linux?
Intrebarea corecta ar fi "ce nu pot sa fac in Linux si puteam in Windows", iar raspunsul este: depinde.
In primul rand, marele soc al multora e ca nu pot deschide fisiere de tip *.exe by default. (de unde si faptul ca Linuxul nu prinde virusi)
In al doilea rand, exista programe alternative celor din Windows. Plus, exista un program numit Wine ce ruleaza Windows in Linux. E complicat de explicat, dar in principiu, poti face 90% din chestii pe care le faceai si in Windows, iar prin Wine, procentul poate ajunge chiar la 95-97%.

Chiar nu exista virusi pe Linux?
Nu am spus asta. Am zis doar ca nu prinde sau nu se virueaza asa des si usor ca Windows-ul. Practic, din moment ce nu poti deschide *exe-uri by default, nu poti dechide nici virusii. Exista virusi pe Linux, dar sunt foarte rari si sansele sa prinzi unul sunt mai mici decat ai crede.

Dar ai zis ca prin Wine merge sa deschizi exe-uri, asta nu inseamna ca daca deschid un virus prin Wine, o sa imi virusez Linuxul?
Nu. Asta inseamna ca iti virusezi nimic. Practic... singurul lucru pe care il poate face virusul ala e limitat in folderul unde ruleaza Wine (de obicei in /home/$USER/.wine) si la partitiile la care Wine are acces. Daca virusul vrea sa stearga system32, atunci va reusi, dar daca spre exemplu vrea sa isi injecteze codul intr-un executabil sau sa citeasca memoria unul alt executabil ce ruleaza tot prin wine, nu va avea succes, pentru ca, chiar daca Wine "emuleaza" Windows, se supune regulilor si permisiilor *nix. (Unde o aplicatie nu stie de alta aplicatie)

Linux-ul e chiar atat de sigur?
Depinde la ce te referi. Da si nu. Degeaba rulezi Linux daca ai firewall-ul deschis si inviti lumea catre un VNC.
Hai sa spunem ca o instalare de Linux asa cum e ea, fara vreo modificare si cu update-uri la zi, e mult mai sigura ca un Windows.
Dupa cum vedem si aici, multe exploit-uri sunt pentru Windows, nu Linux.

Dar Linux-ul e greu!
Nu. Linux-ul nu e greu. E greu sa treci de la obisnuita la ceva nou. Nah. Imagineaza-ti ca tu esti fan Apple si tu si copii tai nu stiu ce e ala Windows. Aveti in casa numai Mac-uri. Suntei pusi cu totii in fata unui PC cu Windows pentru prima data in viata voastra.
"Windows-ul e greu! Nu e nimic din ce stiu eu in sistemul asta!"
Exact. Nu e nimic din ce stii tu despre Mac in Windows, pentru ca ai folosit doar Mac pana in prezent.

Dar linia de comanda, nu stiu eu d-astea!
Nu esti obligat si nu te pune nimeni sa folosesti terminalul daca nu vrei. In ziua de azi (chiar si in 2007, cand am incercat prima data Linux pe PC-ul de acasa) nu trebuie sa faci asta. Si MacOS are un shell si un terminal, dar nu am vazut hipsterii prin Starbucks sa umble in CLI. (command line interface)

Ok. Mi-am luat inima in dinti si am incercat Linux. Vreau sa incerc si terminalul. Am luat comenzi de pe net, dar nu merg!
First of all, nu iei "comenzi" de pe net si le executi fara sa stii ce fac, altfel ajungi ca astia. In al doilea rand, comenzile nu se executa fara sa le gandesti. E un motiv pentru care nu merge respectiva linie, si mai mult ca sigur motivul e scris ca mesaj de eroare, imediat dupa apasarea tastei "enter".
Gandeste inainte de a apasa enter. 
O chestie amuzanta: "Can rm rm rm?" "Yes."
Poate utilitarul de stergere a fisierelor(rm de la remove) sa se stearga pe el? Raspunsul este da, pentru ca rm sterge fisiere. In acelasi mod puteti ramane fara managerul de pachete sau interfata grafica si va panicati si reinstalati sistemul cand solutia e foarte-foarte simpla. Practic, calculatorul o sa faca exact ceea ce i se spune.


Ce parere ai despre Android?
Well, Android-ul e conform definitiei o distributie Linux. Are la baza kernelul Linux si unele utilitare (ls/dd/cat/cd/mount whatever) si ruleaza pe procesoare ARM.Parerea mea reala despre Android? Daca nu e Android pur asa cum a vrut Google sau vreun proiect independent sau sustinut de comunitate bazat pe Androidul pur, atunci e de tot rahatul. Asta e crudul adevar.Samsung sux, HTC sux, LG sux, whaterver Android ROM from a known phone manufacturer sux. Fragmentarea device-urilor si distro-urilor Linux e reala si o problema. (nu ma refer la fragmentarea discului, ci la multitudinea de variante de distro existente)Ah. Si mi se pare groazanic sa ruleze o masina virtuala de Java peste Linux. E foarte aiurea si penalizeaza performanta, dar... nah.

Mai exista alte device-uri ce ruleaza Linux in afara de telefoanele cu Android?
Da. O gramada. Probabil nici nu va dati seama. Televizoarele Sony stiu ca aveau kernelul Linux pe unele modele, o gramada de modele de routere, iOS5 cu jailbreak (cydia) are managerul de pachete din Debian (dpkg), GPS-urile din RATB, InfoTV-urile de la Metrou si aeroport, etc. My guess e ca orice device ce are eticheta de "smart*" pe el ruleaza daca nu Linux, un sistem bazat pe *nix. 

Ziceai ceva de fragmentare?
Da. Dar nu aia din Windows. Conceptul si ideea e cam aceeasi. Nu o sa intru in detalii despre cum apare fragmentarea sistemului de fisiere, dar stiu ca exista mitul conform caruia fragmentarea in Linux nu exista. Total fals. Exista, dar

1. nu e asa vizibila
2. nu afecteaza performanta pentru ca...
3. pentru ca kernelul si sistemul de fisiere a fost conceput sa se incerce diminuarea fragmentarii. Dupa mine, au avut succes.Oricum, in 2013 cam 50% din utilizatorii PC-urilor au SSD si fragmetarea pe SDD e insesizabila. (Chiar 0, actually)
Problema e ca kernelul stie sa diminueze problema fragmentarii pe sistemele de fisiere specifice Linux. Deci daca scrieti pe o partitie NTFS, fragmetarea o sa apara.

Sisteme de fisiere specifice Linux?
Ext/2/3/4, btrfs, reiserfs, xfs, etc.Cel mai cunoscut este EXT/2/3/4 si cel mai folosit momentan e EXT4. 

Linuxul vede partitiile Windows? Dar Windowsul vede partitiile Linux?Nu. Nu chiar. Nu by default.Ok, depinde de distro si o sa impartim in doua parti raspunsul.1. Distro-urile user-friendly (ca Ubuntu/SuSe/Fedora) si orice distro ce nu necesita instalare si configurare mai minutioasa recunoaste, monteaza, scrie si citeste sisteme de fisiere specifice Windows: FAT16/32 si NTFS. (probabil si ExFAT, dar nu sunt sigur). Celelalte distro-uri au nevoie de un driver (ntfs-3g) pentru ca kernelul sa stie ce sa faca cu partitiile NTFS. Recunoasterea sistemelor de fisiere FAT16/32 e inclusa in kernel.2. Windows-ul, ca Linuxul, fara un driver nu recunoaste SDF din Linux. Exista driver doar pentru EXT/2/3/4.

De ce folosesti Linux?
Uh... As putea sa raspund la intrebarea asta cu "Pentru ca telefonul meu actual ruleaza Android si nu s-a invechit asa mult incat sa-l schimb. De asemenea routerul ruleaza Linux si sunt foarte multumit de el."

Nu asta voiam sa zic! De ce iti place distro-ul X? Ce iti place la Linux (ca OS)?
Aaa. Ce imi place? Libertatea. Faptul ca pot sa pot sa fac un lucru in 20 de feluri. Faptul ca printr-o comanda scrisa in terminal am sistemul updatat la zi. E mult de povestit, dar in principal, faptul ca merge. Pur si simplu merge. Mai multe detalii.

Ce distro folosesti, ce distro-uri ai folosit?
Am inceput cu Ubuntu si acum am ArchLinux. Am trecut prin Mint, SuSe, Fedora, dar mereu ma introc la primele mele doua iubiri: ArchLinux si Ubuntu. Prefer totusi modelul rolling-release, deci probabil as putea zice ca sunt fan(boy) ArchLinux.
Si daca nu e destul, vezi aici:D

Cui ai recomanda Linux?
Sincer? Oricui... Intrebarea corecta e "cui ar recomanda sa incerce distributia X/Y/Z".
Avand in vedere ca Android-ul e o distributie Linux si e prezent la minim 100 de metri in jurul nostru, as putea zice ca chiar si cel mai prost om cu un telefon cu Android stie sa foloseasca o distributie Linux.
Te intreb eu: ce intelegi prin Linux? Distro-ul X/Y/Z? CLI-ul? Kernelul?
Distributiile se pot pune pe un stick USB si se pot incerca in mod Live! fara sa afecteze PC-ul/laptopul. CLI-ul e mai dificil, dar... nici eu nu stiu sa administrez Windows-ul prin CMD si majoritatea folosesc Windows, dar nu am auzit sa se planga ca nu stiu sa se joace cu CMD-ul. (Vezi intrebarea din postul 1, cea cu terminalul)
Nu cred ca te-ai gandit la kernel.