Incerc...



... Sa fac putina istorie

Incerc sa-mi imaginez lumea calculatoarelor de acum 20 de ani... Lucrurile erau simple pe atunci: aceasta lume era rezervata in exclusivitate specialistilor, care erau priviti cu respect si cu veneratie. Programatorii erau niste vrajitori care, utilizand limbaje intelese numai de ei, criptice si abstracte pentru profani, dadeau viata masinilor. De multe ori treceau drept "ciudati", insa lor nu le pasa.
Timp de inca multi ani, programatorii adevarati si-au vazut in continuare netulburati de munca lor, petrecand noptile in fata unor masini mari si puternice, zambind ironic utilizatorilor unor biete PC-uri ruland un asa-zis sistem de operare, DOS. Profesionistii au utilizat insa de la inceput UNIX-ul si limbajul C, pentru ca ele ofera unelte simple si eficiente pentru rezolvarea tuturor problemelor posibile. Mai mult, aceste unelte au fost construite inca de la inceput astfel incat sa poate conlucra intre ele intr-un mod eficient. Incet, incet, PC-urile au inceput sa creasca in putere si in numar de facilitati oferite, concomitent cu scaderea rapida a pretului acestora, castigand rapid teren. Cu toate acestea, PC-urile au fost ocolite la inceput de catre programatorii din lumea UNIX fiindca valoarea si puterea acestor calculatoare erau irosite de aplicatii "la cheie" scrise tot mai prost, dar insotite de manuale colorate, frumos ambalate si sustinute de un service prompt si rabdator. Aceasta situatie s-a perpetuat si pana in prezent. Aplicatiile se scriu din ce in ce mai repede, de catre echipe alcatuite dintr-un numar crescand de programatori, incluzand din ce in ce mai multe facilitati, crescand in dimensiune, in numar de bug-uri, incetinindu-si viteza de lucru, singurul scop pentru care sunt scrise fiind acela de a castiga segmente mai mari de piata. Aceasta a condus la situatia actuala (din ultimii 3-4 ani), in care in nenumarate cazuri evolutia hardware-ului este dictata de evolutia software-ului (indeosebi cel facut de Microsoft :)).
In anii '90, odata cu lansarea procesorului Intel 80386, cu suport pentru sisteme de operare multitasking, au inceput sa apara si sistemele UNIX portate pe platforme PC. In 1992, a fost lansat Linux, un sistem compatibil UNIX System V, care a castigat in ultimii ani o popularitate nebanuita, ajungand la cateva milioane de utilizatori in ziua de astazi. Proiectul de realizare a Linux-ului este, de altfel, unul dintre cele mai grandioase duse la capat vreodata. El a fost inceput de catre Linus Torvalds (student pe atunci la Universitatea din Helsinki), caruia i s-au alaturat ulterior sute de programatori din toata lumea. Este evident rolul fundamental pe care l-a avut Internet-ul ("Reteaua") in dezvoltarea acestui sistem. Mai mult, acest sistem a fost portat si pe alte platforme (in momentul de fata, sase la numar), cum ar fi SUN Sparc, Alpha, etc. Unul din domeniile in care este utilizat UNIX-ul este cel de Internet si de servere de retea.
Ca raspuns la aceste aparitii, Microsoft a trecut la sustinerea acerba a Windows-ului NT, despre care producatorul sustine ca este compatibil UNIX, conform standardului POSIX, dar fara sa aduca nici un fel de probe credibile in favoarea acestor afirmatii. Desi este recomandat ca fiind foarte stabil si fiabil, practica dovedeste contrariul: Windows NT este imposibil de folosit in misiuni critice. Consumul urias de resurse, relativa sa stabilitate si costurile mari pentru numar mare de utilizatori il face inutil pentru servere importante de retea. Punctul forte al produselor Microsoft pare a fi asadar usurinta in utilizare/administrare, care in cadrul proiectarii acestora probabil a jucat probabil un rol fundamental, calitatea (deci si performanta) avand un rol secundar. Si tocmai la capitolul usurinta in utilizare sta UNIX-ul mai slab. Initial nimeni nu s-a gandit ca UNIX-ul va fi folosit si de catre utilizatori care abia invata sa tasteze. UNIX-ul este raspandit mai ales in universitati, institutii de cercetare, companii multinationale, fiind utilizat indeosebi pentru aplicatii profesionale. UNIX-ul a inceput abia in ultimii ani sa patrunda in zona de desktop a pietei de calculatoare.
Interesant este faptul ca, desi Digital livreaza mai toate masinile Alpha cu Windows NT, continua dezvoltarea propriului sistem UNIX, si - ceea ce pare la prima vedere de neinteles - sprijina dezvoltarea Linux-ului pe platforme Alpha (a oferit lui Linus Torvalds un asemenea sistem).
In general, cei din lumea UNIX nu au de loc la inima firme ca Microsoft. De concurenta nici nu poate fi vorba: nu poti compara puterea UNIX-ului cu reclamele si tam-tam-urile pentru niste tentative de programe. Ceea ce vinde Microsoft nu sunt decat minciuni bagate pe gat utilizatorilor de catre departamentul de marketing al acestei firme. De ce oare multi au senzatia ca la Microsoft departamentul de marketing are mai mare importanta decat cel de programare a aplicatiilor?
Asa cum am mai spus, tendinta marilor companii este de a monopoliza piata si de a impune sisteme si arhitecturi proprietare. Aceste companii au in permanenta o inclinatie spre a creste in dimensiune, in a ingloba din ce in ce mai multi angajati si de a-si ridica cifra de afaceri. Dovada, achizitiile care se fac in lumea calculatoarelor. Ultima afacere grandioasa de acest gen o reprezinta cumpararea Digital de catre Compaq.

