modelul generativ al software-ului

sâmbătă, 25 aug. 2012, 17:44

Atenție, săriți, o dăm din nou în de-alea cu copyright. Deoarece comercianții de software nu mă ascultă și continuă să își aroge dreptul de proprietate asupra nimicului – ba mai mult, asupra ideilor de nimic – și datorită faptului că aceiași ziși comercianți și „producători de proprietate intelectuală” se afundă ca ultimele dobitoace în aceleași dificultăți de cel puțin douăzeci de ani încoace, vin spre a propune o soluție care le va rezolva odată pentru totdeauna problemele, introducând în același timp altele. Este vorba despre o idee diabolică, care poate schimba relația dintre software și forme și poate duce chiar la sfârșitul epocii de aur a calculatoarelor așa cum o cunoaștem.

Vă mărturisesc însă, dragi cititori – care sunteți, dacă sunteți -, că nu mă pot abține, îmi sună în minte o voce malefică care mă îndeamnă să pun pe foaia virtuală această idee, pentru că pot, iar dacă ar fi să se pună în aplicare pe scară largă modelul de mai jos mi-ar fi mult mai greu, sau cine știe, poate chiar aș ajunge în imposibilitatea de a transpune idei din mintea-mi înspre mediul virtual. Sincer vă zic deci că sper să rămânem din acest punct de vedere în obscuritate atât eu cât și blog-ul, cât și ideea mea absolut diabolică înscrisă aici.

Spuneam în „software-ul și formele” că există undeva o linie fină de unde biții devin numere, iar numerele devin instrucțiuni, care la rândul lor devin software ce se succede pe sine însuși la infinit în sensul abstractizării. Mai exact dacă ne oprim la nivelul arhitecturilor de calculatoare, putem observa că acestea se structurează pe mai multe niveluri: de exemplu există un nivel unde-i relevantă interconectarea dintre componente, un altul unde discutăm despre prelucrarea instrucțiunilor și în fine un altul – care e de interes pentru noi în contextul de față – unde este proiectat un așa zis „Instruction Set Architecture”. Aici ia naștere interfața programatorului către hardware, reprezentarea bazată pe instrucțiuni fiind de fapt ceea ce face din calculator o unealtă programabilă în cel mai propriu sens al cuvântului.

Tot de domeniul arhitecturii calculatoarelor ține și faptul că orice calculator trebuie să conțină o „memorie”, adică un loc fizic unde sunt stocate datele. O astfel de unitate de memorie – de departe cea mai prețioasă – este registrul, în care poate fi stocat de obicei un număr, care-i la rândul său ceva reprezentare lingvistică [i] a unui șir de biți. Memoria asta prețioasă, de fapt memoria în general poate fi manipulată cu ajutorul instrucțiunilor, care iau una sau mai multe celule de memorie, execută o operație sau mai multe unde celulele în cauză sunt operanzi, după care stochează rezultatul într-o celulă specificată. Bunăoară operația a \gets b + c ia registrele b și c, adună valorile din ele și stochează rezultatul în registrul a.

Așa-zisul „model generativ” poate fi însă ilustrat mult mai simplu cu ajutorul unei singure instrucțiuni, de forma a \gets b, care înseamnă „a primește valoarea lui b”. În foarte multe ISA-uri ea poartă numele de „mov” și poate fi exprimată sub forma „mov a, b” sau ceva de genul. „mov” vine evident de la „move”, deci înseamnă „mută conținutul lui b în a”. Toate bune și frumoase, doar că instrucțiunea „mov” nu mută efectiv datele dintr-un registru în altul, ci le copiază! După „mutarea” valorii dn b în a, valoarea inițială din b rămâne neschimbată din rațiuni de simplificare a proiectării – n-am de ce să schimb nivelul logic al tranzistoarelor care alcătuiesc registrul sursă, e de ajuns să îl schimb doar pe cel al biților din registrul destinație.

Prin identificarea acestei semantici profund eronate a instrucțiunii „mov” – și care se răsfrânge asupra tuturor, sau cel puțin asupra majorității instrucțiunilor – am identificat rădăcina problemei proprietății intelectuale: în mod natural, calculatoarele nu mută, ci copiază! Și cum să îți protejezi proprietatea intelectuală de mare valoare cât și foarte relevantă pentru progresul societății și propășirea rasei umane, cum să faci asemenea lucru dacă tu, proprietar, lucrezi cu o mașinărie care copiază informația în loc să o mute. Așa fapt este „preposterous”, după cum ar spune englezul, dată fiind natura sa care îndeamnă la acte periculoase de piraterie, care-i totuna cu terorismul!

