#!/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 '. #### 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) ! ;; Consid