Pentru a combate tendintele acestor companii, in 1983, Richard Stallman a pornit un proiect numit GNU, principalul sau scop fiind revenirea la ideea de software de la inceputul stiintei calculatoarelor, mizand in principal pe cooperarea intre utilizatorii de calculatoare. Scopul proiectului GNU este de a realiza un sistem de operare si toate aplicatiile necesare, care sa fie "free", adica sa poata fi obtinute si distribuite fara nici o restrictie. Stallman a conceput si implementat compilatorul GCC si editorul de texte Emacs. De asemenea, acesta a intemeiat Free Software Foundation, o fundatie non-profit care sa sustina cauza proiectului GNU.
Proiectul GNU si-a dovedit fiabilitatea prin utilizarea aplicatiilor componente pe scara larga, inclusiv in medii comerciale. Firme ca RedHat (care produce si comercializeaza distributii ale sistemului Linux, incluzand tot software-ul GNU existent) sau Cygnus (care ofera suport tehnic pentru produse GNU, participant activ la dezvoltarea lor) au dovedit ca soft-ul free nu este o utopie. De asemenea, calitatea programelor realizate in lumea "free software" este superioara celor proprietare, in principal datorita cooperarii atat dintre programatori cat si dintre utilizatori.

... Sa inteleg prezentul...

Cred ca situatia in care a ajuns stiinta si - de ce nu? - industria calculatoarelor se datoreaza in principal tendintelor comerciale a diverselor companii si a dezvoltarii sistemelor plecand de la fundamente gresite.
De altfel, istoria ne-a furnizat numeroase exemple de interpretare si implementare gresita a unor concepte fundamentale, greseli imposibil de corectat ulterior. Spre exemplu, arhitectura client-server inversata (X Windows sau Java) ...
Dependenta de diverse librarii ce nu se conformeaza unor standarde precise si bine definite nu poate duce la nimic bun. Lantul dependentelor este urias si nu poate fi rupt uneori decat prin intermediul unor rescrieri totale... Dar era si o vorba: "When something is shitty from the start, why keep building on it?"
Un exemplu elocvent de dependenta poate fi, in cadrul sistemelor orientate pe obiecte, faptul ca tot ce se realizeaza utilizand sistemul respectiv se bazeaza pe un set de clase de baza, fundamentale, cum este cazul aplicatiilor scrise in Java.
Tendintele proprietare ale marilor firme au inceput sa duca la realizarea de produse neobisnuite. In premiera, acum cativa ani a aparut un limbaj proprietar: Java, creat de firma SUN pentru a-si sustine ideea de Intranet. SUN incearca prin intermediul acestui limbaj sa atraga cat mai multi programatori, astfel ca aceasta tehnologie sa fie raspandita cat mai repede si cat mai mult in toata lumea, profitand de niste avantaje ale Java, in principal asa-zisa independenta de platforma. De fapt, independenta este un cuvant total nepotrivit: pe de o parte bibliotecile Java au fost implementate pe mai multe platforme, iar pe de alta parte masina virtuala Java este platforma sub care ruleaza programele. Succesul pe care il are Java se datoreaza in primul rand reclamei si tam-tam-urilor care se fac pe seama sa. Slogane ca "write once, run anywhere" nu difera cu nimic de cele ale Microsoft ("where do you want to go today?").

