Manuel's Blog thoughts, technologies and life

1Jan/095

What is Linux? – part I

I noticed that a lot of people come to this blog searching the answer to the question "What is Linux?". I was glancing over the romanian page of Wikipedia dedicated to this subject and the definition there doesn't seem appropriate, so I'm going to write this article and if it is going to be appreciated, I will move parts of it on Wikipedia, in the hope of making that article a little bit better. I am going to talk here about lots of concepts, tey are absolutely necessary for you to understand what Linux is, especially if you don't know anything about it. If you are already familiarised with some of the concepts you can safely skip the section that explains that certain concept.

What is Linux?

Linux is an operating system similar to UNIX, open source and which can run on a wide variety of machines. When I say machines, I mean computers, routers, embedded systems and others. We'll begin by seeing what is an operating system.

What is an operating system?

Any computer, no matter how advanced, isn't worth a frosty onion without software. There is a very good reason why a computer is called just that, a computer. The only thing a computer knows how to do is compute. But, in order to be really useful, a computer must have a something to tell him what to compute. That something is the software, or program, The operating system is a software that ensures the link between the programs that run on a computer and the computer itself. Why do we need an operating system?

For a program to function correctly, it must know the computer it runs on. Everything sounds nice up until now, to drive a car you must know how it works. Meaning that you must know that a car can go forward or reverse, that by modifying the position of the front wheels you can make the car steer left or right, that you can accelerate or brake, how much of these you can do and so on. But how could we drive a car if we didn't have a steering wheel, pedals or the stick used to change gears? Well, we'd learn how to drive our own car after a series of trials and errors. We could go to the supermarket by giving direct command to the front wheels, by separately giving command to all the brakes, by using the engine directly to accelerate and so on. But what would happen if we bought a new car?

Because of the differences between the old car and the new car we would have to learn everything from scratch. Obviously this is not what we want. In the cast of the car, the steering wheel, the three pedals and the gear shifter help in standardising the car driving process. To make the car go faster we press the acceleration pedal. We don't care if the engine has 6 or 8 cilinders, if it's electric or on gas, what company has built it or what model it is. In the computer world the equivalent of the steering wheel, pedals and gear shifter would is called abstractisation. A operating system is an abstraction layer between the programs and the rest of the computer. Ca și în cazul mașinilor, calculatorarele diferă la nivelul componentelor care le alcătuiesc (procesor, harddiscuri, plăci grafice, plăci de sunet,...). Sistemul de operare se ocupă de administrarea tuturor acestor componente, de administrarea memoriei și a conexiunilor calculatorului (în cazul conexiunilor la o rețea, cum e Internetul), de oferirea unor posibilități programelor (cum ar fi salvarea și citirea fișierelor sau crearea de ferestre) și multe altele.

Cu alte cuvinte sistemul de operare este foarte important pentru funcționarea unui calculator. De asemenea, din cauza diferențelor dintre sistemele de operare, existența unui sistem de operare pe un calculator poate determina existența unor programe pe respectivul calculator. Programele sunt dependente de sistemul de operare pentru care au fost concepute. De exemplu, nu poți pune pe un PlayStation jocurile create pentru Nintendo Wii.

Unde găsesc sisteme de operare și cum se numesc?

Cel mai simplu exemplu sunt calculatorul de acasă sau laptopul care folosesc sisteme de operare, deasupra căruia rulează programe. Probabil deja ești obișnuit cu Microsoft Windows (probabil XP sau Vista). Windows este un sistem de operare deținut de firma Microsoft. Deși majoritatea calculatoarelor personale în prezent folosesc Windows, în trecut treburile stăteau altfel și în mod sigur în viitor se vor schimba.

OS X este un sistem de operare disponibil pe calculatoarele produse de firma Apple. Deși firma Apple ține să denumească calculatoarele produse de ei Mac-uri, eu le-am inclus aici, la calculatoare personale, pentru a ușura explicațiile. OS X este un sistem de operare similar UNIX-ului (cu alte cuvinte într-o oarecare măsură similar Linuxului), deținut de firma Apple și care rulează exclusiv pe calculatoarele produse de Apple, deși au existat unele încercări de a le porta (înseamnă a utiliza, muta sau adapta) și pe alte calculatoare.

