summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/sq/rms-lisp.html
blob: 49763d7c8f9dd409f6c1afcc33319d42e25a2651 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
<!--#set var="ENGLISH_PAGE" value="/gnu/rms-lisp.en.html" -->

<!--#include virtual="/server/header.sq.html" -->
<!-- Parent-Version: 1.77 -->

<!-- This file is automatically generated by GNUnited Nations! -->
<title>Përvoja Ime Me Lisp dhe Zhvillimi i GNU Emacs - Projekti GNU - Free Software
Foundation</title>

<!--#include virtual="/gnu/po/rms-lisp.translist" -->
<!--#include virtual="/server/banner.sq.html" -->
<h2>Përvoja ime me Lisp dhe Krijimi i GNU Emacs</h2>

<blockquote><p>(Transkriptim i Fjalës së Richard Stallman-it, 28 Tetor 2002, në
International Lisp Conference).</p></blockquote>

<p>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>

<p>Takimi im i 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 <abbr
title="Programmed Data Processor">PDP</abbr>-11. Qe makinë shumë e vogël
&mdash; kish a s’kish 8k kujtesë &mdash; 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ë
<em>software</em>, ai që kryente detyra të vërteta në sistem.</p>

<p>Zura të punoj për një sendërtim të njëmendtë Lisp me JonL White-in sapo
fillova të punoj në <abbr title="Massachusetts Institute of
Technology">MIT</abbr>. 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 &mdash; vërtet duhet të jetë penduar për atë ditë.</p>

<p>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 e para ndër gjëra të tilla, por sigurisht qe
përpunuesi i parë i tillë.</p>

<p>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 <em>software</em> 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ë.</p>

<p>Emacs-i origjinal s’përmbante Lisp. Gjuha e nivelit të ulët, gjuha e
painterpretueshme &mdash; qe PDP-10 Assembler. Interpretuesi që shkruam, në
fakt s’u shkrua për Emacs, u shkrua për <abbr title="Text Editor and
COrrector">TECO</abbr>. 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 &lsquo;5l&rsquo;, për
&lsquo;zhvendosu pesë rreshta&rsquo;, ose &lsquo;i&rsquo; 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.</p>

<p>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 &lt; &gt;. 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, <a
href="#foot-1">(1)</a> 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.</p>

<p>Filluam duke shtuar aftësi pak a shumë të sofistikuara, krejt me sintaksën
më të shpifur që mund të mendoni, dhe funksionoi &mdash; 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.</p>

<p>Ai që e zbuloi këtë <a href="#foot-2">(2)</a>, 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 në Lisp. Multics Emacs u shndërrua në sukses të madh
&mdash; 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 e 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.</p>

<p>Pra, Bernie pa që një aplikacion &mdash; një program që bën diçka të
dobishme për ju &mdash; 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 &mdash; në
fazën që është më e vështira &mdash; kur nuk besojnë se mund të programojnë,
derisa arrijnë në pikën që janë programues.</p>

<p>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 nuk kishin sendërtim të plotë funksional të
Lisp-it. Multics MacLisp kish një përpilues dhe një interpretues &mdash; qe
sistem Lisp i kompletuar &mdash; 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 &mdash; do të ishte shumë i ngadaltë, veçanërisht
riparaqitja, 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. 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.</p>

<p>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 &mdash; përdorim shtytëzash përpunuesi, futjeje teksti
drejtues, lexim dhe shkrim kartelash, rishfaqje në ekran të përmbajtjes së
një shtytëze, administrim dritaresh përpunuesi.</p>

<p>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 &mdash; 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ë &ldquo;duhet të na dërgoni krejt
përmirësimet që i bëni&rdquo; 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.</p>

<p>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 &mdash; 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.</p>

<p>Në atë kohë po punoja për sistemin GNU (një sistem operativ
<em>software</em> i lirë, i ngjashëm me Unix, që mjaft vetë gabimisht e
quajnë &ldquo;Linux&rdquo;).  Nuk kish përpunues Emacs, si <em>software</em>
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 nuk përmbante Lisp të vërtetë. Kish një
gjuhë programimi që njihej si &lsquo;mocklisp&rsquo;, që nga sintaksa duket
si Lisp, por që nuk 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.</p>

<p>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 <i>ad hoc</i> 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>

<p>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 &mdash; tani është
e mundur të xhirohet kod Lisp gjatë rishfaqjes. Çka vjen jo pak ndoresh.</p>