Orice proiect (in lumea calculatoarelor si nu numai) este pornit plecandu-se de la niste premise sau concepte teoretice. Cand se ajunge la faza de implementare in practica a respectivului proiect, de cele mai multe ori suntem nevoiti sa schimbam premisele de la care s-a plecat, fiindca apar neconcordante intre conceptele teoretice si implementare. Suntem legati, fara indoiala, de implementare. Si aceasta in parte datorita faptului ca s-au facut greseli in trecut: aplicatiile trebuie sa fie compatibile cu versiunile mai vechi, sunt dependente de platforma, standardizarea nu e decat o amagire impusa de marile firme ce tind sa monopolizeze piata, software-ul este din ce in ce mai dependent de alte librarii, etc.
Nu se pleaca de la premise si se ajunge la implementare, ci traseul este repetat de nenumarate ori, in ambele sensuri.

Intr-o zi, am nimerit intamplator peste un exemplu concret de ceea ce inseamna "carpelile" necontenite in aplicatiile software. In Xterminal (o interfata utilizator pentru sisteme UNIX a carui proiect l-am pornit prin 1996), datorita implementarii suportului pentru mouse, a trebuit sa modific codul ce sta la baza atat citirii cat si prelucrarii evenimentelor (inclusiv cele de la tastatura, desi aparent nu are nici o legatura cu mouse-ul). La aceste "carpeli" ma refer: aberatii ale unor sisteme de operare sau librarii de care devii dependent vrand-nevrand, care duc la o serie de modificari ale codului de baza, si, incet-incet, programul sau libraria ta devine o invalmaseala ("a mess"), nimeni nu mai pricepe nimic, adaugirile de cod se fac din ce in ce mai greu, marimea codului obiect si sursa creste rapid, codul merge din ce in ce mai greu, si iata ca am descris evolutia soft-ului realizat de marile firme, care descrie de altfel perfect evolutia din ultimii ani a industriei de software. Si o iau razna si devin "mess" parti de baza a software-ului, standarde, protocoale, concepte de baza...
Sa ne amintim si de bine-cunoscutele actiuni ale Microsoft in care s-au facut publice specificatiile unor librarii, descoperindu-se ulterior ca exista anumite functionalitati ascunse, asadar nedocumentate.

Greseala pe care o fac marile companii producatoare de software la ora actuala: duc o strategie pe termen scurt, adica de a face bani si a se gandi numai la ziua de maine. Nu conteaza utilizatorii, ci doar banii luati de la ei. Nu conteaza evolutia stiintei calculatoarelor, ci doar acapararea unor segmente cat mai mari de piata. Si tocmai aceasta politica de marketing (de exemplu, Microsoft are cea mai mare echipa de marketing care a existat vreodata) nu poate duce la nimic bun.

... Si viitorul

