Përvoja ime me Lisp dhe Krijimi i GNU Emacs
Transkriptim i fjalës së Richard Stallman-it, 28 tetor 2002, në International Lisp Conference.
Ngaqë asnjë nga fjalimet e mia të zakonshme nuk lidhet gjëkundi me Lisp-in, asnjë prej tyre nuk qe i përshtatshëm për sot. Ndaj do të më duhet të improvizoj. Ngaqë gjatë karrierës time kam bërë boll gjëra që lidhen me Lisp-in, do të duhej të isha në gjendje të them diçka interesante.
Përvoja ime e parë me Lisp-in qe leximi i doracakut të Lisp 1.5-s në shkollën e mesme. Kjo qe koha kur më iku mendja nga ideja që mund të kishte një gjuhë kompjuteri si kjo. Hera e parë që pata rastin të bëj diçka me Lisp-in qe kur isha riosh në Harvard dhe shkrova një interpretues Lisp për PDP-11. Qe makinë shumë e vogël- kish a s’kish 8k kujtesë - dhe ia dola të shkruaj interpretuesin brenda një mijë udhëzimesh. Kjo më la pak vend për pakëz të dhëna. Kjo ndodhi përpara se të arrija të shihja se çfarë qe vërtet një software, ai që kryente punë të njëmendtë në sistem.
Zura të punoj për një sendërtim të njëmendtë Lisp me JonL White-in, sapo fillova të punoj në MIT. Më punësuan në Artificial Intelligence Lab, jo JonL-ja, por Russ Noftsker-i, çka qe më ironikja kur mendon se ç’do të vinte më pas - vërtet duhet të jetë penduar për atë ditë.
Gjatë viteve ’70, përpara se jeta ime të politizohej nga ngjarje të tmerrshme, thjesht e shtyja duke bërë zgjerim pas zgjerimi për programe të ndryshme dhe shumica e tyre nuk kishin të bënin aspak me Lisp-in. Por, në rrugë e sipër, shkrova një përpunues tekstesh, Emacs. Ideja interesante rreth Emacs-it qe që kish një gjuhë programimi brenda dhe që urdhrat e përdoruesit për përpunime mund të shkruheshin në atë gjuhë të interpretuar programimesh dhe kështu mund të ngarkonit urdhra të reja te përpunuesi juaj ndërkohë që punonit me të. Mund të përpunonit programet që po përdornit dhe të vazhdonit të përpunonit me ta. Pra, kishim një sistem që qe i dobishëm për gjëra të tjera veç programimit dhe ndërkohë mund ta programonit, teksa e përdornit. Nuk e di nëse qe i pari ndër gjëra të tilla, por sigurisht qe përpunuesi i parë i tillë.
Kjo frymë e krijimit të programeve gjigante, të ndërlikuara, për përdorim për përpunimin tuaj dhe mandej shkëmbimi i tyre me persona të tjerë, ndezi frymën e bashkëpunimit të lirë që shihnim atëherë në AI Lab. Ideja qe që mund t’ia jepnit kopjen e çfarëdo programi që kishit dikujt që donte një kopje të tij. I ndanim programet me këdo që donte t’i përdorte ato, përbënin dije njerëzore. Pra, edhe pse nuk kish mendim politik të kristalizuar që të lidhej me mënyrën sipas të cilës shkëmbenim software për hartimin e Emacs-it, jam i bindur që pat një lidhje mes tyre, ndoshta një lidhje jo të vetëdijshme. Mendoj se është natyra e mënyrës se si jetonim në AI Lab ajo që shpuri te Emacs dhe e bëri atë që është.
Emacs-i origjinal s’përmbante Lisp. Gjuha e nivelit të ulët, gjuha e
painterpretueshme - qe PDP-10 Assembler. Interpretuesi që shkruam, në fakt
s’u shkrua për Emacs, u shkrua për TECO. Ky qe përpunuesi ynë i teksteve dhe qe një gjuhë
programimi tejet e shpifur, e shpifur sa më s’bëhej. Arsyeja qe se nuk qe
hartuar për të qenë gjuhë programimi, qe hartuar për të qenë gjuhë
përpunuesi dhe urdhrash. Kish urdhra të tilla si 5l
, për
zhvendosu pesë rreshta
, ose i
dhe mandej një varg
dhe mandej një ESC për ta futur atë varg diku. Mund të shkruanit një varg që
mund të ishte një radhë urdhrash dhe që quhej varg urdhrash. E përfundonit
me ESC ESC dhe kështu mund të ekzekutohej.
Njerëzit donin ta zgjeronin këtë gjuhë me aftësi programimi, ndaj edhe
shtuan ca syresh. Për shembull, nga të parat qe një mekanizëm përsëritjeje,
që qe < >
. Mund t’i vinit këto rreth një gjëje dhe
kjo gjë do të përsëritej. Kish edhe të tjerë urdhra të mistershëm që mund të
përdoreshin për të dalë nga përsëritja sipas një kushti. Për të krijuar
Emacs-in, [1] shtuam aftësinë për të pasur
nënrutina të emërtuara. Para kësaj, qe pak a shumë si Basic dhe nënrutinat
mund të kishin vetëm një shkronjë si emër. Me to, qe e vështirë të
programoheshin programe të mëdha, ndaj shtuam kod që të mund të kiheshin
emra të gjatë. Në fakt, kish edhe disa aftësi të tjera paksa të
sofistikuara; kam përshtypjen se Lisp-i, aftësinë për “unwind-protect”, e
mori nga TECO.
Filluam duke shtuar aftësi pak a shumë të sofistikuara, krejt me sintaksën më të shpifur që mund të mendoni dhe funksionoi - njerëzit prapëseprapë qenë të zotët të shkruanin programe të mëdhenj me të. Mësimi i qartë qe që një gjuhë si TECO, e cila s’qe hartuar për të qenë gjuhë programimi, ishte rruga e gabuar. Gjuha në të cilën ju do të krijonit zgjerimet tuaja, s’do të duhej konceptuar si gjuhë programimi pas të vjelës; do të duhej konceptuar si gjuhë programimi. Në fakt, zbuluam që gjuha më e mirë e programimit për këtë qëllim qe Lisp-i.
Ai që e zbuloi këtë [2], qe Bernie Greenberg. Ky shkroi një version të Emacs-it në Multics MacLisp dhe i shkroi urdhrat e veta në MacLisp në mënyrë të drejtpërdrejtë. Përpunuesi në vetvete qe shkruar krejtësisht Lisp. Multics Emacs u shndërrua në sukses të madh - programimi i urdhrave të rinj për përpunimin qe kaq i përshtatshëm sa edhe sekretaret në zyrën e tij filluan të mësonin se si ta përdornin. Përdorën një doracak që e pat shkruar dikush dhe që tregonte se si të zgjerohej Emacs-i, por që nuk thoshte se bëhej fjalë për programim. Kështu që sekretaret, që besonin se nuk programonin dot, nuk patën frikë. Lexuan doracakun, zbuluan që mund të bënin gjëra të dobishme dhe mësuan të programonin.
Pra, Bernie pa që një aplikacion - një program që bën diçka të dobishme për ju - që ka brenda Lisp dhe që mund ta zgjeroni duke rishkruar programe Lisp, është në fakt një mënyrë shumë e mirë që njerëzit të mësojnë programim. U jep atyre një mundësi të shkruajnë programe të vegjël që janë të dobishëm për ta, çka në shumicën e fushave ju ndoshta nuk mund ta kryeni dot. Mund të nxiten përmes përdorimit praktik - në fazën që është më e vështira - kur nuk besojnë se mund të programojnë, derisa arrijnë në pikën që janë programues.
Në këtë pikë, njerëzit zunë të mendonin se si mund të kishin diçka të tillë edhe në një platformë tek e cila s’kishin sendërtim të plotë funksional të Lisp-it. Multics MacLisp kish një përpilues dhe një interpretues - qe sistem Lisp i kompletuar - por njerëzit donin të sendërtonin diçka të tillë në sisteme të tjera, ku s’kishin shkruar ende ndonjë përpilues Lisp. Pra, po të mos kishit përpiluesin Lisp, s’shkruanit dot plotësisht përpunuesin në Lisp - do të ishte shumë i ngadaltë, veçanërisht rishfaqja, po qe se bëhej fjalë të xhirohej Lisp i interpretuar. Ndaj zhvilluam një teknikë hibride. Ideja qe të shkruanim në një të vetëm një interpretues Lisp dhe pjesët e nivelit të ulët tok, që kështu një pjesë e përpunuesit të qenë pjesë të brendshme të Lisp-it. Këto do të ishin çfarëdo pjesësh që ne mendonim se duheshin përsosur. Kjo qe një teknikë që e kishim praktikuar tashmë me vetëdije në Emacs-in origjinal, ngaqë kish disa veçori deri diku të nivelit të lartë, të cilat i risendërtuam në gjuhën e makinës, duke i shndërruar në primitivë TECO. For instance, there was a TECO primitive to fill a paragraph (actually, to do most of the work of filling a paragraph, because some of the less time-consuming parts of the job would be done at the higher level by a TECO program). Për shembull, kish një primitiv TECO për mbushjen e një paragrafi (në fakt, për kryerjen e shumicës së punës për mbushjen e një paragrafi, ngaqë disa nga pjesët më pak të lodhshme të punës i binte të kryheshin në një nivel më të lartë, nga një program TECO). Mund ta bënit krejt punën duke shkruar një program TECO, por kjo qe shumë e ngadaltë, ndaj e përsosëm duke hedhur pjesë të tij në gjuhën e makinës. Përdorëm këtu të njëjtën ide (atë te teknika hibride), që pjesa dërrmuese e përpunuesit të shkruhej në Lisp, por disa pjesë të tij, të cilat duhej të xhironin veçanërisht shpejt, të shkruheshin në nivel më të ulët.
Kështu që, kur shkrova sendërtimin tim të dytë të Emacs-it, ndoqa të njëjtën lloj skeme. Gjuha e nivelit të ulët nuk qe më gjuha e makinës, qe C-ja. C-ja qe gjuhë e mirë, e efektshme për programe të kalueshëm, që të mund të xhironin në një sistem operativ të ngjashëm me Unix-in. Kishte një interpretues Lisp, por sendërtova aftësi për veprime specifike përpunimi drejt e në C - përdorim buffer-ash përpunuesi, futjeje teksti drejtues, lexim dhe shkrim kartelash, rishfaqje në ekran të përmbajtjes së një buffer-i, administrim dritaresh përpunuesi.
Tani, ky s’qe Emacs-i i parë i shkruar në C dhe që xhironte nën Unix. I pari qe shkruar nga James Gosling dhe i referoheshin si GosMacs. I ndodhi diçka e çuditshme. Në fillim, ngjante se ndikohej nga e njëjta frymë e shkëmbimit dhe bashkëpunimit me Emacs-in origjinal. Emacs-in e parë origjinal e pata hedhur në qarkullim për personat në MIT. Dikush dëshironte ta bënte të xhironte në Twenex - në fillim xhironte vetëm në Incompatible Timesharing System që përdornim në MIT. E kaluan në Twenex, që do të thoshte se kish ndoca qindra instalime nëpër botë që mundeshin ta përdornin. Zumë tua dërgonim atyre, me kusht që “duhet të na dërgoni krejt përmirësimet që i bëni” që të përfitonim të gjithë. Askush s’u përpoq ndonjëherë ta bënte këtë të detyrueshme, por, me aq sa di, njerëzit bashkëpunuan.
Gosling dukej, në fillim, se do të bashkëpunonte në këtë frymë. Shkroi në një doracak se programin po e quante Emacs, duke shpresuar që edhe të tjerë nga bashkësia do ta përmirësonin, derisa t’ia vlente atë emër. Ky qe trajtimi i duhur kundrejt një bashkësie - t’u kërkohej të merrnin pjesë e ta bënin programin më të mirë. Por pas kësaj dukej se ndërroi mendje dhe ia shiti një shoqërie.
Në atë kohë po punoja për sistemin GNU (një sistem operativ software i lirë, i ngjashëm me Unix, që mjaft vetë gabimisht e quajnë “Linux”). Nuk kish përpunues Emacs, si software të lirë, që xhironte nën Unix. Por kisha një shok që kish marrë pjesë në programimin e Emacs-it të Gosling-ut. Gosling-u i pat dhënë, përmes email-i, leje të përhapte versione të tijat. Më propozoi të përdorja atë version. Më tej pashë që Emacs-i Gosling-ut s’përmbante Lisp të vërtetë. Kish një gjuhë programimi që njihej si “mocklisp”, që nga sintaksa duket si Lisp, por që s’kish struktura të dhënash të Lisp-it. Kështu që programet nuk qenë të dhëna dhe mungonin elemente jetike të Lisp-it. Strukturat e të dhënave në të qenë vargje, numra dhe pak gjëra të tjera speciale.
Dola në përfundimin se nuk e përdorja dot dhe më duhej ta zëvendësoja të tërin, hapi i parë për të cilin qe shkrimi i një interpretuesi të vërtetë Lisp. Dora-dorës përshtata çdo pjesë të përpunuesit duke e bazuar në struktura të dhënash Lisp faktike, në vend të strukturave ad hoc për të dhënat, duke i bërë strukturat e të dhënave të mekanizmave të brendshme të përpunuesit të ekspozueshme dhe të trajtueshme nga programet Lisp të përdoruesit.
Përjashtim qe rishfaqja. Për shumë kohë, rishfaqja qe njëfarë bote tjetër. Përpunuesi mund të kalonte në botën e rishfaqjeve dhe gjërat do të vazhdonin me struktura të dhënash tejet speciale që nuk qenë pa dëm për grumbullim hedhurinash, as për ndërprerje dhe nuk mund të xhironit ndonjë program Lisp gjatë kohës që ndodhte kjo. E ndryshuam ama - tani është e mundur të xhirohet kod Lisp gjatë rishfaqjes. Çka vjen jo pak ndoresh.
Ky program i dytë Emacs qe “software i lirë” në kuptimin modern të fjalës - qe pjesë e një fushate të deklaruar politike për krijim software-i të lirë. Thelbi i kësaj fushate qe që kushdo duhet të jetë i lirë të bëjë gjërat që bënim ne dikur në MIT, të punohej tok mbi software-in dhe të punohej me këdo që donte të punonte me ne. Kjo është baza e lëvizjes për software të lirë - përvoja që pata, jeta që bëja në laboratorin MIT AI - të punohej për dijen njerëzore dhe jo t’i zihej rruga cilitdo që përdorte dhe përhapte më tej dijen njerëzore.
Në atë kohë, mund të krijonit një kompjuter që hynte në po atë segment
çmimesh si kompjuterat e tjerë që nuk qenë menduar për Lisp, vetëm se ky
mund të xhironte Lisp-in shumë më shpejt se ata dhe, po ashtu, me kontroll
të plotë të llojit të të dhënave në çdo veprim. Kompjuterat e zakonshëm ju
shtrëngonin të zgjidhnit ose shpejtësinë e ekzekutimit, ose kontroll të mirë
të llojit të të dhënave. Pra, mund të kihej një përpilues Lisp dhe të
xhiroheshin programet më shpejt, por kur provohej të merrej car
i një targe, arrihej në përfundime pa kuptim dhe tek e fundit në vithisje.
Makina Lisp qe e zonja të përmbushte udhëzimet gati po aq shpejt sa makinat
e tjera, por çdo udhëzim - një udhëzim, të themi automjet
do të
shkaktonte kontroll lloji të dhënash - kështu që, po të provonit të kërkonit
automjet
për një numër, në një program të përpiluar, do t’ju
paraqitej menjëherë një gabim. E ndërtuan makinën dhe kjo pati një sistem
operativ Lisp. Qe shkruar krejtësisht në Lisp, me përjashtim vetëm të
pjesëve të shkruara në mikrokod. Njerëzve filloi t’u interesojë prodhimi i
tyre, që do të thoshte se mund të fillonin një biznes.
Kish dy ide të ndryshme rreth se si mund të ishte shoqëria. Greenblatt-i donte të fillonte atë çka e quante shoqëri “hacker”-ash. Kjo donte të thoshte një shoqëri e administruar nga hacker-a dhe do të funksiononte në një mënyrë nxitëse për hacker-at. Një synim tjetër që të vazhdohej kultura e laboratorit AI Lab [3]. Për fat të keq, Greenblatt-i nuk kish ndonjë përvojë në punë biznesi, ndaj të tjerë persona në grupin e makinave Lisp thanë se dyshonin se mund t’ia dilte mbanë. Qenë të mendimit se plani i tij për të shmangur investime nga jashtë grupit s’kish për të funksionuar.
Pse donte të shmangte investimet nga jashtë? Ngaqë kur një shoqëri ka investitorë jashtë vetes, këta shtien në dorë kontrollin dhe nuk ju lënë më të keni skrupuj. Dhe në fund, po patët skrupuj, ju heqin nga drejtimi.
Ndaj Greenblatt-i pati idenë të gjente klientë që do të parapaguanin blerjen e pjesëve. Të montonin makinat dhe t’i shpërndanin te porositësit; me fitimin prej pjesëve, do të ishin në gjendje të blinin pjesë për ndoca makina të tjera, t’i shisnin këto dhe mandej të blinin pjesë për një numër më të madh makinash, e me radhë. Personat e tjerë në grup qenë të mendimit që kjo do të funksiononte.
Greenblatt-i mandej mori në punë Russell Noftsker-in, njeriun që më pat punësuar mua, që më pas e pat lënë laboratorin AI Lab dhe kish krijuar një shoqëri të suksesshme. Russell-i besohej se kish nuhatje për biznes. E shfaqi këtë nuhatje për biznes duke u thënë personave të tjerë të grupit, “Le ta heqim qafe Greenblatt-in, bashkë me idetë e tij dhe do të ngremë një tjetër shoqëri”. Thikë pas shpine, biznesmen i vërtet sa më s’bëhet. Këta persona vendosën të krijonin një shoqëri të quajtur Symbolics. Me investime nga jashtë, pa skrupuj dhe të gatshëm për gjithçka për fitoren.
Por Greenblatt-i nuk u dorëzua. Ai dhe ata pak besnikë të tij vendosën të krijonin Lisp Machines Inc. sido që të ndodhte dhe të ecnin para me planet e tyre. Dhe siç e dini, ia dolën mbanë! Gjetën klientin e parë dhe patën parapagim. Montuan makina dhe i shitën, pastaj krijuan më shumë makina dhe prapë të tjera. Ia dolën mbanë, edhe pse nuk patën ndihmën e shumicës së personave të grupit. Edhe Symbolics pati fillim të suksesshëm, pra kishit dy shoqëri konkurruese makinash Lisp. Kur Symbolics pa që LMI nuk do të shkërmoqej, filluan të kërkonin për mënyra se si ta shkatërronin.
Kështu që, në laboratorin tonë, braktisja u pasua nga “lufta”. Braktisja erdhi kur Symbolics punësoi krejt hacker-at, hiq mua dhe ndoca që punonin me kohë të pjesshme te LMI. Mandej nxorën nga pluhuri një rregullore dhe hoqën qafe personat që punonin me kohë të pjesshme për MIT-in, kështu që iu desh të iknin plotësisht dhe prej kësaj mbeta vetëm unë. Laboratori AI tani qe i pashpresë. Dhe MIT-i kish bërë një ujdi shumë të marrë me këto dy shoqëritë. Qe një kontratë trikahëshe ku secila shoqëri lejonte përdorimin e kodit burim të sistemit të makinave Lisp. Këto shoqëri qenë të detyruara të lejonin MIT-in të përdorte ndryshimet e bëra prej tyre. Por në kontratë nuk thuhej se MIT-i gëzonte të drejtën t’i hidhte ato në sistemet e makinave Lisp të MIT-it që qenë licencuar nga të dyja shoqëritë. Askush nuk pati çuar në mendje që grupi i hacker-ave të laboratorit AI do të avullonte, por ja që ndodhi.
Kështu që Symbolics hartoi një plan [4]. I thanë laboratorit “Do të vazhdojmë t’ju lejojmë përdorimin e ndryshimeve tona, por nuk mund t’i hidhni në sistemin MIT të makinave Lisp. Në vend të kësaj, do t’ju lejojmë hyrje në sistemin e makinave Lisp të Symbolics-it dhe mund ta xhironi, por kjo është e gjitha çka mund të bëni”.
Kjo, praktikisht, do të thoshte që na kërkuan të zgjidhnim me kë palë do të ishim dhe të përdornim ose versionin MIT të sistemit, ose versionin Symbolics. Cilëndo zgjedhje të bënim, do të përcaktonte se te cili sistem do të shkonin përmirësimet tona. Po të punonin me dhe të përmirësonin versionin e Symbolics-it, do të përkrahnim vetëm Symbolics-in. Po të përdornim dhe përmirësonim versionin MIT të sistemit, i binte ta jepnim punën te të dyja shoqëritë, por Symbolics pa që do të mbështesnim LMI-në, ngaqë do ta ndihmonim të ekzistonte. Kështu që s’na u lejua më të qëndronim asnjanës.
Deri në atë pikë, nuk kisha mbajtur anën e asnjërës shoqëri, edhe pse ndihesha keq kur shihja se ç’i ndodhi bashkësisë sonë dhe software-it. Por tashmë, Symbolics-i e kish bërë të detyruar këtë gjë. Dhe kështu, në një përpjekje për ta mbajtur gjallë Lisp Machines Inc. [5] - zura të riprodhoj krejt përmirësimet që Symbolics kish bërë te sistemi i makinës Lisp. I shkrova vetë nga e para përmirësimet e njëvlershme (dmth, kodi qe i imi).
Pas ca kohësh [6], mbërrita në përfundimin që e mira e të mirave do të ishte të mos shihja fare në kodin e tyre. Kur njoftonin paraprakisht për ndonjë version beta, që shoqërohej me shënime versioni, mund të shihja ç’qenë veçoritë e reja dhe mandej t’i sendërtoja. Në kohën që hidhnin faktikisht në qarkullim diçka, po atë bëja edhe unë.
Në këtë mënyrë, për dy vite, ua pengova ta fshinin nga faqja e dheut Lisp Machines Incorporated dhe të dy shoqëritë bënë përpara. Por nuk doja të shpenzoja vite të tëra duke ndëshkuar dikë, thjesht duke i vënë gjoksin një akti të lig. Kuptova që qenë ndëshkuar paq, ngaqë kishin ngecur në rrjetën e konkurrencës, e cila nuk do të largohej apo tretej [7]. Ndërkohë, kish ardhur koha të fillohej ndërtimi i një bashkësie të re, për të zëvendësuar atë që e zhdukën veprimet e tyre dhe të tjera.
Bashkësia Lisp në vitet ’70 nuk kufizohej te MIT AI Lab dhe hacker-at s’qenë vetëm në MIT. Lufta e nisur nga Symbolics qe ajo që asgjësoi MIT-in, por ndodhën dhe ngjarje të tjera. Pati persona që hoqën dorë nga bashkëpunimi dhe kjo i vuri shkelmin bashkësisë dhe kështu nuk mbeti kushedi çë.
Pasi reshta së ndëshkuari Symbolics-in, m’u desh të gjeja se ç’të bëja më tej. Duhej të bëja një sistem operativ të lirë, që të qe i kthjellët - e vetmja mënyrë që njerëzit të mund të punonin tok dhe të shkëmbenin qe përmes një sistemi operativ të lirë.
Fillimisht, pata në mendje të bëja një sistem të bazuar në Lisp, por e kuptova që nuk do të ishte ide e mirë teknikisht. Për të pasur diçka të ngjashme me një sistem makine Lisp, ju duhet mikrokod për qëllime speciale. Ky qe ai që bënte të mundur xhirim po aq të shpejtë sa xhironin kompjuterët e tjerë programet e tyre dhe prapë të kish përparësinë e kontrollit mbi llojin e të dhënave. Pa këtë, do të përfundonit në diçka të ngjashme me një përpilues Lisp për makina të tjera. Programet do të bëheshin më të shpejta, por të paqëndrueshme. Me këtë nuk ka problem, nëse po xhironi një program në një sistem me ndarje kohe - nëse vithiset një program, nuk u bë hataja, është diçka që ndodh te programet, me raste. Por kjo nuk e bënte të mirë për shkrimin e një sistemi operativ, ndaj e hodha poshtë idenë e krijimit të një sistemi si një makinë Lisp.
Vendosa më mirë të bëja një sistem operativ të ngjashëm me Unix-in, i cili do të kishte sendërtime Lisp që do të xhironin si programe përdoruesi. Kerneli nuk do të shkruhej në Lisp, por do të kishim Lisp. Dhe hartimi i këtij sistemi operativ, sistemit operativ GNU, qe ai që më shpuri te shkrimi i GNU Emacs-it. Duke bërë kështu, synoja të kryeja minimumin absolut të mundshëm të sendërtimeve Lisp. Madhësia e programeve qe shqetësim shumë i madh.
Kish njerëz në ato kohë, më 1985, që kishin makina me 1Mb kujtesë, pa kujtesë virtuale. Këta donin të ishin në gjendje të përdornin GNU Emacs. Kjo do të thoshte ta mbaja programin sa më të vogël që mundej.
Për shembull, në atë kohë e vetmja strukturë ripërsëritëse qe
while
, e cila qe fare e thjeshtë. Nuk kish mënyrë për të dalë
nga deklarimi while
, ju duhej të kryenit “a catch and a throw”,
ose të testonit ndryshoren që xhironte ripërsëritjen. Kjo tregon se sa larg
isha shtyrë për t’i mbajtur gjërat të vogla. Nuk kishte
automjeet
dhe as atomjet
dhe me radhë; “ngjeshe sa
të mundet” qe fryma e GNU Emacs-it, fryma e Lisp-it për Emacs, që në fillim.
E qartë që sot makinat janë më të mëdha dhe nuk veprojmë më kështu. Vëmë
edhe automjeet
, edhe atomjet
dhe me radhë dhe sot
mundemi të vendosim edhe strukturë tjetër ripërsëritëse. Duam ta zgjerojmë
diçka, por s’duam ta zgjerojmë deri në shkallën e një Lisp-i të
zakonshëm. Njëherë, sendërtova Common Lisp në makinën Lisp dhe nuk më kënaqi
kushedi. Diçka që nuk më pëlqen dhe aq shumë janë argumentet fjalëkyçe
[8]. Nuk më duken edhe aq të stilit Lisp; Do
t’i ndërroj ndonjë ditë, por minimizoj kohët kur bëj kështu.
Ky nuk qe fundi i projekteve GNU që kishin të bënin me Lisp-in. Më vonë, diku aty nga 1995, po shihnim mundësinë e fillimit të një projekti për një desktop grafik. Qe e qartë që, për programet në desktop, donim një gjuhë programimi me të cilën të shkruanim shumë dhe të qe lehtësisht e zgjerueshme, njësoj si përpunuesi. Çështja qe se cila duhej zgjedhur.
Në atë kohë, TCL po reklamohej rëndshëm për këtë qëllim. Kisha vlerësim shumë të ulët për TCL-në, pikësëpari ngaqë s’qe Lisp. Ngjante pakëz me Lisp-in, por semantikisht s’qe e tillë dhe nuk është aq e qëruar. Mandej dikush më tregoi një lajmërim me të cilin Sun-i po përpiqej të punësonte dikë për t’u marrë me TCL-në për ta bërë “de-facto gjuhën standard për zgjerime” në botë. Dhe mendova, “Duhet ta ndalim përmbushjen e kësaj”. Kështu filluam të ndërtojmë Scheme-n, gjuha standard e zgjerimeve për GNU-në. Jo Common Lisp, ngaqë ky qe shumë i madh. Ideja qe të kishim një interpretues Scheme të hartuar për t’u lidhur te aplikacionet në të njëjtën mënyrë si lidhej TCL-ja te aplikacionet. Mandej këtë ta këshillonim si paketën e parapëlqyer për zgjerime për krejt programet GNU.
Ka një përfitim interesant që ju vjen nga përdorimi si gjuhë tuajën parësore për zgjerime i një gjuhe kaq të fuqishme siç do të ishte një version Lisp-i. Mund të sendërtoni gjuhë të tjera, përmes përkthimit të tyre në gjuhën tuaj parësore. Nëse gjuha juaj parësore është TCL-ja, nuk sendërtoni dot lehtë Lisp-in duke e përkthyer në TCL. Por nëse gjuha juaj parësore është Lisp-i, s’është aq e zorshme të sendërtohen gjëra të tjera duke i përkthyer ato. Ideja jonë qe që, nëse çdo aplikacion i zgjerueshëm mbulonte Scheme-n, mund të shkruanit në Scheme një sendërtim të TCL-së, ose Python-it, ose Perl-it, i cili ta përkthente atë program në Scheme. Mandej mund ta ngarkonit këtë në çfarëdo aplikacioni dhe ta përshtatnit në gjuhën tuaj të parapëlqyer dhe do të funksiononte edhe me përshtatje të tjera.
Për sa kohë që gjuhët e zgjerimeve janë të dobëta, përdoruesit i mbetet të përdorë vetëm gjuhën që i jepni. Që do të thotë se njerëzve që dashurojnë cilëndo gjuhë tjetër iu duhet të konkurrojnë për të qenë ajo zgjedhja e hartuesve të aplikacioneve - duke thënë “Ju lutemi, hartues i aplikacionit, vendoseni dhe gjuhën time te aplikacioni juaj, jo gjuhën e atij”. Kështu përdoruesve nuk u lihet shteg zgjedhje fare - cilido aplikacion që përdorin, vjen me një gjuhë dhe ngecin në të [atë gjuhë]. Por kur keni një gjuhë të fuqishme që mund të sendërtojë të tjerat përmes përkthimit të tyre në të, i jepni kështu përdoruesit një mundësi zgjedhje gjuhe dhe nuk ka pse të bëjmë më luftë gjuhësh. Kjo është ajo që shpresojmë të bëjë “Guile”, interpretuesi ynë Scheme. Kishim dikë që punoi verën e shkuar për të përfunduar një përkthyes nga Python në Scheme. Nuk e di nëse ka përfunduar krejtësisht, por cilido që interesohet për këtë projekt, ju lutemi, le të lidhet me ta. Pra ky është plani që kemi për të ardhmen.
S’kam folur për software-in e lirë, por më lejoni shkurt t’ju tregoj paksa se çfarë don të thotë. Software i lirë nuk nënkupton çmimin; nuk do të thotë që e merrni falas. (Mundet edhe të paguani për një kopje, ose të siguroni një kopje falas.) Don të thotë që keni liri, si përdorues. Gjëja kyçe është fakti që jeni i lirë ta xhironi programin, i lirë të studioni se çfarë kryen, i lirë ta ndryshoni që të përputhet me nevojat tuaja, i lirë të rishpërndani kopje për të tjerët dhe i lirë për të bërë publike versione të ndryshuara, të zgjeruara. Ky është kuptimi i software-it të lirë. Nëse përdorni programe jo të lira, keni humbur liri kyçe, ndaj mos e bëni kurrë.
Qëllimi i projektit GNU është t’ua bëjë më të lehtë njerëzve kundërshtimin e software-it jo të lirë, i cili shtyp lirinë, e sundon përdoruesin, duke u ofruar atyre software të lirë për zëvendësim. Për ata që nuk kanë kurajë morale të hedhin tej software-in jo të lirë, kur kjo sjell ca minuse në leverdinë praktike, ajo që përpiqemi të bëjmë është dhënia e alternativave të lira, që kështu të mund të shkoni drejt lirisë me më pak belara dhe me më pak sakrifica, për sa i takon anës praktike. Sa më pak sakrifica, aq më mirë. Duam t’ua bëjmë më të lehtë kalimin në liri, në bashkëpunim.
Këtu bëhet fjalë për lirinë për të bashkëpunuar. Jemi mësuar t’i mendojmë lirinë dhe bashkëpunimin me shoqërinë si të jenë të kundërta. Por këtu janë në të njëjtin krah. Me software-in e lirë jeni i lirë të bashkëpunoni me të tjerët, si dhe i lirë të ndihmoni vetveten. Me software-in jo të lirë, dikush ju sundon dhe i mban njerëzit të përçarë. Nuk ju lejojnë të ndani gjëra mes jush, nuk jeni i lirë të bashkëpunoni ose të ndihmoni shoqërinë, dhe as të ndihmoni vetveten. Të përçarë dhe të pashpresë është gjendja e përdoruesve që përdorin software jo të lirë.
Kemi prodhuar një segment marramendës software-i të lirë. Kemi bërë ato që njerëzit thoshin se nuk do t’ia dilnim t’i bënim kurrë; kemi dy sisteme operativë software-i të lirë. Kemi mjaft aplikacione dhe, kuptohet, kemi ende plot rrugë për të bërë. Ndaj na duhet ndihma juaj. Do të doja t’ju kërkoja të merrni pjesë si vullnetar në projektin GNU; na ndihmoni që të hartojmë software të lirë për më shumë punë. Hidhini një sy gnu.org/help për të pasur një ide se si mund të ndihmohet. Nëse dëshironi të porosisni gjëra, ka një lidhje për këtë punë, te faqja hyrëse. Nëse doni të lexoni rreth çështjesh filozofike, shihni te ndarja /filozofi. Nëse po kërkoni software të lirë që mund ta përdorni, shihni te /directory, ku sot radhiten gati 1900 paketa (çka është vetëm një pjesë e software-it të lirë). Ju lutemi, na shkruani më tepër dhe kontribuoni për ne. Libri im me sprova, “Free Software and Free Society”, gjendet në shitje dhe mund të blihet te www.gnu.org [9]. Happy hacking!
Poshtëshënime
- Guy Steele hartoi grupin origjinal të komandave simetrike Emacs; mandej ai dhe unë zumë të vinim në jetë Emacs-in (përsipër TECO-s), por pas një sesioni të gjatë programimi të përbashkët, Steele-i zuri të rrëshqiste tej, kështu që Emacs-in e përfundova unë. Të tjerë, përfshi veçanërisht Eugene C. Cicciarelli-n dhe Mike McMahon-in, dhanë ndihmesë thelbësore më vonë.
- Bernie Greenberg thotë se sendërtimi i Dan Weinreb-it për Emacs në Lisp Machine kish dal para sendërtimit të Greenberg-ut për Multics. Kërkoj ndjesë për gabimin.
- Plani i Greenblatt-it, si e kuptoja unë, qe të punësoheshin me kohë të pjesshme njerëz të laboratorit, që kështu të mund të vazhdonin të punonin te AI Lab. Në vend të kësaj, Symbolics i punësoi me kohë të plotë, kështu që këta reshtën së punuari në MIT.
- Rrethanat e këtij plani, të cilat nuk i deklarova shprehimisht gjatë fjalës sime, qenë që gjatë një periudhe fillestare hacker-at e ish-AI-Lab-it, ata në Symbolics ose ata në LMI, vazhduan t’i jepnin ndryshimet e tyre te sistemi MIT Lisp Machine - edhe pse kontrata nuk e detyronte këtë hap. Plani i Symbolics-it qe ta thyente në mënyrë të njëanshme këtë bashkëpunim.
- Jo se më dhimbsej veçanërisht fati i LMI-ë, më tepër ngaqë s’doja që të lejohej Symbolics të përfitonte në kurriz të AI Lab-it me agresionin e vet.
- Ky pohim është keqkuptuar sikur thotë që unë kurrë nuk kam parë te kodi i
Symbolics-it. Në fakt pohon që kisha parë në të, fillimisht. Kodi burim
nga Symbolics qe i passhëm në MIT, ku më lejohej ta shihja dhe fillimisht
kjo qe rruga se nga i mora vesh ndryshimet e tyre.
Por kjo do të thoshte që duhej të bëja përpjekje shtesë për ta zgjidhur ndryshe çdo problem, me qëllim që të shmangja kopjimin e kodit të Symbolics-it. Pas ca kohësh, pashë se qe më mirë të mos shihje fare. Në këtë mënyrë mund të shkruaja kod sipas rrugës më të mirë, pa vrarë mendjen se ç’përmbante kodi i Symbolics-it.
- Symbolics në një rast protestoi te MIT se puna ime, duke u prishur planin, i kish kushtuar Symbolics-it një milion dollarë.
- Nuk e kam problem që një funksion shumë kompleks dhe i rëndë të përdorë argumente fjalëkyçe. Ajo që më bezdis është të bësh funksione të thjeshtë elementarë të tillë si “member” t’i përdorin ato.
- Më 2021, ly libër mund të blihet prej GNU Press.