<p>Ky program i dytë Emacs qe &lsquo;<em>software</em> i lirë&rsquo; në
kuptimin modern të fjalës &mdash; 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 <em>software</em> të lirë &mdash; përvoja që pata, jeta
që bëja në MIT AI lab &mdash; 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.</p>

<p>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 <code>car</code>
i një targe, arrihej në përfundime pa kuptim dhe tek e fundit në vithisje.</p>

<p>Makina Lisp qe e zonja të përmbushte udhëzimet gati po aq shpejt sa makinat
e tjera, por çdo udhëzim &mdash; një udhëzim, të themi <code>automjet</code>
do të shkaktonte kontroll lloji të dhënash &mdash; kështu që, po të provonit
të kërkonit <code>automjet</code> 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.</p>

<p>Kish dy ide të ndryshme rreth se si mund të ishte shoqëria.  Greenblatt-i
donte të fillonte atë çka e quante shoqëri &ldquo;hacker&rdquo;-ësh. 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 <a href="#foot-3">(3)</a>.  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 që plani i tij për të shmangur investime nga jashtë
grupit nuk kish për të funksionuar.</p>

<p>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.</p>

<p>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.</p>

<p>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,
&ldquo;Le ta heqim qafe Greenblatt-in, bashkë me idetë e tij, dhe do të
ngremë një tjetër shoqëri.&rdquo; 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.</p>

<p>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.</p>

<p>Kështu që, në laboratorin tonë, braktisja u pasua nga &ldquo;lufta&rdquo;.
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.</p>

<p> Kështu që Symbolics hartoi një plan <a href="#foot-4">(4)</a>.  I thanë
laboratorit, &ldquo;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.&rdquo;</p>

<p>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.</p>

<p>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. <a href="#foot-5">(5)</a>
&mdash; 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).</p>

<p>Pas ca kohësh <a href="#foot-6">(6)</a>, 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ë.</p>

<p>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<a
href="#foot-7">(7)</a>. 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.</p>

<p>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 çë.</p>

<p>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 &mdash;
e vetmja mënyrë që njerëzit të mund të punonin tok dhe të shkëmbenin qe
përmes një sistemi operativ të lirë.</p>

<p>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 &mdash; 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.</p>

<p>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.</p>

<p>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>

<p>Për shembull, në atë kohë e vetmja strukturë ripërsëritëse qe
&lsquo;while&rsquo;, e cila qe fare e thjeshtë. Nuk kish mënyrë për të dalë
nga deklarimi &lsquo;while&rsquo;, 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
&lsquo;automjeet&rsquo; dhe as &lsquo;atomjet&rsquo; dhe me radhë;
&ldquo;ngjeshe sa të mundet&rdquo; qe fryma e GNU Emacs-it, fryma e Lisp-it
për Emacs, që në fillim.</p>

<p>E qartë që sot makinat janë më të mëdha, dhe nuk veprojmë më kështu. Vëmë
edhe &lsquo;automjeet&rsquo;, edhe &lsquo;atomjet&rsquo; dhe me radhë, dhe
sot mundemi të vendosim edhe strukturë tjetër ripërsëritëse. Duam ta
zgjerojmë diçka, por nuk 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 <a href="#foot-8">(8)</a>.  Nuk më duken edhe aq të stilit Lisp;
Do t’i ndërroj ndonjë ditë, por minimizoj kohët kur bëj kështu.</p>

<p>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.</p>

<p>Në atë kohë, <abbr title="Tool Command Language">TCL</abbr> 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ë &ldquo;de-facto gjuhën standard për zgjerime&rdquo; në botë. Dhe
mendova, &ldquo;Duhet ta ndalim përmbushjen e kësaj.&rdquo; 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.</p>

<p>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>

<p>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 &mdash; duke thënë &ldquo;Ju lutemi, hartues i
aplikacionit, vendoseni dhe gjuhën time te aplikacioni juaj, jo gjuhën e
atij.&rdquo; Kështu përdoruesve nuk u lihet shteg zgjedhje fare &mdash;
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ë &lsquo;Guile&rsquo;, 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.</p>

<p>S’kam folur për software-in e lirë, por më lejoni shkurt t’ju tregoj paksa
se çfarë don të thotë. <em>Software</em> 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ë.</p>

<p>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 <em>software</em> 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.</p>

