emacs / etc / THE-GNU-PROJECT

  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
  The GNU Project

   by Richard Stallman

   originally published in the book "Open Sources"

  The first software-sharing community

   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.

   The AI Lab used a timesharing operating system called ITS (the
   Incompatible Timesharing System) that the lab's staff hackers (1) 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.

   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.

   (1) The use of "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 and enjoys being clever about it."

  The collapse of the community

   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.

   The AI lab hacker community had already collapsed, not long before.  In
   1981, the spin-off company Symbolics had hired away nearly all of the
   hackers from the AI lab, and the depopulated community was unable to
   maintain itself.  (The book Hackers, 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 non-free timesharing system
   instead of ITS.

   The modern computers of the era, such as the VAX or the 68020, had
   their own operating systems, but none of them were free software: you
   had to sign a nondisclosure agreement even to get an executable copy.

   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 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."

   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 proprietary social system as 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.

   When software publishers talk about "enforcing" their "rights" or
   "stopping piracy", what they actually *say* is secondary.  The real
   message of these statements is in the unstated assumptions they take
   for granted; the public is supposed to accept them uncritically.  So
   let's examine them.

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

   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.

   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.

   If we decline to accept these assumptions, and judge these issues
   based on ordinary common-sense 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.

   There is no room here for an extensive statement of the reasoning
   behind this conclusion, so I refer the reader to the web page,
   <http://www.gnu.org/philosophy/why-free.html>.

  A stark moral choice.

   With my community gone, to continue as before was impossible.  Instead,
   I faced a stark moral choice.

   The easy choice was to join the proprietary software world, signing
   nondisclosure agreements and promising not to help my fellow 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.

   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.

   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.

   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.

   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?

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

   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.  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 hacker tradition, as
   a recursive acronym for "GNU's Not Unix."

   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.  ITS had them, Multics
   had them, VMS had them, and Unix had them.  The GNU operating system
   would include them too.

   Later I heard these words, attributed to Hillel (1):

   If I am not for myself, who will be for me?
   If I am only for myself, what am I?
   If not now, when?

   The decision to start the GNU project was based on a similar spirit.

   (1) As an Atheist, I don't follow any religious leaders, but I
   sometimes find I admire something one of them has said.

  Free as in freedom

   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: a program is free software, for you, a particular
   user, if:

     * You have the freedom to run the program, for any purpose.
     * 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.)
     * You have the freedom to redistribute copies, either gratis or for
       a fee.
     * You have the freedom to distribute modified versions of the
       program, so that the community can benefit from your improvements.

   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.

   Because of the ambiguity of "free", people have long looked for
   alternatives, but no one has found a suitable alternative.  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.

  GNU software and the GNU system

   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 TeX as the principal text formatter; a few years
   later, I decided to use the X Window System rather than writing
   another window system for GNU.

   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.

  Commencing the project

   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.

   However, Professor Winston, then the head of the MIT AI Lab, kindly
   invited me to keep using the lab's facilities.

  The first steps

   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 V.)  This was a compiler designed to handle
   multiple languages, including C and Pascal, and to support multiple
   target machines.  I wrote to its author asking if GNU could use it.

   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 multi-language, multi-platform compiler.

   Hoping to avoid the need to write the whole compiler myself, I
   obtained the source code for the Pastel compiler, which was a
   multi-platform compiler developed at Lawrence Livermore Lab.  It
   supported, and was written in, an extended version of Pascal, designed
   to be a system-programming language.  I added a C front end, and began
   porting it to the Motorola 68000 computer.  But I had to give that up
   when I discovered that the compiler needed many megabytes of stack
   space, and the available 68000 Unix system would only allow 64k.

   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 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 GNU Emacs.

  GNU Emacs

   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 vi or ed, I had done
   my editing on other kinds of machines until then.

   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,
   prep.ai.mit.edu, thus became the principal 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?

   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, 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.

  Is a program free for every user?

   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, 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.

   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 nondisclosure agreement.  These copies of X were no more
   free software than Unix was.

   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 that they should be
   numerous.

   This lead 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.

  Copyleft and the GNU GPL

   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".(1)

   Copyleft uses copyright law, but flips it over to serve the opposite
   of its usual purpose: instead of a means of privatizing software, it
   becomes a means of keeping software free.

   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.

   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."

   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 related issue concerns combining a free program with non-free code.
   Such a combination would inevitably be non-free; whichever freedoms
   are lacking for the non-free 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.

   The specific implementation of copyleft that we use for most GNU
   software is the 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.

   (1) In 1984 or 1985, 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.

  The Free Software Foundation

   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, 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.

   The FSF accepts donations, but most of its income has always come from
   sales--of copies of free software, and of other related services.
   Today it sells CD-ROMs of source code, CD-ROMs with binaries, nicely
   printed manuals (all with freedom to redistribute and modify), and
   Deluxe Distributions (where we build the whole collection of software
   for your choice of platform).

   Free Software Foundation employees have written and maintained a
   number of GNU software packages.  Two notable ones are the C library
   and the shell.  The 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, Roland McGrath.  The
   shell used on most GNU/Linux systems is BASH, the Bourne Again
   Shell(1), which was developed by FSF employee Brian Fox.

   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.

   (1) "Bourne again Shell" is a joke on the name ``Bourne Shell'', which
   was the usual shell on Unix.

  Free software support

   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.

   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 GCC, and software
   development, mostly porting GCC to new platforms.

   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.

   Watch out, though--a number of companies that associate themselves
   with the term "open source" actually base their business on non-free
   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 "value added", which
   reflects the values they would like us to adopt: convenience above
   freedom.  If we value freedom more, we should call them "freedom
   subtracted" products.

  Technical goals

   The principal goal of GNU was 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.

   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.

   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.

   These decisions enabled many GNU programs to surpass their Unix
   counterparts in reliability and speed.

  Donated computers

   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.

   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 free
   replacement that would help others stop using the proprietary package.

   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.

  The GNU Task List

   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 developers to
   write the missing pieces.  This list became known as the GNU task list.
   In addition to missing Unix components, we listed added various other
   useful software and documentation projects that, we thought, a truly
   complete system ought to have.

   Today, hardly any Unix components are left in the GNU task list--those
   jobs have 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.

   Even games are included in the task list--and have been since the
   beginning.  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.

  The GNU Library GPL

   The GNU C library uses a special kind of copyleft called the GNU
   Library General Public License, which gives permission to link
   proprietary software with the library.  Why make this exception?

   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 C library, or for any library, is a matter of
   strategy.

   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.

   One system is an exception to this: on the GNU system (and this
   includes GNU/Linux), the GNU C library is the only 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.  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.

   Consider GNU Readline, a library that was developed to provide
   command-line editing for BASH.  Readline is released under the ordinary
   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.

   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.

  Scratching an itch?

   Eric Raymond says that "Every good work of software starts by
   scratching a developer's personal itch."  Maybe that happens sometimes,
   but many essential pieces of GNU software were developed in order to
   have a complete free operating system.  They come from a vision and a
   plan, not from impulse.

   For example, we developed the GNU C library because a Unix-like system
   needs a C library, the Bourne-Again Shell (bash) because a Unix-like
   system needs a shell, and GNU tar because a Unix-like system needs a
   tar program.  The same is true for my own programs--the GNU C compiler,
   GNU Emacs, GDB and GNU Make.

   Some GNU programs were developed to cope with specific threats to our
   freedom.  Thus, we developed gzip to replace the Compress program,
   which had been lost to the community because of the LZW patents.  We
   found people to develop LessTif, and more recently started GNOME and
   Harmony, to address the problems caused by certain proprietary
   libraries (see below).  We are developing the GNU Privacy Guard to
   replace popular non-free encryption software, because users should not
   have to choose between privacy and freedom.

   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.

  Unexpected developments

   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.

   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.

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

  The GNU Hurd

   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 Carnegie Mellon University and then at the
   University of Utah; the GNU HURD is a collection of servers (or ``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.

   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 GDB.  But it took a long time to make that
   possible, and the multi-threaded 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.

  Alix

   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.

   It did not stay that way.  Michael Bushnell (now Thomas), the main
   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.

   Ultimately, Alix and I broke up, and she changed her name;
   independently, the HURD design was changed so that the C library would
   send messages directly to servers, and this made the Alix component
   disappear from the design.

   But before these things happened, a friend of hers came across the
   name Alix in the HURD source code, and mentioned the name to her.  So
   the name did its job.

  Linux and GNU/Linux

   The GNU Hurd is not ready for production use.  Fortunately, another
   kernel is available.  In 1991, Linus Torvalds developed a
   Unix-compatible kernel and called it Linux.  Around 1992, combining
   Linux with the not-quite-complete 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.

   We call this system version GNU/Linux, to express its composition as a
   combination of the GNU system with Linux as the kernel.

  Challenges in our future

   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.

   The following four sections discuss these challenges.

  Secret hardware

   Hardware manufacturers increasingly tend to keep hardware
   specifications secret.  This makes it difficult to write free drivers
   so that Linux and 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.

   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.

   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
   non-free 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.

  Non-free libraries

   A non-free 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 run 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.

   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 X toolkit widgets as well as Motif, and
   by asking for someone to write a free replacement for Motif.  The job
   took many years; LessTif, developed by the Hungry Programmers, became
   powerful enough to support most Motif applications only in 1997.

   Between 1996 and 1998, another non-free GUI toolkit library, called
   Qt, was used in a substantial collection of free software, the desktop
   KDE.

   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.

   The free software community responded to the problem in two ways:
   GNOME and Harmony.

   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 non-free software.

   Harmony is a compatible replacement library, designed to make it
   possible to run KDE software without using Qt.

   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 non-free.  (The
   new license is inconvenient and inequitable, so it remains desirable
   to avoid using Qt.)

   [Subsequent note: in September 2000, Qt was rereleased under the GNU
   GPL, which essentially solved this problem.]

   How will we respond to the next tempting non-free 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.

  Software patents

   The worst threat we face comes from software patents, which can put
   algorithms and features off limits to free software for up to twenty
   years.  The LZW compression algorithm patents were applied for in 1983,
   and we still cannot release free software to produce proper compressed
   GIFs.  In 1998, a free program to produce MP3 compressed audio was
   removed from distribution under threat of a patent suit.

   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?

   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 techically 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 "cathedral" model of development,
   and the reliability and power of some free software, we must not stop
   there.  We must talk about freedom and principle.

  Free documentation

   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.

   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, on-line
   and on paper, so that the manual can accompany every copy of the
   program.

   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.

   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 manual
   which does not allow programmers to be conscientious and finish the
   job, does not fill our community's needs.

   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.

   However, it must be possible to modify all the *technical* 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.

   Will free software developers have the awareness and determination to
   produce a full spectrum of free manuals? Once again, our future
   depends on philosophy.

  We must talk about freedom

   Estimates today are that there are ten million users of GNU/Linux
   systems such as Debian GNU/Linux and Red Hat Linux.  Free software has
   developed such practical advantages that users are flocking to it for
   purely practical reasons.

   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.

   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.

   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.

  "Open Source"

   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.

   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.

   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 Motif or Qt appears, will these magazines
   warn programmers to stay away from it, or will they run ads for it?

   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.

   "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.

  Try!

   Yoda's philosophy ("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.

   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 hackers to come and join me.

   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.

  Copyright (C) 1998 Richard Stallman

  Verbatim copying and distribution of this entire article is permitted
  in any medium, provided this notice is preserved.
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.