#!/bin/sh
#### Patch script - GNU Emacs - version 19.20 to 19.21

#### This file contains patches to turn version 19.20 of GNU Emacs into
#### 19.21.  To apply them, cd to the top of the Emacs source tree, and
#### then type 'sh <this file>'.

#### After you apply the patches, you should run Emacs (an earlier 19 will do)
#### and type M-x byte-recompile-directory RET lisp RET
#### to recompile the changed Emacs Lisp files.
#### Then you can build the new Emacs version.

#### We don't include patches for Info files since you can
#### regenerate them from the Texinfo files that we do include.
#### To update the changed info files, do
#### (cd man; makeinfo emacs.texi)

### Patchmaker's checklist:
### - update version numbers in comments and version.el tweak
### - diff -u ls -R listings, and decide on rm's and mv's.
### - apply rm's and mv's, and then do a diff -cprP --exclude=\*.elc 
###   to generate the body.
### - insert the body just before the line saying `end-of-emacs-patch-kit'.

if [ -d lisp ] ; then
  true
else
  if [ -d emacs-19.20/lisp ] ; then
    cd emacs-19.20
  else
    (echo "$0: In order to apply this patch, the current directory"
     echo "must be the top of the Emacs distribution tree.") >&2
    exit 1
  fi
fi

### We can't patch version.el, because it contains some random dump
### number.  So we'll be a little more relaxed about this edit.
sed < lisp/version.el > $$ \
  -e 's/defconst emacs-version "[^"]*"/defconst emacs-version "19.21.0"/'
mv lisp/version.el lisp/version.el~
mv $$ lisp/version.el

### Put moves and renames here.
(rm lisp/forms.README)

patch -p1 << \end-of-emacs-patch-kit
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/ChangeLog emacs-19.21/ChangeLog
*** emacs-19.20/ChangeLog	Thu Nov 11 19:35:49 1993
--- emacs-19.21/ChangeLog	Tue Nov 16 04:20:00 1993
***************
*** 1,5 ****
--- 1,23 ----
+ Tue Nov 16 00:56:51 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 19.21 released.
+ 
+ 	* Makefile.in (mkdir): Ignore error from chmod.
+ 
+ Mon Nov 15 05:11:55 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* make-dist: Don't put lisp/forms.README in the distribution.
+ 
+ Sat Nov 13 04:37:15 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* configure.in (creating src/Makefile): Before running cpp,
+ 	discard all lines that start with `# Generated' or /**/#.
+ 
  Thu Nov 11 09:52:37 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
  	* Version 19.20 released.
+ 
+ 	* make-dist: Use build-ins.in, not build-install.in.
+ 	Don't bother updating TAGS since it's not included.
  
  	* build-ins.in: Renamed from build-install.in.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/Makefile.in emacs-19.21/Makefile.in
*** emacs-19.20/Makefile.in	Sun Oct  3 15:54:56 1993
--- emacs-19.21/Makefile.in	Tue Nov 16 00:56:49 1993
***************
*** 307,311 ****
  	  ${bindir} ${datadir} ${libdir} \
  	  `echo ${locallisppath} | sed 's/:/ /'`
! 	chmod 777 ${COPYDESTS} ${lockdir}
  
  ### Delete all the installed files that the `install' target would
--- 307,311 ----
  	  ${bindir} ${datadir} ${libdir} \
  	  `echo ${locallisppath} | sed 's/:/ /'`
! 	-chmod 777 ${COPYDESTS} ${lockdir}
  
  ### Delete all the installed files that the `install' target would
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/PROBLEMS emacs-19.21/PROBLEMS
*** emacs-19.20/PROBLEMS	Fri Sep 24 14:32:29 1993
--- emacs-19.21/PROBLEMS	Tue Nov 16 07:13:06 1993
***************
*** 2,5 ****
--- 2,18 ----
  in compiling, installing and running GNU Emacs.
  
