summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/scrap1_2.html
blob: 379807f9f4448cae8666cd62c038fa1373f10c59 (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
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
<!-- This is the second edition of Free Software, Free Society: Selected Essays of Richard M. Stallman.

Free Software Foundation

51 Franklin Street, Fifth Floor

Boston, MA 02110-1335
Copyright C 2002, 2010 Free Software Foundation, Inc.
Verbatim copying and distribution of this entire book are permitted
worldwide, without royalty, in any medium, provided this notice is
preserved. Permission is granted to copy and distribute translations
of this book from the original English into another language provided
the translation has been approved by the Free Software Foundation and
the copyright notice and this permission notice are preserved on all
copies.

ISBN 978-0-9831592-0-9
Cover design by Rob Myers.

Cover photograph by Peter Hinely.
 -->


 <a name="The-GNU-Project">
 </a>
 <h1 class="chapter">
  2. The GNU Project
 </h1>
 <a name="index-GNU-Project-_0028see-also-GNU_0029">
 </a>
 <a name="index-GNU_002c-GNU-Project">
 </a>
 <a name="The-First-Software_002dSharing-Community">
 </a>
 <h3 class="subheading">
  The First Software-Sharing Community
 </h3>
 <a name="index-AI-_0028Artificial-Intelligence_0029-Lab_002c-MIT-_0028see-also-MIT_0029">
 </a>
 <p>
  When I started working at the MIT Artificial Intelligence Lab in 1971,
I became part of a software-sharing community that had existed for
many years. Sharing of software was not limited to our particular
community; it is as old as computers, just as sharing of recipes is as
old as cooking. But we did it more than most.
 </p>
 <p>
  The AI Lab used a timesharing operating system called
  <a name="index-ITS-_0028Incompatible-Timesharing-System_0029">
  </a>
  ITS (the
Incompatible Timesharing System) that the lab’s staff
  <a name="index-hackers">
  </a>
  hackers
  <a href="#FOOT2" name="DOCF2">
   (2)
  </a>
  had designed
and written in assembler language for the Digital PDP-10, one of the
large computers of the era. As a member of this community, an AI Lab
staff system hacker, my job was to improve this system.
 </p>
 <p>
  We did not call our software “free software,” because that
term did not yet exist; but that is what it was. Whenever people from
another university or a company wanted to port and use a program, we
gladly let them. If you saw someone using an unfamiliar and
interesting program, you could always ask to see the source code, so
that you could read it, change it, or cannibalize parts of it to make
a new program.
 </p>
 <a name="The-Collapse-of-the-Community">
 </a>
 <h3 class="subheading">
  The Collapse of the Community
 </h3>
 <p>
  The situation changed drastically in the early 1980s when Digital
discontinued the PDP-10 series. Its architecture,
elegant and powerful in the 60s, could not extend naturally to the
larger address spaces that were becoming feasible in the 80s. This
meant that nearly all of the programs composing ITS were
obsolete.
 </p>
 <p>
  The AI Lab hacker community had already collapsed, not long before.
In 1981, the spin-off company
  <a name="index-Symbolics">
  </a>
  Symbolics had hired away nearly all of
the hackers from the AI Lab, and the depopulated community was unable
to maintain itself.
  <a name="index-Levy_002c-Steven">
  </a>
  (The book
  <cite>
   Hackers,
  </cite>
  by Steve Levy, describes
these events, as well as giving a clear picture of this community in
its prime.) When the AI Lab bought a new PDP-10 in 1982, its administrators
decided to use Digital’s nonfree timesharing system instead of
  <a name="index-ITS-_0028Incompatible-Timesharing-System_0029-1">
  </a>
  ITS.
 </p>
 <p>
  The modern computers of the era, such as the
  <a name="index-VAX">
  </a>
  VAX or the
  <a name="index-68000_002dclass-hardware">
  </a>
  68020, had their own operating systems, but none of them were free software: you
had to sign a
  <a name="index-nondisclosure-agreements">
  </a>
  nondisclosure agreement even to get an executable copy.
 </p>
 <p>
  This meant that the first step in using a computer was to promise not
to help your neighbor. A cooperating community was forbidden. The
rule made by the
  <a name="index-ownership_002c-and-damage-to-social-cohesion">
  </a>
  <a name="index-ownership_002c-and-users_0027-freedom">
  </a>
  owners of proprietary software was, “If you
share with your neighbor, you are a pirate. If you want any changes,
beg us to make them.”
 </p>
 <a name="index-citizen-values_002c-proprietary-software-and">
 </a>
 <p>
  The idea that the proprietary software social system—the system that
says you are not allowed to share or change software—is antisocial,
that it is unethical, that it is simply wrong, may come as a surprise
to some readers. But what else could we say about a system based on
dividing the public and keeping users helpless? Readers who find the
idea surprising may have taken the proprietary software social system as
a given, or judged it on the terms suggested by proprietary software
businesses. Software publishers have worked long and hard to convince
people that there is only one way to look at the issue.
 </p>
 <a name="index-_0060_0060piracy_002c_0027_0027-erroneous-use-of-term-1">
 </a>
 <p>
  When software publishers talk about “enforcing” their
“rights” or “stopping piracy,” what they
actually
  <em>
   say
  </em>
  is secondary. The real message of these statements is
in the unstated assumptions they take for granted, which the public is
asked to accept without examination. Let’s therefore examine them.
 </p>
 <p>
  One assumption is that software companies have an unquestionable natural
right to own software and thus have power over all its users. (If
this were a natural right, then no matter how much harm it does to the
public, we could not object.) Interestingly, the
  <a name="index-Constitution_002c-US">
  </a>
  US Constitution and
legal tradition reject this view; copyright is not a natural right,
but an artificial government-imposed monopoly that limits the users’
natural right to copy.
 </p>
 <p>
  Another unstated assumption is that the only important thing about
software is what jobs it allows you to do—that we computer users
should not care what kind of society we are allowed to have.
 </p>
 <p>
  A third assumption is that we would have no usable software (or would
never have a program to do this or that particular job) if we did not
offer a company power over the users of the program. This assumption
may have seemed plausible, before the free software movement
demonstrated that we can make plenty of useful software without
putting chains on it.
 </p>
 <p>
  If we decline to accept these assumptions, and judge these issues
based on ordinary commonsense morality while placing the users first,
we arrive at very different conclusions. Computer users should be
free to modify programs to fit their needs, and free to share
software, because helping other people is the basis of society.
 </p>
 <p>
  There is no room here for an extensive statement of the reasoning
behind this conclusion, so I refer the reader to the article “Why
Software Should Not Have Owners” (p. @refx{Why Free-pg}{).
 </p>
 <a name="A-Stark-Moral-Choice">
 </a>
 <h3 class="subheading">
  A Stark Moral Choice
 </h3>
 <p>
  With my community gone, to continue as before was impossible.
Instead, I faced a stark moral choice.
 </p>
 <p>
  The easy choice was to join the proprietary software world, signing
  <a name="index-nondisclosure-agreements-1">
  </a>
  nondisclosure agreements and promising not to help my fellow
  <a name="index-hackers-1">
  </a>
  hacker.
Most likely I would also be developing software that was released
under nondisclosure agreements, thus adding to the pressure on other
people to betray their fellows too.
 </p>
 <p>
  I could have made money this way, and perhaps amused myself writing
code. But I knew that at the end of my career, I would look back on
years of building walls to divide people, and feel I had spent my life
making the world a worse place.
 </p>
 <a name="index-MIT_002c-AI-_0028Artificial-Intelligence_0029-Lab">
 </a>
 <p>
  I had already experienced being on the receiving end of a
nondisclosure agreement, when someone refused to give me and
the MIT AI Lab the source code for the control program
for our printer. (The lack of certain features in this program made
use of the printer extremely frustrating.) So I could not tell myself
that nondisclosure agreements were innocent. I was very angry when he
refused to share with us; I could not turn around and do the same
thing to everyone else.
 </p>
 <p>
  Another choice, straightforward but unpleasant, was to leave the
computer field. That way my skills would not be misused, but they
would still be wasted. I would not be culpable for dividing and
restricting computer users, but it would happen nonetheless.
 </p>
 <a name="index-call-to-action_002c-contribute-to-GNU">
 </a>
 <p>
  So I looked for a way that a programmer could do something for the
good. I asked myself, was there a program or programs that I could
write, so as to make a community possible once again?
 </p>
 <a name="index-GNU-_0028see-also-both-software-and-GNU_0029">
 </a>
 <p>
  The answer was clear: what was needed first was an operating system.
That is the crucial software for starting to use a computer. With an
operating system, you can do many things; without one, you cannot run
the computer at all. With a free operating system, we could again
have a community of cooperating
  <a name="index-hackers-2">
  </a>
  hackers—and invite anyone to join.
And anyone would be able to use a computer without starting out by
conspiring to deprive his or her friends.
 </p>
 <a name="index-developers_002c-_0028see-also-programmers_0029">
 </a>
 <p>
  As an operating system developer, I had the right skills for this job.
So even though I could not take success for granted, I realized that I
was elected to do the job.
  <a name="index-Unix-compatibility_002c-reason-for">
  </a>
  I chose to make the system compatible with
Unix so that it would be portable, and so that Unix users could easily
switch to it. The name GNU was chosen, following a
  <a name="index-hackers-3">
  </a>
  hacker tradition, as
a recursive acronym for
  <a name="index-GNU_002c-acronym">
  </a>
  “GNU’s Not Unix.”
 </p>
 <a name="index-GNU_002c-operating-system-parts">
 </a>
 <p>
  An operating system does not mean just a kernel, barely enough to run
other programs. In the 1970s, every operating system worthy of the
name included command processors, assemblers, compilers, interpreters, 
debuggers, text editors, mailers, and much more.
  <a name="index-ITS-_0028Incompatible-Timesharing-System_0029-2">
  </a>
  ITS had them,
  <a name="index-Multics">
  </a>
  Multics had them,
  <a name="index-VMS">
  </a>
  VMS had them, and Unix had them. The GNU
operating system would include them too.
 </p>
 <p>
  Later I heard these words, attributed to
  <a name="index-Hillel-_0028the-Elder_0029">
  </a>
  Hillel:
  <a href="#FOOT3" name="DOCF3">
   (3)
  </a>
 </p>
 <blockquote class="smallquotation">
  <p>
   If I am not for myself, who will be for me?
   <br>
    If I am only for myself, what am I?
    <br>
     If not now, when?
     <br/>
    </br>
   </br>
  </p>
 </blockquote>
 <p>
  The decision to start the GNU Project was based on a similar spirit.
 </p>
 <a name="Free-as-in-Freedom">
 </a>
 <h3 class="subheading">
  Free as in Freedom
 </h3>
 <p>
  The term “free software” is sometimes misunderstood—it
has nothing to do with price. It is about freedom. Here, therefore,
is the definition of free software.
 </p>
 <p>
  A program is free software, for you, a particular user, if:
 </p>
 <ul>
  <li>
   You have the freedom to run the program as you wish, for any purpose.
  </li>
  <li>
   You have the freedom to modify the program to suit your needs. (To
make this freedom effective in practice, you must have access to the
source code, since making changes in a program without having the
source code is exceedingly difficult.)
  </li>
  <li>
   You have the freedom to redistribute copies, either gratis or for a
fee.
  </li>
  <li>
   <a name="index-copyleft_002c-modified-versions">
   </a>
   You have the freedom to distribute modified versions of the program,
so that the community can benefit from your improvements.
  </li>
 </ul>
 <a name="index-development_002c-fundraising">
 </a>
 <a name="index-selling_002c-free-software">
 </a>
 <p>
  Since “free” refers to freedom, not to price, there is no
contradiction between selling copies and free software. In fact, the
freedom to sell copies is crucial: collections of free software sold
on CD-ROMs are important for the community, and selling them is an
important way to raise funds for free software development.
Therefore, a program which people are not free to include on these
collections is not free software.
 </p>
 <a name="index-_0060_0060free-software_002c_0027_0027-unambiguous-translations-of">
 </a>
 <p>
  Because of the ambiguity of “free,” people have long
looked for alternatives, but no one has found a better term.
The English language has more words and nuances than any other, but it
lacks a simple, unambiguous, word that means “free,” as in
freedom—“unfettered” being the word that comes closest in
meaning. Such alternatives as “liberated,”
“freedom,” and “open” have either the wrong
meaning or some other disadvantage.
 </p>
 <a name="GNU-Software-and-the-GNU-System">
 </a>
 <h3 class="subheading">
  GNU Software and the GNU System
 </h3>
 <a name="index-GNU_002c-GNU-software_002c-as-distinguished-from-the-GNU-system">
 </a>
 <p>
  Developing a whole system is a very large project. To bring it into
reach, I decided to adapt and use existing pieces of free software
wherever that was possible. For example, I decided at the very
beginning to use
  <a name="index-TeX">
  </a>
  TeX as the principal text formatter; a few years
later, I decided to use the
  <a name="index-X-Window-System">
  </a>
  X Window System rather than writing
another window system for GNU.
 </p>
 <p>
  Because of this decision, the GNU system is not the same as the
collection of all
GNU software. The GNU system includes programs that are not GNU
software, programs that were developed by other people and projects
for their own purposes, but which we can use because they are free
software.
 </p>
 <a name="Commencing-the-Project">
 </a>
 <h3 class="subheading">
  Commencing the Project
 </h3>
 <a name="index-MIT_002c-AI-_0028Artificial-Intelligence_0029-Lab-1">
 </a>
 <a name="index-universities_002c-releasing-free-software-at">
 </a>
 <p>
  In January 1984 I quit my job at MIT and began writing GNU
software. Leaving MIT was necessary so that MIT would not be able to
interfere with distributing GNU as free software. If I had remained on
the staff, MIT could have claimed to own the work, and could have
imposed their own distribution terms, or even turned the work into a
proprietary software package. I had no intention of doing a large
amount of work only to see it become useless for its intended purpose:
creating a new software-sharing community.
 </p>
 <p>
  However, Professor
  <a name="index-Winston_002c-Patrick">
  </a>
  Winston, then the head of the MIT AI
Lab, kindly invited me to keep using the lab’s facilities.
 </p>
 <a name="The-First-Steps">
 </a>
 <h3 class="subheading">
  The First Steps
 </h3>
 <a name="index-Free-University-Compiler-Kit-_0028VUCK_0029">
 </a>
 <p>
  Shortly before beginning the GNU Project, I heard about the Free
University Compiler Kit, also known as VUCK. (The Dutch word for
“free” is written with a
  <em>
   v.
  </em>
  ) This was a compiler designed
to handle multiple languages, including 
C and
  <a name="index-Pascal">
  </a>
  Pascal, and to support
multiple target machines. I wrote to its author asking if GNU could
use it.
 </p>
 <a name="index-GNU_002c-operating-system-parts-1">
 </a>
 <p>
  He responded derisively, stating that the university was free but the
compiler was not. I therefore decided that my first program for the
GNU Project would be a multilanguage, multiplatform compiler.
 </p>
 <a name="index-Pastel_002c-compiler">
 </a>
 <p>
  Hoping to avoid the need to write the whole compiler myself, I
obtained the source code for the Pastel compiler, which was a
multiplatform compiler developed at
  <a name="index-Lawrence-Livermore-Lab">
  </a>
  Lawrence Livermore Lab. It
supported, and was written in, an extended version of Pascal, designed
to be a system-programming language. I added a
  <a name="index-C">
  </a>
  C front end, and began
porting it to the
  <a name="index-Motorola">
  </a>
  <a name="index-68000_002dclass-hardware-1">
  </a>
  Motorola 68000 computer. But I had to give that
up when I discovered that the compiler needed many megabytes of stack
space, while the available 68000 Unix system would only allow 64k.
 </p>
 <p>
  I then realized that the Pastel compiler functioned by parsing the
entire input file into a syntax tree, converting the whole syntax tree
into a chain of “instructions,” and then generating the
whole output file, without ever freeing any storage. At this point, I
concluded I would have to write a new compiler from scratch. That new
compiler is now known as
  <a name="index-GNU_002c-GCC">
  </a>
  GCC; none of the Pastel compiler is used in it,
but I managed to adapt and use the C front end that I had written.
But that was some years later; first, I worked on
  <a name="index-GNU_002c-GNU-Emacs">
  </a>
  <a name="index-Emacs_002c-GNU">
  </a>
  GNU Emacs.
 </p>
 <a name="GNU-Emacs">
 </a>
 <h3 class="subheading">
  GNU Emacs
 </h3>
 <p>
  I began work on GNU Emacs in September 1984, and in early 1985 it was
beginning to be usable. This enabled me to begin using Unix systems
to do editing; having no interest in learning to use
  <a name="index-vi">
  </a>
  vi or
  <a name="index-ed">
  </a>
  ed, I had done my editing on other kinds of machines until then.
 </p>
 <p>
  At this point, people began wanting to use GNU Emacs, which raised the
question of how to distribute it. Of course, I put it on the
anonymous ftp server on the MIT computer that I used. (This computer,
  <a name="index-prep_002eai_002emit_002eedu">
  </a>
  <code>
   prep.ai.mit.edu
  </code>
  , thus became the principal
  <a name="index-GNU_002c-GNU-ftp-distribution-site">
  </a>
  GNU ftp distribution site;
when it was decommissioned a few years later, we transferred the name
to our new ftp server.) But at that time, many of the interested
people were not on the Internet and could not get a copy by ftp. So
the question was, what would I say to them?
 </p>
 <a name="index-programmers_002c-income-for">
 </a>
 <p>
  I could have said, “Find a friend who is on the net and who will make
a copy for you.” Or I could have done what I did with the original
PDP-10 Emacs: tell them, “Mail me a tape and a SASE (self-addressed
stamped envelope), and I will mail it back with Emacs on it.” But I
had no job, and I was looking for ways to make money from free
software. So I announced that I would mail a tape to whoever wanted
one, for a fee of $150. In this way, I started a free software
distribution business, the precursor of the companies that today
distribute entire Linux-based GNU systems.
 </p>
 <a name="Is-a-Program-Free-for-Every-User_003f">
 </a>
 <h3 class="subheading">
  Is a Program Free for Every User?
 </h3>
 <a name="index-copyleft_002c-modified-versions-1">
 </a>
 <p>
  If a program is free software when it leaves the hands of its author,
this does not necessarily mean it will be free software for everyone
who has a copy of it. For example,
  <a name="index-public-domain-software-_0028see-also-software_0029">
  </a>
  public domain software (software
that is not copyrighted) is free software; but anyone can make a
proprietary modified version of it. Likewise, many free programs are
copyrighted but distributed under simple permissive licenses which
allow proprietary modified versions.
 </p>
 <a name="index-X-Window-System-1">
 </a>
 <a name="index-MIT_002c-X-Window-System-and">
 </a>
 <p>
  The paradigmatic example of this problem is the X Window System.
Developed at MIT, and released as free software with a
permissive license, it was soon adopted by various computer companies.
They added X to their proprietary Unix systems, in binary form only,
and covered by the same
  <a name="index-nondisclosure-agreements-2">
  </a>
  nondisclosure agreement. These copies of X
were no more free software than Unix was.
 </p>
 <a name="index-developers_002c-proprietary-software">
 </a>
 <a name="index-proprietary-software_002c-paradox-of-permissive-license">
 </a>
 <p>
  The developers of the X Window System did not consider this a
problem—they expected and intended this to happen. Their goal was
not freedom, just “success,” defined as “having many
users.” They did not care whether these users had freedom, only
about having many of them.
 </p>
 <p>
  This led to a paradoxical situation where two different ways of
counting the amount of freedom gave different answers to the question,
“Is this program free?” If you judged based on the freedom
provided by the distribution terms of the MIT release,
you would say that X was free software. But if you measured the
freedom of the average user of X, you would have to say it was
proprietary software. Most X users were running the proprietary
versions that came with Unix systems, not the free version.
 </p>
 <a name="Copyleft-and-the-GNU-GPL">
 </a>
 <h3 class="subheading">
  Copyleft and the GNU GPL
 </h3>
 <a name="index-GPL_002c-copyleft-and">
 </a>
 <a name="index-copyleft_002c-GPL-and">
 </a>
 <p>
  The goal of GNU was to give users freedom, not just to be popular. So
we needed to use distribution terms that would prevent GNU software
from being turned into proprietary software. The method we use is
called “copyleft.”
  <a href="#FOOT4" name="DOCF4">
   (4)
  </a>
 </p>
 <p>
  Copyleft uses copyright law, but flips it over to serve the opposite
of its usual purpose: instead of a means for restricting a program, it
becomes a means for keeping the program free.
 </p>
 <p>
  The central idea of copyleft is that we give everyone permission to
run the program, copy the program, modify the program, and distribute
modified versions—but not permission to add restrictions of their
own. Thus, the crucial freedoms that define “free
software” are guaranteed to everyone who has a copy; they become
inalienable rights.
 </p>
 <p>
  For an effective copyleft, modified versions must also be free. This
ensures that work based on ours becomes available to our community if
it is published. When programmers who have jobs as programmers
volunteer to improve GNU software, it is copyleft that prevents their
employers from saying, “You can’t share those changes, because
we are going to use them to make our proprietary version of the
program.”
  <a name="index-copyleft_002c-modified-versions-2">
  </a>
 </p>
 <p>
  The requirement that changes must be free is essential if we want to
ensure freedom for every user of the program. The companies that
privatized the X Window System usually made some changes to port it to
their systems and hardware. These changes were small compared with
the great extent of X, but they were not trivial. If making changes
were an excuse to deny the users freedom, it would be easy for anyone
to take advantage of the excuse.
  <a name="index-X-Window-System-2">
  </a>
 </p>
 <p>
  A related issue concerns combining a free program with nonfree code.
Such a combination would inevitably be nonfree; whichever freedoms
are lacking for the nonfree part would be lacking for the whole as
well. To permit such combinations would open a hole big enough to
sink a ship. Therefore, a crucial requirement for copyleft is to plug
this hole: anything added to or combined with a copylefted program
must be such that the larger combined version is also free and
copylefted.
 </p>
 <p>
  The specific implementation of copyleft that we use for most GNU
software is the
  <a name="index-GPL">
  </a>
  GNU General Public License, or GNU GPL for short. We
have other kinds of copyleft that are used in specific circumstances.
GNU manuals are copylefted also, but use a much simpler kind of
copyleft, because the complexity of the GNU GPL is not necessary
for manuals.
  <a href="#FOOT5" name="DOCF5">
   (5)
  </a>
  ) for documentation.
  <a name="index-copyleft_002c-GPL-and-1">
  </a>
  <a name="index-GPL_002c-copyleft-and-1">
  </a>
 </p>
 <a name="The-Free-Software-Foundation">
 </a>
 <h3 class="subheading">
  The Free Software Foundation
 </h3>
 <a name="index-Free-Software-Foundation-_0028FSF_0029-_0028see-also-FSF_0029">
 </a>
 <a name="index-development_002c-funding-for">
 </a>
 <p>
  As interest in using Emacs was growing, other people became involved
in the GNU Project, and we decided that it was time to seek funding
once again. So in 1985 we created the Free Software Foundation (FSF), a
tax-exempt charity for free software development. The
FSF also took over the
Emacs tape distribution business; later it extended this by adding
other free software (both GNU and non-GNU) to the tape, and by selling
free manuals as well.
 </p>
 <p>
  Most of the FSF’s income used to come from sales of copies of free
software and of other related services (CD-ROMs of source code,
CD-ROMs with binaries, nicely printed manuals, all with the freedom to
redistribute and modify), and
  <a name="index-Deluxe-Distributions_002c-FSF">
  </a>
  <a name="index-FSF_002c-Deluxe-Distributions">
  </a>
  <a name="index-FSF_002c-fundraising">
  </a>
  Deluxe Distributions (distributions for
which we built the whole collection of software for the customer’s
choice of platform). Today the FSF
still sells manuals and other
gear, but it gets the bulk of its funding from members’ dues. You
can join the FSF at
  <a href="http://fsf.org/join">
   http://fsf.org/join
  </a>
  .
 </p>
 <p>
  Free Software Foundation employees have written and maintained a
number of GNU software packages. Two notable ones are the
  <a name="index-C-library">
  </a>
  <a name="index-libraries-_0028comp_002e_0029_002c-C">
  </a>
  C library
and the shell. The
  <a name="index-GNU_002c-GNU-C-Library">
  </a>
  <a name="index-libraries-_0028comp_002e_0029_002c-GNU-C-Library-_0028see-also-GNU_0029">
  </a>
  GNU C library is what every program running on a
GNU/Linux system uses to communicate with Linux. It was developed by a
member of the Free Software Foundation staff,
  <a name="index-McGrath_002c-Roland">
  </a>
  Roland McGrath.
  <a name="index-GNU_002c-GNU-BASH-_0028Bourne-Again-Shell_0029">
  </a>
  <a name="index-BASH-_0028Bourne-Again-Shell_0029_002c-GNU">
  </a>
  The
shell used on most GNU/Linux systems is BASH, the Bourne Again
Shell,
  <a href="#FOOT6" name="DOCF6">
   (6)
  </a>
  which was developed by
FSF employee
  <a name="index-Fox_002c-Brian">
  </a>
  Brian Fox.
 </p>
 <p>
  We funded development of these programs because the GNU Project was
not just about tools or a development environment. Our goal was a
complete operating system, and these programs were needed for that
goal.
 </p>
 <a name="Free-Software-Support">
 </a>
 <h3 class="subheading">
  Free Software Support
 </h3>
 <p>
  The free software philosophy rejects a specific widespread business
practice, but it is not against business. When businesses respect the
users’ freedom, we wish them success.
 </p>
 <a name="index-programmers_002c-income-for-1">
 </a>
 <a name="index-selling_002c-free-software-1">
 </a>
 <p>
  Selling copies of Emacs demonstrates one kind of free software
business. When the FSF took over that business, I needed
another way to make a living. I found it in selling services relating
to the free software I had developed. This included teaching, for
subjects such as how to program GNU Emacs and how to
customize
  <a name="index-GNU_002c-GCC-1">
  </a>
  GCC, and software development, mostly
porting GCC to new platforms.
  <a name="index-GNU_002c-GNU-Emacs-1">
  </a>
  <a name="index-Emacs_002c-GNU-1">
  </a>
 </p>
 <p>
  Today each of these kinds of free software business is practiced by a
number of corporations. Some distribute free software collections on
CD-ROM; others sell support at levels ranging from answering user
questions, to fixing bugs, to adding major new features. We are even
beginning to see free software companies based on launching new free
software products.
 </p>
 <a name="index-_0060_0060open_002c_0027_0027-misleading-use-of-term">
 </a>
 <a name="index-traps_002c-_0060_0060open-source_0027_0027">
 </a>
 <a name="index-citizen-values_002c-convenience-v_002e">
 </a>
 <p>
  Watch out, though—a number of companies that associate themselves
with the term “open source” actually base their business
on nonfree software that works with free software. These are not
free software companies, they are proprietary software companies whose
products tempt users away from freedom. They call these programs
“value-added packages,” which shows the values they
would like us to adopt: convenience above freedom. If we value freedom
more, we should
  <a name="index-call-to-action_002c-use-correct-terminology-_0028see-also-terminology_0029-1">
  </a>
  call them “freedom-subtracted” packages.
  <a name="index-Free-Software-Foundation-_0028FSF_0029-_0028see-also-FSF_0029-1">
  </a>
  <a name="index-development_002c-funding-for-1">
  </a>
 </p>
 <a name="Technical-Goals">
 </a>
 <h3 class="subheading">
  Technical Goals
 </h3>
 <p>
  The principal goal of GNU is to be free software. Even if GNU had no
technical advantage over Unix, it would have a social advantage,
allowing users to cooperate, and an ethical advantage, respecting the
user’s freedom.
 </p>
 <p>
  But it was natural to apply the known standards of good practice to
the work—for example, dynamically allocating data structures to avoid
arbitrary fixed size limits, and handling all the possible 8-bit codes
wherever that made sense.
 </p>
 <p>
  In addition, we rejected the Unix focus on small memory size, by
deciding not to support 16-bit machines (it was clear that 32-bit
machines would be the norm by the time the GNU system was finished),
and to make no effort to reduce memory usage unless it exceeded a
megabyte. In programs for which handling very large files was not
crucial, we encouraged programmers to read an entire input file into
core, then scan its contents without having to worry about I/O.
 </p>
 <p>
  These decisions enabled many GNU programs to surpass their Unix
counterparts in reliability and speed.
 </p>
 <a name="Donated-Computers">
 </a>
 <h3 class="subheading">
  Donated Computers
 </h3>
 <a name="index-development_002c-contributions-and-donations">
 </a>
 <p>
  As the GNU Project’s reputation grew, people began offering to donate
machines running Unix to the project. These were very useful, because
the easiest way to develop components of GNU was to do it on a Unix
system, and replace the components of that system one by one. But
they raised an ethical issue: whether it was right for us to have a
copy of Unix at all.
 </p>
 <p>
  Unix was (and is) proprietary software, and the GNU Project’s
philosophy said that we should not use proprietary software. But,
applying the same reasoning that leads to the conclusion that violence
in self defense is justified, I concluded that it was legitimate to
use a proprietary package when that was crucial for developing a free
replacement that would help others stop using the proprietary package.
 </p>
 <p>
  But, even if this was a justifiable evil, it was still an evil. Today
we no longer have any copies of Unix, because we have replaced them
with free operating systems. If we could not replace a machine’s
operating system with a free one, we replaced the machine instead.
 </p>
 <a name="The-GNU-Task-List">
 </a>
 <h3 class="subheading">
  The GNU Task List
 </h3>
 <a name="index-GNU_002c-GNU-Task-List">
 </a>
 <p>
  As the GNU Project proceeded, and increasing numbers of system
components were found or developed, eventually it became useful to
make a list of the remaining gaps. We used it to recruit
  <a name="index-developers_002c-GNU-Project">
  </a>
  developers
to write the missing pieces. This list became known as the GNU Task
List. In addition to missing Unix components, we listed various
other useful software and documentation projects that, we thought, a
truly complete system ought to have.
 </p>
 <p>
  Today,
  <a href="#FOOT7" name="DOCF7">
   (7)
  </a>
  hardly any Unix components are left in the GNU Task List—those
jobs had been done, aside from a few inessential ones. But the list
is full of projects that some might call “applications.”
Any program that appeals to more than a narrow class of users would be
a useful thing to add to an operating system.
 </p>
 <a name="index-games_002c-Unix-compatibility-and">
 </a>
 <p>
  Even games are included in the task list—and have been since the
beginning.
  <a name="index-Unix-compatibility_002c-games-and">
  </a>
  Unix included games, so naturally GNU should too. But
compatibility was not an issue for games, so we did not follow the
list of games that Unix had. Instead, we listed a spectrum of
different kinds of games that users might like.
 </p>
 <a name="The-GNU-Library-GPL">
 </a>
 <h3 class="subheading">
  The GNU Library GPL
 </h3>
 <a name="index-LGPL_002c-GNU-C-library-and">
 </a>
 <a name="index-developers_002c-collaboration-between">
 </a>
 <p>
  The GNU C library uses a special kind of copyleft called the GNU
Library General Public License,
  <a href="#FOOT8" name="DOCF8">
   (8)
  </a>
  which gives permission to link
proprietary software with the library. Why make this exception?
 </p>
 <p>
  It is not a matter of principle; there is no principle that says
proprietary software products are entitled to include our code. (Why
contribute to a project predicated on refusing to share with us?)
Using the LGPL for the
  <a name="index-C-library-1">
  </a>
  <a name="index-libraries-_0028comp_002e_0029_002c-C-1">
  </a>
  C library, or for any library, is a matter of
strategy.
 </p>
 <a name="index-C-library-2">
 </a>
 <a name="index-libraries-_0028comp_002e_0029_002c-C-2">
 </a>
 <p>
  The C library does a generic job; every proprietary system or compiler
comes with a C library. Therefore, to make our C library available
only to free software would not have given free software any
advantage—it would only have discouraged use of our library.
 </p>
 <a name="index-GNU_002c-GNU-C-Library-1">
 </a>
 <a name="index-libraries-_0028comp_002e_0029_002c-GNU-C-Library-_0028see-also-GNU_0029-1">
 </a>
 <p>
  One system is an exception to this: on the GNU system (and this
includes GNU/Linux), the GNU C library is the only
  <a name="index-C-library-3">
  </a>
  <a name="index-libraries-_0028comp_002e_0029_002c-C-3">
  </a>
  C library. So the
distribution terms of the GNU C library determine whether it is
possible to compile a proprietary program for the GNU system. 
There is no ethical reason to allow proprietary applications on the GNU
system, but strategically it seems that disallowing them would do more
to discourage use of the GNU system than to encourage development of
free applications. That is why using the Library GPL is a good
strategy for the C library.
 </p>
 <p>
  For other libraries, the strategic decision needs to be
considered on a case-by-case basis. When a library does a special job
that can help write certain kinds of programs, then releasing it under
the GPL, limiting it to free programs only, is a way of helping other
free software developers, giving them an advantage against proprietary
software.
 </p>
 <a name="index-GNU_002c-GNU-Readline">
 </a>
 <a name="index-Readline_002c-GNU-_0028see-also-libraries-_0028comp_002e_0029_002c-GNU_0029">
 </a>
 <a name="index-libraries-_0028comp_002e_0029_002c-GNU">
 </a>
 <a name="index-BASH-_0028Bourne-Again-Shell_0029_002c-GNU-1">
 </a>
 <a name="index-GNU_002c-GNU-BASH-_0028Bourne-Again-Shell_0029-1">
 </a>
 <p>
  Consider GNU Readline, a library that was developed to provide
command-line editing for BASH. Readline is
released under the ordinary
  <a name="index-GPL-1">
  </a>
  GNU GPL, not the Library GPL. This
probably does reduce the amount Readline is used, but that is no loss
for us. Meanwhile, at least one useful application has been made free
software specifically so it could use Readline, and that is a real
gain for the community.
 </p>
 <p>
  Proprietary software developers have the advantages money provides;
free software developers need to make advantages for each other. I
hope some day we will have a large collection of GPL-covered libraries
that have no parallel available to proprietary software, providing
useful modules to serve as building blocks in new free software, and
adding up to a major advantage for further free software development.
  <a name="index-developers_002c-collaboration-between-1">
  </a>
  <a name="index-LGPL_002c-GNU-C-library-and-1">
  </a>
 </p>
 <a name="Scratching-an-Itch_003f">
 </a>
 <h3 class="subheading">
  Scratching an Itch?
 </h3>
 <a name="index-developers_002c-incentive-for">
 </a>
 <a name="index-Raymond_002c-Eric">
 </a>
 <p>
  Eric Raymond
  <a href="#FOOT9" name="DOCF9">
   (9)
  </a>
  ).
 says that “Every good work of software
