Ce este applet-ii, ce face ei si daca parintii lor stie.

Limbajul Java este bebelusul increat al celor de la Sun Microsystems
si s-a comis ca urmare a dorintei de a scrie un program independent de
platforma. Mai mult, s-a dorit independenta la nivel de cod executabil. Sa ma explic dara inainte sa sari din opinci iarasi, vom defini in cele ce urmeaza notiunile de "cod sursa", "cod executabil"... Codul executabil este acea insiruire de biti 1 sau 0 pe care o "intelege" microprocesorul. Microprocesorul este partea inteligenta a caculatorului tau, care nu este decat un automat cu stari.

Casa ta draga poate fi privita ca un automat cu stari: ea este intr-un anume fel cand pleci la servici, sa-i zicem stare initiala; cand deschizi usa sa pleci se face curent si se intredeschide geamul; razele soarelui bat in geam si se reflecta brusc in oglinda, apoi intr-un turture de la lustra, apoi un fascicul concentrat pica fix pe detectorul de incendii; acesta suna la sectia de pompieri si deschide duzele pentru apa; in subsol pornesc pompele si deci se  misca contorul de apa si chiar si cel de electricitate; apa este peste tot prin casa si computerul explodeaza cu zgomot si mail-ul meu se pierde. Aceasta este starea finala, de exemplu. Ati urmarit o scurta simulare despre cum variaza starea unui automat. Morala: decat sa pleci la servici mai bine ramai acasa! (n-am temperatura, sa stii!)

Revin, deci ca sa varieze semnalele electrice la cele sute de picioruse ale lui, microprocesorul papa biti, care grupati cate 8 se cheama octeti in romanian sau bytes in engleza. Adunati cate 1024 (2^10) sunt Kbytes si asa mai departe.
Ca sa fie executati trebuie sa fie in memorie, de-aia haraie  hard-discul cand incarca cate un program executabil (de exemplu photoshop.exe). Daca te uiti intr-un astfel de fisier binar o sa vezi o gramada de carcalaci si alte ciudatenii. Ei bine, nici un programator nu a scris de mana mizeria aia. Nimeni nu scrie de mana milioane de combinatii criptice de 1 sau 0) - desi sunt si aici exceptii dar nu ti le insir pentru ca (A) sunt irelevante acum (B) ai fugi desculta prin oras. Programatorul a scris frumos un text intr-un limbaj (C++, Pascal, Basic, Perl, Cobol, Fortran), care e mai mult sau mai putin "human readable" si respecta sintaxa limbajului. El se cheama "cod sursa" si este translatat de catre compilatorul limbajului respectiv in carcalaci. Asta este "cod binar" corespunzator programului descris in clar in "codul sursa".

Ce e aia incompatibilitate? Pai in primul rand microprocesoarele nu sunt la fel. Adica din ce carcalaci papa unul nu pricepe altul nici o iota. Cele compatibile Intel 8086 sunt compatibile intre ele: 286, 386, 486, 586, Pentium, Pentium Pro, Pentium II, Pentium III, Pentium 4, Celeron, Mendocino, Coppermine. Sunt compatibile si cu cele AMD (5x86, K6-2, K7 Duron) pentru ca alea respecta acelasi standard - au fost fabricare "la fel" din ratiuni de piata, pentru ca cererea de PC-uri e foarte mare. Si cam atat. In nici un caz nu sunt compatibile cu un Macintosh cu procesor Motorola sau cu un Sun cu procesor Sparc.
Pur si simplu arata altfel, gandesc altfel si vorbesc altfel. Asta e incompatibilitatea la nivel de cod executabil (carcalaci). Ea se rezolva teoretic prin compilatoare care respecta aceleasi standarde: adica eu scriu frumos sursa mea in C++; o compilez pe un Intel, rezulta carcalacii de Intel si programul merge pe Intel; o compilez pe Sun, rezulta alt fel de carcalaci, si programul face acelasi lucru (doar sursa e aceeasi!) si pe Sun. In realitate sistemele de operare nu sunt la fel, iar compilatoarele sunt niste program extrem de complexe care nu sunt la fel nici cand se doreste asta, si alte de-astea. Pentru programe mari, ca mai toate aplicatiile mai complexe decat media aritmetica a unui sir de numere, portabilitatea nu e chiar 100%. Trebuie sa "piepteni" bine sursa (uneori chiar de tot) pana merge pe alt sistem decat cel pe care ai dezvoltat programul...