Alte sisteme de operare sunt SunOS și succesorul său Solaris produse de firma Sun Microsistems, ambele similare cu UNIX. Mai amintesc și BSD, inițial dezvoltat de Universitatea din California, Berkeley, și acesta similar cu UNIX.

Și Linux?

Am lăsat la sfârșit Linuxul pentru că despre el o să discut mai mult. Am spus că o mulțime dintre sistemele de operare pe care le-am menționat mai sus sunt similare cu UNIX, dar ce este UNIX?

Ce este UNIX?

UNIX este un sistem de operare creat în 1969 de un grup de angajați ai firmei americane de telefonie AT&T. Da, știu că te întrebi, chiar și pe vremea aceea existau calculatoare. De fapt, calculatoarele au fost inventate pe la sfârșitul celui de al doilea război mondial. UNIX-ul s-a dovedit un sistem de operare destul de bun. Din păcate în vremea respectivă industria calculatoarelor nu era standardizată, ceea ce însemna că oricine putea să facă un computer cum voia și să distribuie pe el un UNIX special modificat pentru calculatorul respectiv. Cu timpul dezordinea și-a spus cuvântul și a lăsat loc liber pentru dezvoltarea și răspândirea altor sisteme de operare, mai exact a Microsoft Windows. Înainte de Windows, Richard Stallman, supărat pe termenii de licențiere din ce în ce mai restrictivi ai sistemelor de operare UNIX, a creat proiectul GNU (asta se întâmpla în 1984). Scopul proiectului GNU era de a crea un sistem de operare compatibil UNIX-ului, dar care să fie complet liber. GNU vine de la Gnu is Not Unix, ceea ce în traducere înseamnă Gnu Nu este Unix.

Software liber

Să vedem ce înseamnă soft liber. Programele de calculator (inclusiv sistemele de operare) nu se nasc și nici nu apar peste noapte. Ele sunt scrise de oameni care se numesc programatori și care își petrec timpul scriind linii de cod (care nu sunt decât o serie de instrucțiuni). Toate liniile de cod formează codul sursă, care este stocat în fișiere text. Codul sursă este apoi interpretat de un program care se numește compilator care îl transformă în 1 și 0-urile care alcătuiesc un program. Procesul de interpretare se numește compilare. Codul sursă nu poate funcționa ca program dacă nu este compilat. Un program nu poate fi construit fără codul sursă și fără un compilator. Codul sursă nu poate fi scos dintr-un program. Principiul din spatele unui program închis, cum este Windows-ul, spune că utilizatorul care cumpără licența pentru respectivul program are dreptul de a utiliza respectivul program în forma lui compilată.

Asta e oarecum similar cu a avea dreptul de a folosi o mașină, dar nu a putea să ridici capota să vezi ce este sub ea, sau de a putea schimba după bunul plac componente ale mașinii, cum ar fi montarea de faruri roz. Nu știu cui i-ar folosi farurile roz, dar cred că înțelegi conceptul pe care încerc să îl definesc. E ca și cum ai avea o mașină și nu ai putea să îi pui cauciucuri de iarnă pentru că termenii contractului nu îți permit. Ar trebui să suni la Ford sau Opel sau oricare ar fi firma de la care ai cumpărat mașina și să le ceri permisiunea, să plătești niște taxe și să semnezi un nou contract. S-ar termina iarna până ai reuși să termini toate formalitățile.

Citește și partea a II-a a acestui post!

Am văzut că o mulțime de oameni ajung pe blogul acesta în căutarea răspunsului la întrebarea: "Ce este Linux?". M-am uitat pe pagina românească a Wikipedia dedicată subiectului și definiția de acolo nu mi se pare de loc corespunzătoare, așa că scriu articolul acesta urmând ca, dacă ajunge să fie apreciat, să mut părți din el pe Wikipedia românească în speranța îmbunătățirii articolului de acolo. O să vorbesc destul de mult despre tot felul de concepte, sunt absolut necesare pentru a putea înțelege ce este Linuxul, mai ales pentru un necunoscător. Dacă deja ești familiarizat cu unele dintre conceptele despre care vorbesc poți să sari peste secțiunea care tratează respectivul concept.