starts by scratching a developer’s personal itch.”
  <a href="#FOOT10" name="DOCF10">
   (10)
  </a>
  Maybe that happens sometimes, but many
essential pieces of
  <a name="index-GNU_002c-GNU-software-_0028see-also-software_0029">
  </a>
  GNU software were developed in order to have a
complete free operating system. They come from a vision and a plan,
not from impulse.
 </p>
 <a name="index-GNU_002c-GNU-C-Library-2">
 </a>
 <p>
  For example, we developed the GNU C library because a Unix-like system
needs a
  <a name="index-C-library-4">
  </a>
  <a name="index-libraries-_0028comp_002e_0029_002c-C-4">
  </a>
  C library, BASH
because a Unix-like system needs a shell, and
  <a name="index-GNU_002c-GNU-tar">
  </a>
  GNU tar because a
Unix-like system needs a tar program. The same is true for my own
programs—the
  <a name="index-GNU_002c-GNU-C-compiler-_0028see-also-GNU_002c-GCC_0029">
  </a>
  GNU C compiler,
  <a name="index-GNU_002c-GNU-Emacs-2">
  </a>
  <a name="index-Emacs_002c-GNU-2">
  </a>
  GNU Emacs,
  <a name="index-GNU_002c-GDB">
  </a>
  GDB and
  <a name="index-GNU_002c-GNU-Make">
  </a>
  GNU Make.
  <a name="index-GNU_002c-GNU-C-Library-3">
  </a>
 </p>
 <a name="index-BASH-_0028Bourne-Again-Shell_0029_002c-GNU-2">
 </a>
 <a name="index-GNU_002c-GNU-BASH-_0028Bourne-Again-Shell_0029-2">
 </a>
 <a name="index-GNU_002c-programs-developed-to-cope-with-specific-threats">
 </a>
 <p>
  Some GNU programs were developed to cope with specific threats to our