Ca urmare a acestei realități inacceptabile, doresc să propun un model nou (sper) care va sta (sper că nu) la baza proiectării viitoare a seturilor de instrucțiuni, deci a calculatoarelor, deci implicit a software-ului. L-am denumit „model generativ” deoarece separă instrucțiunile „care mută” date de cele „care generează”. Separația poate merge până la nivelul blocurilor arhitecturale (hardware/software) componente, făcând posibile inclusiv scenarii în care un calculator dat nu poate genera date decât eventual în condiții de maximă restricție [ii].

Cele două clase de instrucțiuni se prezintă după cum urmează:

  • Instrucțiunile care mută: aici se numără inclusiv încărcarea din/în memoria RAM, transferul între hard-disk-uri, pe rețea și așa mai departe. Orice instrucțiune din clasa „mov” va avea drept efect actualizarea memoriei destinație și „ștergerea” (inițializarea cu zero) memoriei sursă. Nu e garantată fiabilitatea transferului, astfel că dacă vă pică curentul în timp ce mutați un program sau orice altceva de pe un hard-disk pe altul, ghinion; e ca și cum ați fi scăpat o vază be jos, nu se poate repara.
  • Instrucțiunile care generează: poate exista eventual o singură instrucțiune de generare, „gen”, care să pună un număr dat într-un registru prestabilit. Eventual pot exista instrucțiuni „generatoare” asemănătoare cu cele ale seturilor vechi, ca în exemplul a \gets b + c, unde poate că utilizatorul nu dorește să piardă conținutul registrelor sursă. În orice caz, instrucțiunile de generare pot fi o sursă primare de monetizare pentru producătorul de hardware și software: generarea de date va avea în mod evident un preț care trebuie plătit pe loc de către utilizator. Pare realizabilă scena în care individul introduce card-ul de credit într-un slot și plătește pentru generarea unui text precum acesta, preț care include și un comision pentru introducerea PIN-ului (care presupune generarea unui șir de cifre) etc.

Consecințele pe plan economic sunt imediat previzibile. Sus-numitele date vor deveni un ce concret, generarea de date transpunându-se într-un cost real pe piață [iii]. Pirateria va deveni practic imposibilă – dacă nu luăm în calcul hack-urile, care vor fi reglementate prin lege și aspru pedepsite -, consumatorul trebuind să plătească contravaloarea produsului – adică prețul efectiv al datelor plus adaosuri și comisioane – la generarea unei noi copii. Pe de altă parte și producția de software și bunuri digitale în general va fi supusă acelorași reguli, astfel că producătorii de software vor plăti un preț anume – date plus comisioane plus taxe – pentru fiecare bucată de software vândut, licențele software devenind inutile în acest context. Evident că anumite tehnici precum replicarea datelor vor fi mai scumpe, iar costurile sus-amintite vor duce cel mai probabil la încetinirea progresului pieței.

Ideea pe care v-am prezentat-o aici este, după cum foarte probabil că ați intuit deja, un exemplu de absurditate absolută. Mă îndoiesc că ar putea deveni viabilă undeva într-un spațiu virtual izolat, cu atât mai puțin în lumea largă a calculatoarelor și a Internetului. Prin asta înțeleg că ea ar putea fi implementată cu ușurință în practică, însă pe de o parte costurile de integrare cu tehnologiile actuale ar fi mari [iv] și pe de altă parte nici o tactică de marketing, oricât de ingenioasă ar fi ea, nu ar putea convinge pe cineva să cumpere o astfel de prostie. Sau putem măcar să sperăm asta.

  1. Observăm așadar că limbajul este legat în mod intrinsec de știința calculatoarelor, demonstrându-și astfel încă o dată și încă o dată importanța în raport cu inteligența umană. Deci xor știți să vă exprimați într-un limbaj oarecare, xor sunteți proști. []
  2. Habar nu am ce înseamnă asta și vă rog să nu mă întrebați. Imposibilitatea de a „genera”/copia date poate avea un impact negativ imens asupra proiectării programelor, însă acum nu o să mă apuc eu să găsesc o rezolvare la toate problemele practice posibile. []
  3. Distrugerea ar presupune atunci mutarea în /dev/null. []
  4. Internetul se chinuie de douăzeci de ani să treacă de la IPv4 la IPv6 și după cum observați lucrurile nu au progresat încă foarte mult. []

Comments

  • Interesant. Societate utopică 🙂

  • Comentariile sunt dezactivate.