Ce este Linux?

Linux este un sistem de operare similar UNIX-ului, open source și care poate să ruleze pe o gamă foarte variată de mașini. Când spun mașini, mă refer la calculatoare, routere, sisteme embeded și altele. O să vedem întâi ce este un sistem de operare.

Ce este un sistem de operare?

Orice calculator, oricât de performant ar fi nu valorează nici cât o ceapă degerată fără software. Există un motiv pentru care calculatorului i se spune calculator (sau computer, cuvântul corespondent în limba engleză). Singurul lucru pe care un calculator știe să îl facă calculele. Dar, ca să poată să fie cu adevărat folositor, un calculator trebuie să aibă un ceva să îi spună ce să calculeze. Ceva-ul acela este software-ul, sau programul. Sistemul de operare este un program care asigură legătura între programele care rulează pe un calculator și calculatorul însuși. De ce e nevoie de un sistem de operare?

Pentru ca un program să poată funcționa corect trebuie să cunoască calculatorul pe care funcționează. Până aici totul sună frumos, ca să conduci o mașină trebuie să știi cum funcționează. Adică trebuie să știi că o mașină merge înainte sau înapoi, că modificând poziția roților din față poți face mașina să o ia la stânga sau la dreapta, că poți accelera sau frâna și în cât de mult și așa mai departe. Dar cum am putea să conducem o mașină dacă nu am avea volan, pedale sau maneta schimbătorului de viteze? Păi am putea învăța cum să conducem propria mașină după o serie de încercări și erori. Am putea merge la supermarket dând direct comenzi roților din față, acționând separat toate frânele, accelerând direct cu comenzi la motor și așa mai departe. Dar ce s-ar întâmpla când am cumpăra o mașină nouă?

Din cauza diferențelor dintre mașina veche și cea nouă tot ceea ce știm despre condus trebuie uitat și început cu învățatul de la zero. Evident că asta nu ar fi o situație pe care să o dorim. În cazul mașinii volanul, cele trei pedale și schimbătorul de viteze ajută la standardizarea condusului mașinii. Ca să faci mașina să meargă mai repede apeși pedala de accelerație. Nu te interesează dacă motorul are 6 sau 8 cilindri, dacă e electric, pe benzină sau motorină, sau ce companie l-a făcut și ce model este. În lumea calculatoarelor tot ansamblul de volan, pedale și schimbător de viteze s-ar numi strat de abstractizare. Un sistem de operare este un strat de abstractizare între programe și tot restul calculatorului. Ca și în cazul mașinilor, calculatorarele diferă la nivelul componentelor care le alcătuiesc (procesor, harddiscuri, plăci grafice, plăci de sunet,...). Sistemul de operare se ocupă de administrarea tuturor acestor componente, de administrarea memoriei și a conexiunilor calculatorului (în cazul conexiunilor la o rețea, cum e Internetul), de oferirea unor posibilități programelor (cum ar fi salvarea și citirea fișierelor sau crearea de ferestre) și multe altele.

Cu alte cuvinte sistemul de operare este foarte important pentru funcționarea unui calculator. De asemenea, din cauza diferențelor dintre sistemele de operare, existența unui sistem de operare pe un calculator poate determina existența unor programe pe respectivul calculator. Programele sunt dependente de sistemul de operare pentru care au fost concepute. De exemplu, nu poți pune pe un PlayStation jocurile create pentru Nintendo Wii.

Unde găsesc sisteme de operare și cum se numesc?

Cel mai simplu exemplu sunt calculatorul de acasă sau laptopul care folosesc sisteme de operare, deasupra căruia rulează programe. Probabil deja ești obișnuit cu Microsoft Windows (probabil XP sau Vista). Windows este un sistem de operare deținut de firma Microsoft. Deși majoritatea calculatoarelor personale în prezent folosesc Windows, în trecut treburile stăteau altfel și în mod sigur în viitor se vor schimba.