freedom. Thus, we developed
  <a name="index-gzip">
  </a>
  gzip to replace the
  <a name="index-Compress-program">
  </a>
  Compress program,
which had been lost to the community because of
the
  <a name="index-LZW-_0028Lempel_002dZiv_002dWelch_0029-data-compression-algorithm-_0028see-also-patents_0029">
  </a>
  LZW patents. We found 
people to develop
  <a name="index-LessTif-_0028see-also-Motif_0029">
  </a>
  LessTif, and more recently started
  <a name="index-GNOME-_0028GNU-Network-Object-Model-Environment_0029">
  </a>
  <a name="index-GNU_002c-GNOME-_0028GNU-Network-Object-Model-Environment_0029">
  </a>
  GNOME and
  <a name="index-GNU_002c-Harmony">
  </a>
  <a name="index-Harmony">
  </a>
  Harmony, to address the problems caused by certain proprietary
libraries (see below). We are developing the
  <a name="index-GNU_002c-GNU-Privacy-Guard-_0028GPG_0029">
  </a>
  <a name="index-GPG-_0028GNU-Privacy-Guard_0029">
  </a>
  <a name="index-Privacy-Guard-_0028GPG_0029_002c-GNU">
  </a>
  GNU Privacy Guard to
replace popular nonfree encryption software, because users should not
have to choose between privacy and freedom.
 </p>
 <p>
  Of course, the people writing these programs became interested in the