Lumea UNIX patrunde mai greu in lumea desktop datorita lipsei aplicatiilor si implicit a interfetelor utilizator usor de folosit. Utilizatorii incepatori sunt timorati pentru ca ideea generala care se vehiculeaza este ca UNIX-ul este greu de folosit. Ceea ce trebuie sa le oferim acestor utilizatori este un sistem care sa combine puterea UNIX-ului cu interfete grafice usor de folosit si aplicatii care sa le foloseasca. Numai astfel acesti utilizatori vor renunta la produsele Microsoft. Pe de alta parte, multi programatorii profesonisti din lumea UNIX sunt foarte reticenti la aparitia ultimelor evolutii tehnologice, cum ar fi programarea orientata pe obiecte, si la aparitia utilizatorilor amatori pe sisteme UNIX. Acestia vor trebui sa inteleaga ca risca sa ramana singurii utilizatori ai acestor sisteme si ca la un moment dat exista riscul ca UNIX-ul sa fie inlocuit de alte sisteme, inferioare din punct de vedere tehnic dar mai usor de utilizat.

Datorita cresterii complexitatii sistemelor, in cadrul stiintei calculatoarelor au aparut niste nevoi, cum ar fi standardizarea. Acestea au condus la aparitia ideii de sistem deschis. Un sistem deschis este un sistem complex, alcatuit din mai multe componente, care interopereaza intre ele, comportandu-se ca un tot unitar. Acest sistem este capabil sa comunice cu alte sisteme din exterior, prin intermediul unor protocoale de comunicatie. Specificatiile atat a sistemului cat si a acestor protocoale trebuie sa fie descrise in documentatii liber disponibile.
Sistemele deschise trebuie sa usureze munca programatorilor, sa creasca nelimitat posibilitatile de extindere ale sistemelor si sa reduca timpul dezvoltarii acestora. Diferitele componente ale sistemelor pot fi realizate de catre diversi producatori. Aceasta presupune insa in primul rand ideea de conlucrare intre acestia, relativ la tendinta de a impune sisteme proprietare.
Modurile in care se manifesta conceptul de sistem deschis in lumea software-ului (si nu numai) sunt sistemele distribuite (mai multe sisteme ruland pe masini diferite, actionand ca un singur sistem), arhitectura client-server (care mareste flexibilitatea sistemelor), orientarea pe obiecte (un sistem complex alcatuit din mai multe componente, denumite obiecte), si bineinteles arhitectura modulara si comunicatia prin intermediul mesajelor.
Free Software Foundation si in general miscarea "free software" va avea o importanta contributie la evolutia si impunerea sistemelor deschise. Standardele create in lumea "free software" nu sunt controlate de nici o organizatie, dar in general lumea soft-ului free produce sisteme mult mai deschise decat companiile care produc software proprietar (in principal pentru ca raspunde mult mai rapid la cerintele utilizatorilor).
Incontestabil, interoperabilitatea dintre sisteme va deveni in viitor cheia catre sisteme deschise. De altfel, sistemele deschise nu reprezinta o tehnologie sau o arhitectura, ci o filosofie de baza a stiintei calculatoarelor. Ele vor juca fara indoiala un rol fundamental in evolutia acestei stiinte (concomitent si industrie) in viitor.

... Sau sa inteleg ce inseamna sa fii programator

Cred ca nu trebuie sa reamintesc marile delicii ale acestei stiinte: a experimenta, a incerca, a "face sapaturi", a pierde ore intregi in toiul noptii in fata unei masini. Atunci, in mijlocul noptii, nu mai exista doua entitati distincte, programator si masina, ci una singura, un ansamblu inseparabil.

Stiinta calculatoarelor - punctul unde converg creativitatea, tehnologia, imaginatia, logica si capacitatea extraordinara de extindere a mintii umane.

Programarea nu este altceva decat o alta forma de creatie, de o natura cu totul aparte: programatorii dau nastere unor sisteme inteligente care actioneaza ca entitati distincte, dupa vointa celui care le-a creat. Ca programatori, suntem fara doar si poate niste Mesteri Manole ai tehnologiei...


Va recomand sa cititi si:
Confruntarea lumilor
Open systems and evolution of computing industry
Ce sunt sistemele deschise?
Why free software?
Xterminal Web Page


Scris de Dragos Acostachioaie © 1997-98
Ultima actualizare: 14 decembrie 2001

Va rog trimiteti-mi opiniile dvs.!