Cum rezolvam incompatibilitatile? Greu! De fapt nu prea suntem in stare cu procesoarele reale, asa ca ar fi mai usor sa definim un standard nou, un microprocesor nou care sa stie carcalacii lui binari si toata lumea (toate compilatoarele) sa produca cod executabil doar pentru el. Fain, da' nu se poate, nu poti sa le zici la toti sa fabrice acelasi lucru. Atunci s-a luat decizia ca acest microprocesor sa fie "virtual". El se va numi "masina virtuala Java" sau JVM (Java virtual machine) si este un program care interpreteaza "carcalaci standardizati". Adica scriu un program Java (text sursa) si il compilez cu cumpilatorul de Java; rezulta un cod binar (cei cu Java i-au zis "bytecod"). Acela nu va fi inteles de nici o masina fizica, si deci nu va rula pe nici una reala (PC, Mac, Sun). Acest bytecod (care este complet independent de orice masina reala) va fi "interpretat" de catre "masina virtuala", care este un program complex extrem de dependent de masina reala dar care papa carcalaci standardizati JVM. Aceasta e revolutia Java: codul binar produs de limbaj "merge" (este interpretat si NU executat) pe orice sistem pentru care s-a produs o masina virtuala. Atentie! Trebuie cate o JVM pentru fiecare platforma pe care dorim sa portam cod binar creat cu Java, ca doar JVM este un program executabil normal, compus din carcalaci specifici masinii pe care misca.

Ce sunt deci applet-ii? Ideea cu programe independente de platforma i-a izbit in foale pe cei care vegheaza la dezvoltarea Internet-ului. Oamenii care navigheaza sunt de toate rasele, varstele, sexele si... de toate procesoarele. Tu navighezi de pe un PC cu Windows, eu de pe un Sun cu Solaris (Unix-ul de la Sun). DAR ceea ce e foarte important, toti am putea avea cate o masina virtuala pe jucarioara personala. Si deci toti suntem capabili sa luam de pe "net" un "cod executabil" produs de Java - un bytecod - si sa-l "rulam" (interpretam!) cu FIX acelasi efect. Revelatia asta a facut ca in scurt timp toti sa avem in browser-ele noastre (Internet Explorer, Netscape Navigator, Opera, KFMBrowser) inclusa cate o masina virtuala (cu restrictii dure de securitate), iar bucatile de bytecod care sunt anexate paginilor HTML si produc efecte DOAR in cadrul acestora se cheama "applet"-i Java. Textele sursa sunt practic surse normale scrise in Java (astea nu ti se dau), compilate cu compilatorul "javac" de Java in carcalaci standard (astia ti se dau ca fisiere cu extensia ".class" sau librarii ".jar" - Java_ARchive) si interpretate la locul lor in pagina de web de catre masina virtuala Java a navigatorului nostru.

Datorita faptului ca Java este un limbaj interpretat de o masina virtuala, eficienta lui este evident mult redusa fata de cea a unor programe "native", dar asa e in viata - nu poti avea nimic fara sa platesti - asa ca dam viteza pe portabilitate si speram in computere mai rapide...

Gata, ti-am facut capul mare si dureros, desi sunt detalii care n-ar trebui sa te intereseze prea tare. Pur si simplu chestiile alea sunt programele care merg peste tot la fel si fac tot aia orice navigator ai avea. End of story.