work, and many features were added to them by various people for the
sake of their own needs and interests. But that is not why the
programs exist.
 </p>
 <a name="Unexpected-Developments">
 </a>
 <h3 class="subheading">
  Unexpected Developments
 </h3>
 <p>
  At the beginning of the GNU Project, I imagined that we would develop
the whole GNU system, then release it as a whole. That is not how it
happened.
 </p>
 <a name="index-Unix-compatibility_002c-GNU-Project-development-and">
 </a>
 <p>
  Since each component of the GNU system was implemented on a Unix
system, each component could run on Unix systems long before a
complete GNU system existed. Some of these programs became popular,
and users began extending them and porting them—to the various
incompatible versions of Unix, and sometimes to other systems as well.
 </p>
 <p>
  The process made these programs much more powerful, and attracted both
funds and contributors to the GNU Project. But it probably also
delayed completion of a minimal working system by several years, as
  <a name="index-developers_002c-GNU-Project-1">
  </a>
  GNU developers’ time was put into maintaining these ports and adding
features to the existing components, rather than moving on to write
one missing component after another.
  <a name="index-Unix-compatibility_002c-GNU-Project-development-and-1">
  </a>
 </p>
 <a name="The-GNU-Hurd">
 </a>
 <h3 class="subheading">
  The GNU Hurd
 </h3>
 <a name="index-Hurd_002c-GNU">
 </a>
 <a name="index-kernel_002c-GNU-Hurd">
 </a>
 <a name="index-GNU_002c-GNU-Hurd">
 </a>
 <a name="index-Mach-microkernel">
 </a>
 <p>
  By 1990, the GNU system was almost complete; the only major missing