<p>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 <em>software</em> jo të lirë.</p>

<p>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ë <em>software</em> të lirë për më shumë punë. Hidhini një sy <a
href="/help/">http://www.gnu.org/help</a> 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ës 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 me ne. Libri im me sprova, &ldquo;Free Software and Free
Society&rdquo;, gjendet në shitje dhe mund të blihet te <a
href="http://www.gnu.org/">www.gnu.org</a>. Happy hacking!</p>

<ol>
<li id="foot-1">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ë.</li>

<li id="foot-2">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.</li>

<li id="foot-3">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.</li>

<li id="foot-4">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 &mdash; 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.</li>

<li id="foot-5">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.</li>

<li id="foot-6">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.

<p>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.</p></li>

<li id="foot-7">Symbolics në një rast protestoi te MIT se puna ime, duke u prishur planin, i
kish kushtuar Symbolics-it një milion dollarë.</li>

<li id="foot-8">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 &ldquo;member&rdquo; t’i përdorin ato.</li>
</ol>

<div class="translators-notes">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't have notes.-->
  </div>
</div>

<!-- for id="content", starts in the include above -->
<!--#include virtual="/server/footer.sq.html" -->
<div id="footer">
<div class="unprintable">

<p>Ju lutemi, pyetjet dhe kërkesat e përgjithshme rreth FSF-së &amp; GNU-së
dërgojini te <a href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>.  Ka
gjithashtu <a href="/contact/">mënyra të tjera për t’u lidhur me</a>
FSF-në.  Njoftimet për lidhje të dëmtuara dhe ndreqje apo këshilla të tjera
mund të dërgohen te <a
href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>

<p>
<!-- TRANSLATORS: Ignore the original text in this paragraph,
        replace it with the translation of these two:

        We work hard and do our best to provide accurate, good quality
        translations.  However, we are not exempt from imperfection.
        Please send your comments and general suggestions in this regard
        to <a href="mailto:web-translators@gnu.org">

        &lt;web-translators@gnu.org&gt;</a>.</p>

        <p>For information on coordinating and submitting translations of
        our web pages, see <a
        href="/server/standards/README.translations.html">Translations
        README</a>. -->
Përpiqemi fort dhe bëjmë sa mundemi për të ofruar përkthime me cilësi të
mirë dhe të përpikta.  Megjithatë, nuk jemi të përjashtuar nga
papërsosmëritë. Ju lutemi, komentet dhe këshillat e përgjithshme lidhur me
këtë dërgojini te <a
href="mailto:web-translators@gnu.org">&lt;web-translators@gnu.org&gt;</a>.</p><p>Për
të dhëna mbi bashkërendimin dhe parashtrimin e përkthimeve të faqeve tona
web, shihni <a href="/server/standards/README.translations.html">README për
përkthimet</a>.</p>
</div>

<!-- Regarding copyright, in general, standalone pages (as opposed to
     files generated as part of manuals) on the GNU web server should
     be under CC BY-ND 4.0.  Please do NOT change or remove this
     without talking with the webmasters or licensing team first.
     Please make sure the copyright date is consistent with the
     document.  For web pages, it is ok to list just the latest year the
     document was modified, or published.
     
     If you wish to list earlier years, that is ok too.
     Either "2001, 2002, 2003" or "2001-2003" are ok for specifying
     years, as long as each year in the range is in fact a copyrightable
     year, i.e., a year in which the document was published (including
     being publicly visible on the web or in a revision control system).
     
     There is more detail about copyright years in the GNU Maintainers
     Information document, www.gnu.org/prep/maintain. -->
<p>Të drejta kopjimi &copy; 2003, 2007, 2013, 2014, 2020 Free Software
Foundation, Inc.</p>

<p>Kjo faqe mund të përdoret sipas një licence <a rel="license"
href="http://creativecommons.org/licenses/by-nd/4.0/">Creative Commons
Attribution-NoDerivatives 4.0 International License</a>.</p>

<!--#include virtual="/server/bottom-notes.sq.html" -->
<div class="translators-credits">

<!--TRANSLATORS: Use space (SPC) as msgstr if you don't want credits.-->
 </div>

<p class="unprintable"><!-- timestamp start -->
U përditësua më:

$Date: 2020/10/02 10:30:07 $

<!-- timestamp end -->
</p>
</div>
</div>
</body>
</html>