OS X este un sistem de operare disponibil pe calculatoarele produse de firma Apple. Deși firma Apple ține să denumească calculatoarele produse de ei Mac-uri, eu le-am inclus aici, la calculatoare personale, pentru a ușura explicațiile. OS X este un sistem de operare similar UNIX-ului (cu alte cuvinte într-o oarecare măsură similar Linuxului), deținut de firma Apple și care rulează exclusiv pe calculatoarele produse de Apple, deși au existat unele încercări de a le porta (înseamnă a utiliza, muta sau adapta) și pe alte calculatoare.

Alte sisteme de operare sunt SunOS și succesorul său Solaris produse de firma Sun Microsistems, ambele similare cu UNIX. Mai amintesc și BSD, inițial dezvoltat de Universitatea din California, Berkeley, și acesta similar cu UNIX.

Și Linux?

Am lăsat la sfârșit Linuxul pentru că despre el o să discut mai mult. Am spus că o mulțime dintre sistemele de operare pe care le-am menționat mai sus sunt similare cu UNIX, dar ce este UNIX?

Ce este UNIX?

UNIX este un sistem de operare creat în 1969 de un grup de angajați ai firmei americane de telefonie AT&T. Da, știu că te întrebi, chiar și pe vremea aceea existau calculatoare. De fapt, calculatoarele au fost inventate pe la sfârșitul celui de al doilea război mondial. UNIX-ul s-a dovedit un sistem de operare destul de bun. Din păcate în vremea respectivă industria calculatoarelor nu era standardizată, ceea ce însemna că oricine putea să facă un computer cum voia și să distribuie pe el un UNIX special modificat pentru calculatorul respectiv. Cu timpul dezordinea și-a spus cuvântul și a lăsat loc liber pentru dezvoltarea și răspândirea altor sisteme de operare, mai exact a Microsoft Windows. Înainte de Windows, Richard Stallman, supărat pe termenii de licențiere din ce în ce mai restrictivi ai sistemelor de operare UNIX, a creat proiectul GNU (asta se întâmpla în 1984). Scopul proiectului GNU era de a crea un sistem de operare compatibil UNIX-ului, dar care să fie complet liber. GNU vine de la Gnu is Not Unix, ceea ce în traducere înseamnă Gnu Nu este Unix.

Software liber

Să vedem ce înseamnă soft liber. Programele de calculator (inclusiv sistemele de operare) nu se nasc și nici nu apar peste noapte. Ele sunt scrise de oameni care se numesc programatori și care își petrec timpul scriind linii de cod (care nu sunt decât o serie de instrucțiuni). Toate liniile de cod formează codul sursă, care este stocat în fișiere text. Codul sursă este apoi interpretat de un program care se numește compilator care îl transformă în 1 și 0-urile care alcătuiesc un program. Procesul de interpretare se numește compilare. Codul sursă nu poate funcționa ca program dacă nu este compilat. Un program nu poate fi construit fără codul sursă și fără un compilator. Codul sursă nu poate fi scos dintr-un program. Principiul din spatele unui program închis, cum este Windows-ul, spune că utilizatorul care cumpără licența pentru respectivul program are dreptul de a utiliza respectivul program în forma lui compilată.

Asta e oarecum similar cu a avea dreptul de a folosi o mașină, dar nu a putea să ridici capota să vezi ce este sub ea, sau de a putea schimba după bunul plac componente ale mașinii, cum ar fi montarea de faruri roz. Nu știu cui i-ar folosi farurile roz, dar cred că înțelegi conceptul pe care încerc să îl definesc. E ca și cum ai avea o mașină și nu ai putea să îi pui cauciucuri de iarnă pentru că termenii contractului nu îți permit. Ar trebui să suni la Ford sau Opel sau oricare ar fi firma de la care ai cumpărat mașina și să le ceri permisiunea, să plătești niște taxe și să semnezi un nou contract. S-ar termina iarna până ai reuși să termini toate formalitățile.

Citește și partea a II-a a acestui post!