component was the kernel. We had decided to implement our kernel as a
collection of server processes running on top of Mach. Mach is a
microkernel developed at
  <a name="index-Carnegie-Mellon-University">
  </a>
  Carnegie Mellon University and then at the
  <a name="index-University-of-Utah">
  </a>
  University of Utah; the GNU Hurd is a collection of servers (i.e., a
herd of GNUs) that run on top of Mach, and do the
various jobs of the Unix kernel. The start of development was delayed
as we waited for Mach to be released as free software, as had been
promised.
 </p>
 <a name="index-GNU_002c-operating-system-parts-2">
 </a>
 <p>
  One reason for choosing this design was to avoid what seemed to be the
hardest part of the job: debugging a kernel program without a
source-level debugger to do it with. This part of the job had been
done already, in Mach, and we expected to debug the Hurd servers as
user programs, with
  <a name="index-GNU_002c-GDB-1">
  </a>
  GDB. But it took a long time to make that possible,
and the multithreaded servers that send messages to each other have
turned out to be very hard to debug. Making the Hurd work solidly has
stretched on for many years.
 </p>
 <a name="Alix">
 </a>
 <h3 class="subheading">
  Alix
 </h3>
 <a name="index-Hurd_002c-original-name-of">
 </a>
 <a name="index-Alix">
 </a>
 <p>
  The GNU kernel was not originally supposed to be called the Hurd. Its