+ * You configure Emacs to use a directory such as /usr/local/sun3.lib/emacs
+ and the directory name gets mangled in the process of building Emacs.
+ 
+ This is because building Emacs involves passing a makefile through the
+ C preprocessor.  The directory names that you specified go through
+ that process, and if they happen to use any predefined macro names,
+ those macro names get substituted.  For example, if you are on a Sun
+ 3, the name `sun3' is a predefined macro.
+ 
+ This is an Emacs bug, and will be fixed; but it was too risky to fix
+ for 19.21.  For now, you must use different names for those
+ directories (perhaps via symbolic links).
+ 
  * You "lose characters" after typing Compose Character key.
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/README emacs-19.21/README
*** emacs-19.20/README	Thu Nov 11 19:34:47 1993
--- emacs-19.21/README	Tue Nov 16 07:10:49 1993
***************
*** 1,3 ****
! This directory tree holds version 19.0 of GNU Emacs, the extensible,
  customizable, self-documenting real-time display editor.
  
--- 1,3 ----
! This directory tree holds version 19.21 of GNU Emacs, the extensible,
  customizable, self-documenting real-time display editor.
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/configure emacs-19.21/configure
*** emacs-19.20/configure	Wed Nov 10 21:19:15 1993
--- emacs-19.21/configure	Tue Nov 16 07:13:08 1993
***************
*** 2658,2665 ****
  fi
  topsrcdir=${srcdir}
  makefile_command='echo "creating src/Makefile";
    topsrcdir='"${topsrcdir}"';
  ( cd ./src;
!   cp Makefile.in junk.c;
    eval `echo ${CPP} -I. -I${topsrcdir}/src ${CPPFLAGS} junk.c \>junk.cpp`;
    < junk.cpp							'\
--- 2658,2669 ----
  fi
  topsrcdir=${srcdir}
+   # We discard all lines in Makefile.in that start with `# Generated' or /**/#
+   # because some cpps get confused by them.
+   # Really we should preserve them somehow into Makefile,
+   # but that is beyond my level of shell programming.
  makefile_command='echo "creating src/Makefile";
    topsrcdir='"${topsrcdir}"';
  ( cd ./src;
!   sed -e '\''s/^# Generated.*//'\'' -e '\''s%/\*\*/#.*%%'\'' < Makefile.in > junk.c;
    eval `echo ${CPP} -I. -I${topsrcdir}/src ${CPPFLAGS} junk.c \>junk.cpp`;
    < junk.cpp							'\
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/configure.in emacs-19.21/configure.in
*** emacs-19.20/configure.in	Wed Nov 10 15:20:30 1993
--- emacs-19.21/configure.in	Tue Nov 16 07:13:09 1993
***************
*** 1408,1415 ****
  fi
  topsrcdir=${srcdir}
  makefile_command='echo "creating src/Makefile";
    topsrcdir='"${topsrcdir}"';
  ( cd ./src;
!   cp Makefile.in junk.c;
    eval `echo ${CPP} -I. -I${topsrcdir}/src ${CPPFLAGS} junk.c \>junk.cpp`;
    < junk.cpp							'\
--- 1408,1419 ----
  fi
  topsrcdir=${srcdir}
+   # We discard all lines in Makefile.in that start with `# Generated' or /**/#
+   # because some cpps get confused by them.
+   # Really we should preserve them somehow into Makefile,
+   # but that is beyond my level of shell programming.
  makefile_command='echo "creating src/Makefile";
    topsrcdir='"${topsrcdir}"';
  ( cd ./src;
!   sed -e '\''s/^# Generated.*//'\'' -e '\''s%/\*\*/#.*%%'\'' < Makefile.in > junk.c;
    eval `echo ${CPP} -I. -I${topsrcdir}/src ${CPPFLAGS} junk.c \>junk.cpp`;
    < junk.cpp							'\
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/etc/ChangeLog emacs-19.21/etc/ChangeLog
*** emacs-19.20/etc/ChangeLog	Thu Nov 11 12:55:47 1993
--- emacs-19.21/etc/ChangeLog	Tue Nov 16 06:14:29 1993
***************
*** 1,2 ****
--- 1,6 ----
+ Tue Nov 16 06:14:24 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 19.21 released.
+ 
  Thu Nov 11 12:55:39 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/etc/GNU emacs-19.21/etc/GNU
*** emacs-19.20/etc/GNU	Wed Jun  9 06:55:34 1993
--- emacs-19.21/etc/GNU	Tue Nov 16 07:27:27 1993
***************
*** 1,475 ****
- 			The GNU Manifesto
- 
  Copyright (C) 1985 Richard M. Stallman
!   (Copying permission notice at the end.)
  
  What's GNU?  Gnu's Not Unix!
  
! GNU, which stands for Gnu's Not Unix, is the name for the complete
  Unix-compatible software system which I am writing so that I can give it
! away free to everyone who can use it.  Several other volunteers are helping
! me.  Contributions of time, money, programs and equipment are greatly
! needed.
! 
! So far we have an Emacs text editor with Lisp for writing editor commands,
! a source level debugger, a yacc-compatible parser generator, a linker, and
! around 35 utilities.  A shell (command interpreter) is nearly completed.  A
! new portable optimizing C compiler has compiled itself and may be released
! this year.  An initial kernel exists but many more features are needed to
! emulate Unix.  When the kernel and compiler are finished, it will be
! possible to distribute a GNU system suitable for program development.  We
! will use @TeX{} as our text formatter, but an nroff is being worked on.  We
! will use the free, portable X window system as well.  After this we will
! add a portable Common Lisp, an Empire game, a spreadsheet, and hundreds of
! other things, plus on-line documentation.  We hope to supply, eventually,
  everything useful that normally comes with a Unix system, and more.
  
! GNU will be able to run Unix programs, but will not be identical to Unix.
! We will make all improvements that are convenient, based on our experience
! with other operating systems.  In particular, we plan to have longer
! filenames, file version numbers, a crashproof file system, filename
! completion perhaps, terminal-independent display support, and perhaps
! eventually a Lisp-based window system through which several Lisp programs
! and ordinary Unix programs can share a screen.  Both C and Lisp will be
! available as system programming languages.  We will try to support UUCP,
! MIT Chaosnet, and Internet protocols for communication.
! 
! GNU is aimed initially at machines in the 68000/16000 class with virtual
! memory, because they are the easiest machines to make it run on.  The extra
! effort to make it run on smaller machines will be left to someone who wants
! to use it on them.
! 
! To avoid horrible confusion, please pronounce the `G' in the word `GNU'
! when it is the name of this project.
! 
! 
! Who Am I?
! 
! I am Richard Stallman, inventor of the original much-imitated EMACS editor,
! formerly at the Artificial Intelligence Lab at MIT.  I have worked
! extensively on compilers, editors, debuggers, command interpreters, the
! Incompatible Timesharing System and the Lisp Machine operating system.  I
! pioneered terminal-independent display support in ITS.  Since then I have
! implemented one crashproof file system and two window systems for Lisp
! machines, and designed a third window system now being implemented; this
! one will be ported to many systems including use in GNU.  [Historical note:
! The window system project was not completed; GNU now plans to use the
! X window system.]
  
  
  Why I Must Write GNU
! 
! I consider that the golden rule requires that if I like a program I must
! share it with other people who like it.  Software sellers want to divide
! the users and conquer them, making each user agree not to share with
! others.  I refuse to break solidarity with other users in this way.  I
! cannot in good conscience sign a nondisclosure agreement or a software
! license agreement.  For years I worked within the Artificial Intelligence
! Lab to resist such tendencies and other inhospitalities, but eventually
! they had gone too far: I could not remain in an institution where such
! things are done for me against my will.
! 
! So that I can continue to use computers without dishonor, I have decided to
! put together a sufficient body of free software so that I will be able to
! get along without any software that is not free.  I have resigned from the
! AI lab to deny MIT any legal excuse to prevent me from giving GNU away.
  
  
  Why GNU Will Be Compatible with Unix
  
! Unix is not my ideal system, but it is not too bad.  The essential features
! of Unix seem to be good ones, and I think I can fill in what Unix lacks
! without spoiling them.  And a system compatible with Unix would be
! convenient for many other people to adopt.
  
- 
  How GNU Will Be Available
! 
! GNU is not in the public domain.  Everyone will be permitted to modify and
! redistribute GNU, but no distributor will be allowed to restrict its
! further redistribution.  That is to say, proprietary modifications will not
! be allowed.  I want to make sure that all versions of GNU remain free.
  
  
  Why Many Other Programmers Want to Help
  
! I have found many other programmers who are excited about GNU and want to
! help.
  
! Many programmers are unhappy about the commercialization of system
! software.  It may enable them to make more money, but it requires them to
! feel in conflict with other programmers in general rather than feel as
! comrades.  The fundamental act of friendship among programmers is the
! sharing of programs; marketing arrangements now typically used essentially
! forbid programmers to treat others as friends.  The purchaser of software
! must choose between friendship and obeying the law.  Naturally, many decide
! that friendship is more important.  But those who believe in law often do
! not feel at ease with either choice.  They become cynical and think that
! programming is just a way of making money.
! 
! By working on and using GNU rather than proprietary programs, we can be
! hospitable to everyone and obey the law.  In addition, GNU serves as an
! example to inspire and a banner to rally others to join us in sharing.
! This can give us a feeling of harmony which is impossible if we use
! software that is not free.  For about half the programmers I talk to, this
! is an important happiness that money cannot replace.
  
- 
  How You Can Contribute
! 
! I am asking computer manufacturers for donations of machines and money.
! I'm asking individuals for donations of programs and work.
  
! One consequence you can expect if you donate machines is that GNU will run
! on them at an early date.  The machines should be complete, ready to use
! systems, approved for use in a residential area, and not in need of
! sophisticated cooling or power.
! 
! I have found very many programmers eager to contribute part-time work for
! GNU.  For most projects, such part-time distributed work would be very hard
! to coordinate; the independently-written parts would not work together.
! But for the particular task of replacing Unix, this problem is absent.  A
! complete Unix system contains hundreds of utility programs, each of which
! is documented separately.  Most interface specifications are fixed by Unix
! compatibility.  If each contributor can write a compatible replacement for
! a single Unix utility, and make it work properly in place of the original
! on a Unix system, then these utilities will work right when put together.
! Even allowing for Murphy to create a few unexpected problems, assembling
! these components will be a feasible task.  (The kernel will require closer
! communication and will be worked on by a small, tight group.)
! 
! If I get donations of money, I may be able to hire a few people full or
! part time.  The salary won't be high by programmers' standards, but I'm
! looking for people for whom building community spirit is as important as
! making money.  I view this as a way of enabling dedicated people to devote
! their full energies to working on GNU by sparing them the need to make a
! living in another way.
  
  
  Why All Computer Users Will Benefit
  
! Once GNU is written, everyone will be able to obtain good system software
! free, just like air.
  
! This means much more than just saving everyone the price of a Unix license.
! It means that much wasteful duplication of system programming effort will
! be avoided.  This effort can go instead into advancing the state of the
! art.
! 
! Complete system sources will be available to everyone.  As a result, a user
! who needs changes in the system will always be free to make them himself,
! or hire any available programmer or company to make them for him.  Users
! will no longer be at the mercy of one programmer or company which owns the
! sources and is in sole position to make changes.
! 
! Schools will be able to provide a much more educational environment by
! encouraging all students to study and improve the system code.  Harvard's
! computer lab used to have the policy that no program could be installed on
! the system if its sources were not on public display, and upheld it by
! actually refusing to install certain programs.  I was very much inspired by
! this.
! 
! Finally, the overhead of considering who owns the system software and what
! one is or is not entitled to do with it will be lifted.
! 
! Arrangements to make people pay for using a program, including licensing of
! copies, always incur a tremendous cost to society through the cumbersome
! mechanisms necessary to figure out how much (that is, which programs) a
! person must pay for.  And only a police state can force everyone to obey
! them.  Consider a space station where air must be manufactured at great
! cost: charging each breather per liter of air may be fair, but wearing the
! metered gas mask all day and all night is intolerable even if everyone can
! afford to pay the air bill.  And the TV cameras everywhere to see if you
! ever take the mask off are outrageous.  It's better to support the air
! plant with a head tax and chuck the masks.
  
! Copying all or parts of a program is as natural to a programmer as
  breathing, and as productive.  It ought to be as free.
  
- 
  Some Easily Rebutted Objections to GNU's Goals
  
!   "Nobody will use it if it is free, because that means
!    they can't rely on any support."
!   "You have to charge for the program
!    to pay for providing the support."
! 
! If people would rather pay for GNU plus service than get GNU free without
! service, a company to provide just service to people who have obtained GNU
! free ought to be profitable.
! 
! We must distinguish between support in the form of real programming work
! and mere handholding.  The former is something one cannot rely on from a
! software vendor.  If your problem is not shared by enough people, the
! vendor will tell you to get lost.
! 
! If your business needs to be able to rely on support, the only way is to
! have all the necessary sources and tools.  Then you can hire any available
! person to fix your problem; you are not at the mercy of any individual.
! With Unix, the price of sources puts this out of consideration for most
! businesses.  With GNU this will be easy.  It is still possible for there to
! be no available competent person, but this problem cannot be blamed on
! distribution arrangements.  GNU does not eliminate all the world's problems,
! only some of them.
! 
! Meanwhile, the users who know nothing about computers need handholding:
! doing things for them which they could easily do themselves but don't know
! how.
! 
! Such services could be provided by companies that sell just hand-holding
! and repair service.  If it is true that users would rather spend money and
! get a product with service, they will also be willing to buy the service
! having got the product free.  The service companies will compete in quality
! and price; users will not be tied to any particular one.  Meanwhile, those
! of us who don't need the service should be able to use the program without
! paying for the service.
! 
!   "You cannot reach many people without advertising,
!    and you must charge for the program to support that."
!   "It's no use advertising a program people can get free."
! 
! There are various forms of free or very cheap publicity that can be used to
! inform numbers of computer users about something like GNU.  But it may be
! true that one can reach more microcomputer users with advertising.  If this
! is really so, a business which advertises the service of copying and
! mailing GNU for a fee ought to be successful enough to pay for its
! advertising and more.  This way, only the users who benefit from the
! advertising pay for it.
! 
! On the other hand, if many people get GNU from their friends, and such
! companies don't succeed, this will show that advertising was not really
! necessary to spread GNU.  Why is it that free market advocates don't want
! to let the free market decide this?
! 
!   "My company needs a proprietary operating system
!    to get a competitive edge."
! 
! GNU will remove operating system software from the realm of competition.
! You will not be able to get an edge in this area, but neither will your
! competitors be able to get an edge over you.  You and they will compete in
! other areas, while benefiting mutually in this one.  If your business is
! selling an operating system, you will not like GNU, but that's tough on
! you.  If your business is something else, GNU can save you from being
! pushed into the expensive business of selling operating systems.
! 
! I would like to see GNU development supported by gifts from many
! manufacturers and users, reducing the cost to each.
! 
!   "Don't programmers deserve a reward for their creativity?"
! 
! If anything deserves a reward, it is social contribution.  Creativity can
! be a social contribution, but only in so far as society is free to use the
! results.  If programmers deserve to be rewarded for creating innovative
! programs, by the same token they deserve to be punished if they restrict
! the use of these programs.
! 
!   "Shouldn't a programmer be able to ask for a reward for his creativity?"
! 
! There is nothing wrong with wanting pay for work, or seeking to maximize
! one's income, as long as one does not use means that are destructive.  But
! the means customary in the field of software today are based on
! destruction.
! 
! Extracting money from users of a program by restricting their use of it is
! destructive because the restrictions reduce the amount and the ways that
! the program can be used.  This reduces the amount of wealth that humanity
! derives from the program.  When there is a deliberate choice to restrict,
! the harmful consequences are deliberate destruction.
! 
! The reason a good citizen does not use such destructive means to become
! wealthier is that, if everyone did so, we would all become poorer from the
! mutual destructiveness.  This is Kantian ethics; or, the Golden Rule.
! Since I do not like the consequences that result if everyone hoards
! information, I am required to consider it wrong for one to do so.
! Specifically, the desire to be rewarded for one's creativity does not
! justify depriving the world in general of all or part of that creativity.
! 
!   "Won't programmers starve?"
! 
! I could answer that nobody is forced to be a programmer.  Most of us cannot
! manage to get any money for standing on the street and making faces.  But
! we are not, as a result, condemned to spend our lives standing on the
! street making faces, and starving.  We do something else.
! 
! But that is the wrong answer because it accepts the questioner's implicit
! assumption: that without ownership of software, programmers cannot possibly
! be paid a cent.  Supposedly it is all or nothing.
  
! The real reason programmers will not starve is that it will still be
  possible for them to get paid for programming; just not paid as much as
  now.
  
! Restricting copying is not the only basis for business in software.  It is
! the most common basis because it brings in the most money.  If it were
! prohibited, or rejected by the customer, software business would move to
! other bases of organization which are now used less often.  There are
! always numerous ways to organize any kind of business.
! 
! Probably programming will not be as lucrative on the new basis as it is
! now.  But that is not an argument against the change.  It is not considered
! an injustice that sales clerks make the salaries that they now do.  If
! programmers made the same, that would not be an injustice either.  (In
! practice they would still make considerably more than that.)
! 
!   "Don't people have a right to control how their creativity is used?"
! 
! "Control over the use of one's ideas" really constitutes control over other
! people's lives; and it is usually used to make their lives more difficult.
! 
! People who have studied the issue of intellectual property rights carefully
! (such as lawyers) say that there is no intrinsic right to intellectual
! property.  The kinds of supposed intellectual property rights that the
! government recognizes were created by specific acts of legislation for
! specific purposes.
! 
! For example, the patent system was established to encourage inventors to
! disclose the details of their inventions.  Its purpose was to help society
! rather than to help inventors.  At the time, the life span of 17 years for
! a patent was short compared with the rate of advance of the state of the
! art.  Since patents are an issue only among manufacturers, for whom the
! cost and effort of a license agreement are small compared with setting up
! production, the patents often do not do much harm.  They do not obstruct
! most individuals who use patented products.
  
! The idea of copyright did not exist in ancient times, when authors
  frequently copied other authors at length in works of non-fiction.  This
! practice was useful, and is the only way many authors' works have survived
! even in part.  The copyright system was created expressly for the purpose
! of encouraging authorship.  In the domain for which it was invented--books,
! which could be copied economically only on a printing press--it did little
! harm, and did not obstruct most of the individuals who read the books.
! 
! All intellectual property rights are just licenses granted by society
! because it was thought, rightly or wrongly, that society as a whole would
! benefit by granting them.  But in any particular situation, we have to ask:
! are we really better off granting such license?  What kind of act are we
! licensing a person to do?
! 
! The case of programs today is very different from that of books a hundred
! years ago.  The fact that the easiest way to copy a program is from one
! neighbor to another, the fact that a program has both source code and
! object code which are distinct, and the fact that a program is used rather
! than read and enjoyed, combine to create a situation in which a person who
! enforces a copyright is harming society as a whole both materially and
! spiritually; in which a person should not do so regardless of whether the
! law enables him to.
! 
!   "Competition makes things get done better."
! 
! The paradigm of competition is a race: by rewarding the winner, we
! encourage everyone to run faster.  When capitalism really works this way,
! it does a good job; but its defenders are wrong in assuming it always works
! this way.  If the runners forget why the reward is offered and become
! intent on winning, no matter how, they may find other strategies--such as,
! attacking other runners.  If the runners get into a fist fight, they will
! all finish late.
! 
! Proprietary and secret software is the moral equivalent of runners in a
! fist fight.  Sad to say, the only referee we've got does not seem to
! object to fights; he just regulates them ("For every ten yards you run, you
! are allowed one kick.").  He really ought to break them up, and penalize
! runners for even trying to fight.
! 
!   "Won't everyone stop programming without a monetary incentive?"
! 
! Actually, many people will program with absolutely no monetary incentive.
! Programming has an irresistible fascination for some people, usually the
! people who are best at it.  There is no shortage of professional musicians
! who keep at it even though they have no hope of making a living that way.
! 
! But really this question, though commonly asked, is not appropriate to the
! situation.  Pay for programmers will not disappear, only become less.  So
! the right question is, will anyone program with a reduced monetary
! incentive?  My experience shows that they will.
! 
! For more than ten years, many of the world's best programmers worked at the
! Artificial Intelligence Lab for far less money than they could have had
! anywhere else.  They got many kinds of non-monetary rewards: fame and
! appreciation, for example.  And creativity is also fun, a reward in itself.
! 
! Then most of them left when offered a chance to do the same interesting
! work for a lot of money.
! 
! What the facts show is that people will program for reasons other than
! riches; but if given a chance to make a lot of money as well, they will
! come to expect and demand it.  Low-paying organizations do poorly in
! competition with high-paying ones, but they do not have to do badly if the
! high-paying ones are banned.
  
!   "We need the programmers desperately.  If they demand that we
!    stop helping our neighbors, we have to obey."
  
! You're never so desperate that you have to obey this sort of demand.
  Remember: millions for defense, but not a cent for tribute!
  
!   "Programmers need to make a living somehow."
  
! In the short run, this is true.  However, there are plenty of ways that
! programmers could make a living without selling the right to use a program.
! This way is customary now because it brings programmers and businessmen the
! most money, not because it is the only way to make a living.  It is easy to
! find other ways if you want to find them.  Here are a number of examples.
  
! A manufacturer introducing a new computer will pay for the porting of
  operating systems onto the new hardware.
  
! The sale of teaching, hand-holding and maintenance services could also
! employ programmers.
  
! People with new ideas could distribute programs as freeware, asking for
! donations from satisfied users, or selling hand-holding services.  I have
! met people who are already working this way successfully.
! 
! Users with related needs can form users' groups, and pay dues.  A group
! would contract with programming companies to write programs that the
! group's members would like to use.
! 
! All sorts of development can be funded with a Software Tax:
! 
!  Suppose everyone who buys a computer has to pay x percent of
!  the price as a software tax.  The government gives this to
!  an agency like the NSF to spend on software development.
! 
!  But if the computer buyer makes a donation to software development
!  himself, he can take a credit against the tax.  He can donate to
!  the project of his own choosing--often, chosen because he hopes to
!  use the results when it is done.  He can take a credit for any amount
!  of donation up to the total tax he had to pay.
! 
!  The total tax rate could be decided by a vote of the payers of
!  the tax, weighted according to the amount they will be taxed on.
! 
!  The consequences:
!  * the computer-using community supports software development.
!  * this community decides what level of support is needed.
!  * users who care which projects their share is spent on
!   can choose this for themselves.
! 
! In the long run, making programs free is a step toward the post-scarcity
! world, where nobody will have to work very hard just to make a living.
! People will be free to devote themselves to activities that are fun,
! such as programming, after spending the necessary ten hours a week
! on required tasks such as legislation, family counseling, robot
! repair and asteroid prospecting.  There will be no need to be able
! to make a living from programming.
  
! We have already greatly reduced the amount of work that the whole
  society must do for its actual productivity, but only a little of this
  has translated itself into leisure for workers because much
  nonproductive activity is required to accompany productive activity.
! The main causes of this are bureaucracy and isometric struggles
! against competition.  Free software will greatly reduce these
! drains in the area of software production.  We must do this,
! in order for technical gains in productivity to translate into
! less work for us.
! 
! Copyright (C) 1985 Richard M. Stallman
  
!    Permission is granted to anyone to make or distribute verbatim copies
!    of this document as received, in any medium, provided that the
!    copyright notice and permission notice are preserved,
!    and that the distributor grants the recipient permission
!    for further redistribution as permitted by this notice.
! 
!    Modified versions may not be made.
  
--- 1,532 ----
  Copyright (C) 1985 Richard M. Stallman
! 
!    Permission is granted to anyone to make or distribute verbatim copies
! of this document, in any medium, provided that the copyright notice and
! permission notice are preserved, and that the distributor grants the
! recipient permission for further redistribution as permitted by this
! notice.
! 
!    Modified versions may not be made.
! 
! The GNU Manifesto
! *****************
  
+      The GNU Manifesto which appears below was written by Richard
+      Stallman at the beginning of the GNU project, to ask for
+      participation and support.  For the first few years, it was
+      updated in minor ways to account for developments, but now it
+      seems best to leave it unchanged as most people have seen it.
+ 
+      Since that time, we have learned about certain common
+      misunderstandings that different wording could help avoid.
+      Footnotes help clarify these points.
+ 
+      For up-to-date information about the available GNU software,
+      please see the latest issue of the GNU's Bulletin.  The list is
+      much too long to include here.
+ 
  What's GNU?  Gnu's Not Unix!
+ ============================
  
!    GNU, which stands for Gnu's Not Unix, is the name for the complete
  Unix-compatible software system which I am writing so that I can give it
! away free to everyone who can use it.(1) Several other volunteers are
! helping me.  Contributions of time, money, programs and equipment are
! greatly needed.
! 
!    So far we have an Emacs text editor with Lisp for writing editor
! commands, a source level debugger, a yacc-compatible parser generator,
! a linker, and around 35 utilities.  A shell (command interpreter) is
! nearly completed.  A new portable optimizing C compiler has compiled
! itself and may be released this year.  An initial kernel exists but
! many more features are needed to emulate Unix.  When the kernel and
! compiler are finished, it will be possible to distribute a GNU system
! suitable for program development.  We will use TeX as our text
! formatter, but an nroff is being worked on.  We will use the free,
! portable X window system as well.  After this we will add a portable
! Common Lisp, an Empire game, a spreadsheet, and hundreds of other
! things, plus on-line documentation.  We hope to supply, eventually,
  everything useful that normally comes with a Unix system, and more.
  
!    GNU will be able to run Unix programs, but will not be identical to
! Unix.  We will make all improvements that are convenient, based on our
! experience with other operating systems.  In particular, we plan to
! have longer file names, file version numbers, a crashproof file system,
! file name completion perhaps, terminal-independent display support, and
! perhaps eventually a Lisp-based window system through which several
! Lisp programs and ordinary Unix programs can share a screen.  Both C
! and Lisp will be available as system programming languages.  We will
! try to support UUCP, MIT Chaosnet, and Internet protocols for
! communication.
! 
!    GNU is aimed initially at machines in the 68000/16000 class with
! virtual memory, because they are the easiest machines to make it run
! on.  The extra effort to make it run on smaller machines will be left
! to someone who wants to use it on them.
  
+    To avoid horrible confusion, please pronounce the `G' in the word
+ `GNU' when it is the name of this project.
  
  Why I Must Write GNU
! ====================
  
+    I consider that the golden rule requires that if I like a program I
+ must share it with other people who like it.  Software sellers want to
+ divide the users and conquer them, making each user agree not to share
+ with others.  I refuse to break solidarity with other users in this
+ way.  I cannot in good conscience sign a nondisclosure agreement or a
+ software license agreement.  For years I worked within the Artificial
+ Intelligence Lab to resist such tendencies and other inhospitalities,
+ but eventually they had gone too far: I could not remain in an
+ institution where such things are done for me against my will.
+ 
+    So that I can continue to use computers without dishonor, I have
+ decided to put together a sufficient body of free software so that I
+ will be able to get along without any software that is not free.  I
+ have resigned from the AI lab to deny MIT any legal excuse to prevent
+ me from giving GNU away.
  
  Why GNU Will Be Compatible with Unix
+ ====================================
  
!    Unix is not my ideal system, but it is not too bad.  The essential
! features of Unix seem to be good ones, and I think I can fill in what
! Unix lacks without spoiling them.  And a system compatible with Unix
! would be convenient for many other people to adopt.
  
  How GNU Will Be Available
! =========================
  
+    GNU is not in the public domain.  Everyone will be permitted to
+ modify and redistribute GNU, but no distributor will be allowed to
+ restrict its further redistribution.  That is to say, proprietary
+ modifications will not be allowed.  I want to make sure that all
+ versions of GNU remain free.
  
  Why Many Other Programmers Want to Help
+ =======================================
  
!    I have found many other programmers who are excited about GNU and
! want to help.
  
!    Many programmers are unhappy about the commercialization of system
! software.  It may enable them to make more money, but it requires them
! to feel in conflict with other programmers in general rather than feel
! as comrades.  The fundamental act of friendship among programmers is the
! sharing of programs; marketing arrangements now typically used
! essentially forbid programmers to treat others as friends.  The
! purchaser of software must choose between friendship and obeying the
! law.  Naturally, many decide that friendship is more important.  But
! those who believe in law often do not feel at ease with either choice.
! They become cynical and think that programming is just a way of making
! money.
! 
!    By working on and using GNU rather than proprietary programs, we can
! be hospitable to everyone and obey the law.  In addition, GNU serves as
! an example to inspire and a banner to rally others to join us in
! sharing.  This can give us a feeling of harmony which is impossible if
! we use software that is not free.  For about half the programmers I
! talk to, this is an important happiness that money cannot replace.
  
  How You Can Contribute
! ======================
  
!    I am asking computer manufacturers for donations of machines and
! money.  I'm asking individuals for donations of programs and work.
  
+    One consequence you can expect if you donate machines is that GNU
+ will run on them at an early date.  The machines should be complete,
+ ready to use systems, approved for use in a residential area, and not
+ in need of sophisticated cooling or power.
+ 
+    I have found very many programmers eager to contribute part-time
+ work for GNU.  For most projects, such part-time distributed work would
+ be very hard to coordinate; the independently-written parts would not
+ work together.  But for the particular task of replacing Unix, this
+ problem is absent.  A complete Unix system contains hundreds of utility
+ programs, each of which is documented separately.  Most interface
+ specifications are fixed by Unix compatibility.  If each contributor
+ can write a compatible replacement for a single Unix utility, and make
+ it work properly in place of the original on a Unix system, then these
+ utilities will work right when put together.  Even allowing for Murphy
+ to create a few unexpected problems, assembling these components will
+ be a feasible task.  (The kernel will require closer communication and
+ will be worked on by a small, tight group.)
+ 
+    If I get donations of money, I may be able to hire a few people full
+ or part time.  The salary won't be high by programmers' standards, but
+ I'm looking for people for whom building community spirit is as
+ important as making money.  I view this as a way of enabling dedicated
+ people to devote their full energies to working on GNU by sparing them
+ the need to make a living in another way.
  
  Why All Computer Users Will Benefit
+ ===================================
  
!    Once GNU is written, everyone will be able to obtain good system
! software free, just like air.(2)
  
!    This means much more than just saving everyone the price of a Unix
! license.  It means that much wasteful duplication of system programming
! effort will be avoided.  This effort can go instead into advancing the
! state of the art.
! 
!    Complete system sources will be available to everyone.  As a result,
! a user who needs changes in the system will always be free to make them
! himself, or hire any available programmer or company to make them for
! him.  Users will no longer be at the mercy of one programmer or company
! which owns the sources and is in sole position to make changes.
! 
!    Schools will be able to provide a much more educational environment
! by encouraging all students to study and improve the system code.
! Harvard's computer lab used to have the policy that no program could be
! installed on the system if its sources were not on public display, and
! upheld it by actually refusing to install certain programs.  I was very
! much inspired by this.
! 
!    Finally, the overhead of considering who owns the system software
! and what one is or is not entitled to do with it will be lifted.
! 
!    Arrangements to make people pay for using a program, including
! licensing of copies, always incur a tremendous cost to society through
! the cumbersome mechanisms necessary to figure out how much (that is,
! which programs) a person must pay for.  And only a police state can
! force everyone to obey them.  Consider a space station where air must
! be manufactured at great cost: charging each breather per liter of air
! may be fair, but wearing the metered gas mask all day and all night is
! intolerable even if everyone can afford to pay the air bill.  And the
! TV cameras everywhere to see if you ever take the mask off are
! outrageous.  It's better to support the air plant with a head tax and
! chuck the masks.
  
!    Copying all or parts of a program is as natural to a programmer as
  breathing, and as productive.  It ought to be as free.
  
  Some Easily Rebutted Objections to GNU's Goals
+ ==============================================
+ 
+      "Nobody will use it if it is free, because that means they can't
+      rely on any support."
+ 
+      "You have to charge for the program to pay for providing the
+      support."
  
!    If people would rather pay for GNU plus service than get GNU free
! without service, a company to provide just service to people who have
! obtained GNU free ought to be profitable.(3)
! 
!    We must distinguish between support in the form of real programming
! work and mere handholding.  The former is something one cannot rely on
! from a software vendor.  If your problem is not shared by enough
! people, the vendor will tell you to get lost.
! 
!    If your business needs to be able to rely on support, the only way
! is to have all the necessary sources and tools.  Then you can hire any
! available person to fix your problem; you are not at the mercy of any
! individual.  With Unix, the price of sources puts this out of
! consideration for most businesses.  With GNU this will be easy.  It is
! still possible for there to be no available competent person, but this
! problem cannot be blamed on distribution arrangements.  GNU does not
! eliminate all the world's problems, only some of them.
! 
!    Meanwhile, the users who know nothing about computers need
! handholding: doing things for them which they could easily do
! themselves but don't know how.
! 
!    Such services could be provided by companies that sell just
! hand-holding and repair service.  If it is true that users would rather
! spend money and get a product with service, they will also be willing
! to buy the service having got the product free.  The service companies
! will compete in quality and price; users will not be tied to any
! particular one.  Meanwhile, those of us who don't need the service
! should be able to use the program without paying for the service.
! 
!      "You cannot reach many people without advertising, and you must
!      charge for the program to support that."
! 
!      "It's no use advertising a program people can get free."
! 
!    There are various forms of free or very cheap publicity that can be
! used to inform numbers of computer users about something like GNU.  But
! it may be true that one can reach more microcomputer users with
! advertising.  If this is really so, a business which advertises the
! service of copying and mailing GNU for a fee ought to be successful
! enough to pay for its advertising and more.  This way, only the users
! who benefit from the advertising pay for it.
! 
!    On the other hand, if many people get GNU from their friends, and
! such companies don't succeed, this will show that advertising was not
! really necessary to spread GNU.  Why is it that free market advocates
! don't want to let the free market decide this?(4)
! 
!      "My company needs a proprietary operating system to get a
!      competitive edge."
! 
!    GNU will remove operating system software from the realm of
! competition.  You will not be able to get an edge in this area, but
! neither will your competitors be able to get an edge over you.  You and
! they will compete in other areas, while benefiting mutually in this
! one.  If your business is selling an operating system, you will not
! like GNU, but that's tough on you.  If your business is something else,
! GNU can save you from being pushed into the expensive business of
! selling operating systems.
! 
!    I would like to see GNU development supported by gifts from many
! manufacturers and users, reducing the cost to each.(5)
! 
!      "Don't programmers deserve a reward for their creativity?"
! 
!    If anything deserves a reward, it is social contribution.
! Creativity can be a social contribution, but only in so far as society
! is free to use the results.  If programmers deserve to be rewarded for
! creating innovative programs, by the same token they deserve to be
! punished if they restrict the use of these programs.
! 
!      "Shouldn't a programmer be able to ask for a reward for his
!      creativity?"
! 
!    There is nothing wrong with wanting pay for work, or seeking to
! maximize one's income, as long as one does not use means that are
! destructive.  But the means customary in the field of software today
! are based on destruction.
! 
!    Extracting money from users of a program by restricting their use of
! it is destructive because the restrictions reduce the amount and the
! ways that the program can be used.  This reduces the amount of wealth
! that humanity derives from the program.  When there is a deliberate
! choice to restrict, the harmful consequences are deliberate destruction.
! 
!    The reason a good citizen does not use such destructive means to
! become wealthier is that, if everyone did so, we would all become
! poorer from the mutual destructiveness.  This is Kantian ethics; or,
! the Golden Rule.  Since I do not like the consequences that result if
! everyone hoards information, I am required to consider it wrong for one
! to do so.  Specifically, the desire to be rewarded for one's creativity
! does not justify depriving the world in general of all or part of that
! creativity.
! 
!      "Won't programmers starve?"
! 
!    I could answer that nobody is forced to be a programmer.  Most of us
! cannot manage to get any money for standing on the street and making
! faces.  But we are not, as a result, condemned to spend our lives
! standing on the street making faces, and starving.  We do something
! else.
! 
!    But that is the wrong answer because it accepts the questioner's
! implicit assumption: that without ownership of software, programmers
! cannot possibly be paid a cent.  Supposedly it is all or nothing.
  
!    The real reason programmers will not starve is that it will still be
  possible for them to get paid for programming; just not paid as much as
  now.
  
!    Restricting copying is not the only basis for business in software.
! It is the most common basis because it brings in the most money.  If it
! were prohibited, or rejected by the customer, software business would
! move to other bases of organization which are now used less often.
! There are always numerous ways to organize any kind of business.
! 
!    Probably programming will not be as lucrative on the new basis as it
! is now.  But that is not an argument against the change.  It is not
! considered an injustice that sales clerks make the salaries that they
! now do.  If programmers made the same, that would not be an injustice
! either.  (In practice they would still make considerably more than
! that.)
! 
!      "Don't people have a right to control how their creativity is
!      used?"
! 
!    "Control over the use of one's ideas" really constitutes control over
! other people's lives; and it is usually used to make their lives more
! difficult.
! 
!    People who have studied the issue of intellectual property rights
! carefully (such as lawyers) say that there is no intrinsic right to
! intellectual property.  The kinds of supposed intellectual property
! rights that the government recognizes were created by specific acts of
! legislation for specific purposes.
! 
!    For example, the patent system was established to encourage
! inventors to disclose the details of their inventions.  Its purpose was
! to help society rather than to help inventors.  At the time, the life
! span of 17 years for a patent was short compared with the rate of
! advance of the state of the art.  Since patents are an issue only among
! manufacturers, for whom the cost and effort of a license agreement are
! small compared with setting up production, the patents often do not do
! much harm.  They do not obstruct most individuals who use patented
! products.
  
!    The idea of copyright did not exist in ancient times, when authors
  frequently copied other authors at length in works of non-fiction.  This
! practice was useful, and is the only way many authors' works have
! survived even in part.  The copyright system was created expressly for
! the purpose of encouraging authorship.  In the domain for which it was
! invented--books, which could be copied economically only on a printing
! press--it did little harm, and did not obstruct most of the individuals
! who read the books.
! 
!    All intellectual property rights are just licenses granted by society
! because it was thought, rightly or wrongly, that society as a whole
! would benefit by granting them.  But in any particular situation, we
! have to ask: are we really better off granting such license?  What kind
! of act are we licensing a person to do?
! 
!    The case of programs today is very different from that of books a
! hundred years ago.  The fact that the easiest way to copy a program is
! from one neighbor to another, the fact that a program has both source
! code and object code which are distinct, and the fact that a program is
! used rather than read and enjoyed, combine to create a situation in
! which a person who enforces a copyright is harming society as a whole
! both materially and spiritually; in which a person should not do so
! regardless of whether the law enables him to.
! 
!      "Competition makes things get done better."
! 
!    The paradigm of competition is a race: by rewarding the winner, we
! encourage everyone to run faster.  When capitalism really works this
! way, it does a good job; but its defenders are wrong in assuming it
! always works this way.  If the runners forget why the reward is offered
! and become intent on winning, no matter how, they may find other
! strategies--such as, attacking other runners.  If the runners get into
! a fist fight, they will all finish late.
! 
!    Proprietary and secret software is the moral equivalent of runners
! in a fist fight.  Sad to say, the only referee we've got does not seem
! to object to fights; he just regulates them ("For every ten yards you
! run, you can fire one shot").  He really ought to break them up, and
! penalize runners for even trying to fight.
! 
!      "Won't everyone stop programming without a monetary incentive?"
! 
!    Actually, many people will program with absolutely no monetary
! incentive.  Programming has an irresistible fascination for some
! people, usually the people who are best at it.  There is no shortage of
! professional musicians who keep at it even though they have no hope of
! making a living that way.
! 
!    But really this question, though commonly asked, is not appropriate
! to the situation.  Pay for programmers will not disappear, only become
! less.  So the right question is, will anyone program with a reduced
! monetary incentive?  My experience shows that they will.
! 
!    For more than ten years, many of the world's best programmers worked
! at the Artificial Intelligence Lab for far less money than they could
! have had anywhere else.  They got many kinds of non-monetary rewards:
! fame and appreciation, for example.  And creativity is also fun, a
! reward in itself.
! 
!    Then most of them left when offered a chance to do the same
! interesting work for a lot of money.
! 
!    What the facts show is that people will program for reasons other
! than riches; but if given a chance to make a lot of money as well, they
! will come to expect and demand it.  Low-paying organizations do poorly
! in competition with high-paying ones, but they do not have to do badly
! if the high-paying ones are banned.
  
!      "We need the programmers desperately.  If they demand that we stop
!      helping our neighbors, we have to obey."
  
!    You're never so desperate that you have to obey this sort of demand.
  Remember: millions for defense, but not a cent for tribute!
  
!      "Programmers need to make a living somehow."
  
!    In the short run, this is true.  However, there are plenty of ways
! that programmers could make a living without selling the right to use a
! program.  This way is customary now because it brings programmers and
! businessmen the most money, not because it is the only way to make a
! living.  It is easy to find other ways if you want to find them.  Here
! are a number of examples.
  
!    A manufacturer introducing a new computer will pay for the porting of
  operating systems onto the new hardware.
  
!    The sale of teaching, hand-holding and maintenance services could
! also employ programmers.
  
!    People with new ideas could distribute programs as freeware, asking
! for donations from satisfied users, or selling hand-holding services.
! I have met people who are already working this way successfully.
  
!    Users with related needs can form users' groups, and pay dues.  A
! group would contract with programming companies to write programs that
! the group's members would like to use.
! 
!    All sorts of development can be funded with a Software Tax:
! 
!      Suppose everyone who buys a computer has to pay x percent of the
!      price as a software tax.  The government gives this to an agency
!      like the NSF to spend on software development.
! 
!      But if the computer buyer makes a donation to software development
!      himself, he can take a credit against the tax.  He can donate to
!      the project of his own choosing--often, chosen because he hopes to
!      use the results when it is done.  He can take a credit for any
!      amount of donation up to the total tax he had to pay.
! 
!      The total tax rate could be decided by a vote of the payers of the
!      tax, weighted according to the amount they will be taxed on.
! 
!      The consequences:
! 
!         * The computer-using community supports software development.
! 
!         * This community decides what level of support is needed.
! 
!         * Users who care which projects their share is spent on can
!           choose this for themselves.
! 
!    In the long run, making programs free is a step toward the
! post-scarcity world, where nobody will have to work very hard just to
! make a living.  People will be free to devote themselves to activities
! that are fun, such as programming, after spending the necessary ten
! hours a week on required tasks such as legislation, family counseling,
! robot repair and asteroid prospecting.  There will be no need to be
! able to make a living from programming.
! 
!    We have already greatly reduced the amount of work that the whole
  society must do for its actual productivity, but only a little of this
  has translated itself into leisure for workers because much
  nonproductive activity is required to accompany productive activity.
! The main causes of this are bureaucracy and isometric struggles against
! competition.  Free software will greatly reduce these drains in the
! area of software production.  We must do this, in order for technical
! gains in productivity to translate into less work for us.
! 
!    ---------- Footnotes ----------
! 
!    (1)  The wording here was careless.  The intention was that nobody
! would have to pay for *permission* to use the GNU system.  But the
! words don't make this clear, and people often interpret them as saying
! that copies of GNU should always be distributed at little or no charge.
! That was never the intent; later on, the manifesto mentions the
! possibility of companies providing the service of distribution for a
! profit.  Subsequently I have learned to distinguish carefully between
! "free" in the sense of freedom and "free" in the sense of price.  Free
! software is software that users have the freedom to distribute and
! change.  Some users may obtain copies at no charge, while others pay to
! obtain copies--and if the funds help support improving the software, so
! much the better.  The important thing is that everyone who has a copy
! has the freedom to cooperate with others in using it.
! 
!    (2)  This is another place I failed to distinguish carefully between
! the two different meanings of "free".  The statement as it stands is
! not false--you can get copies of GNU software at no charge, from your
! friends or over the net.  But it does suggest the wrong idea.
! 
!    (3)  Several such companies now exist.
! 
!    (4)  The Free Software Foundation raises most of its funds from a
! distribution service, although it is a charity rather than a company.
! If *no one* chooses to obtain copies by ordering the from the FSF, it
! will be unable to do its work.  But this does not mean that proprietary
! restrictions are justified to force every user to pay.  If a small
! fraction of all the users order copies from the FSF, that is sufficient
! to keep the FSF afloat.  So we ask users to choose to support us in
! this way.  Have you done your part?
  
!    (5)  A group of computer companies recently pooled funds to support
! maintenance of the GNU C Compiler.
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/etc/NEWS emacs-19.21/etc/NEWS
*** emacs-19.20/etc/NEWS	Wed Nov 10 15:23:37 1993
--- emacs-19.21/etc/NEWS	Tue Nov 16 01:35:11 1993
***************
*** 7,10 ****
--- 7,16 ----
  see the file LNEWS.
  
+ User editing changes in version 19.21.
+ 
+ * ISO Accents mode supports four additional characters:
+ A-with-ring (entered as /A), AE ligature (entered as /E),
+ and their lower-case equivalents.
+ 
  User editing changes in version 19.20.
  (See following page for Lisp programming changes.)
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/etc/copying.paper emacs-19.21/etc/copying.paper
*** emacs-19.20/etc/copying.paper
--- emacs-19.21/etc/copying.paper	Tue Nov 16 07:28:26 1993
***************
*** 0 ****
--- 1,819 ----
+ (For more information about the GNU project and free software,
+ look at the files `GNU', `COPYING', and `DISTRIB', in the same
+ directory as this file.)
+ 
+ 
+                       Why Software Should Be Free
+ 
+                           by Richard Stallman
+ 
+                       (Version of April 24, 1992)
+ 
+      Copyright (C) 1991, 1992, Free Software Foundation, Inc.
+      Verbatim copying and redistribution is permitted
+      without royalty; alteration is not permitted.
+ 
+ Introduction
+ ************
+ 
+    The existence of software inevitably raises the question of how
+ decisions about its use should be made.  For example, suppose one
+ individual who has a copy of a program meets another who would like a
+ copy.  It is possible for them to copy the program; who should decide
+ whether this is done?  The individuals involved?  Or another party,
+ called the "owner"?
+ 
+    Software developers typically consider these questions on the
+ assumption that the criterion for the answer is to maximize developers'
+ profits.  The political power of business has led to the government
+ adoption of both this criterion and the answer proposed by the
+ developers: that the program has an owner, typically a corporation
+ associated with its development.
+ 
+    I would like to consider the same question using a different
+ criterion: the prosperity and freedom of the public in general.
+ 
+    This answer cannot be decided by current law--the law should conform
+ to ethics, not the other way around.  Nor does current practice decide
+ this question, although it may suggest possible answers.  The only way
+ to judge is to see who is helped and who is hurt by recognizing owners
+ of software, why, and how much.  In other words, we should perform a
+ cost-benefit analysis on behalf of society as a whole, taking account of
+ individual freedom as well as production of material goods.
+ 
+    In this essay, I will describe the effects of having owners, and show
+ that the results are detrimental.  My conclusion is that programmers
+ have the duty to encourage others to share, redistribute, study and
+ improve the software we write: in other words, to write "free"
+ software.(1)
+ 
+ How Owners Justify Their Power
+ ******************************
+ 
+    Those who benefit from the current system where programs are property
+ offer two arguments in support of their claims to own programs: the
+ emotional argument and the economic argument.
+ 
+    The emotional argument goes like this: "I put my sweat, my heart, my
+ soul into this program.  It comes from *me*, it's *mine*!"
+ 
+    This argument does not require serious refutation.  The feeling of
+ attachment is one that programmers can cultivate when it suits them; it
+ is not inevitable.  Consider, for example, how willingly the same
+ programmers usually sign over all rights to a large corporation for a
+ salary; the emotional attachment mysteriously vanishes.  By contrast,
+ consider the great artists and artisans of medieval times, who didn't
+ even sign their names to their work.  To them, the name of the artist
+ was not important.  What mattered was that the work was done--and the
+ purpose it would serve.  This view prevailed for hundreds of years.
+ 
+    The economic argument goes like this: "I want to get rich (usually
+ described inaccurately as `making a living'), and if you don't allow me
+ to get rich by programming, then I won't program.  Everyone else is like
+ me, so nobody will ever program.  And then you'll be stuck with no
+ programs at all!"  This threat is usually veiled as friendly advice
+ from the wise.
+ 
+    I'll explain later why this threat is a bluff.  First I want to
+ address an implicit assumption that is more visible in another
+ formulation of the argument.
+ 
+    This formulation starts by comparing the social utility of a
+ proprietary program with that of no program, and then concludes that
+ proprietary software development is, on the whole, beneficial, and
+ should be encouraged.  The fallacy here is in comparing only two
+ outcomes--proprietary software vs. no software--and assuming there are
+ no other possibilities.
+ 
+    Given a system of intellectual property, software development is
+ usually linked with the existence of an owner who controls the
+ software's use.  As long as this linkage exists, we are often faced
+ with the choice of proprietary software or none.  However, this linkage
+ is not inherent or inevitable; it is a consequence of the specific
+ social/legal policy decision that we are questioning: the decision to
+ have owners.  To formulate the choice as between proprietary software
+ vs. no software is begging the question.
+ 
+ The Argument against Having Owners
+ **********************************
+ 
+    The question at hand is, "Should development of software be linked
+ with having owners to restrict the use of it?"
+ 
+    In order to decide this, we have to judge the effect on society of
+ each of those two activities *independently*: the effect of developing
+ the software (regardless of its terms of distribution), and the effect
+ of restricting its use (assuming the software has been developed).  If
+ one of these activities is helpful and the other is harmful, we would be
+ better off dropping the linkage and doing only the helpful one.
+ 
+    To put it another way, if restricting the distribution of a program
+ already developed is harmful to society overall, then an ethical
+ software developer will reject the option of doing so.
+ 
+    To determine the effect of restricting sharing, we need to compare
+ the value to society of a restricted (i.e., proprietary) program with
+ that of the same program, available to everyone.  This means comparing
+ two possible worlds.
+ 
+    This analysis also addresses the simple counterargument sometimes
+ made that "the benefit to the neighbor of giving him or her a copy of a
+ program is cancelled by the harm done to the owner."  This
+ counterargument assumes that the harm and the benefit are equal in
+ magnitude.  The analysis involves comparing these magnitudes, and shows
+ that the benefit is much greater.
+ 
+    To elucidate this argument, let's apply it in another area: road
+ construction.
+ 
+    It would be possible to fund the construction of all roads with
+ tolls.  This would entail having toll booths at all street corners.
+ Such a system would provide a great incentive to improve roads.  It
+ would also have the virtue of causing the users of any given road to
+ pay for that road.  However, a toll booth is an artificial obstruction
+ to smooth driving--artificial, because it is not a consequence of how
+ roads or cars work.
+ 
+    Comparing free roads and toll roads by their usefulness, we find that
+ (all else being equal) roads without toll booths are cheaper to
+ construct, cheaper to run, safer, and more efficient to use.(2) In a
+ poor country, tolls may make the roads unavailable to many citizens.
+ The roads without toll booths thus offer more benefit to society at
+ less cost; they are preferable for society.  Therefore, society should
+ choose to fund roads in another way, not by means of toll booths.  Use
+ of roads, once built, should be free.
+ 
+    When the advocates of toll booths propose them as *merely* a way of
+ raising funds, they distort the choice that is available.  Toll booths
+ do raise funds, but they do something else as well: in effect, they
+ degrade the road.  The toll road is not as good as the free road; giving
+ us more or technically superior roads may not be an improvement if this
+ means substituting toll roads for free roads.
+ 
+    Of course, the construction of a free road does cost money, which the
+ public must somehow pay.  However, this does not imply the inevitability
+ of toll booths.  We who must in either case pay will get more value for
+ our money by buying a free road.
+ 
+    I am not saying that a toll road is worse than no road at all.  That
+ would be true if the toll were so great that hardly anyone used the
+ road--but this is an unlikely policy for a toll collector.  However, as
+ long as the toll booths cause significant waste and inconvenience, it is
+ better to raise the funds in a less obstructive fashion.
+ 
+    To apply the same argument to software development, I will now show
+ that having "toll booths" for useful software programs costs society
+ dearly: it makes the programs more expensive to construct, more
+ expensive to distribute, and less satisfying and efficient to use.  It
+ will follow that program construction should be encouraged in some other
+ way.  Then I will go on to explain other methods of encouraging and (to
+ the extent actually necessary) funding software development.
+ 
+ The Harm Done by Obstructing Software
+ =====================================
+ 
+    Consider for a moment that a program has been developed, and any
+ necessary payments for its development have been made; now society must
+ choose either to make it proprietary or allow free sharing and use.
+ Assume that the existence of the program and its availability is a
+ desirable thing.(3)
+ 
+    Restrictions on the distribution and modification of the program
+ cannot facilitate its use.  They can only interfere.  So the effect can
+ only be negative.  But how much?  And what kind?
+ 
+    Three different levels of material harm come from such obstruction:
+ 
+    * Fewer people use the program.
+ 
+    * None of the users can adapt or fix the program.
+ 
+    * Other developers cannot learn from the program, or base new work
+      on it.
+ 
+    Each level of material harm has a concomitant form of psychosocial
+ harm.  This refers to the effect that people's decisions have on their
+ subsequent feelings, attitudes and predispositions.  These changes in
+ people's ways of thinking will then have a further effect on their
+ relationships with their fellow citizens, and can have material
+ consequences.
+ 
+    The three levels of material harm waste part of the value that the
+ program could contribute, but they cannot reduce it to zero.  If they
+ waste nearly all the value of the program, then writing the program
+ harms society by at most the effort that went into writing the program.
+ Arguably a program that is profitable to sell must provide some net
+ direct material benefit.
+ 
+    However, taking account of the concomitant psychosocial harm, there
+ is no limit to the harm that proprietary software development can do.
+ 
+ Obstructing Use of Programs
+ ===========================
+ 
+    The first level of harm impedes the simple use of a program.  A copy
+ of a program has nearly zero marginal cost (and you can pay this cost by
+ doing the work yourself), so in a free market, it would have nearly zero
+ price.  A license fee is a significant disincentive to use the program.
+ If a widely-useful program is proprietary, far fewer people will use it.
+ 
+    It is easy to show that the total contribution of a program to
+ society is reduced by assigning an owner to it.  Each potential user of
+ the program, faced with the need to pay to use it, may choose to pay,
+ or may forego use of the program.  When a user chooses to pay, this is a
+ zero-sum transfer of wealth between two parties.  But each time someone
+ chooses to forego use of the program, this harms that person without
+ benefitting anyone.  The sum of negative numbers and zeros must be
+ negative.
+ 
+    But this does not reduce the amount of work it takes to *develop*
+ the program.  As a result, the efficiency of the whole process, in
+ delivered user satisfaction per hour of work, is reduced.
+ 
+    This reflects a crucial difference between copies of programs and
+ cars, chairs, or sandwiches.  There is no copying machine for material
+ objects outside of science fiction.  But programs are easy to copy;
+ anyone can produce as many copies as are wanted, with very little
+ effort.  This isn't true for material objects because matter is
+ conserved: each new copy has to be built from raw materials in the same
+ way that the first copy was built.
+ 
+    With material objects, a disincentive to use them makes sense,
+ because fewer objects bought means less raw materials and work needed
+ to make them.  It's true that there is usually also a startup cost, a
+ development cost, which is spread over the production run.  But as long
+ as the marginal cost of production is significant, adding a share of the
+ development cost does not make a qualitative difference.  And it does
+ not require restrictions on the freedom of ordinary users.
+ 
+    However, imposing a price on something that would otherwise be free
+ is a qualitative change.  A centrally-imposed fee for software
+ distribution becomes a powerful disincentive.
+ 
+    What's more, central production as now practiced is inefficient even
+ as a means of delivering copies of software.  This system involves
+ enclosing physical disks or tapes in superfluous packaging, shipping
+ large numbers of them around the world, and storing them for sale.  This
+ cost is presented as an expense of doing business; in truth, it is part
+ of the waste caused by having owners.
+ 
+ Damaging Social Cohesion
+ ========================
+ 
+    Suppose that both you and your neighbor would find it useful to run a
+ certain program.  In ethical concern for your neighbor, you should feel
+ that proper handling of the situation will enable both of you to use it.
+ A proposal to permit only one of you to use the program, while
+ restraining the other, is divisive; neither you nor your neighbor should
+ find it acceptable.
+ 
+    Signing a typical software license agreement means betraying your
+ neighbor: "I promise to deprive my neighbor of this program so that I
+ can have a copy for myself."  People who make such choices feel
+ internal psychological pressure to justify them, by downgrading the
+ importance of helping one's neighbors--thus public spirit suffers.
+ This is psychosocial harm associated with the material harm of
+ discouraging use of the program.
+ 
+    Many users unconsciously recognize the wrong of refusing to share, so
+ they decide to ignore the licenses and laws, and share programs anyway.
+ But they often feel guilty about doing so.  They know that they must
+ break the laws in order to be good neighbors, but they still consider
+ the laws authoritative, and they conclude that being a good neighbor
+ (which they are) is naughty or shameful.  That is also a kind of
+ psychosocial harm, but one can escape it by deciding that these licenses
+ and laws have no moral force.
+ 
+    Programmers also suffer psychosocial harm knowing that many users
+ will not be allowed to use their work.  This leads to an attitude of
+ cynicism or denial.  A programmer may describe enthusiastically the
+ work that he finds technically exciting; then when asked, "Will I be
+ permitted to use it?", his face falls, and he admits the answer is no.
+ To avoid feeling discouraged, he either ignores this fact most of the
+ time or adopts a cynical stance designed to minimize the importance of
+ it.
+ 
+    Since the age of Reagan, the greatest scarcity in the United States
+ is not technical innovation, but rather the willingness to work together
+ for the public good.  It makes no sense to encourage the former at the
+ expense of the latter.
+ 
+ Obstructing Custom Adaptation of Programs
+ =========================================
+ 
+    The second level of material harm is the inability to adapt programs.
+ The ease of modification of software is one of its great advantages over
+ older technology.  But most commercially available software isn't
+ available for modification, even after you buy it.  It's available for
+ you to take it or leave it, as a black box--that is all.
+ 
+    A program that you can run consists of a series of numbers whose
+ meaning is obscure.  No one, not even a good programmer, can easily
+ change the numbers to make the program do something different.
+ 
+    Programmers normally work with the "source code" for a program, which
+ is written in a programming language such as Fortran or C.  It uses
+ names to designate the data being used and the parts of the program, and
+ it represents operations with symbols such as `+' for addition and `-'
+ for subtraction.  It is designed to help programmers read and change
+ programs.  Here is an example; a program to calculate the distance
+ between two points in a plane:
+ 
+      float
+      distance (p0, p1)
+           struct point p0, p1;
+      {
+        float xdist = p1.x - p0.x;
+        float ydist = p1.y - p0.y;
+        return sqrt (xdist * xdist + ydist * ydist);
+      }
+ 
+    Here is the same program in executable form, on the computer I
+ normally use:
+ 
+      1314258944      -232267772      -231844864      1634862
+      1411907592      -231844736      2159150         1420296208
+      -234880989      -234879837      -234879966      -232295424
+      1644167167      -3214848        1090581031      1962942495
+      572518958       -803143692      1314803317
+ 
+    Source code is useful (at least potentially) to every user of a
+ program.  But most users are not allowed to have copies of the source
+ code.  Usually the source code for a proprietary program is kept secret
+ by the owner, lest anybody else learn something from it.  Users receive
+ only the files of incomprehensible numbers that the computer will
+ execute.  This means that only the program's owner can change the
+ program.
+ 
+    A friend once told me of working as a programmer in a bank for about
+ six months, writing a program similar to something that was commercially
+ available.  She believed that if she could have gotten source code for
+ that commercially available program, it could easily have been adapted
+ to their needs.  The bank was willing to pay for this, but was not
+ permitted to--the source code was a secret.  So she had to do six
+ months of make-work, work that counts in the GNP but was actually waste.
+ 
+    The MIT Artificial Intelligence lab (AI lab) received a graphics
+ printer as a gift from Xerox around 1977.  It was run by free software
+ to which we added many convenient features.  For example, the software
+ would notify a user immediately on completion of a print job.  Whenever
+ the printer had trouble, such as a paper jam or running out of paper,
+ the software would immediately notify all users who had print jobs
+ queued.  These features facilitated smooth operation.
+ 
+    Later Xerox gave the AI lab a newer, faster printer, one of the first
+ laser printers.  It was driven by proprietary software that ran in a
+ separate dedicated computer, so we couldn't add any of our favorite
+ features.  We could arrange to send a notification when a print job was
+ sent to the dedicated computer, but not when the job was actually
+ printed (and the delay was usually considerable).  There was no way to
+ find out when the job was actually printed; you could only guess.  And
+ no one was informed when there was a paper jam, so the printer often
+ went for an hour without being fixed.
+ 
+    The system programmers at the AI lab were capable of fixing such
+ problems, probably as capable as the original authors of the program.
+ Xerox was uninterested in fixing them, and chose to prevent us, so we
+ were forced to accept the problems.  They were never fixed.
+ 
+    Most good programmers have experienced this frustration.  The bank
+ could afford to solve the problem by writing a new program from
+ scratch, but a typical user, no matter how skilled, can only give up.
+ 
+    Giving up causes psychosocial harm--to the spirit of self-reliance.
+ It is demoralizing to live in a house that you cannot rearrange to suit
+ your needs.  It leads to resignation and discouragement, which can
+ spread to affect other aspects of one's life.  People who feel this way
+ are unhappy and do not do good work.
+ 
+    Imagine what it would be like if recipes were hoarded in the same
+ fashion as software.  You might say, "How do I change this recipe to
+ take out the salt?", and the great chef would respond, "How dare you
+ insult my recipe, the child of my brain and my palate, by trying to
+ tamper with it?  You don't have the judgment to change my recipe and
+ make it work right!"
+ 
+    "But my doctor says I'm not supposed to eat salt!  What can I do?
+ Will you take out the salt for me?"
+ 
+    "I would be glad to do that; my fee is only $50,000."  Since the
+ owner has a monopoly on changes, the fee tends to be large.  "However,
+ right now I don't have time.  I am busy with a commission to design a
+ new recipe for ship's biscuit for the Navy Department.  I might get
+ around to you in about two years."
+ 
+ Obstructing Software Development
+ ================================
+ 
+    The third level of material harm affects software development.
+ Software development used to be an evolutionary process, where a person
+ would take an existing program and rewrite parts of it for one new
+ feature, and then another person would rewrite parts to add another
+ feature; in some cases, this continued over a period of twenty years.
+ Meanwhile, parts of the program would be "cannibalized" to form the
+ beginnings of other programs.
+ 
+    The existence of owners prevents this kind of evolution, making it
+ necessary to start from scratch when developing a program.  It also
+ prevents new practitioners from studying existing programs to learn
+ useful techniques or even how large programs can be structured.
+ 
+    Owners also obstruct education.  I have met bright students in
+ computer science who have never seen the source code of a large
+ program.  They may be good at writing small programs, but they can't
+ begin to learn the different skills of writing large ones if they can't
+ see how others have done it.
+ 
+    In any intellectual field, one can reach greater heights by standing
+ on the shoulders of others.  But that is no longer generally allowed in
+ the software field--you can only stand on the shoulders of the other
+ people *in your own company*.
+ 
+    The associated psychosocial harm affects the spirit of scientific
+ cooperation, which used to be so strong that scientists would cooperate
+ even when their countries were at war.  In this spirit, Japanese
+ oceanographers abandoning their lab on an island in the Pacific
+ carefully preserved their work for the invading U.S. Marines, and left a
+ note asking them to take good care of it.
+ 
+    Conflict for profit has destroyed what international conflict spared.
+ Nowadays scientists in many fields don't publish enough in their papers
+ to enable others to replicate the experiment.  They publish only enough
+ to let readers marvel at how much they were able to do.  This is
+ certainly true in computer science, where the source code for the
+ programs reported on is usually secret.
+ 
+ It Does Not Matter How Sharing Is Restricted
+ ============================================
+ 
+    I have been discussing the effects of preventing people from copying,
+ changing and building on a program.  I have not specified how this
+ obstruction is carried out, because that doesn't affect the conclusion.
+ Whether it is done by copy protection, or copyright, or licenses, or
+ encryption, or ROM cards, or hardware serial numbers, if it *succeeds*
+ in preventing use, it does harm.
+ 
+    Users do consider some of these methods more obnoxious than others.
+ I suggest that the methods most hated are those that accomplish their
+ objective.
+ 
+ Software Should be Free
+ =======================
+ 
+    I have shown how ownership of a program--the power to restrict
+ changing or copying it--is obstructive.  Its negative effects are
+ widespread and important.  It follows that society shouldn't have
+ owners for programs.
+ 
+    Another way to understand this is that what society needs is free
+ software, and proprietary software is a poor substitute.  Encouraging
+ the substitute is not a rational way to get what we need.
+ 
+    Vaclav Havel has advised us to "Work for something because it is
+ good, not just because it stands a chance to succeed."  A business
+ making proprietary software stands a chance of success in its own narrow
+ terms, but it is not what is good for society.
+ 
+ Why People Will Develop Software
+ ********************************
+ 
+    If we eliminate intellectual property as a means of encouraging
+ people to develop software, at first less software will be developed,
+ but that software will be more useful.  It is not clear whether the
+ overall delivered user satisfaction will be less; but if it is, or if
+ we wish to increase it anyway, there are other ways to encourage
+ development, just as there are ways besides toll booths to raise money
+ for streets.  Before I talk about how that can be done, first I want to
+ question how much artificial encouragement is truly necessary.
+ 
+ Programming is Fun
+ ==================
+ 
+    There are some lines of work that few will enter except for money;
+ road construction, for example.  There are other fields of study and
+ art in which there is little chance to become rich, which people enter
+ for their fascination or their perceived value to society.  Examples
+ include mathematical logic, classical music, and archaeology; and
+ political organizing among working people.  People compete, more sadly
+ than bitterly, for the few funded positions available, none of which is
+ funded very well.  They may even pay for the chance to work in the
+ field, if they can afford to.
+ 
+    Such a field can transform itself overnight if it begins to offer the
+ possibility of getting rich.  When one worker gets rich, others demand
+ the same opportunity.  Soon all may demand large sums of money for doing
+ what they used to do for pleasure.  When another couple of years go by,
+ everyone connected with the field will deride the idea that work would
+ be done in the field without large financial returns.  They will advise
+ social planners to ensure that these returns are possible, prescribing
+ special privileges, powers and monopolies as necessary to do so.
+ 
+    This change happened in the field of computer programming in the past
+ decade.  Fifteen years ago, there were articles on "computer
+ addiction": users were "onlining" and had hundred-dollar-a-week habits.
+ It was generally understood that people frequently loved programming
+ enough to break up their marriages.  Today, it is generally understood
+ that no one would program except for a high rate of pay.  People have
+ forgotten what they knew fifteen years ago.
+ 
+    When it is true at a given time that most people will work in a
+ certain field only for high pay, it need not remain true.  The dynamic
+ of change can run in reverse, if society provides an impetus.  If we
+ take away the possibility of great wealth, then after a while, when the
+ people have readjusted their attitudes, they will once again be eager
+ to work in the field for the joy of accomplishment.
+ 
+    The question, "How can we pay programmers?", becomes an easier
+ question when we realize that it's not a matter of paying them a
+ fortune.  A mere living is easier to raise.
+ 
+ Funding Free Software
+ =====================
+ 
+    Institutions that pay programmers do not have to be software houses.
+ Many other institutions already exist which can do this.
+ 
+    Hardware manufacturers find it essential to support software
+ development even if they cannot control the use of the software.  In
+ 1970, much of their software was free because they did not consider
+ restricting it.  Today, their increasing willingness to join
+ consortiums shows their realization that owning the software is not
+ what is really important for them.
+ 
+    Universities conduct many programming projects.  Today, they often
+ sell the results, but in the 1970s, they did not.  Is there any doubt
+ that universities would develop free software if they were not allowed
+ to sell software?  These projects could be supported by the same
+ government contracts and grants which now support proprietary software
+ development.
+ 
+    It is common today for university researchers to get grants to
+ develop a system, develop it nearly to the point of completion and call
+ that "finished", and then start companies where they really finish the
+ project and make it usable.  Sometimes they declare the unfinished
+ version "free"; if they are thoroughly corrupt, they instead get an
+ exclusive license from the university.  This is not a secret; it is
+ openly admitted by everyone concerned.  Yet if the researchers were not
+ exposed to the temptation to do these things, they would still do their
+ research.
+ 
+    Programmers writing free software can make their living by selling
+ services related to the software.  I have been hired to port the GNU C
+ compiler to new hardware, and to make user-interface extensions to GNU
+ Emacs.  (I offer these improvements to the public once they are done.)
+ I also teach classes for which I am paid.
+ 
+    I am not alone in working this way; there is now a successful,
+ growing corporation which does no other kind of work.  Several other
+ companies also provide commercial support for the free software of the
+ GNU system.  This is the beginning of the independent software support
+ industry-an industry that could become quite large if free software
+ becomes prevalent.  It provides users with an option generally
+ unavailable for proprietary software, except to the very wealthy.
+ 
+    New institutions such as the Free Software Foundation can also fund
+ programmers.  Most of the foundation's funds come from users buying
+ tapes through the mail.  The software on the tapes is free, which means
+ that every user has the freedom to copy it and change it, but many
+ nonetheless pay to get copies.  (Recall that "free software" refers to
+ freedom, not to price.)  Some users order tapes who already have a copy,
+ as a way of making a contribution they feel we deserve.  The Foundation
+ also receives sizable donations from computer manufacturers.
+ 
+    The Free Software Foundation is a charity, and its income is spent on
+ hiring as many programmers as possible.  If it had been set up as a
+ business, distributing the same free software to the public for the same
+ fee, it would now provide a very good living for its founder.
+ 
+    Because the Foundation is a charity, programmers often work for the
+ Foundation for half of what they could make elsewhere.  They do this
+ because we are free of bureaucracy, and because they feel satisfaction
+ in knowing that their work will not be obstructed from use.  Most of
+ all, they do it because programming is fun.  In addition, volunteers
+ have written many useful programs for us.  (Recently even technical
+ writers have begun to volunteer.)
+ 
+    This confirms that programming is among the most fascinating of all
+ fields, along with music and art.  We don't have to fear that no one
+ will want to program.
+ 
+ What Do Users Owe to Developers?
+ ================================
+ 
+    There is a good reason for users of software to feel a moral
+ obligation to contribute to its support.  Developers of free software
+ are contributing to the users' activities, and it is both fair and in
+ the long term interest of the users to give them funds to continue.
+ 
+    However, this does not apply to proprietary software developers,
+ since obstructionism deserves a punishment rather than a reward.
+ 
+    We thus have a paradox: the developer of useful software is entitled
+ to the support of the users, but any attempt to turn this moral
+ obligation into a requirement destroys the basis for the obligation.  A
+ developer can either deserve a reward or demand it, but not both.
+ 
+    I believe that an ethical developer faced with this paradox must act
+ so as to deserve the reward, but should also entreat the users for
+ voluntary donations.  Eventually the users will learn to support
+ developers without coercion, just as they have learned to support public
+ radio and television stations.
+ 
+ What Is Software Productivity?
+ ******************************
+ 
+    If software were free, there would still be programmers, but perhaps
+ fewer of them.  Would this be bad for society?
+ 
+    Not necessarily.  Today the advanced nations have fewer farmers than
+ in 1900, but we do not think this is bad for society, because the few
+ deliver more food to the consumers than the many used to do.  We call
+ this improved productivity.  Free software would require far fewer
+ programmers to satisfy the demand, because of increased software
+ productivity at all levels:
+ 
+    * Wider use of each program that is developed.
+ 
+    * The ability to adapt existing programs for customization instead
+      of starting from scratch.
+ 
+    * Better education of programmers.
+ 
+    * The elimination of duplicate development effort.
+ 
+    Those who object to cooperation because it would result in the
+ employment of fewer programmers, are actually objecting to increased
+ productivity.  Yet these people usually accept the widely-held belief
+ that the software industry needs increased productivity.  How is this?
+ 
+    "Software productivity" can mean two different things: the overall
+ productivity of all software development, or the productivity of
+ individual projects.  Overall productivity is what society would like to
+ improve, and the most straightforward way to do this is to eliminate the
+ artificial obstacles to cooperation which reduce it.  But researchers
+ who study the field of "software productivity" focus only on the
+ second, limited, sense of the term, where improvement requires difficult
+ technological advances.
+ 
+ Is Competition Inevitable?
+ **************************
+ 
+    Is it inevitable that people will try to compete, to surpass their
+ rivals in society?  Perhaps it is.  But competition itself is not
+ harmful; the harmful thing is *combat*.
+ 
+    There are many ways to compete.  Competition can consist of trying to
+ achieve ever more, to outdo what others have done.  For example, in the
+ old days, there was competition among programming wizards--competition
+ for who could make the computer do the most amazing thing, or for who
+ could make the shortest or fastest program for a given task.  This kind
+ of competition can benefit everyone, *as long as* the spirit of good
+ sportsmanship is maintained.
+ 
+    Constructive competition is enough competition to motivate people to
+ great efforts.  A number of people are competing to be the first to have
+ visited all the countries on Earth; some even spend fortunes trying to
+ do this.  But they do not bribe ship captains to strand their rivals on
+ desert islands.  They are content to let the best person win.
+ 
+    Competition becomes combat when the competitors begin trying to
+ impede each other instead of advancing themselves--when "Let the best
+ person win" gives way to "Let me win, best or not."  Proprietary
+ software is harmful, not because it is a form of competition, but
+ because it is a form of combat among the citizens of our society.
+ 
+    Competition in business is not necessarily combat.  For example, when
+ two grocery stores compete, their entire effort is to improve their own
+ operations, not to sabotage the rival.  But this does not demonstrate a
+ special commitment to business ethics; rather, there is little scope for
+ combat in this line of business short of physical violence.  Not all
+ areas of business share this characteristic.  Withholding information
+ that could help everyone advance is a form of combat.
+ 
+    Business ideology does not prepare people to resist the temptation to
+ combat the competition.  Some forms of combat have been made banned with
+ anti-trust laws, truth in advertising laws, and so on, but rather than
+ generalizing this to a principled rejection of combat in general,
+ executives invent other forms of combat which are not specifically
+ prohibited.  Society's resources are squandered on the economic
+ equivalent of factional civil war.
+ 
+ "Why Don't You Move to Russia?"
+ *******************************
+ 
+    In the United States, any advocate of other than the most extreme
+ form of laissez-faire selfishness has often heard this accusation.  For
+ example, it is leveled against the supporters of a national health care
+ system, such as is found in all the other industrialized nations of the
+ free world.  It is leveled against the advocates of public support for
+ the arts, also universal in advanced nations.  The idea that citizens
+ have any obligation to the public good is identified in America with
+ Communism.  But how similar are these ideas?
+ 
+    Communism as was practiced in the Soviet Union was a system of
+ central control where all activity was regimented, supposedly for the
+ common good, but actually for the sake of the members of the Communist
+ party.  And where copying equipment was closely guarded to prevent
+ illegal copying.
+ 
+    The American system of intellectual property exercises central
+ control over distribution of a program, and guards copying equipment
+ with automatic copying protection schemes to prevent illegal copying.
+ 
+    By contrast, I am working to build a system where people are free to
+ decide their own actions; in particular, free to help their neighbors,
+ and free to alter and improve the tools which they use in their daily
+ lives.  A system based on voluntary cooperation, and decentralization.
+ 
+    Thus, if we are to judge views by their resemblance to Russian
+ Communism, it is the software owners who are the Communists.
+ 
+ The Question of Premises
+ ************************
+ 
+    I make the assumption in this paper that a user of software is no
+ less important than an author, or even an author's employer.  In other
+ words, their interests and needs have equal weight, when we decide
+ which course of action is best.
+ 
+    This premise is not universally accepted.  Many maintain that an
+ author's employer is fundamentally more important than anyone else.
+ They say, for example, that the purpose of having owners of software is
+ to give the author's employer the advantage he deserves--regardless of
+ how this may affect the public.
+ 
+    It is no use trying to prove or disprove these premises.  Proof
+ requires shared premises.  So most of what I have to say is addressed
+ only to those who share the premises I use, or at least are interested
+ in what their consequences are.  For those who believe that the owners
+ are more important than everyone else, this paper is simply irrelevant.
+ 
+    But why would a large number of Americans accept a premise which
+ elevates certain people in importance above everyone else?  Partly
+ because of the belief that this premise is part of the legal traditions
+ of American society.  Some people feel that doubting the premise means
+ challenging the basis of society.
+ 
+    It is important for these people to know that this premise is not
+ part of our legal tradition.  It never has been.
+ 
+    Thus, the Constitution says that the purpose of copyright is to
+ "promote the progress of science and the useful arts."  The Supreme
+ Court has elaborated on this, stating in `Fox Film vs. Doyal' that "The
+ sole interest of the United States and the primary object in conferring
+ the [copyright] monopoly lie in the general benefits derived by the
+ public from the labors of authors."
+ 
+    We are not required to agree with the Constitution or the Supreme
+ Court.  (At one time, they both condoned slavery.)  So their positions
+ do not disprove the owner supremacy premise.  But I hope that the
+ awareness that this is a radical right-wing assumption rather than a
+ traditionally recognized one will weaken its appeal.
+ 
+ Conclusion
+ **********
+ 
+    We like to think that our society encourages helping your neighbor;
+ but each time we reward someone for obstructionism, or admire them for
+ the wealth they have gained in this way, we are sending the opposite
+ message.
+ 
+    Software hoarding is one form of our general willingness to disregard
+ the welfare of society for personal gain.  We can trace this disregard
+ from Ronald Reagan to Jim Bakker, from Ivan Boesky to Exxon, from
+ failing banks to failing schools.  We can measure it with the size of
+ the homeless population and the prison population.  The antisocial
+ spirit feeds on itself, because the more we see that other people will
+ not help us, the more it seems futile to help them.  Thus society decays
+ into a jungle.
+ 
+    If we don't want to live in a jungle, we must change our attitudes.
+ We must start sending the message that a good citizen is one who
+ cooperates when appropriate, not one who is successful at taking from
+ others.  I hope that the free software movement will contribute to
+ this: at least in one area, we will replace the jungle with a more
+ efficient system which encourages and runs on voluntary cooperation.
+ 
+    ---------- Footnotes ----------
+ 
+    (1)  The word "free" in "free software" refers to freedom, not to
+ price; the price paid for a copy of a free program may be zero, or
+ small, or (rarely) quite large.
+ 
+    (2)  The issues of pollution and traffic congestion do not alter
+ this conclusion.  If we wish to make driving more expensive to
+ discourage driving in general, it is disadvantageous to do this using
+ toll booths, which contribute to both pollution and congestion.  A tax
+ on gasoline is much better.  Likewise, a desire to enhance safety by
+ limiting maximum speed is not relevant; a free access road enhances the
+ average speed by avoiding stops and delays, for any given speed limit.
+ 
+    (3)  One might regard a particular computer program as a harmful
+ thing that should not be available at all, like the Lotus Marketplace
+ database of personal information, which was withdrawn from sale due to
+ public disapproval.  Most of what I say does not apply to this case,
+ but it makes little sense to argue for having an owner on the grounds
+ that the owner will make the program less available.  The owner will
+ not make it *completely* unavailable, as one would wish in the case of
+ a program whose use is considered destructive.
+ 
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lib-src/ChangeLog emacs-19.21/lib-src/ChangeLog
*** emacs-19.20/lib-src/ChangeLog	Thu Nov 11 10:32:08 1993
--- emacs-19.21/lib-src/ChangeLog	Tue Nov 16 04:22:34 1993
***************
*** 1,2 ****
--- 1,16 ----
+ Tue Nov 16 03:23:28 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 19.21 released.
+ 
+ 	* Makefile.in (install): Don't change mode or group when installing.
+ 
+ 	* etags.c (FUNCST, TYPEDST, STRUCTST, DEFINEST): Delete excess commas.
+ 
+ Fri Nov 12 01:24:44 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* make-docfile.c (read_c_string): For "", concatenate the two strings.
+ 
+ 	* movemail.c (main): Fix error message text.
+ 
  Thu Nov 11 10:08:43 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lib-src/Makefile.in emacs-19.21/lib-src/Makefile.in
*** emacs-19.20/lib-src/Makefile.in	Mon Oct  4 00:31:27 1993
--- emacs-19.21/lib-src/Makefile.in	Tue Nov 16 04:22:10 1993
***************
*** 148,157 ****
  	  chmod 755 ${bindir}/$${file}.n ; \
  	done
- 	@echo
- 	@echo "Changing the owner and group of utility programs to \`bin'."
- 	@echo "(You may ignore errors here if you don't care about this.)"
  	-for file in ${INSTALLABLES}  ${INSTALLABLE_SCRIPTS} ; do \
- 	  chgrp bin ${bindir}/$${file}.n ; \
- 	  chown bin ${bindir}/$${file}.n ; \
  	  rm -f ${bindir}/$${file} ; \
  	  mv ${bindir}/$${file}.n ${bindir}/$${file} ; \
--- 148,152 ----
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lib-src/etags.c emacs-19.21/lib-src/etags.c
*** emacs-19.20/lib-src/etags.c	Mon Nov  8 14:17:50 1993
--- emacs-19.21/lib-src/etags.c	Tue Nov 16 03:23:14 1993
***************
*** 1335,1339 ****
    finlist,			/* in parameter list */
    flistseen,			/* after parameter list */
!   fignore,			/* before open brace */
  } FUNCST;
  FUNCST funcdef;
--- 1335,1339 ----
    finlist,			/* in parameter list */
    flistseen,			/* after parameter list */
!   fignore			/* before open brace */
  } FUNCST;
  FUNCST funcdef;
***************
*** 1348,1352 ****
    ttypedseen,			/* typedef keyword seen */
    tinbody,			/* inside typedef body */
!   tend,				/* just before typedef tag */
  } TYPEDST;
  TYPEDST typdef;
--- 1348,1352 ----
    ttypedseen,			/* typedef keyword seen */
    tinbody,			/* inside typedef body */
!   tend				/* just before typedef tag */
  } TYPEDST;
  TYPEDST typdef;
***************
*** 1365,1369 ****
    stagseen,			/* struct-like tag seen */
    scolonseen,			/* colon seen after struct-like tag */
!   sinbody,			/* in struct body: recognize member func defs*/
  } STRUCTST;
  STRUCTST structdef;
--- 1365,1369 ----
    stagseen,			/* struct-like tag seen */
    scolonseen,			/* colon seen after struct-like tag */
!   sinbody			/* in struct body: recognize member func defs*/
  } STRUCTST;
  STRUCTST structdef;
***************
*** 1383,1387 ****
    dsharpseen,			/* '#' seen as first char on line */
    ddefineseen,			/* '#' and 'define' seen */
!   dignorerest,			/* ignore rest of line */
  } DEFINEST;
  DEFINEST definedef;
--- 1383,1387 ----
    dsharpseen,			/* '#' seen as first char on line */
    ddefineseen,			/* '#' and 'define' seen */
!   dignorerest			/* ignore rest of line */
  } DEFINEST;
  DEFINEST definedef;
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lib-src/make-docfile.c emacs-19.21/lib-src/make-docfile.c
*** emacs-19.20/lib-src/make-docfile.c	Wed Jun  9 06:56:24 1993
--- emacs-19.21/lib-src/make-docfile.c	Tue Nov 16 07:26:30 1993
***************
*** 128,135 ****
        if (c != '"')
  	break;
!       if (printflag > 0)
! 	putc (c, outfile);
!       else if (printflag < 0)
! 	*p++ = c;
        c = getc (infile);
      }
--- 128,132 ----
        if (c != '"')
  	break;
!       /* If we had a "", concatenate the two strings.  */
        c = getc (infile);
      }
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lib-src/movemail.c emacs-19.21/lib-src/movemail.c
*** emacs-19.20/lib-src/movemail.c	Sun Sep 12 04:45:17 1993
--- emacs-19.21/lib-src/movemail.c	Tue Nov 16 07:26:34 1993
***************
*** 201,205 ****
        desc = open (tempname, O_WRONLY | O_CREAT, 0666);
        if (desc < 0)
!         pfatal_with_name ("lock file--see source file etc/movemail.c");
        close (desc);
  
--- 201,205 ----
        desc = open (tempname, O_WRONLY | O_CREAT, 0666);
        if (desc < 0)
!         pfatal_with_name ("lock file--see source file lib-src/movemail.c");
        close (desc);
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lisp/ChangeLog emacs-19.21/lisp/ChangeLog
*** emacs-19.20/lisp/ChangeLog	Thu Nov 11 10:01:28 1993
--- emacs-19.21/lisp/ChangeLog	Tue Nov 16 05:47:19 1993
***************
*** 1,2 ****
--- 1,124 ----
+ Tue Nov 16 01:14:29 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 19.21 released.
+ 
+ 	* gnus.el (gnus-summary-save-in-mail): Don't use rmail-output.
+ 	Instead, use either gnus-output-to-rmail or gnus-output-to-file.
+ 	Expand filename before use.
+ 	* rmailout.el (rmail-file-p): Add autoload cookie.
+ 
+ 	* comint.el (comint-send-input): Run comint-output-filter-functions
+ 	only if process is using comint-output-filter as its filter.
+ 
+ 	* subr.el (remove-hook): Doc fix.
+ 
+ 	* rmail.el (rmail-set-attribute): Do nothing if MSGNUM is 0.
+ 
+ 	* nntp.el (nntp-encode-text): Insert a CR before the newline.
+ 
+ 	* info.el (Info-mode): Doc fix.
+ 
+ 	* loaddefs.el: Delete duplicate etags.el autoloads.
+ 
+ 	* add-log.el (change-log-default-name, add-log-current-defun-function)
+ 	(add-log-full-name, add-log-mailing-address): Delete autoload cookies.
+ 
+ Mon Nov 15 21:37:37 1993  Per Bothner  (bothner@cygnus.com)
+ 
+ 	* iso-acc.el (iso-accents-list):  Added /A for A-with-ring
+ 	and /E for AE-ligature, with lowercase versions.  These
+ 	letters are used (with O-with-slash) in Norwegian and Danish.
+ 
+ Mon Nov 15 00:17:12 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* appt.el (appt-display-interval): New variable.
+ 	(appt-check): Obey that variable.
+ 
+ 	* sun.el (sun-raw-prefix): Make this just a variable,
+ 	not a function name.
+ 
+ 	* startup.el (command-line-1): Display a message in the echo area.
+ 
+ 	* comint.el (comint-read-input-ring, comint-write-input-ring):
+ 	Treat "" like nil in comint-input-ring-file-name.
+ 
+ Mon Nov 15 13:21:51 1993  Robert J. Chassell (bob@grackle.stockbridge.ma.us)
+ 
+         * page.el Add `provide'.
+         (narrow-to-page): Enable page-delimiter to span lines.
+ 
+         * page-ext.el: Revise documentation.  Add `provide'.
+         (pages-directory-for-adding-addresses-narrowing-p): 
+         New user option for adding addresses.  Default to narrowing.
+         (pages-directory-for-addresses): Intall user settable options. 
+         (add-new-page): Insert new page in specified location.
+         (original-page-delimiter): Set default value to "^^L".
+ 
+ Mon Nov 15 04:13:48 1993  Eric S. Raymond  (eric@mole.gnu.ai.mit.edu)
+ 
+ 	* vc.el: vc-static-header-alist shouldn't have been declared const.
+ 
+ Sun Nov 14 00:49:35 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* rmailout.el (rmail-output): New argument FROM-GNUS.
+ 	* gnus.el (gnus-summary-save-in-mail): Pass new args to rmail-output.
+ 
+ 	* solar.el (solar-equinoxes-solstices): Add autoload.
+ 
+ 	* calendar.el (solar-holidays): Change top-level progn to an if.
+ 
+ 	* mouse.el (mouse-save-then-kill-delete-region): Take args BEG and END.
+ 	Update the undo list properly.
+ 	(mouse-save-then-kill): Pass those args.
+ 	When we kill, clear mouse-save-then-kill-posn
+ 	and mouse-selection-click-count.
+ 	(mouse-secondary-save-then-kill): Likewise.
+ 	Delete the overlay after deleting the selection text.
+ 	(mouse-selection-click-count): Initialize to 0.
+ 	(mouse-save-then-kill-delete-region): Handle buffers with no undo list.
+ 	Handle empty regions.  Handle end < beg.
+ 
+ 	* rmailsum.el (rmail-summary-forward): Accept prefix arg
+ 	and pass it to rmail-forward.
+ 
+ Sat Nov 13 01:58:53 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* compare-w.el (compare-windows-skip-whitespace): Swap the two
+ 	and's within the or.
+ 
+ 	* help.el (describe-project): New function, on C-h C-p.
+ 	(help-for-help): Add C-p.  Refer to help-command, not
+ 	help-for-help, in the \\[...].
+ 
+ 	* paths.el (rmail-spool-directory): Check for irix,
+ 	not silicon-graphic-unix.
+ 	* dired.el (dired-chown-program): Likewise.
+ 	* lpr.el (lpr-command): Likewise.
+ 
+ 	* xscheme.el: Add a provide call.
+ 
+ 	* dired.el (dired-make-relative): Expand DIR if starts with ~.
+ 
+ Fri Nov 12 23:48:06 1993  Paul Eggert  (eggert@twinsun.com)
+ 
+ 	* cal-dst.el (calendar-absolute-from-time): Undo Sep 14 patch.
+ 	Fix comments instead, since they didn't match the code.
+ 
+ Fri Nov 12 17:16:24 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* comint.el (comint-match-partial-filename): Consider +@: part of
+ 	filenames; don't consider parens as part of them.
+ 
+ 	* fill.el (fill-individual-paragraphs): Fix skipping headers
+ 	of yanked message.
+ 
+ 	* rmailsum.el (rmail-summary-edit-map): Inherit text-mode-map properly.
+ 
+ Fri Nov 12 03:52:03 1993  Paul Eggert  (eggert@twinsun.com)
+ 
+ 	* vc.el (vc-rename-file): Don't overwrite an existing file.
+ 	Fix test for unsaved files.
+ 	Calculate name of new master file properly.
+ 
  Thu Nov 11 02:16:55 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
***************
*** 51,54 ****
--- 173,177 ----
  	* subr.el (remove-hook): New function, analogous to add-hook.  This
  	is now the recommended way to remove a hook that you have added.
+ 	* lucid.el (remove-hook): Function deleted.
  
  Tue Nov  9 02:11:05 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lisp/add-log.el emacs-19.21/lisp/add-log.el
*** emacs-19.20/lisp/add-log.el	Sun Sep 19 10:16:39 1993
--- emacs-19.21/lisp/add-log.el	Tue Nov 16 01:14:57 1993
***************
*** 27,35 ****
  ;;; Code:
  
- ;;;###autoload
  (defvar change-log-default-name nil
    "*Name of a change log file for \\[add-change-log-entry].")
  
- ;;;###autoload
  (defvar add-log-current-defun-function nil
    "\
--- 27,33 ----
***************
*** 38,47 ****
  instead) with no arguments.  It returns a string or nil if it cannot guess.")
  
! ;;;###autoload
  (defvar add-log-full-name (user-full-name)
    "*Full name of user, for inclusion in ChangeLog daily headers.
  This defaults to the value returned by the `user-full-name' function.")
  
! ;;;###autoload
  (defvar add-log-mailing-address (concat (user-login-name) "@" (system-name))
    "*Electronic mail address of user, for inclusion in ChangeLog daily headers.
--- 36,47 ----
  instead) with no arguments.  It returns a string or nil if it cannot guess.")
  
! ;; This MUST not be autoloaded, since user-login-name
! ;; cannot be known at Emacs dump time.
  (defvar add-log-full-name (user-full-name)
    "*Full name of user, for inclusion in ChangeLog daily headers.
  This defaults to the value returned by the `user-full-name' function.")
  
! ;; This MUST not be autoloaded, since user-login-name
! ;; cannot be known at Emacs dump time.
  (defvar add-log-mailing-address (concat (user-login-name) "@" (system-name))
    "*Electronic mail address of user, for inclusion in ChangeLog daily headers.
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lisp/appt.el emacs-19.21/lisp/appt.el
*** emacs-19.20/lisp/appt.el	Mon Sep 21 06:35:50 1992
--- emacs-19.21/lisp/appt.el	Mon Nov 15 22:29:05 1993
***************
*** 152,155 ****
--- 152,158 ----
    "11:59pm in minutes - number of minutes in a day minus 1.")
  
+ (defvar appt-display-interval 1
+   "*Number of minutes to wait between checking the appointment list.")
+ 
  (defun appt-check ()
    "Check for an appointment and update the mode line.
***************
*** 169,194 ****
  
  appt-issue-message
!         If T, the diary buffer is checked for appointments.
  
  appt-message-warning-time
!        Variable used to determine if appointment message
!         should be displayed.
  
  appt-audible
!         Variable used to determine if appointment is audible.
!         Default is t.
  
  appt-visible
!         Variable used to determine if appointment message should be
!         displayed in the mini-buffer. Default is t.
  
  appt-msg-window
!        Variable used to determine if appointment message
!        should temporarily appear in another window. Mutually exclusive
!        to appt-visible.
  
  appt-display-duration
!       The number of seconds an appointment message
!       is displayed in another window.
  
  This function is run from the loadst process for display time.
--- 172,201 ----
  
  appt-issue-message
! 	If T, the diary buffer is checked for appointments.
  
  appt-message-warning-time
! 	Variable used to determine if appointment message
! 	should be displayed.
  
  appt-audible
! 	Variable used to determine if appointment is audible.
! 	Default is t.
  
  appt-visible
! 	Variable used to determine if appointment message should be
! 	displayed in the mini-buffer. Default is t.
  
  appt-msg-window
! 	Variable used to determine if appointment message
! 	should temporarily appear in another window. Mutually exclusive
! 	to appt-visible.
  
  appt-display-duration
! 	The number of seconds an appointment message
! 	is displayed in another window.
! 
! appt-display-interval
! 	The number of minutes to wait between checking the appointments
! 	list.
  
  This function is run from the loadst process for display time.
***************
*** 196,301 ****
  
  
!   (let ((min-to-app -1)
!         (new-time ""))
!     (save-excursion
!       
!       ;; Get the current time and convert it to minutes
!       ;; from midnight. ie. 12:01am = 1, midnight = 0.
!       
!       (let* ((cur-hour(string-to-int 
!                        (substring (current-time-string) 11 13)))
!              (cur-min (string-to-int 
!                        (substring (current-time-string) 14 16)))
!              (cur-comp-time (+ (* cur-hour 60) cur-min)))
!         
!         ;; If the time is 12:01am, we should update our 
!         ;; appointments to todays list.
!         
!         (if (= cur-comp-time 1)
!             (if (and view-diary-entries-initially appt-display-diary)
!                 (diary)
!               (let ((diary-display-hook 'appt-make-list))
!                 (diary))))
! 
!         ;; If there are entries in the list, and the
!         ;; user wants a message issued
!         ;; get the first time off of the list
!         ;; and calculate the number of minutes until
!         ;; the appointment.
!         
!         (if (and appt-issue-message appt-time-msg-list)
!             (let ((appt-comp-time (car (car (car appt-time-msg-list)))))
!               (setq min-to-app (- appt-comp-time cur-comp-time))
!               
!               (while (and appt-time-msg-list 
!                           (< appt-comp-time cur-comp-time))
!                 (setq appt-time-msg-list (cdr appt-time-msg-list)) 
!                 (if appt-time-msg-list
!                     (setq appt-comp-time 
!                           (car (car (car appt-time-msg-list))))))
!               
!               ;; If we have an appointment between midnight and
!               ;; 'appt-message-warning-time' minutes after midnight,
!               ;; we must begin to issue a message before midnight.
!               ;; Midnight is considered 0 minutes and 11:59pm is
!               ;; 1439 minutes. Therefore we must recalculate the minutes
!               ;; to appointment variable. It is equal to the number of 
!               ;; minutes before midnight plus the number of 
!               ;; minutes after midnight our appointment is.
!               
!               (if (and (< appt-comp-time appt-message-warning-time)
!                        (> (+ cur-comp-time appt-message-warning-time)
!                           max-time))
!                   (setq min-to-app (+ (- (1+ max-time) cur-comp-time))
!                         appt-comp-time))
!               
!               ;; issue warning if the appointment time is 
!               ;; within appt-message-warning time
!               
!               (if (and (<= min-to-app appt-message-warning-time)
!                        (>= min-to-app 0))
!                   (progn
!                     (if appt-msg-window
!                         (progn
!                           (string-match
!                            "[0-9]?[0-9]:[0-9][0-9]\\(am\\|pm\\)?" 
!                            display-time-string)
!                           
!                           (setq new-time (substring display-time-string 
!                                                     (match-beginning 0)
!                                                     (match-end 0)))
!                           (appt-disp-window min-to-app new-time
!                                             (car (cdr (car appt-time-msg-list)))))
!                       ;;; else
!                       
!                       (if appt-visible
!                           (message "%s" 
!                                    (car (cdr (car appt-time-msg-list)))))
!                       
!                       (if appt-audible
!                           (beep 1)))
!                     
!                     (if appt-display-mode-line
!                         (progn
!                           (string-match
!                            "[0-9]?[0-9]:[0-9][0-9]\\(am\\|pm\\)?" 
!                            display-time-string)
!                           
!                           (setq new-time (substring display-time-string 
!                                                     (match-beginning 0)
!                                                     (match-end 0)))
!                           (setq display-time-string
!                                 (concat  "App't in "
!                                          min-to-app " min. " new-time " "))
!                           
!                           ;; force mode line updates - from time.el
!                           
!                           (save-excursion (set-buffer (other-buffer)))
!                           (set-buffer-modified-p (buffer-modified-p))
!                           (sit-for 0)))
!                     
!                     (if (= min-to-app 0)
!                         (setq appt-time-msg-list
!                               (cdr appt-time-msg-list)))))))))))
  
  
--- 203,311 ----
  
  
!   (if (or (= appt-display-interval 1)
! 	  ;; This is true every appt-display-interval minutes.
! 	  (= 0 (mod (/ (nth 1 (current-time)) 60) appt-display-interval)))
!       (let ((min-to-app -1)
! 	    (new-time ""))
! 	(save-excursion
! 
! 	  ;; Get the current time and convert it to minutes
! 	  ;; from midnight. ie. 12:01am = 1, midnight = 0.
! 
! 	  (let* ((cur-hour(string-to-int 
! 			   (substring (current-time-string) 11 13)))
! 		 (cur-min (string-to-int 
! 			   (substring (current-time-string) 14 16)))
! 		 (cur-comp-time (+ (* cur-hour 60) cur-min)))
! 
! 	    ;; If the time is 12:01am, we should update our 
! 	    ;; appointments to todays list.
! 
! 	    (if (= cur-comp-time 1)
! 		(if (and view-diary-entries-initially appt-display-diary)
! 		    (diary)
! 		  (let ((diary-display-hook 'appt-make-list))
! 		    (diary))))
! 
! 	    ;; If there are entries in the list, and the
! 	    ;; user wants a message issued
! 	    ;; get the first time off of the list
! 	    ;; and calculate the number of minutes until
! 	    ;; the appointment.
! 
! 	    (if (and appt-issue-message appt-time-msg-list)
! 		(let ((appt-comp-time (car (car (car appt-time-msg-list)))))
! 		  (setq min-to-app (- appt-comp-time cur-comp-time))
! 
! 		  (while (and appt-time-msg-list 
! 			      (< appt-comp-time cur-comp-time))
! 		    (setq appt-time-msg-list (cdr appt-time-msg-list)) 
! 		    (if appt-time-msg-list
! 			(setq appt-comp-time 
! 			      (car (car (car appt-time-msg-list))))))
! 
! 		  ;; If we have an appointment between midnight and
! 		  ;; 'appt-message-warning-time' minutes after midnight,
! 		  ;; we must begin to issue a message before midnight.
! 		  ;; Midnight is considered 0 minutes and 11:59pm is
! 		  ;; 1439 minutes. Therefore we must recalculate the minutes
! 		  ;; to appointment variable. It is equal to the number of 
! 		  ;; minutes before midnight plus the number of 
! 		  ;; minutes after midnight our appointment is.
! 
! 		  (if (and (< appt-comp-time appt-message-warning-time)
! 			   (> (+ cur-comp-time appt-message-warning-time)
! 			      max-time))
! 		      (setq min-to-app (+ (- (1+ max-time) cur-comp-time))
! 			    appt-comp-time))
! 
! 		  ;; issue warning if the appointment time is 
! 		  ;; within appt-message-warning time
! 
! 		  (if (and (<= min-to-app appt-message-warning-time)
! 			   (>= min-to-app 0))
! 		      (progn
! 			(if appt-msg-window
! 			    (progn
! 			      (string-match
! 			       "[0-9]?[0-9]:[0-9][0-9]\\(am\\|pm\\)?" 
! 			       display-time-string)
! 
! 			      (setq new-time (substring display-time-string 
! 							(match-beginning 0)
! 							(match-end 0)))
! 			      (appt-disp-window min-to-app new-time
! 						(car (cdr (car appt-time-msg-list)))))
! 			  ;;; else
! 
! 			  (if appt-visible
! 			      (message "%s" 
! 				       (car (cdr (car appt-time-msg-list)))))
! 
! 			  (if appt-audible
! 			      (beep 1)))
! 
! 			(if appt-display-mode-line
! 			    (progn
! 			      (string-match
! 			       "[0-9]?[0-9]:[0-9][0-9]\\(am\\|pm\\)?" 
! 			       display-time-string)
! 
! 			      (setq new-time (substring display-time-string 
! 							(match-beginning 0)
! 							(match-end 0)))
! 			      (setq display-time-string
! 				    (concat  "App't in "
! 					     min-to-app " min. " new-time " "))
! 
! 			      ;; force mode line updates - from time.el
! 
! 			      (save-excursion (set-buffer (other-buffer)))
! 			      (set-buffer-modified-p (buffer-modified-p))
! 			      (sit-for 0)))
! 
! 			(if (= min-to-app 0)
! 			    (setq appt-time-msg-list
! 				  (cdr appt-time-msg-list))))))))))))
  
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lisp/cal-dst.el emacs-19.21/lisp/cal-dst.el
*** emacs-19.20/lisp/cal-dst.el	Sat Sep 18 22:33:22 1993
--- emacs-19.21/lisp/cal-dst.el	Tue Nov 16 07:14:11 1993
***************
*** 64,69 ****
  	     ;; floor((2^16 h +l) / (60*60*24))
  	     (* 512 (floor h 675)) (floor u 675))
! 	  ;; (2^16 h +l) % (60*60*24)
! 	  (+ (* (% u 675) 128) (% l 128)))))
  
  (defun calendar-time-from-absolute (abs-date s)
--- 64,69 ----
  	     ;; floor((2^16 h +l) / (60*60*24))
  	     (* 512 (floor h 675)) (floor u 675))
! 	  ;; (2^16 h +l) mod (60*60*24)
! 	  (+ (* (mod u 675) 128) (mod l 128)))))
  
  (defun calendar-time-from-absolute (abs-date s)
***************
*** 78,84 ****
      ;; Overflow is a terrible thing!
      (cons
!      ;; (60*60*24*a + s) / 2^16
       (+ a (* 163 (floor a 512)) (floor u 512))
!      ;; (60*60*24*a + s) % 2^16
       (+ (* 128 (mod u 512)) (mod s 128)))))
  
--- 78,84 ----
      ;; Overflow is a terrible thing!
      (cons
!      ;; floor((60*60*24*a + s) / 2^16)
       (+ a (* 163 (floor a 512)) (floor u 512))
!      ;; (60*60*24*a + s) mod 2^16
       (+ (* 128 (mod u 512)) (mod s 128)))))
  
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lisp/calendar.el emacs-19.21/lisp/calendar.el
*** emacs-19.20/lisp/calendar.el	Wed Oct 20 01:44:18 1993
--- emacs-19.21/lisp/calendar.el	Tue Nov 16 07:14:15 1993
***************
*** 750,757 ****
    '((if (fboundp 'atan)
  	(solar-equinoxes-solstices))
!     (progn
!       (require 'cal-dst)
        (funcall
!        'holiday-sexp 
          calendar-daylight-savings-starts
          '(format "Daylight Savings Time Begins %s"
--- 750,758 ----
    '((if (fboundp 'atan)
  	(solar-equinoxes-solstices))
!     (if (progn
! 	  (require 'cal-dst)
! 	  t)
        (funcall
!        'holiday-sexp
          calendar-daylight-savings-starts
          '(format "Daylight Savings Time Begins %s"
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lisp/comint.el emacs-19.21/lisp/comint.el
*** emacs-19.20/lisp/comint.el	Thu Nov 11 05:05:46 1993
--- emacs-19.21/lisp/comint.el	Tue Nov 16 04:27:13 1993
***************
*** 612,616 ****
  most recent command last.
  See also `comint-input-ignoredups' and `comint-write-input-ring'."
!   (cond ((null comint-input-ring-file-name)
  	 nil)
  	((not (file-readable-p comint-input-ring-file-name))
--- 612,617 ----
  most recent command last.
  See also `comint-input-ignoredups' and `comint-write-input-ring'."
!   (cond ((or (null comint-input-ring-file-name)
! 	     (equal comint-input-ring-file-name ""))
  	 nil)
  	((not (file-readable-p comint-input-ring-file-name))
***************
*** 651,654 ****
--- 652,656 ----
  See also `comint-read-input-ring'."
    (cond ((or (null comint-input-ring-file-name)
+ 	     (equal comint-input-ring-file-name "")
  	     (null comint-input-ring) (ring-empty-p comint-input-ring))
  	 nil)
***************
*** 1101,1108 ****
  	  ;; A kludge to prevent the delay between insert and process output
  	  ;; affecting the display.  A case for a comint-send-input-hook?
! 	  (let ((functions comint-output-filter-functions))
! 	    (while functions
! 	      (funcall (car functions) (concat input "\n"))
! 	      (setq functions (cdr functions))))))))
  
  ;; The purpose of using this filter for comint processes
--- 1103,1111 ----
  	  ;; A kludge to prevent the delay between insert and process output
  	  ;; affecting the display.  A case for a comint-send-input-hook?
! 	  (if (eq (process-filter proc) 'comint-output-filter)
! 	      (let ((functions comint-output-filter-functions))
! 		(while functions
! 		  (funcall (car functions) (concat input "\n"))
! 		  (setq functions (cdr functions)))))))))
  
  ;; The purpose of using this filter for comint processes
***************
*** 1742,1750 ****
  Environment variables are substituted."
    (save-excursion
!     (if (re-search-backward "[^~/A-Za-z0-9_.$#,={}()-]" nil 'move)
  	(forward-char 1))
      ;; Anchor the search forwards.
!     (if (not (looking-at "[~/A-Za-z0-9_.$#,={}()-]")) (error ""))
!     (re-search-forward "[~/A-Za-z0-9_.$#,={}()-]+")
      (substitute-in-file-name
       (buffer-substring (match-beginning 0) (match-end 0)))))
--- 1745,1753 ----
  Environment variables are substituted."
    (save-excursion
!     (if (re-search-backward "[^~/A-Za-z0-9+@:_.$#,={}-]" nil 'move)
  	(forward-char 1))
      ;; Anchor the search forwards.
!     (if (not (looking-at "[~/A-Za-z0-9+@:_.$#,={}-]")) (error ""))
!     (re-search-forward "[~/A-Za-z0-9+@:_.$#,={}-]+")
      (substitute-in-file-name
       (buffer-substring (match-beginning 0) (match-end 0)))))
diff -rc2P --exclude-from /gd2/gnu/emacs/exceptions emacs-19.20/lisp/compare-w.el emacs-19.21/lisp/compare-w.el
*** emacs-19.20/lisp/compare-w.el	Sun Nov  7 17:19:08 1993
--- emacs-19.21/lisp/compare-w.el	Tue Nov 16 07:14:26 1993
***************
*** 142,154 ****
  	(beg (point))
  	(opoint (point)))
!     (while (or (and (/= (point) start)
! 		    ;; Co