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.!