original name was Alix—named after the woman who was my sweetheart at
the time. She, a Unix system administrator, had pointed out how her
name would fit a common naming pattern for Unix system versions; as a
joke, she told her friends, “Someone should name a kernel after
me.” I said nothing, but decided to surprise her with a kernel
named Alix.
 </p>
 <p>
  It did not stay that way.
  <a name="index-Bushnell_002c-Michael-_0028now-Thomas_0029">
  </a>
  Michael (now Thomas) Bushnell, the main
  <a name="index-developers_002c-_0028see-also-programmers_0029-1">
  </a>
  developer of the kernel, preferred the name Hurd, and redefined Alix
to refer to a certain part of the kernel—the part that would trap
system calls and handle them by sending messages to Hurd servers.
 </p>
 <p>
  Later, Alix and I broke up, and she changed her name;
independently, the Hurd design was changed so that the
  <a name="index-C-library-5">
  </a>
  <a name="index-libraries-_0028comp_002e_0029_002c-C-5">
  </a>
  C library would
send messages directly to servers, and this made the Alix component
disappear from the design.
 </p>
 <p>
  But before these things happened, a friend of hers came across the
name Alix in the Hurd source code, and mentioned it to her. So
she did have the chance to find a kernel named after her.
 </p>
 <a name="Linux-and-GNU_002fLinux">
 </a>
 <h3 class="subheading">
  Linux and GNU/Linux
 </h3>
 <p>
  The GNU Hurd is not suitable for production use, and we don’t know
if it ever will be. The capability-based design has problems that
result directly from the flexibility of the design, and it is not
clear solutions exist.
 </p>
 <p>
  Fortunately, another kernel is available.
  <a name="index-Unix-compatibility_002c-Linux-kernel-and">
  </a>
  In 1991,
  <a name="index-Torvalds_002c-Linus">
  </a>
  Linus Torvalds developed a
  <a name="index-Linux-kernel">
  </a>
  <a name="index-kernel_002c-Linux">
  </a>
  Unix-compatible kernel and called it Linux. In 1992, he made Linux
free software; combining Linux with the not-quite-complete
  <a name="index-GNU-_0028see-also-both-software-and-GNU_0029-1">
  </a>
  GNU system
resulted in a complete free operating system. (Combining them was a
substantial job in itself, of course.) It is due to Linux that we can
actually run a version of the GNU system today.
 </p>
 <p>
  We call this system version GNU/Linux, to express its composition as a
combination of the GNU system with Linux as the kernel.
  <a name="index-GNU_002c-GNU-Hurd-1">
  </a>
 </p>
 <a name="Challenges-in-Our-Future">
 </a>
 <h3 class="subheading">
  Challenges in Our Future
 </h3>
 <a name="index-call-to-action_002c-future-challenges">
 </a>
 <a name="index-citizen-values_002c-future-challenges-to">
 </a>
 <p>
  We have proved our ability to develop a broad spectrum of free
software. This does not mean we are invincible and unstoppable.
Several challenges make the future of free software uncertain; meeting
them will require steadfast effort and endurance, sometimes lasting
for years. It will require the kind of determination that people
display when they value their freedom and will not let anyone take it
away.
 </p>
 <p>
  The following four sections discuss these challenges.
 </p>
 <a name="Secret-Hardware">
 </a>
 <h3 class="subheading">
  Secret Hardware
 </h3>
 <p>
  Hardware manufacturers increasingly tend to keep hardware
specifications secret. This makes it difficult to write free drivers
so that Linux and
  <a name="index-XFree86">
  </a>
  XFree86 can support new hardware. We have complete
free systems today, but we will not have them tomorrow if we cannot
support tomorrow’s computers.
 </p>
 <p>
  There are two ways to cope with this problem. Programmers can do
reverse engineering to figure out how to support the hardware. The
rest of us can choose the hardware that is supported by free software;
as our numbers increase, secrecy of specifications will become a
self-defeating policy.
 </p>
 <p>
  Reverse engineering is a big job; will we have programmers with
sufficient determination to undertake it? Yes—if we have built up a
strong feeling that free software is a matter of principle, and
nonfree drivers are intolerable. And will large numbers of us spend
extra money, or even a little extra time, so we can use free drivers?
Yes, if the determination to have freedom is widespread.
 </p>
 <p>
  [2008 note: this issue extends to the BIOS as well.
There is a free BIOS, coreboot; the problem is getting specs
for machines so that coreboot can support them.]
 </p>
 <a name="Nonfree-Libraries">
 </a>
 <h3 class="subheading">
  Nonfree Libraries
 </h3>
 <a name="index-traps_002c-nonfree-libraries">
 </a>
 <a name="index-developers_002c-traps-for">
 </a>
 <p>
  A nonfree library that runs on free operating systems acts as a trap
for free software developers. The library’s attractive features are
the bait; if you use the library, you fall into the trap, because your
program cannot usefully be part of a free operating system. (Strictly
speaking, we could include your program, but it
won’t
  <em>
   run
  </em>
  with the library missing.) Even worse, if
a program that uses the proprietary library becomes popular, it can
lure other unsuspecting programmers into the trap.
 </p>
 <a name="index-Motif-_0028see-also-LessTif_0029">
 </a>
 <p>
  The first instance of this problem was the Motif toolkit, back in the
80s. Although there were as yet no free operating systems, it was
clear what problem Motif would cause for them later on. The GNU
Project responded in two ways: by asking individual free software
projects to support the free
  <a name="index-X-Toolkit">
  </a>
  X Toolkit widgets as well as Motif, and
by asking for someone to write a free replacement for Motif. The job
took many years;
  <a name="index-LessTif-_0028see-also-Motif_0029-1">
  </a>
  LessTif, developed by the
  <a name="index-Hungry-Programmers">
  </a>
  Hungry Programmers, became
powerful enough to support most Motif applications only in 1997.
 </p>
 <a name="index-Qt">
 </a>
 <a name="index-KDE">
 </a>
 <p>
  Between 1996 and 1998, another nonfree GUI toolkit library, called
Qt, was used in a substantial collection of free software, the desktop
KDE.
 </p>
 <p>
  Free GNU/Linux systems were unable to use KDE,
because we could not use the library. However, some commercial
distributors of GNU/Linux systems who were not strict about sticking
with free software added KDE to their
systems—producing a system with more capabilities, but less freedom.
The KDE group was actively encouraging more
programmers to use Qt, and millions of new “Linux users”
had never been exposed to the idea that there was a problem in this.
The situation appeared grim.
 </p>
 <a name="index-GNU_002c-GNOME-_0028GNU-Network-Object-Model-Environment_0029-1">
 </a>
 <a name="index-GNOME-_0028GNU-Network-Object-Model-Environment_0029-1">
 </a>
 <a name="index-GNU_002c-Harmony-1">
 </a>
 <a name="index-Harmony-1">
 </a>
 <p>
  The free software community responded to the problem in two ways:
GNOME and Harmony.
 </p>
 <a name="index-de-Icaza_002c-Miguel">
 </a>
 <a name="index-Red-Hat-Software">
 </a>
 <a name="index-C_002b_002b_002c-language">
 </a>
 <p>
  GNOME, the GNU Network Object Model Environment, is
GNU’s desktop project. Started in 1997 by Miguel de Icaza, and
developed with the support of Red Hat
Software, GNOME set out to provide similar desktop
facilities, but using free software exclusively. It has technical
advantages as well, such as supporting a variety of languages, not
just C++. But its main purpose was freedom: not to require the use of
any nonfree software.
 </p>
 <p>
  Harmony is a compatible replacement library, designed to make it
possible to run KDE software without using Qt.
 </p>
 <p>
  In November 1998, the developers of Qt announced a change of license
which, when carried out, should make Qt free software. There is no
way to be sure, but I think that this was partly due to the
community’s firm response to the problem that Qt posed when it was
nonfree. (The new license is inconvenient and inequitable, so it
remains desirable to avoid using Qt.)
 </p>
 <p>
  [Subsequent note: in September 2000, Qt was rereleased under the 
GNU GPL, which essentially solved this problem.]
 </p>
 <a name="index-citizen-values_002c-convenience-v_002e-1">
 </a>
 <p>
  How will we respond to the next tempting nonfree library? Will the
whole community understand the need to stay out of the trap? Or will
many of us give up freedom for convenience, and produce a major
problem? Our future depends on our philosophy.
 </p>
 <a name="Software-Patents">
 </a>
 <h3 class="subheading">
  Software Patents
 </h3>
 <a name="index-LZW-_0028Lempel_002dZiv_002dWelch_0029-data-compression-algorithm-_0028see-also-patents_0029-1">
 </a>
 <a name="index-patents">
 </a>
 <a name="index-patents_002c-LZW-data-compression-algorithm">
 </a>
 <p>
  The worst threat we face comes from software patents, which can put
algorithms and features off limits to free software for up to 20
years. The LZW compression algorithm patents were
applied for in 1983, and we still cannot release free software to
produce proper compressed
  <a name="index-GIF">
  </a>
  GIFs. [As of 2009 they have expired.] In 1998, a free program to produce
  <a name="index-MP3">
  </a>
  MP3 compressed audio was
removed from distribution under threat of a patent suit.
 </p>
 <p>
  There are ways to cope with patents: we can search for evidence that a
patent is invalid, and we can look for alternative ways to do a job.
But each of these methods works only sometimes; when both fail, a
patent may force all free software to lack some feature that users
want. What will we do when this happens?
 </p>
 <p>
  Those of us who value free software for freedom’s sake will stay with
free software anyway. We will manage to get work done without the
patented features. But those who value free software because they
expect it to be technically superior are likely to call it a failure
when a patent holds it back. Thus, while it is useful to talk about
the practical effectiveness of the “bazaar” model of
development, and the reliability and power of some free software,
we must not stop there. We must talk about freedom and principle.
 </p>
 <a name="Free-Documentation">
 </a>
 <h3 class="subheading">
  Free Documentation
 </h3>
 <a name="index-documentation-_0028see-also-both-FDL-and-manuals_0029">
 </a>
 <a name="index-manuals_002c-need-for">
 </a>
 <p>
  The biggest deficiency in our free operating systems is not in the
software—it is the lack of good free manuals that we can include in
our systems. Documentation is an essential part of any software
package; when an important free software package does not come with a
good free manual, that is a major gap. We have many such gaps today.
 </p>
 <p>
  Free documentation, like free software, is a matter of freedom, not
price. The criterion for a free manual is pretty much the same as for
free software: it is a matter of giving all users certain freedoms.
Redistribution (including commercial sale) must be permitted, online
and on paper, so that the manual can accompany every copy of the
program.
 </p>
 <p>
  Permission for modification is crucial too. As a general rule, I
don’t believe that it is essential for people to have permission to
modify all sorts of articles and books. For example, I don’t think
you or I are obliged to give permission to modify articles like this
one, which describe our actions and our views.
 </p>
 <p>
  But there is a particular reason why the freedom to modify is crucial
for documentation for free software. When people exercise their right
to modify the software, and add or change its features, if they are
conscientious they will change the manual, too—so they can
provide accurate and usable documentation with the modified program.
A nonfree manual, which does not allow programmers to be conscientious
and finish the job, does not fill our community’s needs.
 </p>
 <p>
  Some kinds of limits on how modifications are done pose no problem.
For example, requirements to preserve the original author’s copyright
notice, the distribution terms, or the list of authors, are OK. It is
also no problem to require modified versions to include notice that
they were modified, even to have entire sections that may not be
deleted or changed, as long as these sections deal with nontechnical
topics. These kinds of restrictions are not a problem because they
don’t stop the conscientious programmer from adapting the manual to
fit the modified program. In other words, they don’t block the free
software community from making full use of the manual.
 </p>
 <p>
  However, it must be possible to modify all the
  <em>
   technical
  </em>
  content of
the manual, and then distribute the result in all the usual media,
through all the usual channels; otherwise, the restrictions do
obstruct the community, the manual is not free, and we need another
manual.
 </p>
 <a name="index-developers_002c-manuals">
 </a>
 <p>
  Will free software developers have the awareness and determination to
produce a full spectrum of free manuals? Once again, our future
depends on philosophy.
 </p>
 <a name="index-documentation-_0028see-also-both-FDL-and-manuals_0029-1">
 </a>
 <a name="index-manuals_002c-need-for-1">
 </a>
 <a name="index-citizen-values_002c-future-challenges-to-1">
 </a>
 <a name="We-Must-Talk-about-Freedom">
 </a>
 <h3 class="subheading">
  We Must Talk about Freedom
 </h3>
 <a name="index-call-to-action_002c-talk-about-freedom">
 </a>
 <p>
  Estimates today are that there are ten million users of GNU/Linux
systems such as
  <a name="index-Debian-GNU_002fLinux">
  </a>
  Debian GNU/Linux and
  <a name="index-Red-Hat-Linux-_0028see-also-_0060_0060Linux_002c_0027_0027-erroneous-use-of-term_0029">
  </a>
  Red Hat “Linux.”
Free software has developed such practical advantages that users are
flocking to it for purely practical reasons.
 </p>
 <a name="index-commercial-use-and-development-1">
 </a>
 <p>
  The good consequences of this are evident: more interest in developing
free software, more customers for free software businesses, and more
ability to encourage companies to develop commercial free software
instead of proprietary software products.
 </p>
 <p>
  But interest in the software is growing faster than awareness of the
philosophy it is based on, and this leads to trouble. Our ability to
meet the challenges and threats described above depends on the will to
stand firm for freedom. To make sure our community has this will, we
need to spread the idea to the new users as they come into the
community.
 </p>
 <p>
  But we are failing to do so: the efforts to attract new users into our
community are far outstripping the efforts to teach them the civics of
our community. We need to do both, and we need to keep the two
efforts in balance.
 </p>
 <a name="g_t_0060_0060Open-Source_0027_0027">
 </a>
 <h3 class="subheading">
  “Open Source”
 </h3>
 <a name="index-_0060_0060open-source_002c_0027_0027-values-of">
 </a>
 <p>
  Teaching new users about freedom became more difficult in 1998, when a
part of the community decided to stop using the term “free
software” and say “open source software”
instead.
 </p>
 <p>
  Some who favored this term aimed to avoid the confusion of
“free” with “gratis”—a valid goal. Others,
however, aimed to set aside the spirit of principle that had motivated
the free software movement and the GNU Project, and to appeal instead
to executives and business users, many of whom hold an ideology that
places profit above freedom, above community, above principle. Thus,
the rhetoric of “open source” focuses on the potential to
make high-quality, powerful software, but shuns the ideas of freedom,
community, and principle.
 </p>
 <a name="index-_0060_0060Linux_002c_0027_0027-erroneous-use-of-term-_0028see-also-open-source_0029">
 </a>
 <p>
  The “Linux” magazines are a clear example of this—they
are filled with advertisements for proprietary software that works
with GNU/Linux. When the next
  <a name="index-Motif-_0028see-also-LessTif_0029-1">
  </a>
  Motif or
  <a name="index-Qt-1">
  </a>
  Qt appears, will these
magazines warn programmers to stay away from it, or will they run ads
for it?
 </p>
 <p>
  The support of business can contribute to the community in many ways;
all else being equal, it is useful. But winning their support by
speaking even less about freedom and principle can be disastrous; it
makes the previous imbalance between outreach and civics education
even worse.
 </p>
 <a name="index-citizen-values_002c-open-source-v_002e-free-software">
 </a>
 <a name="index-open-source_002c-essential-difference-between-free-software-and">
 </a>
 <a name="index-free-software_002c-essential-difference-between-open-source-and">
 </a>
 <p>
  “Free software” and “open source” describe the
same category of software, more or less, but say different things
about the software, and about values. The GNU Project continues to
use the term “free software,” to express the idea that
freedom, not just technology, is important.
  <a name="index-_0060_0060open-source_002c_0027_0027-values-of-1">
  </a>
 </p>
 <a name="Try_0021">
 </a>
 <h3 class="subheading">
  Try!
 </h3>
 <a name="index-Yoda">
 </a>
 <p>
  Yoda’s aphorism (“There is no ‘try’”) sounds
neat, but it doesn’t work for me. I have done most of my work while
anxious about whether I could do the job, and unsure that it would be
enough to achieve the goal if I did. But I tried anyway, because
there was no one but me between the enemy and my city. Surprising
myself, I have sometimes succeeded.
 </p>
 <p>
  Sometimes I failed; some of my cities have fallen. Then I found
another threatened city, and got ready for another battle. Over time,
I’ve learned to look for threats and put myself between them and my
city, calling on other
  <a name="index-hackers-4">
  </a>
  hackers to come and join me.
 </p>
 <p>
  Nowadays, often I’m not the only one. It is a relief and a joy when I
see a regiment of hackers digging in to hold the line, and I realize,
this city may survive—for now. But the dangers are greater each
year, and now Microsoft has explicitly targeted our community. We
can’t take the future of freedom for granted. Don’t take it for
granted! If you want to keep your freedom, you must be prepared to
defend it.
  <a name="index-call-to-action_002c-future-challenges-1">
  </a>
  <a name="index-GNU_002c-GNU-Project-1">
  </a>
  <a name="index-GNU-Project-_0028see-also-GNU_0029-1">
  </a>
 </p>
 <div class="footnote">
  <hr>
   <h3>
    Footnotes
   </h3>
   <h3>
    <a href="#DOCF2" name="FOOT2">
     (2)
    </a>
   </h3>
   <p>
    The use of
    <a name="index-_0060_0060hacker_002c_0027_0027-actual-meaning-of-term-_0028see-also-_0060_0060cracker_0027_0027_0029">
    </a>
    “hacker” to mean “security breaker” is a confusion on the part of
the mass media. We hackers refuse to recognize that meaning, and
continue using the word to mean someone who loves to program, someone
who enjoys playful cleverness, or the combination of the two. See my
article, “On Hacking,” at
    <a href="http://stallman.org/articles/on-hacking.html">
     http://stallman.org/articles/on-hacking.html
    </a>
    .
   </p>
   <h3>
    <a href="#DOCF3" name="FOOT3">
     (3)
    </a>
   </h3>
   <p>
    As an
Atheist, I don’t follow any religious leaders, but I sometimes find I
admire something one of them has said.
   </p>
   <h3>
    <a href="#DOCF4" name="FOOT4">
     (4)
    </a>
   </h3>
   <p>
    In 1984 or 1985,
    <a name="index-Hopkins_002c-Don">
    </a>
    Don Hopkins (a very
imaginative fellow) mailed me a letter. On the envelope he had written
several amusing sayings, including this one: “Copyleft—all rights
reversed.” I used the word “copyleft” to name the distribution
concept I was developing at the time.
   </p>
   <h3>
    <a href="#DOCF5" name="FOOT5">
     (5)
    </a>
   </h3>
   <p>
    We now use the
    <a name="index-FDL-_0028see-also-both-manuals-and-documentation_0029">
    </a>
    GNU Free
Documentation License (p. @refx{FDL-pg}{
   </p>
   <h3>
    <a href="#DOCF6" name="FOOT6">
     (6)
    </a>
   </h3>
   <p>
    “Bourne Again Shell” is a play on the name “Bourne
Shell,” which was the usual shell on Unix.
   </p>
   <h3>
    <a href="#DOCF7" name="FOOT7">
     (7)
    </a>
   </h3>
   <p>
    That was written in 1998. In 2009 we no longer maintain a long
task list. The community develops free software so fast that we can’t
even keep track of it all. Instead, we have a list of High Priority
Projects, a much shorter list of projects we really want to encourage
people to write.
   </p>
   <h3>
    <a href="#DOCF8" name="FOOT8">
     (8)
    </a>
   </h3>
   <p>
    This license is now called
the GNU Lesser General Public License, to avoid giving the idea that
all libraries ought to use it.
   </p>
   <h3>
    <a href="#DOCF9" name="FOOT9">
     (9)
    </a>
   </h3>
   <p>
    Eric Raymond is a prominent open source advocate; see “Why Open
Source Misses the Point” (p. @refx{OS Misses Point-pg}{
   </p>
   <h3>
    <a href="#DOCF10" name="FOOT10">
     (10)
    </a>
   </h3>
   <p>
    Eric S. Raymond,
    <cite>
     The Cathedral and the Bazaar: Musings on Linux and
Open Source by an Accidental Revolutionary,
    </cite>
    rev. ed. (Sebastopol,
Calif.: O’Reilly, 2001), p. 23.
   </p>
  </hr>
 </div>
 <hr size="2"/>